From 05aa9ad8c3fb7ebf9fe8657e974cf48c16540f8a Mon Sep 17 00:00:00 2001 From: Robert Lanzafame <R.C.Lanzafame@tudelft.nl> Date: Fri, 22 Nov 2024 16:20:07 +0100 Subject: [PATCH] WS 2.3 ready --- .../Week_2_3/WS_2_3_DFT_you_try_meow.ipynb | 20 +- content/Week_2_3/WS_2_3_solution.ipynb | 16 +- .../Week_2_3/WS_2_3_DFT_you_try_meow.html | 7980 ++++++++++++++++ src/teachers/Week_2_3/WS_2_3_solution.html | 8086 +++++++++++++++++ 4 files changed, 16084 insertions(+), 18 deletions(-) create mode 100644 src/teachers/Week_2_3/WS_2_3_DFT_you_try_meow.html create mode 100644 src/teachers/Week_2_3/WS_2_3_solution.html diff --git a/content/Week_2_3/WS_2_3_DFT_you_try_meow.ipynb b/content/Week_2_3/WS_2_3_DFT_you_try_meow.ipynb index 46437f7a..c55cf9d6 100644 --- a/content/Week_2_3/WS_2_3_DFT_you_try_meow.ipynb +++ b/content/Week_2_3/WS_2_3_DFT_you_try_meow.ipynb @@ -2,10 +2,10 @@ "cells": [ { "cell_type": "markdown", - "id": "4af6b45f-f7aa-46a8-9d79-c1579ae0a799", + "id": "81475e62", "metadata": {}, "source": [ - "# WS11: Discrete Fourier Transform (DFT): You Try Meow (Miauw)\n", + "# WS 2.3: Discrete Fourier Transform (DFT): You Try Meow (Miauw)\n", "\n", "<h1 style=\"position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; top: 60px;right: 30px; margin: 0; border: 0\">\n", " <style>\n", @@ -18,7 +18,7 @@ "<h2 style=\"height: 10px\">\n", "</h2>\n", "\n", - "*[CEGM1000 MUDE](http://mude.citg.tudelft.nl/): Week 2.3, Signal Processing. For: November 29, 2023*" + "*[CEGM1000 MUDE](http://mude.citg.tudelft.nl/): Week 2.3, Signal Processing. For: November 27, 2024*" ] }, { @@ -68,7 +68,7 @@ }, "source": [ "<div style=\"background-color:#facb8e; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%\"> <p>Note the use of <code>zip</code>, <code>stem</code>, <code>annotate</code> and the modulo operator\n", - "<code>%</code>. Refer to PA11 if you do not understand these tools. Furthermore, note that the term _modulus_ is also used here (and in the textbook), which is another term for _absolute value._</p></div>" + "<code>%</code>. Refer to PA 2.3 if you do not understand these tools. Furthermore, note that the term _modulus_ is also used here (and in the textbook), which is another term for _absolute value._</p></div>" ] }, { @@ -393,7 +393,7 @@ }, { "cell_type": "markdown", - "id": "6a4a306d-a372-460e-b312-e8fa138a9797", + "id": "0b3584c9", "metadata": {}, "source": [ "**End of notebook.**\n", @@ -404,19 +404,19 @@ " .markdown {width:100%; position: relative}\n", " article { position: relative }\n", " </style>\n", - " <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\">\n", - " <img alt=\"Creative Commons License\" style=\"border-width:; width:88px; height:auto; padding-top:10px\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" />\n", + " <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/\">\n", + " <img alt=\"Creative Commons License\" style=\"border-width:; width:88px; height:auto; padding-top:10px\" src=\"https://i.creativecommons.org/l/by/4.0/88x31.png\" />\n", " </a>\n", " <a rel=\"TU Delft\" href=\"https://www.tudelft.nl/en/ceg\">\n", - " <img alt=\"TU Delft\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png\"/>\n", + " <img alt=\"TU Delft\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png\" />\n", " </a>\n", " <a rel=\"MUDE\" href=\"http://mude.citg.tudelft.nl/\">\n", - " <img alt=\"MUDE\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png\"/>\n", + " <img alt=\"MUDE\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png\" />\n", " </a>\n", " \n", "</h3>\n", "<span style=\"font-size: 75%\">\n", - "© Copyright 2023 <a rel=\"MUDE Team\" href=\"https://studiegids.tudelft.nl/a101_displayCourse.do?course_id=65595\">MUDE Teaching Team</a> TU Delft. This work is licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>." + "© Copyright 2024 <a rel=\"MUDE\" href=\"http://mude.citg.tudelft.nl/\">MUDE</a> TU Delft. This work is licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/\">CC BY 4.0 License</a>." ] } ], diff --git a/content/Week_2_3/WS_2_3_solution.ipynb b/content/Week_2_3/WS_2_3_solution.ipynb index e96f8fdd..f96d5bb5 100644 --- a/content/Week_2_3/WS_2_3_solution.ipynb +++ b/content/Week_2_3/WS_2_3_solution.ipynb @@ -5,7 +5,7 @@ "id": "4af6b45f-f7aa-46a8-9d79-c1579ae0a799", "metadata": {}, "source": [ - "# WS11: Discrete Fourier Transform (DFT): You Try Meow (Miauw)\n", + "# WS 2.3: Discrete Fourier Transform (DFT): You Try Meow (Miauw)\n", "\n", "<h1 style=\"position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; top: 60px;right: 30px; margin: 0; border: 0\">\n", " <style>\n", @@ -18,7 +18,7 @@ "<h2 style=\"height: 10px\">\n", "</h2>\n", "\n", - "*[CEGM1000 MUDE](http://mude.citg.tudelft.nl/): Week 2.3, Signal Processing. For: November 29, 2023*" + "*[CEGM1000 MUDE](http://mude.citg.tudelft.nl/): Week 2.3, Signal Processing. For: November 27, 2024*" ] }, { @@ -492,7 +492,7 @@ }, { "cell_type": "markdown", - "id": "6a4a306d-a372-460e-b312-e8fa138a9797", + "id": "35961e4d", "metadata": {}, "source": [ "**End of notebook.**\n", @@ -503,19 +503,19 @@ " .markdown {width:100%; position: relative}\n", " article { position: relative }\n", " </style>\n", - " <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\">\n", - " <img alt=\"Creative Commons License\" style=\"border-width:; width:88px; height:auto; padding-top:10px\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" />\n", + " <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/\">\n", + " <img alt=\"Creative Commons License\" style=\"border-width:; width:88px; height:auto; padding-top:10px\" src=\"https://i.creativecommons.org/l/by/4.0/88x31.png\" />\n", " </a>\n", " <a rel=\"TU Delft\" href=\"https://www.tudelft.nl/en/ceg\">\n", - " <img alt=\"TU Delft\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png\"/>\n", + " <img alt=\"TU Delft\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png\" />\n", " </a>\n", " <a rel=\"MUDE\" href=\"http://mude.citg.tudelft.nl/\">\n", - " <img alt=\"MUDE\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png\"/>\n", + " <img alt=\"MUDE\" style=\"border-width:0; width:100px; height:auto; padding-bottom:0px\" src=\"https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png\" />\n", " </a>\n", " \n", "</h3>\n", "<span style=\"font-size: 75%\">\n", - "© Copyright 2023 <a rel=\"MUDE Team\" href=\"https://studiegids.tudelft.nl/a101_displayCourse.do?course_id=65595\">MUDE Teaching Team</a> TU Delft. This work is licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>." + "© Copyright 2024 <a rel=\"MUDE\" href=\"http://mude.citg.tudelft.nl/\">MUDE</a> TU Delft. This work is licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/\">CC BY 4.0 License</a>." ] } ], diff --git a/src/teachers/Week_2_3/WS_2_3_DFT_you_try_meow.html b/src/teachers/Week_2_3/WS_2_3_DFT_you_try_meow.html new file mode 100644 index 00000000..dfef3307 --- /dev/null +++ b/src/teachers/Week_2_3/WS_2_3_DFT_you_try_meow.html @@ -0,0 +1,7980 @@ +<!DOCTYPE html> + +<html lang="en"> +<head><meta charset="utf-8"/> +<meta content="width=device-width, initial-scale=1.0" name="viewport"/> +<title>WS_2_3_DFT_you_try_meow</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script><script> +(function() { + function addWidgetsRenderer() { + var mimeElement = document.querySelector('script[type="application/vnd.jupyter.widget-view+json"]'); + var scriptElement = document.createElement('script'); + + var widgetRendererSrc = 'https://unpkg.com/@jupyter-widgets/html-manager@*/dist/embed-amd.js'; + + var widgetState; + + // Fallback for older version: + try { + widgetState = mimeElement && JSON.parse(mimeElement.innerHTML); + + if (widgetState && (widgetState.version_major < 2 || !widgetState.version_major)) { + + var widgetRendererSrc = 'https://unpkg.com/@jupyter-js-widgets@*/dist/embed.js'; + + } + } catch(e) {} + + scriptElement.src = widgetRendererSrc; + document.body.appendChild(scriptElement); + } + + document.addEventListener('DOMContentLoaded', addWidgetsRenderer); +}()); +</script> +<style type="text/css"> + pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: var(--jp-cell-editor-active-background) } +.highlight { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } +.highlight .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ +.highlight .err { color: var(--jp-mirror-editor-error-color) } /* Error */ +.highlight .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ +.highlight .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ +.highlight .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ +.highlight .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ +.highlight .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ +.highlight .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ +.highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ +.highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ +.highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ +.highlight .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ +.highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ +.highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ +.highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ +.highlight .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ +.highlight .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ +.highlight .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ +.highlight .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ +.highlight .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ +.highlight .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ +.highlight .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ +.highlight .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ +.highlight .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ +.highlight .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ +.highlight .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ +.highlight .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ +.highlight .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ +.highlight .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ +.highlight .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ +.highlight .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ +.highlight .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ + </style> +<style type="text/css"> +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* + * Mozilla scrollbar styling + */ + +/* use standard opaque scrollbars for most nodes */ +[data-jp-theme-scrollbars='true'] { + scrollbar-color: rgb(var(--jp-scrollbar-thumb-color)) + var(--jp-scrollbar-background-color); +} + +/* for code nodes, use a transparent style of scrollbar. These selectors + * will match lower in the tree, and so will override the above */ +[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar, +[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; +} + +/* tiny scrollbar */ + +.jp-scrollbar-tiny { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; + scrollbar-width: thin; +} + +/* tiny scrollbar */ + +.jp-scrollbar-tiny::-webkit-scrollbar, +.jp-scrollbar-tiny::-webkit-scrollbar-corner { + background-color: transparent; + height: 4px; + width: 4px; +} + +.jp-scrollbar-tiny::-webkit-scrollbar-thumb { + background: rgba(var(--jp-scrollbar-thumb-color), 0.5); +} + +.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal { + border-left: 0 solid transparent; + border-right: 0 solid transparent; +} + +.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical { + border-top: 0 solid transparent; + border-bottom: 0 solid transparent; +} + +/* + * Lumino + */ + +.lm-ScrollBar[data-orientation='horizontal'] { + min-height: 16px; + max-height: 16px; + min-width: 45px; + border-top: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] { + min-width: 16px; + max-width: 16px; + min-height: 45px; + border-left: 1px solid #a0a0a0; +} + +.lm-ScrollBar-button { + background-color: #f0f0f0; + background-position: center center; + min-height: 15px; + max-height: 15px; + min-width: 15px; + max-width: 15px; +} + +.lm-ScrollBar-button:hover { + background-color: #dadada; +} + +.lm-ScrollBar-button.lm-mod-active { + background-color: #cdcdcd; +} + +.lm-ScrollBar-track { + background: #f0f0f0; +} + +.lm-ScrollBar-thumb { + background: #cdcdcd; +} + +.lm-ScrollBar-thumb:hover { + background: #bababa; +} + +.lm-ScrollBar-thumb.lm-mod-active { + background: #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb { + height: 100%; + min-width: 15px; + border-left: 1px solid #a0a0a0; + border-right: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb { + width: 100%; + min-height: 15px; + border-top: 1px solid #a0a0a0; + border-bottom: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: var(--jp-icon-caret-left); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: var(--jp-icon-caret-right); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: var(--jp-icon-caret-up); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: var(--jp-icon-caret-down); + background-size: 17px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Widget { + box-sizing: border-box; + position: relative; + overflow: hidden; +} + +.lm-Widget.lm-mod-hidden { + display: none !important; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + display: flex; + flex-direction: column; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-CommandPalette-search { + flex: 0 0 auto; +} + +.lm-CommandPalette-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + min-height: 0; + overflow: auto; + list-style-type: none; +} + +.lm-CommandPalette-header { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-CommandPalette-item { + display: flex; + flex-direction: row; +} + +.lm-CommandPalette-itemIcon { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemContent { + flex: 1 1 auto; + overflow: hidden; +} + +.lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemLabel { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-close-icon { + border: 1px solid transparent; + background-color: transparent; + position: absolute; + z-index: 1; + right: 3%; + top: 0; + bottom: 0; + margin: auto; + padding: 7px 0; + display: none; + vertical-align: middle; + outline: 0; + cursor: pointer; +} +.lm-close-icon:after { + content: 'X'; + display: block; + width: 15px; + height: 15px; + text-align: center; + color: #000; + font-weight: normal; + font-size: 12px; + cursor: pointer; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DockPanel { + z-index: 0; +} + +.lm-DockPanel-widget { + z-index: 0; +} + +.lm-DockPanel-tabBar { + z-index: 1; +} + +.lm-DockPanel-handle { + z-index: 2; +} + +.lm-DockPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-DockPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-DockPanel-handle[data-orientation='horizontal'] { + cursor: ew-resize; +} + +.lm-DockPanel-handle[data-orientation='vertical'] { + cursor: ns-resize; +} + +.lm-DockPanel-handle[data-orientation='horizontal']:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-DockPanel-handle[data-orientation='vertical']:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +.lm-DockPanel-overlay { + z-index: 3; + box-sizing: border-box; + pointer-events: none; +} + +.lm-DockPanel-overlay.lm-mod-hidden { + display: none !important; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Menu { + z-index: 10000; + position: absolute; + white-space: nowrap; + overflow-x: hidden; + overflow-y: auto; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-Menu-content { + margin: 0; + padding: 0; + display: table; + list-style-type: none; +} + +.lm-Menu-item { + display: table-row; +} + +.lm-Menu-item.lm-mod-hidden, +.lm-Menu-item.lm-mod-collapsed { + display: none !important; +} + +.lm-Menu-itemIcon, +.lm-Menu-itemSubmenuIcon { + display: table-cell; + text-align: center; +} + +.lm-Menu-itemLabel { + display: table-cell; + text-align: left; +} + +.lm-Menu-itemShortcut { + display: table-cell; + text-align: right; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-MenuBar { + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-MenuBar-content { + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + list-style-type: none; +} + +.lm-MenuBar-item { + box-sizing: border-box; +} + +.lm-MenuBar-itemIcon, +.lm-MenuBar-itemLabel { + display: inline-block; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-ScrollBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-ScrollBar[data-orientation='horizontal'] { + flex-direction: row; +} + +.lm-ScrollBar[data-orientation='vertical'] { + flex-direction: column; +} + +.lm-ScrollBar-button { + box-sizing: border-box; + flex: 0 0 auto; +} + +.lm-ScrollBar-track { + box-sizing: border-box; + position: relative; + overflow: hidden; + flex: 1 1 auto; +} + +.lm-ScrollBar-thumb { + box-sizing: border-box; + position: absolute; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-SplitPanel-child { + z-index: 0; +} + +.lm-SplitPanel-handle { + z-index: 1; +} + +.lm-SplitPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-SplitPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { + cursor: ew-resize; +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { + cursor: ns-resize; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-TabBar[data-orientation='horizontal'] { + flex-direction: row; + align-items: flex-end; +} + +.lm-TabBar[data-orientation='vertical'] { + flex-direction: column; + align-items: flex-end; +} + +.lm-TabBar-content { + margin: 0; + padding: 0; + display: flex; + flex: 1 1 auto; + list-style-type: none; +} + +.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { + flex-direction: row; +} + +.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { + flex-direction: column; +} + +.lm-TabBar-tab { + display: flex; + flex-direction: row; + box-sizing: border-box; + overflow: hidden; + touch-action: none; /* Disable native Drag/Drop */ +} + +.lm-TabBar-tabIcon, +.lm-TabBar-tabCloseIcon { + flex: 0 0 auto; +} + +.lm-TabBar-tabLabel { + flex: 1 1 auto; + overflow: hidden; + white-space: nowrap; +} + +.lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; +} + +.lm-TabBar-tab.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar-addButton.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { + position: relative; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { + left: 0; + transition: left 150ms ease; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { + top: 0; + transition: top 150ms ease; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { + transition: none; +} + +.lm-TabBar-tabLabel .lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; + background: inherit; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabPanel-tabBar { + z-index: 1; +} + +.lm-TabPanel-stackedPanel { + z-index: 0; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Collapse { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.jp-Collapse-header { + padding: 1px 12px; + background-color: var(--jp-layout-color1); + border-bottom: solid var(--jp-border-width) var(--jp-border-color2); + color: var(--jp-ui-font-color1); + cursor: pointer; + display: flex; + align-items: center; + font-size: var(--jp-ui-font-size0); + font-weight: 600; + text-transform: uppercase; + user-select: none; +} + +.jp-Collapser-icon { + height: 16px; +} + +.jp-Collapse-header-collapsed .jp-Collapser-icon { + transform: rotate(-90deg); + margin: auto 0; +} + +.jp-Collapser-title { + line-height: 25px; +} + +.jp-Collapse-contents { + padding: 0 12px; + background-color: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + overflow: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */ + +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +/* Icons urls */ + +:root { + --jp-icon-add-above: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5MikiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik00Ljc1IDQuOTMwNjZINi42MjVWNi44MDU2NkM2LjYyNSA3LjAxMTkxIDYuNzkzNzUgNy4xODA2NiA3IDcuMTgwNjZDNy4yMDYyNSA3LjE4MDY2IDcuMzc1IDcuMDExOTEgNy4zNzUgNi44MDU2NlY0LjkzMDY2SDkuMjVDOS40NTYyNSA0LjkzMDY2IDkuNjI1IDQuNzYxOTEgOS42MjUgNC41NTU2NkM5LjYyNSA0LjM0OTQxIDkuNDU2MjUgNC4xODA2NiA5LjI1IDQuMTgwNjZINy4zNzVWMi4zMDU2NkM3LjM3NSAyLjA5OTQxIDcuMjA2MjUgMS45MzA2NiA3IDEuOTMwNjZDNi43OTM3NSAxLjkzMDY2IDYuNjI1IDIuMDk5NDEgNi42MjUgMi4zMDU2NlY0LjE4MDY2SDQuNzVDNC41NDM3NSA0LjE4MDY2IDQuMzc1IDQuMzQ5NDEgNC4zNzUgNC41NTU2NkM0LjM3NSA0Ljc2MTkxIDQuNTQzNzUgNC45MzA2NiA0Ljc1IDQuOTMwNjZaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC43Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgOS41VjExLjVMMi41IDExLjVWOS41TDExLjUgOS41Wk0xMiA4QzEyLjU1MjMgOCAxMyA4LjQ0NzcyIDEzIDlWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzTDIgMTNDMS40NDc3MiAxMyAxIDEyLjU1MjMgMSAxMlY5QzEgOC40NDc3MiAxLjQ0NzcxIDggMiA4TDEyIDhaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5MiI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEwIDEuNTU1NjYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==); + --jp-icon-add-below: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5OCkiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik05LjI1IDEwLjA2OTNMNy4zNzUgMTAuMDY5M0w3LjM3NSA4LjE5NDM0QzcuMzc1IDcuOTg4MDkgNy4yMDYyNSA3LjgxOTM0IDcgNy44MTkzNEM2Ljc5Mzc1IDcuODE5MzQgNi42MjUgNy45ODgwOSA2LjYyNSA4LjE5NDM0TDYuNjI1IDEwLjA2OTNMNC43NSAxMC4wNjkzQzQuNTQzNzUgMTAuMDY5MyA0LjM3NSAxMC4yMzgxIDQuMzc1IDEwLjQ0NDNDNC4zNzUgMTAuNjUwNiA0LjU0Mzc1IDEwLjgxOTMgNC43NSAxMC44MTkzTDYuNjI1IDEwLjgxOTNMNi42MjUgMTIuNjk0M0M2LjYyNSAxMi45MDA2IDYuNzkzNzUgMTMuMDY5MyA3IDEzLjA2OTNDNy4yMDYyNSAxMy4wNjkzIDcuMzc1IDEyLjkwMDYgNy4zNzUgMTIuNjk0M0w3LjM3NSAxMC44MTkzTDkuMjUgMTAuODE5M0M5LjQ1NjI1IDEwLjgxOTMgOS42MjUgMTAuNjUwNiA5LjYyNSAxMC40NDQzQzkuNjI1IDEwLjIzODEgOS40NTYyNSAxMC4wNjkzIDkuMjUgMTAuMDY5M1oiIGZpbGw9IiM2MTYxNjEiIHN0cm9rZT0iIzYxNjE2MSIgc3Ryb2tlLXdpZHRoPSIwLjciLz4KPC9nPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDUuNUwyLjUgMy41TDExLjUgMy41TDExLjUgNS41TDIuNSA1LjVaTTIgN0MxLjQ0NzcyIDcgMSA2LjU1MjI4IDEgNkwxIDNDMSAyLjQ0NzcyIDEuNDQ3NzIgMiAyIDJMMTIgMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzTDEzIDZDMTMgNi41NTIyOSAxMi41NTIzIDcgMTIgN0wyIDdaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5OCI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KDEgMS43NDg0NmUtMDcgMS43NDg0NmUtMDcgLTEgNCAxMy40NDQzKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=); + --jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-bell: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgogICA8cGF0aCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzMzMzMzIgogICAgICBkPSJtOCAwLjI5Yy0xLjQgMC0yLjcgMC43My0zLjYgMS44LTEuMiAxLjUtMS40IDMuNC0xLjUgNS4yLTAuMTggMi4yLTAuNDQgNC0yLjMgNS4zbDAuMjggMS4zaDVjMC4wMjYgMC42NiAwLjMyIDEuMSAwLjcxIDEuNSAwLjg0IDAuNjEgMiAwLjYxIDIuOCAwIDAuNTItMC40IDAuNi0xIDAuNzEtMS41aDVsMC4yOC0xLjNjLTEuOS0wLjk3LTIuMi0zLjMtMi4zLTUuMy0wLjEzLTEuOC0wLjI2LTMuNy0xLjUtNS4yLTAuODUtMS0yLjItMS44LTMuNi0xLjh6bTAgMS40YzAuODggMCAxLjkgMC41NSAyLjUgMS4zIDAuODggMS4xIDEuMSAyLjcgMS4yIDQuNCAwLjEzIDEuNyAwLjIzIDMuNiAxLjMgNS4yaC0xMGMxLjEtMS42IDEuMi0zLjQgMS4zLTUuMiAwLjEzLTEuNyAwLjMtMy4zIDEuMi00LjQgMC41OS0wLjcyIDEuNi0xLjMgMi41LTEuM3ptLTAuNzQgMTJoMS41Yy0wLjAwMTUgMC4yOCAwLjAxNSAwLjc5LTAuNzQgMC43OS0wLjczIDAuMDAxNi0wLjcyLTAuNTMtMC43NC0wLjc5eiIgLz4KPC9zdmc+Cg==); + --jp-icon-bug-dot: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTcuMTkgOEgyMFYxMEgxNy45MUMxNy45NiAxMC4zMyAxOCAxMC42NiAxOCAxMVYxMkgyMFYxNEgxOC41SDE4VjE0LjAyNzVDMTUuNzUgMTQuMjc2MiAxNCAxNi4xODM3IDE0IDE4LjVDMTQgMTkuMjA4IDE0LjE2MzUgMTkuODc3OSAxNC40NTQ5IDIwLjQ3MzlDMTMuNzA2MyAyMC44MTE3IDEyLjg3NTcgMjEgMTIgMjFDOS43OCAyMSA3Ljg1IDE5Ljc5IDYuODEgMThINFYxNkg2LjA5QzYuMDQgMTUuNjcgNiAxNS4zNCA2IDE1VjE0SDRWMTJINlYxMUM2IDEwLjY2IDYuMDQgMTAuMzMgNi4wOSAxMEg0VjhINi44MUM3LjI2IDcuMjIgNy44OCA2LjU1IDguNjIgNi4wNEw3IDQuNDFMOC40MSAzTDEwLjU5IDUuMTdDMTEuMDQgNS4wNiAxMS41MSA1IDEyIDVDMTIuNDkgNSAxMi45NiA1LjA2IDEzLjQyIDUuMTdMMTUuNTkgM0wxNyA0LjQxTDE1LjM3IDYuMDRDMTYuMTIgNi41NSAxNi43NCA3LjIyIDE3LjE5IDhaTTEwIDE2SDE0VjE0SDEwVjE2Wk0xMCAxMkgxNFYxMEgxMFYxMloiIGZpbGw9IiM2MTYxNjEiLz4KICAgICAgICA8cGF0aCBkPSJNMjIgMTguNUMyMiAyMC40MzMgMjAuNDMzIDIyIDE4LjUgMjJDMTYuNTY3IDIyIDE1IDIwLjQzMyAxNSAxOC41QzE1IDE2LjU2NyAxNi41NjcgMTUgMTguNSAxNUMyMC40MzMgMTUgMjIgMTYuNTY3IDIyIDE4LjVaIiBmaWxsPSIjNjE2MTYxIi8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=); + --jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-code-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICA8cGF0aCBkPSJNNi41OSwzLjQxTDIsOEw2LjU5LDEyLjZMOCwxMS4xOEw0LjgyLDhMOCw0LjgyTDYuNTksMy40MU0xMi40MSwzLjQxTDExLDQuODJMMTQuMTgsOEwxMSwxMS4xOEwxMi40MSwxMi42TDE3LDhMMTIuNDEsMy40MU0yMS41OSwxMS41OUwxMy41LDE5LjY4TDkuODMsMTZMOC40MiwxNy40MUwxMy41LDIyLjVMMjMsMTNMMjEuNTksMTEuNTlaIiAvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-code: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==); + --jp-icon-collapse-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiAxM3YyaDh2LTJ6IiAvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1jb25zb2xlLWljb24tYmFja2dyb3VuZC1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtY29uc29sZS1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIj4KICAgIDxwYXRoIGQ9Ik0xMDUgMTI3LjNoNDB2MTIuOGgtNDB6TTUxLjEgNzdMNzQgOTkuOWwtMjMuMyAyMy4zIDEwLjUgMTAuNSAyMy4zLTIzLjNMOTUgOTkuOSA4NC41IDg5LjQgNjEuNiA2Ni41eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-copyright: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0xMS44OCw5LjE0YzEuMjgsMC4wNiwxLjYxLDEuMTUsMS42MywxLjY2aDEuNzljLTAuMDgtMS45OC0xLjQ5LTMuMTktMy40NS0zLjE5QzkuNjQsNy42MSw4LDksOCwxMi4xNCBjMCwxLjk0LDAuOTMsNC4yNCwzLjg0LDQuMjRjMi4yMiwwLDMuNDEtMS42NSwzLjQ0LTIuOTVoLTEuNzljLTAuMDMsMC41OS0wLjQ1LDEuMzgtMS42MywxLjQ0QzEwLjU1LDE0LjgzLDEwLDEzLjgxLDEwLDEyLjE0IEMxMCw5LjI1LDExLjI4LDkuMTYsMTEuODgsOS4xNHogTTEyLDJDNi40OCwyLDIsNi40OCwyLDEyczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMFMxNy41MiwyLDEyLDJ6IE0xMiwyMGMtNC40MSwwLTgtMy41OS04LTggczMuNTktOCw4LThzOCwzLjU5LDgsOFMxNi40MSwyMCwxMiwyMHoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-delete: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjI2MjYyIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz4KPC9zdmc+Cg==); + --jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-duplicate: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuNzk5OTggMC44NzVIOC44OTU4MkM5LjIwMDYxIDAuODc1IDkuNDQ5OTggMS4xMzkxNCA5LjQ0OTk4IDEuNDYxOThDOS40NDk5OCAxLjc4NDgyIDkuMjAwNjEgMi4wNDg5NiA4Ljg5NTgyIDIuMDQ4OTZIMy4zNTQxNUMzLjA0OTM2IDIuMDQ4OTYgMi43OTk5OCAyLjMxMzEgMi43OTk5OCAyLjYzNTk0VjkuNjc5NjlDMi43OTk5OCAxMC4wMDI1IDIuNTUwNjEgMTAuMjY2NyAyLjI0NTgyIDEwLjI2NjdDMS45NDEwMyAxMC4yNjY3IDEuNjkxNjUgMTAuMDAyNSAxLjY5MTY1IDkuNjc5NjlWMi4wNDg5NkMxLjY5MTY1IDEuNDAzMjggMi4xOTA0IDAuODc1IDIuNzk5OTggMC44NzVaTTUuMzY2NjUgMTEuOVY0LjU1SDExLjA4MzNWMTEuOUg1LjM2NjY1Wk00LjE0MTY1IDQuMTQxNjdDNC4xNDE2NSAzLjY5MDYzIDQuNTA3MjggMy4zMjUgNC45NTgzMiAzLjMyNUgxMS40OTE3QzExLjk0MjcgMy4zMjUgMTIuMzA4MyAzLjY5MDYzIDEyLjMwODMgNC4xNDE2N1YxMi4zMDgzQzEyLjMwODMgMTIuNzU5NCAxMS45NDI3IDEzLjEyNSAxMS40OTE3IDEzLjEyNUg0Ljk1ODMyQzQuNTA3MjggMTMuMTI1IDQuMTQxNjUgMTIuNzU5NCA0LjE0MTY1IDEyLjMwODNWNC4xNDE2N1oiIGZpbGw9IiM2MTYxNjEiLz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNOS40MzU3NCA4LjI2NTA3SDguMzY0MzFWOS4zMzY1QzguMzY0MzEgOS40NTQzNSA4LjI2Nzg4IDkuNTUwNzggOC4xNTAwMiA5LjU1MDc4QzguMDMyMTcgOS41NTA3OCA3LjkzNTc0IDkuNDU0MzUgNy45MzU3NCA5LjMzNjVWOC4yNjUwN0g2Ljg2NDMxQzYuNzQ2NDUgOC4yNjUwNyA2LjY1MDAyIDguMTY4NjQgNi42NTAwMiA4LjA1MDc4QzYuNjUwMDIgNy45MzI5MiA2Ljc0NjQ1IDcuODM2NSA2Ljg2NDMxIDcuODM2NUg3LjkzNTc0VjYuNzY1MDdDNy45MzU3NCA2LjY0NzIxIDguMDMyMTcgNi41NTA3OCA4LjE1MDAyIDYuNTUwNzhDOC4yNjc4OCA2LjU1MDc4IDguMzY0MzEgNi42NDcyMSA4LjM2NDMxIDYuNzY1MDdWNy44MzY1SDkuNDM1NzRDOS41NTM2IDcuODM2NSA5LjY1MDAyIDcuOTMyOTIgOS42NTAwMiA4LjA1MDc4QzkuNjUwMDIgOC4xNjg2NCA5LjU1MzYgOC4yNjUwNyA5LjQzNTc0IDguMjY1MDdaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC41Ii8+Cjwvc3ZnPgo=); + --jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-error: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIyIi8+PHBhdGggZD0iTTEwIDNoNHYxMmgtNHoiLz48L2c+CjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz4KPC9zdmc+Cg==); + --jp-icon-expand-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNMTEgMTBIOXYzSDZ2MmgzdjNoMnYtM2gzdi0yaC0zeiIgLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==); + --jp-icon-filter-dot: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWRvdCIgZmlsbD0iI0ZGRiI+CiAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE3IiByPSIzIj48L2NpcmNsZT4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-filter: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-folder-favorite: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggY2xhc3M9ImpwLWljb24zIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxNjE2MSIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0yLjA2IDExTDE1IDE1LjI4IDEyLjA2IDE3bC43OC0zLjMzLTIuNTktMi4yNCAzLjQxLS4yOUwxNSA4bDEuMzQgMy4xNCAzLjQxLjI5LTIuNTkgMi4yNC43OCAzLjMzeiIvPgo8L3N2Zz4K); + --jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=); + --jp-icon-home: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ii8+Cjwvc3ZnPgo=); + --jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==); + --jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=); + --jp-icon-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUwLjk3OCA1MC45NzgiPgoJPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KCQk8cGF0aCBkPSJNNDMuNTIsNy40NThDMzguNzExLDIuNjQ4LDMyLjMwNywwLDI1LjQ4OSwwQzE4LjY3LDAsMTIuMjY2LDIuNjQ4LDcuNDU4LDcuNDU4CgkJCWMtOS45NDMsOS45NDEtOS45NDMsMjYuMTE5LDAsMzYuMDYyYzQuODA5LDQuODA5LDExLjIxMiw3LjQ1NiwxOC4wMzEsNy40NThjMCwwLDAuMDAxLDAsMC4wMDIsMAoJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoKCQkJIE00Mi4xMDYsNDIuMTA1Yy00LjQzMiw0LjQzMS0xMC4zMzIsNi44NzItMTYuNjE1LDYuODcyaC0wLjAwMmMtNi4yODUtMC4wMDEtMTIuMTg3LTIuNDQxLTE2LjYxNy02Ljg3MgoJCQljLTkuMTYyLTkuMTYzLTkuMTYyLTI0LjA3MSwwLTMzLjIzM0MxMy4zMDMsNC40NCwxOS4yMDQsMiwyNS40ODksMmM2LjI4NCwwLDEyLjE4NiwyLjQ0LDE2LjYxNyw2Ljg3MgoJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4KCQk8cGF0aCBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1MwoJCQljMC40NjgtMC41MzYsMC45MjMtMS4wNjIsMS4zNjctMS41NzVjMC42MjYtMC43NTMsMS4xMDQtMS40NzgsMS40MzYtMi4xNzVjMC4zMzEtMC43MDcsMC40OTUtMS41NDEsMC40OTUtMi41CgkJCWMwLTEuMDk2LTAuMjYtMi4wODgtMC43NzktMi45NzljLTAuNTY1LTAuODc5LTEuNTAxLTEuMzM2LTIuODA2LTEuMzY5Yy0xLjgwMiwwLjA1Ny0yLjk4NSwwLjY2Ny0zLjU1LDEuODMyCgkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkKCQkJYzEuMDYyLTEuNjQsMi44NTUtMi40ODEsNS4zNzgtMi41MjdjMi4xNiwwLjAyMywzLjg3NCwwLjYwOCw1LjE0MSwxLjc1OGMxLjI3OCwxLjE2LDEuOTI5LDIuNzY0LDEuOTUsNC44MTEKCQkJYzAsMS4xNDItMC4xMzcsMi4xMTEtMC40MSwyLjkxMWMtMC4zMDksMC44NDUtMC43MzEsMS41OTMtMS4yNjgsMi4yNDNjLTAuNDkyLDAuNjUtMS4wNjgsMS4zMTgtMS43MywyLjAwMgoJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5CgkJCUMyNi41ODksMzIuMjE4LDIzLjU3OCwzMi4yMTgsMjMuNTc4LDMyLjIxOHogTTIzLjU3OCwzOC4yMnYtMy40ODRoMy4wNzZ2My40ODRIMjMuNTc4eiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaW5zcGVjdG9yLWljb24tY29sb3IganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K); + --jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtanNvbi1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0Y5QTgyNSI+CiAgICA8cGF0aCBkPSJNMjAuMiAxMS44Yy0xLjYgMC0xLjcuNS0xLjcgMSAwIC40LjEuOS4xIDEuMy4xLjUuMS45LjEgMS4zIDAgMS43LTEuNCAyLjMtMy41IDIuM2gtLjl2LTEuOWguNWMxLjEgMCAxLjQgMCAxLjQtLjggMC0uMyAwLS42LS4xLTEgMC0uNC0uMS0uOC0uMS0xLjIgMC0xLjMgMC0xLjggMS4zLTItMS4zLS4yLTEuMy0uNy0xLjMtMiAwLS40LjEtLjguMS0xLjIuMS0uNC4xLS43LjEtMSAwLS44LS40LS43LTEuNC0uOGgtLjVWNC4xaC45YzIuMiAwIDMuNS43IDMuNSAyLjMgMCAuNC0uMS45LS4xIDEuMy0uMS41LS4xLjktLjEgMS4zIDAgLjUuMiAxIDEuNyAxdjEuOHpNMS44IDEwLjFjMS42IDAgMS43LS41IDEuNy0xIDAtLjQtLjEtLjktLjEtMS4zLS4xLS41LS4xLS45LS4xLTEuMyAwLTEuNiAxLjQtMi4zIDMuNS0yLjNoLjl2MS45aC0uNWMtMSAwLTEuNCAwLTEuNC44IDAgLjMgMCAuNi4xIDEgMCAuMi4xLjYuMSAxIDAgMS4zIDAgMS44LTEuMyAyQzYgMTEuMiA2IDExLjcgNiAxM2MwIC40LS4xLjgtLjEgMS4yLS4xLjMtLjEuNy0uMSAxIDAgLjguMy44IDEuNC44aC41djEuOWgtLjljLTIuMSAwLTMuNS0uNi0zLjUtMi4zIDAtLjQuMS0uOS4xLTEuMy4xLS41LjEtLjkuMS0xLjMgMC0uNS0uMi0xLTEuNy0xdi0xLjl6Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjEzLjgiIHI9IjIuMSIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSI4LjIiIHI9IjIuMSIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGcgY2xhc3M9ImpwLWp1cHl0ZXItaWNvbi1jb2xvciIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgIDxnIGNsYXNzPSJqcC1qdXB5dGVyLWljb24tY29sb3IiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=); + --jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K); + --jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==); + --jp-icon-launch: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yNiwyOEg2YTIuMDAyNywyLjAwMjcsMCwwLDEtMi0yVjZBMi4wMDI3LDIuMDAyNywwLDAsMSw2LDRIMTZWNkg2VjI2SDI2VjE2aDJWMjZBMi4wMDI3LDIuMDAyNywwLDAsMSwyNiwyOFoiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMjAgMiAyMCA0IDI2LjU4NiA0IDE4IDEyLjU4NiAxOS40MTQgMTQgMjggNS40MTQgMjggMTIgMzAgMTIgMzAgMiAyMCAyIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==); + --jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=); + --jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4K); + --jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==); + --jp-icon-move-down: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMTIuNDcxIDcuNTI4OTlDMTIuNzYzMiA3LjIzNjg0IDEyLjc2MzIgNi43NjMxNiAxMi40NzEgNi40NzEwMVY2LjQ3MTAxQzEyLjE3OSA2LjE3OTA1IDExLjcwNTcgNi4xNzg4NCAxMS40MTM1IDYuNDcwNTRMNy43NSAxMC4xMjc1VjEuNzVDNy43NSAxLjMzNTc5IDcuNDE0MjEgMSA3IDFWMUM2LjU4NTc5IDEgNi4yNSAxLjMzNTc5IDYuMjUgMS43NVYxMC4xMjc1TDIuNTk3MjYgNi40NjgyMkMyLjMwMzM4IDYuMTczODEgMS44MjY0MSA2LjE3MzU5IDEuNTMyMjYgNi40Njc3NFY2LjQ2Nzc0QzEuMjM4MyA2Ljc2MTcgMS4yMzgzIDcuMjM4MyAxLjUzMjI2IDcuNTMyMjZMNi4yOTI4OSAxMi4yOTI5QzYuNjgzNDIgMTIuNjgzNCA3LjMxNjU4IDEyLjY4MzQgNy43MDcxMSAxMi4yOTI5TDEyLjQ3MSA3LjUyODk5WiIgZmlsbD0iIzYxNjE2MSIvPgo8L3N2Zz4K); + --jp-icon-move-up: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMS41Mjg5OSA2LjQ3MTAxQzEuMjM2ODQgNi43NjMxNiAxLjIzNjg0IDcuMjM2ODQgMS41Mjg5OSA3LjUyODk5VjcuNTI4OTlDMS44MjA5NSA3LjgyMDk1IDIuMjk0MjYgNy44MjExNiAyLjU4NjQ5IDcuNTI5NDZMNi4yNSAzLjg3MjVWMTIuMjVDNi4yNSAxMi42NjQyIDYuNTg1NzkgMTMgNyAxM1YxM0M3LjQxNDIxIDEzIDcuNzUgMTIuNjY0MiA3Ljc1IDEyLjI1VjMuODcyNUwxMS40MDI3IDcuNTMxNzhDMTEuNjk2NiA3LjgyNjE5IDEyLjE3MzYgNy44MjY0MSAxMi40Njc3IDcuNTMyMjZWNy41MzIyNkMxMi43NjE3IDcuMjM4MyAxMi43NjE3IDYuNzYxNyAxMi40Njc3IDYuNDY3NzRMNy43MDcxMSAxLjcwNzExQzcuMzE2NTggMS4zMTY1OCA2LjY4MzQyIDEuMzE2NTggNi4yOTI4OSAxLjcwNzExTDEuNTI4OTkgNi40NzEwMVoiIGZpbGw9IiM2MTYxNjEiLz4KPC9zdmc+Cg==); + --jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=); + --jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtbm90ZWJvb2staWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-numbering: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTQgMTlINlYxOS41SDVWMjAuNUg2VjIxSDRWMjJIN1YxOEg0VjE5Wk01IDEwSDZWNkg0VjdINVYxMFpNNCAxM0g1LjhMNCAxNS4xVjE2SDdWMTVINS4yTDcgMTIuOVYxMkg0VjEzWk05IDdWOUgyM1Y3SDlaTTkgMjFIMjNWMTlIOVYyMVpNOSAxNUgyM1YxM0g5VjE1WiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-offline-bolt: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDIuMDJjLTUuNTEgMC05Ljk4IDQuNDctOS45OCA5Ljk4czQuNDcgOS45OCA5Ljk4IDkuOTggOS45OC00LjQ3IDkuOTgtOS45OFMxNy41MSAyLjAyIDEyIDIuMDJ6TTExLjQ4IDIwdi02LjI2SDhMMTMgNHY2LjI2aDMuMzVMMTEuNDggMjB6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-pdf: url(data:image/svg+xml;base64,PHN2ZwogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiIgd2lkdGg9IjE2Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0ZGMkEyQSIKICAgICAgIGQ9Im0gMjIuMzQ0MzY5LC0zLjAxNjM2NDIgaCA1LjYzODYwNCB2IDEuNTc5MjQzMyBoIC0zLjU0OTIyNyB2IDEuNTA4NjkyOTkgaCAzLjMzNzU3NiBWIDEuNjUwODE1NCBoIC0zLjMzNzU3NiB2IDMuNDM1MjYxMyBoIC0yLjA4OTM3NyB6IG0gLTcuMTM2NDQ0LDEuNTc5MjQzMyB2IDQuOTQzOTU0MyBoIDAuNzQ4OTIgcSAxLjI4MDc2MSwwIDEuOTUzNzAzLC0wLjYzNDk1MzUgMC42NzgzNjksLTAuNjM0OTUzNSAwLjY3ODM2OSwtMS44NDUxNjQxIDAsLTEuMjA0NzgzNTUgLTAuNjcyOTQyLC0xLjgzNDMxMDExIC0wLjY3Mjk0MiwtMC42Mjk1MjY1OSAtMS45NTkxMywtMC42Mjk1MjY1OSB6IG0gLTIuMDg5Mzc3LC0xLjU3OTI0MzMgaCAyLjIwMzM0MyBxIDEuODQ1MTY0LDAgMi43NDYwMzksMC4yNjU5MjA3IDAuOTA2MzAxLDAuMjYwNDkzNyAxLjU1MjEwOCwwLjg5MDAyMDMgMC41Njk4MywwLjU0ODEyMjMgMC44NDY2MDUsMS4yNjQ0ODAwNiAwLjI3Njc3NCwwLjcxNjM1NzgxIDAuMjc2Nzc0LDEuNjIyNjU4OTQgMCwwLjkxNzE1NTEgLTAuMjc2Nzc0LDEuNjM4OTM5OSAtMC4yNzY3NzUsMC43MTYzNTc4IC0wLjg0NjYwNSwxLjI2NDQ4IC0wLjY1MTIzNCwwLjYyOTUyNjYgLTEuNTYyOTYyLDAuODk1NDQ3MyAtMC45MTE3MjgsMC4yNjA0OTM3IC0yLjczNTE4NSwwLjI2MDQ5MzcgaCAtMi4yMDMzNDMgeiBtIC04LjE0NTg1NjUsMCBoIDMuNDY3ODIzIHEgMS41NDY2ODE2LDAgMi4zNzE1Nzg1LDAuNjg5MjIzIDAuODMwMzI0LDAuNjgzNzk2MSAwLjgzMDMyNCwxLjk1MzcwMzE0IDAsMS4yNzUzMzM5NyAtMC44MzAzMjQsMS45NjQ1NTcwNiBRIDkuOTg3MTk2MSwyLjI3NDkxNSA4LjQ0MDUxNDUsMi4yNzQ5MTUgSCA3LjA2MjA2ODQgViA1LjA4NjA3NjcgSCA0Ljk3MjY5MTUgWiBtIDIuMDg5Mzc2OSwxLjUxNDExOTkgdiAyLjI2MzAzOTQzIGggMS4xNTU5NDEgcSAwLjYwNzgxODgsMCAwLjkzODg2MjksLTAuMjkzMDU1NDcgMC4zMzEwNDQxLC0wLjI5ODQ4MjQxIDAuMzMxMDQ0MSwtMC44NDExNzc3MiAwLC0wLjU0MjY5NTMxIC0wLjMzMTA0NDEsLTAuODM1NzUwNzQgLTAuMzMxMDQ0MSwtMC4yOTMwNTU1IC0wLjkzODg2MjksLTAuMjkzMDU1NSB6IgovPgo8L3N2Zz4K); + --jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iLTEwIC0xMCAxMzEuMTYxMzYxNjk0MzM1OTQgMTMyLjM4ODk5OTkzODk2NDg0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzA2OTk4IiBkPSJNIDU0LjkxODc4NSw5LjE5Mjc0MjFlLTQgQyA1MC4zMzUxMzIsMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4wOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0NzcxNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYgMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0LjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYxODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1IDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0OTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5MDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43ODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYyNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4LC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0OCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUsOS4xOTI3NDIxZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNTc5IGMgMi43Njk1NDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUtNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1IC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUsLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2IDUuMDMxMjUsLTUuMTI0OTk5NiB6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2ZmZDQzYiIgZD0ibSA4NS42Mzc1MzUsMjguNjU3MTY5IHYgMTEuOTA2MjUgYyAwLDkuMjMwNzU1IC03LjgyNTg5NSwxNi45OTk5OTkgLTE2Ljc1LDE3IGggLTI2Ljc4MTI1IGMgLTcuMzM1ODMzLDAgLTEzLjQwNjI0OSw2LjI3ODQ4MyAtMTMuNDA2MjUsMTMuNjI1IHYgMjUuNTMxMjQ3IGMgMCw3LjI2NjM0NCA2LjMxODU4OCwxMS41NDAzMjQgMTMuNDA2MjUsMTMuNjI1MDA0IDguNDg3MzMxLDIuNDk1NjEgMTYuNjI2MjM3LDIuOTQ2NjMgMjYuNzgxMjUsMCA2Ljc1MDE1NSwtMS45NTQzOSAxMy40MDYyNTMsLTUuODg3NjEgMTMuNDA2MjUsLTEzLjYyNTAwNCBWIDg2LjUwMDkxOSBoIC0yNi43ODEyNSB2IC0zLjQwNjI1IGggMjYuNzgxMjUgMTMuNDA2MjU0IGMgNy43OTI0NjEsMCAxMC42OTYyNTEsLTUuNDM1NDA4IDEzLjQwNjI0MSwtMTMuNTkzNzUgMi43OTkzMywtOC4zOTg4ODYgMi42ODAyMiwtMTYuNDc1Nzc2IDAsLTI3LjI1IC0xLjkyNTc4LC03Ljc1NzQ0MSAtNS42MDM4NywtMTMuNTkzNzUgLTEzLjQwNjI0MSwtMTMuNTkzNzUgeiBtIC0xNS4wNjI1LDY0LjY1NjI1IGMgMi43Nzk0NzgsM2UtNiA1LjAzMTI1LDIuMjc3NDE3IDUuMDMxMjUsNS4wOTM3NDcgLTJlLTYsMi44MjYzNTQgLTIuMjUxNzc1LDUuMTI1MDA0IC01LjAzMTI1LDUuMTI1MDA0IC0yLjc2OTU1LDAgLTUuMDMxMjUsLTIuMjk4NjUgLTUuMDMxMjUsLTUuMTI1MDA0IDJlLTYsLTIuODE2MzMgMi4yNjE2OTcsLTUuMDkzNzQ3IDUuMDMxMjUsLTUuMDkzNzQ3IHoiLz4KPC9zdmc+Cg==); + --jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==); + --jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-redo: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==); + --jp-icon-share: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTSAxOCAyIEMgMTYuMzU0OTkgMiAxNSAzLjM1NDk5MDQgMTUgNSBDIDE1IDUuMTkwOTUyOSAxNS4wMjE3OTEgNS4zNzcxMjI0IDE1LjA1NjY0MSA1LjU1ODU5MzggTCA3LjkyMTg3NSA5LjcyMDcwMzEgQyA3LjM5ODUzOTkgOS4yNzc4NTM5IDYuNzMyMDc3MSA5IDYgOSBDIDQuMzU0OTkwNCA5IDMgMTAuMzU0OTkgMyAxMiBDIDMgMTMuNjQ1MDEgNC4zNTQ5OTA0IDE1IDYgMTUgQyA2LjczMjA3NzEgMTUgNy4zOTg1Mzk5IDE0LjcyMjE0NiA3LjkyMTg3NSAxNC4yNzkyOTcgTCAxNS4wNTY2NDEgMTguNDM5NDUzIEMgMTUuMDIxNTU1IDE4LjYyMTUxNCAxNSAxOC44MDgzODYgMTUgMTkgQyAxNSAyMC42NDUwMSAxNi4zNTQ5OSAyMiAxOCAyMiBDIDE5LjY0NTAxIDIyIDIxIDIwLjY0NTAxIDIxIDE5IEMgMjEgMTcuMzU0OTkgMTkuNjQ1MDEgMTYgMTggMTYgQyAxNy4yNjc0OCAxNiAxNi42MDE1OTMgMTYuMjc5MzI4IDE2LjA3ODEyNSAxNi43MjI2NTYgTCA4Ljk0MzM1OTQgMTIuNTU4NTk0IEMgOC45NzgyMDk1IDEyLjM3NzEyMiA5IDEyLjE5MDk1MyA5IDEyIEMgOSAxMS44MDkwNDcgOC45NzgyMDk1IDExLjYyMjg3OCA4Ljk0MzM1OTQgMTEuNDQxNDA2IEwgMTYuMDc4MTI1IDcuMjc5Mjk2OSBDIDE2LjYwMTQ2IDcuNzIyMTQ2MSAxNy4yNjc5MjMgOCAxOCA4IEMgMTkuNjQ1MDEgOCAyMSA2LjY0NTAwOTYgMjEgNSBDIDIxIDMuMzU0OTkwNCAxOS42NDUwMSAyIDE4IDIgeiBNIDE4IDQgQyAxOC41NjQxMjkgNCAxOSA0LjQzNTg3MDYgMTkgNSBDIDE5IDUuNTY0MTI5NCAxOC41NjQxMjkgNiAxOCA2IEMgMTcuNDM1ODcxIDYgMTcgNS41NjQxMjk0IDE3IDUgQyAxNyA0LjQzNTg3MDYgMTcuNDM1ODcxIDQgMTggNCB6IE0gNiAxMSBDIDYuNTY0MTI5NCAxMSA3IDExLjQzNTg3MSA3IDEyIEMgNyAxMi41NjQxMjkgNi41NjQxMjk0IDEzIDYgMTMgQyA1LjQzNTg3MDYgMTMgNSAxMi41NjQxMjkgNSAxMiBDIDUgMTEuNDM1ODcxIDUuNDM1ODcwNiAxMSA2IDExIHogTSAxOCAxOCBDIDE4LjU2NDEyOSAxOCAxOSAxOC40MzU4NzEgMTkgMTkgQyAxOSAxOS41NjQxMjkgMTguNTY0MTI5IDIwIDE4IDIwIEMgMTcuNDM1ODcxIDIwIDE3IDE5LjU2NDEyOSAxNyAxOSBDIDE3IDE4LjQzNTg3MSAxNy40MzU4NzEgMTggMTggMTggeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=); + --jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-table-rows: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIiBmaWxsPSIjMzMzMzMzIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUtaW52ZXJzZSIgZD0iTTUuMDU2NjQgOC43NjE3MkM1LjA1NjY0IDguNTk3NjYgNS4wMzEyNSA4LjQ1MzEyIDQuOTgwNDcgOC4zMjgxMkM0LjkzMzU5IDguMTk5MjIgNC44NTU0NyA4LjA4MjAzIDQuNzQ2MDkgNy45NzY1NkM0LjY0MDYyIDcuODcxMDkgNC41IDcuNzc1MzkgNC4zMjQyMiA3LjY4OTQ1QzQuMTUyMzQgNy41OTk2MSAzLjk0MzM2IDcuNTExNzIgMy42OTcyNyA3LjQyNTc4QzMuMzAyNzMgNy4yODUxNiAyLjk0MzM2IDcuMTM2NzIgMi42MTkxNCA2Ljk4MDQ3QzIuMjk0OTIgNi44MjQyMiAyLjAxNzU4IDYuNjQyNTggMS43ODcxMSA2LjQzNTU1QzEuNTYwNTUgNi4yMjg1MiAxLjM4NDc3IDUuOTg4MjggMS4yNTk3NyA1LjcxNDg0QzEuMTM0NzcgNS40Mzc1IDEuMDcyMjcgNS4xMDkzOCAxLjA3MjI3IDQuNzMwNDdDMS4wNzIyNyA0LjM5ODQ0IDEuMTI4OTEgNC4wOTU3IDEuMjQyMTkgMy44MjIyN0MxLjM1NTQ3IDMuNTQ0OTIgMS41MTU2MiAzLjMwNDY5IDEuNzIyNjYgMy4xMDE1NkMxLjkyOTY5IDIuODk4NDQgMi4xNzk2OSAyLjczNDM3IDIuNDcyNjYgMi42MDkzOEMyLjc2NTYyIDIuNDg0MzggMy4wOTE4IDIuNDA0MyAzLjQ1MTE3IDIuMzY5MTRWMS4xMDkzOEg0LjM4ODY3VjIuMzgwODZDNC43NDAyMyAyLjQyNzczIDUuMDU2NjQgMi41MjM0NCA1LjMzNzg5IDIuNjY3OTdDNS42MTkxNCAyLjgxMjUgNS44NTc0MiAzLjAwMTk1IDYuMDUyNzMgMy4yMzYzM0M2LjI1MTk1IDMuNDY2OCA2LjQwNDMgMy43NDAyMyA2LjUwOTc3IDQuMDU2NjRDNi42MTkxNCA0LjM2OTE0IDYuNjczODMgNC43MjA3IDYuNjczODMgNS4xMTEzM0g1LjA0NDkyQzUuMDQ0OTIgNC42Mzg2NyA0LjkzNzUgNC4yODEyNSA0LjcyMjY2IDQuMDM5MDZDNC41MDc4MSAzLjc5Mjk3IDQuMjE2OCAzLjY2OTkyIDMuODQ5NjEgMy42Njk5MkMzLjY1MDM5IDMuNjY5OTIgMy40NzY1NiAzLjY5NzI3IDMuMzI4MTIgMy43NTE5NUMzLjE4MzU5IDMuODAyNzMgMy4wNjQ0NSAzLjg3Njk1IDIuOTcwNyAzLjk3NDYxQzIuODc2OTUgNC4wNjgzNiAyLjgwNjY0IDQuMTc5NjkgMi43NTk3NyA0LjMwODU5QzIuNzE2OCA0LjQzNzUgMi42OTUzMSA0LjU3ODEyIDIuNjk1MzEgNC43MzA0N0MyLjY5NTMxIDQuODgyODEgMi43MTY4IDUuMDE5NTMgMi43NTk3NyA1LjE0MDYyQzIuODA2NjQgNS4yNTc4MSAyLjg4MjgxIDUuMzY3MTkgMi45ODgyOCA1LjQ2ODc1QzMuMDk3NjYgNS41NzAzMSAzLjI0MDIzIDUuNjY3OTcgMy40MTYwMiA1Ljc2MTcyQzMuNTkxOCA1Ljg1MTU2IDMuODEwNTUgNS45NDMzNiA0LjA3MjI3IDYuMDM3MTFDNC40NjY4IDYuMTg1NTUgNC44MjQyMiA2LjMzOTg0IDUuMTQ0NTMgNi41QzUuNDY0ODQgNi42NTYyNSA1LjczODI4IDYuODM5ODQgNS45NjQ4NCA3LjA1MDc4QzYuMTk1MzEgNy4yNTc4MSA2LjM3MTA5IDcuNSA2LjQ5MjE5IDcuNzc3MzRDNi42MTcxOSA4LjA1MDc4IDYuNjc5NjkgOC4zNzUgNi42Nzk2OSA4Ljc1QzYuNjc5NjkgOS4wOTM3NSA2LjYyMzA1IDkuNDA0MyA2LjUwOTc3IDkuNjgxNjRDNi4zOTY0OCA5Ljk1NTA4IDYuMjM0MzggMTAuMTkxNCA2LjAyMzQ0IDEwLjM5MDZDNS44MTI1IDEwLjU4OTggNS41NTg1OSAxMC43NSA1LjI2MTcyIDEwLjg3MTFDNC45NjQ4NCAxMC45ODgzIDQuNjMyODEgMTEuMDY0NSA0LjI2NTYyIDExLjA5OTZWMTIuMjQ4SDMuMzMzOThWMTEuMDk5NkMzLjAwMTk1IDExLjA2ODQgMi42Nzk2OSAxMC45OTYxIDIuMzY3MTkgMTAuODgyOEMyLjA1NDY5IDEwLjc2NTYgMS43NzczNCAxMC41OTc3IDEuNTM1MTYgMTAuMzc4OUMxLjI5Njg4IDEwLjE2MDIgMS4xMDU0NyA5Ljg4NDc3IDAuOTYwOTM4IDkuNTUyNzNDMC44MTY0MDYgOS4yMTY4IDAuNzQ0MTQxIDguODE0NDUgMC43NDQxNDEgOC4zNDU3SDIuMzc4OTFDMi4zNzg5MSA4LjYyNjk1IDIuNDE5OTIgOC44NjMyOCAyLjUwMTk1IDkuMDU0NjlDMi41ODM5OCA5LjI0MjE5IDIuNjg5NDUgOS4zOTI1OCAyLjgxODM2IDkuNTA1ODZDMi45NTExNyA5LjYxNTIzIDMuMTAxNTYgOS42OTMzNiAzLjI2OTUzIDkuNzQwMjNDMy40Mzc1IDkuNzg3MTEgMy42MDkzOCA5LjgxMDU1IDMuNzg1MTYgOS44MTA1NUM0LjIwMzEyIDkuODEwNTUgNC41MTk1MyA5LjcxMjg5IDQuNzM0MzggOS41MTc1OEM0Ljk0OTIyIDkuMzIyMjcgNS4wNTY2NCA5LjA3MDMxIDUuMDU2NjQgOC43NjE3MlpNMTMuNDE4IDEyLjI3MTVIOC4wNzQyMlYxMUgxMy40MThWMTIuMjcxNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuOTUyNjQgNikiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=); + --jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtdGV4dC1lZGl0b3ItaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiLz4KPC9zdmc+Cg==); + --jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K); + --jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-user: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-users: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImpwLWljb24zIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjczMjcgMCAwIDEuNzMyNyAtMy42MjgyIC4wOTk1NzcpIiBmaWxsPSIjNjE2MTYxIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjUsMCwwLDEuNSwwLC02KSIgZD0ibTEyLjE4NiA3LjUwOThjLTEuMDUzNSAwLTEuOTc1NyAwLjU2NjUtMi40Nzg1IDEuNDEwMiAwLjc1MDYxIDAuMzEyNzcgMS4zOTc0IDAuODI2NDggMS44NzMgMS40NzI3aDMuNDg2M2MwLTEuNTkyLTEuMjg4OS0yLjg4MjgtMi44ODA5LTIuODgyOHoiLz4KICA8cGF0aCBkPSJtMjAuNDY1IDIuMzg5NWEyLjE4ODUgMi4xODg1IDAgMCAxLTIuMTg4NCAyLjE4ODUgMi4xODg1IDIuMTg4NSAwIDAgMS0yLjE4ODUtMi4xODg1IDIuMTg4NSAyLjE4ODUgMCAwIDEgMi4xODg1LTIuMTg4NSAyLjE4ODUgMi4xODg1IDAgMCAxIDIuMTg4NCAyLjE4ODV6Ii8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS41LDAsMCwxLjUsMCwtNikiIGQ9Im0zLjU4OTggOC40MjE5Yy0xLjExMjYgMC0yLjAxMzcgMC45MDExMS0yLjAxMzcgMi4wMTM3aDIuODE0NWMwLjI2Nzk3LTAuMzczMDkgMC41OTA3LTAuNzA0MzUgMC45NTg5OC0wLjk3ODUyLTAuMzQ0MzMtMC42MTY4OC0xLjAwMzEtMS4wMzUyLTEuNzU5OC0xLjAzNTJ6Ii8+CiAgPHBhdGggZD0ibTYuOTE1NCA0LjYyM2ExLjUyOTQgMS41Mjk0IDAgMCAxLTEuNTI5NCAxLjUyOTQgMS41Mjk0IDEuNTI5NCAwIDAgMS0xLjUyOTQtMS41Mjk0IDEuNTI5NCAxLjUyOTQgMCAwIDEgMS41Mjk0LTEuNTI5NCAxLjUyOTQgMS41Mjk0IDAgMCAxIDEuNTI5NCAxLjUyOTR6Ii8+CiAgPHBhdGggZD0ibTYuMTM1IDEzLjUzNWMwLTMuMjM5MiAyLjYyNTktNS44NjUgNS44NjUtNS44NjUgMy4yMzkyIDAgNS44NjUgMi42MjU5IDUuODY1IDUuODY1eiIvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMy43Njg1IiByPSIyLjk2ODUiLz4KIDwvZz4KPC9zdmc+Cg==); + --jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-word: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KIDxnIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzQxNDE0MSI+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiA8L2c+CiA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNDMgLjA0MDEpIiBmaWxsPSIjZmZmIj4KICA8cGF0aCBkPSJtNC4xNCA4Ljc2cTAuMDY4Mi0xLjg5IDIuNDItMS44OSAxLjE2IDAgMS42OCAwLjQyIDAuNTY3IDAuNDEgMC41NjcgMS4xNnYzLjQ3cTAgMC40NjIgMC41MTQgMC40NjIgMC4xMDMgMCAwLjItMC4wMjMxdjAuNzE0cS0wLjM5OSAwLjEwMy0wLjY1MSAwLjEwMy0wLjQ1MiAwLTAuNjkzLTAuMjItMC4yMzEtMC4yLTAuMjg0LTAuNjYyLTAuOTU2IDAuODcyLTIgMC44NzItMC45MDMgMC0xLjQ3LTAuNDcyLTAuNTI1LTAuNDcyLTAuNTI1LTEuMjYgMC0wLjI2MiAwLjA0NTItMC40NzIgMC4wNTY3LTAuMjIgMC4xMTYtMC4zNzggMC4wNjgyLTAuMTY4IDAuMjMxLTAuMzA0IDAuMTU4LTAuMTQ3IDAuMjYyLTAuMjQyIDAuMTE2LTAuMDkxNCAwLjM2OC0wLjE2OCAwLjI2Mi0wLjA5MTQgMC4zOTktMC4xMjYgMC4xMzYtMC4wNDUyIDAuNDcyLTAuMTAzIDAuMzM2LTAuMDU3OCAwLjUwNC0wLjA3OTggMC4xNTgtMC4wMjMxIDAuNTY3LTAuMDc5OCAwLjU1Ni0wLjA2ODIgMC43NzctMC4yMjEgMC4yMi0wLjE1MiAwLjIyLTAuNDQxdi0wLjI1MnEwLTAuNDMtMC4zNTctMC42NjItMC4zMzYtMC4yMzEtMC45NzYtMC4yMzEtMC42NjIgMC0wLjk5OCAwLjI2Mi0wLjMzNiAwLjI1Mi0wLjM5OSAwLjc5OHptMS44OSAzLjY4cTAuNzg4IDAgMS4yNi0wLjQxIDAuNTA0LTAuNDIgMC41MDQtMC45MDN2LTEuMDVxLTAuMjg0IDAuMTM2LTAuODYxIDAuMjMxLTAuNTY3IDAuMDkxNC0wLjk4NyAwLjE1OC0wLjQyIDAuMDY4Mi0wLjc2NiAwLjMyNi0wLjMzNiAwLjI1Mi0wLjMzNiAwLjcwNHQwLjMwNCAwLjcwNCAwLjg2MSAwLjI1MnoiIHN0cm9rZS13aWR0aD0iMS4wNSIvPgogIDxwYXRoIGQ9Im0xMCA0LjU2aDAuOTQ1djMuMTVxMC42NTEtMC45NzYgMS44OS0wLjk3NiAxLjE2IDAgMS44OSAwLjg0IDAuNjgyIDAuODQgMC42ODIgMi4zMSAwIDEuNDctMC43MDQgMi40Mi0wLjcwNCAwLjg4Mi0xLjg5IDAuODgyLTEuMjYgMC0xLjg5LTEuMDJ2MC43NjZoLTAuODV6bTIuNjIgMy4wNHEtMC43NDYgMC0xLjE2IDAuNjQtMC40NTIgMC42My0wLjQ1MiAxLjY4IDAgMS4wNSAwLjQ1MiAxLjY4dDEuMTYgMC42M3EwLjc3NyAwIDEuMjYtMC42MyAwLjQ5NC0wLjY0IDAuNDk0LTEuNjggMC0xLjA1LTAuNDcyLTEuNjgtMC40NjItMC42NC0xLjI2LTAuNjR6IiBzdHJva2Utd2lkdGg9IjEuMDUiLz4KICA8cGF0aCBkPSJtMi43MyAxNS44IDEzLjYgMC4wMDgxYzAuMDA2OSAwIDAtMi42IDAtMi42IDAtMC4wMDc4LTEuMTUgMC0xLjE1IDAtMC4wMDY5IDAtMC4wMDgzIDEuNS0wLjAwODMgMS41LTJlLTMgLTAuMDAxNC0xMS4zLTAuMDAxNC0xMS4zLTAuMDAxNGwtMC4wMDU5Mi0xLjVjMC0wLjAwNzgtMS4xNyAwLjAwMTMtMS4xNyAwLjAwMTN6IiBzdHJva2Utd2lkdGg9Ii45NzUiLz4KIDwvZz4KPC9zdmc+Cg==); + --jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K); +} + +/* Icon CSS class declarations */ + +.jp-AddAboveIcon { + background-image: var(--jp-icon-add-above); +} + +.jp-AddBelowIcon { + background-image: var(--jp-icon-add-below); +} + +.jp-AddIcon { + background-image: var(--jp-icon-add); +} + +.jp-BellIcon { + background-image: var(--jp-icon-bell); +} + +.jp-BugDotIcon { + background-image: var(--jp-icon-bug-dot); +} + +.jp-BugIcon { + background-image: var(--jp-icon-bug); +} + +.jp-BuildIcon { + background-image: var(--jp-icon-build); +} + +.jp-CaretDownEmptyIcon { + background-image: var(--jp-icon-caret-down-empty); +} + +.jp-CaretDownEmptyThinIcon { + background-image: var(--jp-icon-caret-down-empty-thin); +} + +.jp-CaretDownIcon { + background-image: var(--jp-icon-caret-down); +} + +.jp-CaretLeftIcon { + background-image: var(--jp-icon-caret-left); +} + +.jp-CaretRightIcon { + background-image: var(--jp-icon-caret-right); +} + +.jp-CaretUpEmptyThinIcon { + background-image: var(--jp-icon-caret-up-empty-thin); +} + +.jp-CaretUpIcon { + background-image: var(--jp-icon-caret-up); +} + +.jp-CaseSensitiveIcon { + background-image: var(--jp-icon-case-sensitive); +} + +.jp-CheckIcon { + background-image: var(--jp-icon-check); +} + +.jp-CircleEmptyIcon { + background-image: var(--jp-icon-circle-empty); +} + +.jp-CircleIcon { + background-image: var(--jp-icon-circle); +} + +.jp-ClearIcon { + background-image: var(--jp-icon-clear); +} + +.jp-CloseIcon { + background-image: var(--jp-icon-close); +} + +.jp-CodeCheckIcon { + background-image: var(--jp-icon-code-check); +} + +.jp-CodeIcon { + background-image: var(--jp-icon-code); +} + +.jp-CollapseAllIcon { + background-image: var(--jp-icon-collapse-all); +} + +.jp-ConsoleIcon { + background-image: var(--jp-icon-console); +} + +.jp-CopyIcon { + background-image: var(--jp-icon-copy); +} + +.jp-CopyrightIcon { + background-image: var(--jp-icon-copyright); +} + +.jp-CutIcon { + background-image: var(--jp-icon-cut); +} + +.jp-DeleteIcon { + background-image: var(--jp-icon-delete); +} + +.jp-DownloadIcon { + background-image: var(--jp-icon-download); +} + +.jp-DuplicateIcon { + background-image: var(--jp-icon-duplicate); +} + +.jp-EditIcon { + background-image: var(--jp-icon-edit); +} + +.jp-EllipsesIcon { + background-image: var(--jp-icon-ellipses); +} + +.jp-ErrorIcon { + background-image: var(--jp-icon-error); +} + +.jp-ExpandAllIcon { + background-image: var(--jp-icon-expand-all); +} + +.jp-ExtensionIcon { + background-image: var(--jp-icon-extension); +} + +.jp-FastForwardIcon { + background-image: var(--jp-icon-fast-forward); +} + +.jp-FileIcon { + background-image: var(--jp-icon-file); +} + +.jp-FileUploadIcon { + background-image: var(--jp-icon-file-upload); +} + +.jp-FilterDotIcon { + background-image: var(--jp-icon-filter-dot); +} + +.jp-FilterIcon { + background-image: var(--jp-icon-filter); +} + +.jp-FilterListIcon { + background-image: var(--jp-icon-filter-list); +} + +.jp-FolderFavoriteIcon { + background-image: var(--jp-icon-folder-favorite); +} + +.jp-FolderIcon { + background-image: var(--jp-icon-folder); +} + +.jp-HomeIcon { + background-image: var(--jp-icon-home); +} + +.jp-Html5Icon { + background-image: var(--jp-icon-html5); +} + +.jp-ImageIcon { + background-image: var(--jp-icon-image); +} + +.jp-InfoIcon { + background-image: var(--jp-icon-info); +} + +.jp-InspectorIcon { + background-image: var(--jp-icon-inspector); +} + +.jp-JsonIcon { + background-image: var(--jp-icon-json); +} + +.jp-JuliaIcon { + background-image: var(--jp-icon-julia); +} + +.jp-JupyterFaviconIcon { + background-image: var(--jp-icon-jupyter-favicon); +} + +.jp-JupyterIcon { + background-image: var(--jp-icon-jupyter); +} + +.jp-JupyterlabWordmarkIcon { + background-image: var(--jp-icon-jupyterlab-wordmark); +} + +.jp-KernelIcon { + background-image: var(--jp-icon-kernel); +} + +.jp-KeyboardIcon { + background-image: var(--jp-icon-keyboard); +} + +.jp-LaunchIcon { + background-image: var(--jp-icon-launch); +} + +.jp-LauncherIcon { + background-image: var(--jp-icon-launcher); +} + +.jp-LineFormIcon { + background-image: var(--jp-icon-line-form); +} + +.jp-LinkIcon { + background-image: var(--jp-icon-link); +} + +.jp-ListIcon { + background-image: var(--jp-icon-list); +} + +.jp-MarkdownIcon { + background-image: var(--jp-icon-markdown); +} + +.jp-MoveDownIcon { + background-image: var(--jp-icon-move-down); +} + +.jp-MoveUpIcon { + background-image: var(--jp-icon-move-up); +} + +.jp-NewFolderIcon { + background-image: var(--jp-icon-new-folder); +} + +.jp-NotTrustedIcon { + background-image: var(--jp-icon-not-trusted); +} + +.jp-NotebookIcon { + background-image: var(--jp-icon-notebook); +} + +.jp-NumberingIcon { + background-image: var(--jp-icon-numbering); +} + +.jp-OfflineBoltIcon { + background-image: var(--jp-icon-offline-bolt); +} + +.jp-PaletteIcon { + background-image: var(--jp-icon-palette); +} + +.jp-PasteIcon { + background-image: var(--jp-icon-paste); +} + +.jp-PdfIcon { + background-image: var(--jp-icon-pdf); +} + +.jp-PythonIcon { + background-image: var(--jp-icon-python); +} + +.jp-RKernelIcon { + background-image: var(--jp-icon-r-kernel); +} + +.jp-ReactIcon { + background-image: var(--jp-icon-react); +} + +.jp-RedoIcon { + background-image: var(--jp-icon-redo); +} + +.jp-RefreshIcon { + background-image: var(--jp-icon-refresh); +} + +.jp-RegexIcon { + background-image: var(--jp-icon-regex); +} + +.jp-RunIcon { + background-image: var(--jp-icon-run); +} + +.jp-RunningIcon { + background-image: var(--jp-icon-running); +} + +.jp-SaveIcon { + background-image: var(--jp-icon-save); +} + +.jp-SearchIcon { + background-image: var(--jp-icon-search); +} + +.jp-SettingsIcon { + background-image: var(--jp-icon-settings); +} + +.jp-ShareIcon { + background-image: var(--jp-icon-share); +} + +.jp-SpreadsheetIcon { + background-image: var(--jp-icon-spreadsheet); +} + +.jp-StopIcon { + background-image: var(--jp-icon-stop); +} + +.jp-TabIcon { + background-image: var(--jp-icon-tab); +} + +.jp-TableRowsIcon { + background-image: var(--jp-icon-table-rows); +} + +.jp-TagIcon { + background-image: var(--jp-icon-tag); +} + +.jp-TerminalIcon { + background-image: var(--jp-icon-terminal); +} + +.jp-TextEditorIcon { + background-image: var(--jp-icon-text-editor); +} + +.jp-TocIcon { + background-image: var(--jp-icon-toc); +} + +.jp-TreeViewIcon { + background-image: var(--jp-icon-tree-view); +} + +.jp-TrustedIcon { + background-image: var(--jp-icon-trusted); +} + +.jp-UndoIcon { + background-image: var(--jp-icon-undo); +} + +.jp-UserIcon { + background-image: var(--jp-icon-user); +} + +.jp-UsersIcon { + background-image: var(--jp-icon-users); +} + +.jp-VegaIcon { + background-image: var(--jp-icon-vega); +} + +.jp-WordIcon { + background-image: var(--jp-icon-word); +} + +.jp-YamlIcon { + background-image: var(--jp-icon-yaml); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +.jp-Icon, +.jp-MaterialIcon { + background-position: center; + background-repeat: no-repeat; + background-size: 16px; + min-width: 16px; + min-height: 16px; +} + +.jp-Icon-cover { + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} + +/** + * (DEPRECATED) Support for specific CSS icon sizes + */ + +.jp-Icon-16 { + background-size: 16px; + min-width: 16px; + min-height: 16px; +} + +.jp-Icon-18 { + background-size: 18px; + min-width: 18px; + min-height: 18px; +} + +.jp-Icon-20 { + background-size: 20px; + min-width: 20px; + min-height: 20px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.lm-TabBar .lm-TabBar-addButton { + align-items: center; + display: flex; + padding: 4px; + padding-bottom: 5px; + margin-right: 1px; + background-color: var(--jp-layout-color2); +} + +.lm-TabBar .lm-TabBar-addButton:hover { + background-color: var(--jp-layout-color1); +} + +.lm-DockPanel-tabBar .lm-TabBar-tab { + width: var(--jp-private-horizontal-tab-width); +} + +.lm-DockPanel-tabBar .lm-TabBar-content { + flex: unset; +} + +.lm-DockPanel-tabBar[data-orientation='horizontal'] { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * Support for icons as inline SVG HTMLElements + */ + +/* recolor the primary elements of an icon */ +.jp-icon0[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon1[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon2[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon3[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon4[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon0[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon1[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon2[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon3[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon4[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/* recolor the accent elements of an icon */ +.jp-icon-accent0[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-accent1[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-accent2[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-accent3[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-accent4[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-accent0[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-accent1[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-accent2[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-accent3[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-accent4[stroke] { + stroke: var(--jp-layout-color4); +} + +/* set the color of an icon to transparent */ +.jp-icon-none[fill] { + fill: none; +} + +.jp-icon-none[stroke] { + stroke: none; +} + +/* brand icon colors. Same for light and dark */ +.jp-icon-brand0[fill] { + fill: var(--jp-brand-color0); +} + +.jp-icon-brand1[fill] { + fill: var(--jp-brand-color1); +} + +.jp-icon-brand2[fill] { + fill: var(--jp-brand-color2); +} + +.jp-icon-brand3[fill] { + fill: var(--jp-brand-color3); +} + +.jp-icon-brand4[fill] { + fill: var(--jp-brand-color4); +} + +.jp-icon-brand0[stroke] { + stroke: var(--jp-brand-color0); +} + +.jp-icon-brand1[stroke] { + stroke: var(--jp-brand-color1); +} + +.jp-icon-brand2[stroke] { + stroke: var(--jp-brand-color2); +} + +.jp-icon-brand3[stroke] { + stroke: var(--jp-brand-color3); +} + +.jp-icon-brand4[stroke] { + stroke: var(--jp-brand-color4); +} + +/* warn icon colors. Same for light and dark */ +.jp-icon-warn0[fill] { + fill: var(--jp-warn-color0); +} + +.jp-icon-warn1[fill] { + fill: var(--jp-warn-color1); +} + +.jp-icon-warn2[fill] { + fill: var(--jp-warn-color2); +} + +.jp-icon-warn3[fill] { + fill: var(--jp-warn-color3); +} + +.jp-icon-warn0[stroke] { + stroke: var(--jp-warn-color0); +} + +.jp-icon-warn1[stroke] { + stroke: var(--jp-warn-color1); +} + +.jp-icon-warn2[stroke] { + stroke: var(--jp-warn-color2); +} + +.jp-icon-warn3[stroke] { + stroke: var(--jp-warn-color3); +} + +/* icon colors that contrast well with each other and most backgrounds */ +.jp-icon-contrast0[fill] { + fill: var(--jp-icon-contrast-color0); +} + +.jp-icon-contrast1[fill] { + fill: var(--jp-icon-contrast-color1); +} + +.jp-icon-contrast2[fill] { + fill: var(--jp-icon-contrast-color2); +} + +.jp-icon-contrast3[fill] { + fill: var(--jp-icon-contrast-color3); +} + +.jp-icon-contrast0[stroke] { + stroke: var(--jp-icon-contrast-color0); +} + +.jp-icon-contrast1[stroke] { + stroke: var(--jp-icon-contrast-color1); +} + +.jp-icon-contrast2[stroke] { + stroke: var(--jp-icon-contrast-color2); +} + +.jp-icon-contrast3[stroke] { + stroke: var(--jp-icon-contrast-color3); +} + +.jp-icon-dot[fill] { + fill: var(--jp-warn-color0); +} + +.jp-jupyter-icon-color[fill] { + fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0)); +} + +.jp-notebook-icon-color[fill] { + fill: var(--jp-notebook-icon-color, var(--jp-warn-color0)); +} + +.jp-json-icon-color[fill] { + fill: var(--jp-json-icon-color, var(--jp-warn-color1)); +} + +.jp-console-icon-color[fill] { + fill: var(--jp-console-icon-color, white); +} + +.jp-console-icon-background-color[fill] { + fill: var(--jp-console-icon-background-color, var(--jp-brand-color1)); +} + +.jp-terminal-icon-color[fill] { + fill: var(--jp-terminal-icon-color, var(--jp-layout-color2)); +} + +.jp-terminal-icon-background-color[fill] { + fill: var( + --jp-terminal-icon-background-color, + var(--jp-inverse-layout-color2) + ); +} + +.jp-text-editor-icon-color[fill] { + fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3)); +} + +.jp-inspector-icon-color[fill] { + fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3)); +} + +/* CSS for icons in selected filebrowser listing items */ +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] { + fill: #fff; +} + +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* stylelint-disable selector-max-class, selector-max-compound-selectors */ + +/** +* TODO: come up with non css-hack solution for showing the busy icon on top +* of the close icon +* CSS for complex behavior of close icon of tabs in the main area tabbar +*/ +.lm-DockPanel-tabBar + .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon3[fill] { + fill: none; +} + +.lm-DockPanel-tabBar + .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon-busy[fill] { + fill: var(--jp-inverse-layout-color3); +} + +/* stylelint-enable selector-max-class, selector-max-compound-selectors */ + +/* CSS for icons in status bar */ +#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] { + fill: #fff; +} + +#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* special handling for splash icon CSS. While the theme CSS reloads during + splash, the splash icon can loose theming. To prevent that, we set a + default for its color variable */ +:root { + --jp-warn-color0: var(--md-orange-700); +} + +/* not sure what to do with this one, used in filebrowser listing */ +.jp-DragIcon { + margin-right: 4px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * Support for alt colors for icons as inline SVG HTMLElements + */ + +/* alt recolor the primary elements of an icon */ +.jp-icon-alt .jp-icon0[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-alt .jp-icon1[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-alt .jp-icon2[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-alt .jp-icon3[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-alt .jp-icon4[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-alt .jp-icon0[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-alt .jp-icon1[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-alt .jp-icon2[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-alt .jp-icon3[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-alt .jp-icon4[stroke] { + stroke: var(--jp-layout-color4); +} + +/* alt recolor the accent elements of an icon */ +.jp-icon-alt .jp-icon-accent0[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-alt .jp-icon-accent1[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-alt .jp-icon-accent2[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-alt .jp-icon-accent3[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-alt .jp-icon-accent4[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-alt .jp-icon-accent0[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-alt .jp-icon-accent1[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-alt .jp-icon-accent2[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-alt .jp-icon-accent3[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-alt .jp-icon-accent4[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content { + display: none !important; +} + +/** + * Support for hover colors for icons as inline SVG HTMLElements + */ + +/** + * regular colors + */ + +/* recolor the primary elements of an icon */ +.jp-icon-hover :hover .jp-icon0-hover[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover :hover .jp-icon1-hover[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover :hover .jp-icon2-hover[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover :hover .jp-icon3-hover[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover :hover .jp-icon4-hover[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-hover :hover .jp-icon0-hover[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover :hover .jp-icon1-hover[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover :hover .jp-icon2-hover[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover :hover .jp-icon3-hover[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover :hover .jp-icon4-hover[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/* recolor the accent elements of an icon */ +.jp-icon-hover :hover .jp-icon-accent0-hover[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-hover :hover .jp-icon-accent1-hover[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-hover :hover .jp-icon-accent2-hover[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-hover :hover .jp-icon-accent3-hover[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-hover :hover .jp-icon-accent4-hover[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] { + stroke: var(--jp-layout-color4); +} + +/* set the color of an icon to transparent */ +.jp-icon-hover :hover .jp-icon-none-hover[fill] { + fill: none; +} + +.jp-icon-hover :hover .jp-icon-none-hover[stroke] { + stroke: none; +} + +/** + * inverse colors + */ + +/* inverse recolor the primary elements of an icon */ +.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] { + stroke: var(--jp-layout-color4); +} + +/* inverse recolor the accent elements of an icon */ +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-IFrame { + width: 100%; + height: 100%; +} + +.jp-IFrame > iframe { + border: none; +} + +/* +When drag events occur, `lm-mod-override-cursor` is added to the body. +Because iframes steal all cursor events, the following two rules are necessary +to suppress pointer events while resize drags are occurring. There may be a +better solution to this problem. +*/ +body.lm-mod-override-cursor .jp-IFrame { + position: relative; +} + +body.lm-mod-override-cursor .jp-IFrame::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-HoverBox { + position: fixed; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-FormGroup-content fieldset { + border: none; + padding: 0; + min-width: 0; + width: 100%; +} + +/* stylelint-disable selector-max-type */ + +.jp-FormGroup-content fieldset .jp-inputFieldWrapper input, +.jp-FormGroup-content fieldset .jp-inputFieldWrapper select, +.jp-FormGroup-content fieldset .jp-inputFieldWrapper textarea { + font-size: var(--jp-content-font-size2); + border-color: var(--jp-input-border-color); + border-style: solid; + border-radius: var(--jp-border-radius); + border-width: 1px; + padding: 6px 8px; + background: none; + color: var(--jp-ui-font-color0); + height: inherit; +} + +.jp-FormGroup-content fieldset input[type='checkbox'] { + position: relative; + top: 2px; + margin-left: 0; +} + +.jp-FormGroup-content button.jp-mod-styled { + cursor: pointer; +} + +.jp-FormGroup-content .checkbox label { + cursor: pointer; + font-size: var(--jp-content-font-size1); +} + +.jp-FormGroup-content .jp-root > fieldset > legend { + display: none; +} + +.jp-FormGroup-content .jp-root > fieldset > p { + display: none; +} + +/** copy of `input.jp-mod-styled:focus` style */ +.jp-FormGroup-content fieldset input:focus, +.jp-FormGroup-content fieldset select:focus { + -moz-outline-radius: unset; + outline: var(--jp-border-width) solid var(--md-blue-500); + outline-offset: -1px; + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-FormGroup-content fieldset input:hover:not(:focus), +.jp-FormGroup-content fieldset select:hover:not(:focus) { + background-color: var(--jp-border-color2); +} + +/* stylelint-enable selector-max-type */ + +.jp-FormGroup-content .checkbox .field-description { + /* Disable default description field for checkbox: + because other widgets do not have description fields, + we add descriptions to each widget on the field level. + */ + display: none; +} + +.jp-FormGroup-content #root__description { + display: none; +} + +.jp-FormGroup-content .jp-modifiedIndicator { + width: 5px; + background-color: var(--jp-brand-color2); + margin-top: 0; + margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1); + flex-shrink: 0; +} + +.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator { + background-color: var(--jp-error-color0); + margin-right: 0.5em; +} + +/* RJSF ARRAY style */ + +.jp-arrayFieldWrapper legend { + font-size: var(--jp-content-font-size2); + color: var(--jp-ui-font-color0); + flex-basis: 100%; + padding: 4px 0; + font-weight: var(--jp-content-heading-font-weight); + border-bottom: 1px solid var(--jp-border-color2); +} + +.jp-arrayFieldWrapper .field-description { + padding: 4px 0; + white-space: pre-wrap; +} + +.jp-arrayFieldWrapper .array-item { + width: 100%; + border: 1px solid var(--jp-border-color2); + border-radius: 4px; + margin: 4px; +} + +.jp-ArrayOperations { + display: flex; + margin-left: 8px; +} + +.jp-ArrayOperationsButton { + margin: 2px; +} + +.jp-ArrayOperationsButton .jp-icon3[fill] { + fill: var(--jp-ui-font-color0); +} + +button.jp-ArrayOperationsButton.jp-mod-styled:disabled { + cursor: not-allowed; + opacity: 0.5; +} + +/* RJSF form validation error */ + +.jp-FormGroup-content .validationErrors { + color: var(--jp-error-color0); +} + +/* Hide panel level error as duplicated the field level error */ +.jp-FormGroup-content .panel.errors { + display: none; +} + +/* RJSF normal content (settings-editor) */ + +.jp-FormGroup-contentNormal { + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-contentItem { + margin-left: 7px; + color: var(--jp-ui-font-color0); +} + +.jp-FormGroup-contentNormal .jp-FormGroup-description { + flex-basis: 100%; + padding: 4px 7px; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-default { + flex-basis: 100%; + padding: 4px 7px; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel { + font-size: var(--jp-content-font-size1); + font-weight: normal; + min-width: 120px; +} + +.jp-FormGroup-contentNormal fieldset:not(:first-child) { + margin-left: 7px; +} + +.jp-FormGroup-contentNormal .field-array-of-string .array-item { + /* Display `jp-ArrayOperations` buttons side-by-side with content except + for small screens where flex-wrap will place them one below the other. + */ + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group { + padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent); + margin-top: 2px; +} + +/* RJSF compact content (metadata-form) */ + +.jp-FormGroup-content.jp-FormGroup-contentCompact { + width: 100%; +} + +.jp-FormGroup-contentCompact .form-group { + display: flex; + padding: 0.5em 0.2em 0.5em 0; +} + +.jp-FormGroup-contentCompact + .jp-FormGroup-compactTitle + .jp-FormGroup-description { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color2); +} + +.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel { + padding-bottom: 0.3em; +} + +.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control { + width: 100%; + box-sizing: border-box; +} + +.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle { + padding-bottom: 7px; +} + +.jp-FormGroup-contentCompact + .jp-objectFieldWrapper + .jp-objectFieldWrapper + .form-group { + padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent); + margin-top: 2px; +} + +.jp-FormGroup-contentCompact ul.error-detail { + margin-block-start: 0.5em; + margin-block-end: 0.5em; + padding-inline-start: 1em; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-SidePanel { + display: flex; + flex-direction: column; + min-width: var(--jp-sidebar-min-width); + overflow-y: auto; + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + font-size: var(--jp-ui-font-size1); +} + +.jp-SidePanel-header { + flex: 0 0 auto; + display: flex; + border-bottom: var(--jp-border-width) solid var(--jp-border-color2); + font-size: var(--jp-ui-font-size0); + font-weight: 600; + letter-spacing: 1px; + margin: 0; + padding: 2px; + text-transform: uppercase; +} + +.jp-SidePanel-toolbar { + flex: 0 0 auto; +} + +.jp-SidePanel-content { + flex: 1 1 auto; +} + +.jp-SidePanel-toolbar, +.jp-AccordionPanel-toolbar { + height: var(--jp-private-toolbar-height); +} + +.jp-SidePanel-toolbar.jp-Toolbar-micro { + display: none; +} + +.lm-AccordionPanel .jp-AccordionPanel-title { + box-sizing: border-box; + line-height: 25px; + margin: 0; + display: flex; + align-items: center; + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + font-size: var(--jp-ui-font-size0); +} + +.jp-AccordionPanel-title { + cursor: pointer; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + text-transform: uppercase; +} + +.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} + +.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel { + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser { + transform: rotate(-90deg); + margin: auto 0; + height: 16px; +} + +.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser { + transform: rotate(0deg); +} + +.lm-AccordionPanel .jp-AccordionPanel-toolbar { + background: none; + box-shadow: none; + border: none; + margin-left: auto; +} + +.lm-AccordionPanel .lm-SplitPanel-handle:hover { + background: var(--jp-layout-color3); +} + +.jp-text-truncated { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Spinner { + position: absolute; + display: flex; + justify-content: center; + align-items: center; + z-index: 10; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: var(--jp-layout-color0); + outline: none; +} + +.jp-SpinnerContent { + font-size: 10px; + margin: 50px auto; + text-indent: -9999em; + width: 3em; + height: 3em; + border-radius: 50%; + background: var(--jp-brand-color3); + background: linear-gradient( + to right, + #f37626 10%, + rgba(255, 255, 255, 0) 42% + ); + position: relative; + animation: load3 1s infinite linear, fadeIn 1s; +} + +.jp-SpinnerContent::before { + width: 50%; + height: 50%; + background: #f37626; + border-radius: 100% 0 0; + position: absolute; + top: 0; + left: 0; + content: ''; +} + +.jp-SpinnerContent::after { + background: var(--jp-layout-color0); + width: 75%; + height: 75%; + border-radius: 50%; + content: ''; + margin: auto; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes load3 { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +button.jp-mod-styled { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + border: none; + box-sizing: border-box; + text-align: center; + line-height: 32px; + height: 32px; + padding: 0 12px; + letter-spacing: 0.8px; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +input.jp-mod-styled { + background: var(--jp-input-background); + height: 28px; + box-sizing: border-box; + border: var(--jp-border-width) solid var(--jp-border-color1); + padding-left: 7px; + padding-right: 7px; + font-size: var(--jp-ui-font-size2); + color: var(--jp-ui-font-color0); + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +input[type='checkbox'].jp-mod-styled { + appearance: checkbox; + -webkit-appearance: checkbox; + -moz-appearance: checkbox; + height: auto; +} + +input.jp-mod-styled:focus { + border: var(--jp-border-width) solid var(--md-blue-500); + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-select-wrapper { + display: flex; + position: relative; + flex-direction: column; + padding: 1px; + background-color: var(--jp-layout-color1); + box-sizing: border-box; + margin-bottom: 12px; +} + +.jp-select-wrapper:not(.multiple) { + height: 28px; +} + +.jp-select-wrapper.jp-mod-focused select.jp-mod-styled { + border: var(--jp-border-width) solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); + background-color: var(--jp-input-active-background); +} + +select.jp-mod-styled:hover { + cursor: pointer; + color: var(--jp-ui-font-color0); + background-color: var(--jp-input-hover-background); + box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5); +} + +select.jp-mod-styled { + flex: 1 1 auto; + width: 100%; + font-size: var(--jp-ui-font-size2); + background: var(--jp-input-background); + color: var(--jp-ui-font-color0); + padding: 0 25px 0 8px; + border: var(--jp-border-width) solid var(--jp-input-border-color); + border-radius: 0; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +select.jp-mod-styled:not([multiple]) { + height: 32px; +} + +select.jp-mod-styled[multiple] { + max-height: 200px; + overflow-y: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-switch { + display: flex; + align-items: center; + padding-left: 4px; + padding-right: 4px; + font-size: var(--jp-ui-font-size1); + background-color: transparent; + color: var(--jp-ui-font-color1); + border: none; + height: 20px; +} + +.jp-switch:hover { + background-color: var(--jp-layout-color2); +} + +.jp-switch-label { + margin-right: 5px; + font-family: var(--jp-ui-font-family); +} + +.jp-switch-track { + cursor: pointer; + background-color: var(--jp-switch-color, var(--jp-border-color1)); + -webkit-transition: 0.4s; + transition: 0.4s; + border-radius: 34px; + height: 16px; + width: 35px; + position: relative; +} + +.jp-switch-track::before { + content: ''; + position: absolute; + height: 10px; + width: 10px; + margin: 3px; + left: 0; + background-color: var(--jp-ui-inverse-font-color1); + -webkit-transition: 0.4s; + transition: 0.4s; + border-radius: 50%; +} + +.jp-switch[aria-checked='true'] .jp-switch-track { + background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0)); +} + +.jp-switch[aria-checked='true'] .jp-switch-track::before { + /* track width (35) - margins (3 + 3) - thumb width (10) */ + left: 19px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-toolbar-height: calc( + 28px + var(--jp-border-width) + ); /* leave 28px for content */ +} + +.jp-Toolbar { + color: var(--jp-ui-font-color1); + flex: 0 0 auto; + display: flex; + flex-direction: row; + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + background: var(--jp-toolbar-background); + min-height: var(--jp-toolbar-micro-height); + padding: 2px; + z-index: 8; + overflow-x: hidden; +} + +/* Toolbar items */ + +.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer { + flex-grow: 1; + flex-shrink: 1; +} + +.jp-Toolbar-item.jp-Toolbar-kernelStatus { + display: inline-block; + width: 32px; + background-repeat: no-repeat; + background-position: center; + background-size: 16px; +} + +.jp-Toolbar > .jp-Toolbar-item { + flex: 0 0 auto; + display: flex; + padding-left: 1px; + padding-right: 1px; + font-size: var(--jp-ui-font-size1); + line-height: var(--jp-private-toolbar-height); + height: 100%; +} + +/* Toolbar buttons */ + +/* This is the div we use to wrap the react component into a Widget */ +div.jp-ToolbarButton { + color: transparent; + border: none; + box-sizing: border-box; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding: 0; + margin: 0; +} + +button.jp-ToolbarButtonComponent { + background: var(--jp-layout-color1); + border: none; + box-sizing: border-box; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding: 0 6px; + margin: 0; + height: 24px; + border-radius: var(--jp-border-radius); + display: flex; + align-items: center; + text-align: center; + font-size: 14px; + min-width: unset; + min-height: unset; +} + +button.jp-ToolbarButtonComponent:disabled { + opacity: 0.4; +} + +button.jp-ToolbarButtonComponent > span { + padding: 0; + flex: 0 0 auto; +} + +button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label { + font-size: var(--jp-ui-font-size1); + line-height: 100%; + padding-left: 2px; + color: var(--jp-ui-font-color1); + font-family: var(--jp-ui-font-family); +} + +#jp-main-dock-panel[data-mode='single-document'] + .jp-MainAreaWidget + > .jp-Toolbar.jp-Toolbar-micro { + padding: 0; + min-height: 0; +} + +#jp-main-dock-panel[data-mode='single-document'] + .jp-MainAreaWidget + > .jp-Toolbar { + border: none; + box-shadow: none; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-WindowedPanel-outer { + position: relative; + overflow-y: auto; +} + +.jp-WindowedPanel-inner { + position: relative; +} + +.jp-WindowedPanel-window { + position: absolute; + left: 0; + right: 0; + overflow: visible; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* Sibling imports */ + +body { + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); +} + +/* Disable native link decoration styles everywhere outside of dialog boxes */ +a { + text-decoration: unset; + color: unset; +} + +a:hover { + text-decoration: unset; + color: unset; +} + +/* Accessibility for links inside dialog box text */ +.jp-Dialog-content a { + text-decoration: revert; + color: var(--jp-content-link-color); +} + +.jp-Dialog-content a:hover { + text-decoration: revert; +} + +/* Styles for ui-components */ +.jp-Button { + color: var(--jp-ui-font-color2); + border-radius: var(--jp-border-radius); + padding: 0 12px; + font-size: var(--jp-ui-font-size1); + + /* Copy from blueprint 3 */ + display: inline-flex; + flex-direction: row; + border: none; + cursor: pointer; + align-items: center; + justify-content: center; + text-align: left; + vertical-align: middle; + min-height: 30px; + min-width: 30px; +} + +.jp-Button:disabled { + cursor: not-allowed; +} + +.jp-Button:empty { + padding: 0 !important; +} + +.jp-Button.jp-mod-small { + min-height: 24px; + min-width: 24px; + font-size: 12px; + padding: 0 7px; +} + +/* Use our own theme for hover styles */ +.jp-Button.jp-mod-minimal:hover { + background-color: var(--jp-layout-color2); +} + +.jp-Button.jp-mod-minimal { + background: none; +} + +.jp-InputGroup { + display: block; + position: relative; +} + +.jp-InputGroup input { + box-sizing: border-box; + border: none; + border-radius: 0; + background-color: transparent; + color: var(--jp-ui-font-color0); + box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color); + padding-bottom: 0; + padding-top: 0; + padding-left: 10px; + padding-right: 28px; + position: relative; + width: 100%; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + font-size: 14px; + font-weight: 400; + height: 30px; + line-height: 30px; + outline: none; + vertical-align: middle; +} + +.jp-InputGroup input:focus { + box-shadow: inset 0 0 0 var(--jp-border-width) + var(--jp-input-active-box-shadow-color), + inset 0 0 0 3px var(--jp-input-active-box-shadow-color); +} + +.jp-InputGroup input:disabled { + cursor: not-allowed; + resize: block; + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color2); +} + +.jp-InputGroup input:disabled ~ span { + cursor: not-allowed; + color: var(--jp-ui-font-color2); +} + +.jp-InputGroup input::placeholder, +input::placeholder { + color: var(--jp-ui-font-color2); +} + +.jp-InputGroupAction { + position: absolute; + bottom: 1px; + right: 0; + padding: 6px; +} + +.jp-HTMLSelect.jp-DefaultStyle select { + background-color: initial; + border: none; + border-radius: 0; + box-shadow: none; + color: var(--jp-ui-font-color0); + display: block; + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + height: 24px; + line-height: 14px; + padding: 0 25px 0 10px; + text-align: left; + -moz-appearance: none; + -webkit-appearance: none; +} + +.jp-HTMLSelect.jp-DefaultStyle select:disabled { + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color2); + cursor: not-allowed; + resize: block; +} + +.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span { + cursor: not-allowed; +} + +/* Use our own theme for hover and option styles */ +/* stylelint-disable-next-line selector-max-type */ +.jp-HTMLSelect.jp-DefaultStyle select:hover, +.jp-HTMLSelect.jp-DefaultStyle select > option { + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color0); +} + +select { + box-sizing: border-box; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-StatusBar-Widget { + display: flex; + align-items: center; + background: var(--jp-layout-color2); + min-height: var(--jp-statusbar-height); + justify-content: space-between; + padding: 0 10px; +} + +.jp-StatusBar-Left { + display: flex; + align-items: center; + flex-direction: row; +} + +.jp-StatusBar-Middle { + display: flex; + align-items: center; +} + +.jp-StatusBar-Right { + display: flex; + align-items: center; + flex-direction: row-reverse; +} + +.jp-StatusBar-Item { + max-height: var(--jp-statusbar-height); + margin: 0 2px; + height: var(--jp-statusbar-height); + white-space: nowrap; + text-overflow: ellipsis; + color: var(--jp-ui-font-color1); + padding: 0 6px; +} + +.jp-mod-highlighted:hover { + background-color: var(--jp-layout-color3); +} + +.jp-mod-clicked { + background-color: var(--jp-brand-color1); +} + +.jp-mod-clicked:hover { + background-color: var(--jp-brand-color0); +} + +.jp-mod-clicked .jp-StatusBar-TextItem { + color: var(--jp-ui-inverse-font-color1); +} + +.jp-StatusBar-HoverItem { + box-shadow: '0px 4px 4px rgba(0, 0, 0, 0.25)'; +} + +.jp-StatusBar-TextItem { + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + line-height: 24px; + color: var(--jp-ui-font-color1); +} + +.jp-StatusBar-GroupItem { + display: flex; + align-items: center; + flex-direction: row; +} + +.jp-Statusbar-ProgressCircle svg { + display: block; + margin: 0 auto; + width: 16px; + height: 24px; + align-self: normal; +} + +.jp-Statusbar-ProgressCircle path { + fill: var(--jp-inverse-layout-color3); +} + +.jp-Statusbar-ProgressBar-progress-bar { + height: 10px; + width: 100px; + border: solid 0.25px var(--jp-brand-color2); + border-radius: 3px; + overflow: hidden; + align-self: center; +} + +.jp-Statusbar-ProgressBar-progress-bar > div { + background-color: var(--jp-brand-color2); + background-image: linear-gradient( + -45deg, + rgba(255, 255, 255, 0.2) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.2) 50%, + rgba(255, 255, 255, 0.2) 75%, + transparent 75%, + transparent + ); + background-size: 40px 40px; + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 14px; + color: #fff; + text-align: center; + animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite; +} + +.jp-Statusbar-ProgressBar-progress-bar p { + color: var(--jp-ui-font-color1); + font-family: var(--jp-ui-font-family); + font-size: var(--jp-ui-font-size1); + line-height: 10px; + width: 100px; +} + +@keyframes jp-Statusbar-ExecutionTime-progress-bar { + 0% { + background-position: 0 0; + } + + 100% { + background-position: 40px 40px; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-commandpalette-search-height: 28px; +} + +/*----------------------------------------------------------------------------- +| Overall styles +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + padding-bottom: 0; + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); +} + +/*----------------------------------------------------------------------------- +| Modal variant +|----------------------------------------------------------------------------*/ + +.jp-ModalCommandPalette { + position: absolute; + z-index: 10000; + top: 38px; + left: 30%; + margin: 0; + padding: 4px; + width: 40%; + box-shadow: var(--jp-elevation-z4); + border-radius: 4px; + background: var(--jp-layout-color0); +} + +.jp-ModalCommandPalette .lm-CommandPalette { + max-height: 40vh; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after { + display: none; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header { + display: none; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item { + margin-left: 4px; + margin-right: 4px; +} + +.jp-ModalCommandPalette + .lm-CommandPalette + .lm-CommandPalette-item.lm-mod-disabled { + display: none; +} + +/*----------------------------------------------------------------------------- +| Search +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette-search { + padding: 4px; + background-color: var(--jp-layout-color1); + z-index: 2; +} + +.lm-CommandPalette-wrapper { + overflow: overlay; + padding: 0 9px; + background-color: var(--jp-input-active-background); + height: 30px; + box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color); +} + +.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper { + box-shadow: inset 0 0 0 1px var(--jp-input-active-box-shadow-color), + inset 0 0 0 3px var(--jp-input-active-box-shadow-color); +} + +.jp-SearchIconGroup { + color: white; + background-color: var(--jp-brand-color1); + position: absolute; + top: 4px; + right: 4px; + padding: 5px 5px 1px; +} + +.jp-SearchIconGroup svg { + height: 20px; + width: 20px; +} + +.jp-SearchIconGroup .jp-icon3[fill] { + fill: var(--jp-layout-color0); +} + +.lm-CommandPalette-input { + background: transparent; + width: calc(100% - 18px); + float: left; + border: none; + outline: none; + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + line-height: var(--jp-private-commandpalette-search-height); +} + +.lm-CommandPalette-input::-webkit-input-placeholder, +.lm-CommandPalette-input::-moz-placeholder, +.lm-CommandPalette-input:-ms-input-placeholder { + color: var(--jp-ui-font-color2); + font-size: var(--jp-ui-font-size1); +} + +/*----------------------------------------------------------------------------- +| Results +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette-header:first-child { + margin-top: 0; +} + +.lm-CommandPalette-header { + border-bottom: solid var(--jp-border-width) var(--jp-border-color2); + color: var(--jp-ui-font-color1); + cursor: pointer; + display: flex; + font-size: var(--jp-ui-font-size0); + font-weight: 600; + letter-spacing: 1px; + margin-top: 8px; + padding: 8px 0 8px 12px; + text-transform: uppercase; +} + +.lm-CommandPalette-header.lm-mod-active { + background: var(--jp-layout-color2); +} + +.lm-CommandPalette-header > mark { + background-color: transparent; + font-weight: bold; + color: var(--jp-ui-font-color1); +} + +.lm-CommandPalette-item { + padding: 4px 12px 4px 4px; + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + font-weight: 400; + display: flex; +} + +.lm-CommandPalette-item.lm-mod-disabled { + color: var(--jp-ui-font-color2); +} + +.lm-CommandPalette-item.lm-mod-active { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark { + color: var(--jp-ui-inverse-font-color0); +} + +.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] { + fill: var(--jp-layout-color0); +} + +.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) { + background: var(--jp-layout-color2); +} + +.lm-CommandPalette-itemContent { + overflow: hidden; +} + +.lm-CommandPalette-itemLabel > mark { + color: var(--jp-ui-font-color0); + background-color: transparent; + font-weight: bold; +} + +.lm-CommandPalette-item.lm-mod-disabled mark { + color: var(--jp-ui-font-color2); +} + +.lm-CommandPalette-item .lm-CommandPalette-itemIcon { + margin: 0 4px 0 0; + position: relative; + width: 16px; + top: 2px; + flex: 0 0 auto; +} + +.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon { + opacity: 0.6; +} + +.lm-CommandPalette-item .lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemCaption { + display: none; +} + +.lm-CommandPalette-content { + background-color: var(--jp-layout-color1); +} + +.lm-CommandPalette-content:empty::after { + content: 'No results'; + margin: auto; + margin-top: 20px; + width: 100px; + display: block; + font-size: var(--jp-ui-font-size2); + font-family: var(--jp-ui-font-family); + font-weight: lighter; +} + +.lm-CommandPalette-emptyMessage { + text-align: center; + margin-top: 24px; + line-height: 1.32; + padding: 0 8px; + color: var(--jp-content-font-color3); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Dialog { + position: absolute; + z-index: 10000; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + top: 0; + left: 0; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + background: var(--jp-dialog-background); +} + +.jp-Dialog-content { + display: flex; + flex-direction: column; + margin-left: auto; + margin-right: auto; + background: var(--jp-layout-color1); + padding: 24px 24px 12px; + min-width: 300px; + min-height: 150px; + max-width: 1000px; + max-height: 500px; + box-sizing: border-box; + box-shadow: var(--jp-elevation-z20); + word-wrap: break-word; + border-radius: var(--jp-border-radius); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color1); + resize: both; +} + +.jp-Dialog-content.jp-Dialog-content-small { + max-width: 500px; +} + +.jp-Dialog-button { + overflow: visible; +} + +button.jp-Dialog-button:focus { + outline: 1px solid var(--jp-brand-color1); + outline-offset: 4px; + -moz-outline-radius: 0; +} + +button.jp-Dialog-button:focus::-moz-focus-inner { + border: 0; +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus, +button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus, +button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus { + outline-offset: 4px; + -moz-outline-radius: 0; +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus { + outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1)); +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus { + outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1)); +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus { + outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600)); +} + +button.jp-Dialog-close-button { + padding: 0; + height: 100%; + min-width: unset; + min-height: unset; +} + +.jp-Dialog-header { + display: flex; + justify-content: space-between; + flex: 0 0 auto; + padding-bottom: 12px; + font-size: var(--jp-ui-font-size3); + font-weight: 400; + color: var(--jp-ui-font-color1); +} + +.jp-Dialog-body { + display: flex; + flex-direction: column; + flex: 1 1 auto; + font-size: var(--jp-ui-font-size1); + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + overflow: auto; +} + +.jp-Dialog-footer { + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; + flex: 0 0 auto; + margin-left: -12px; + margin-right: -12px; + padding: 12px; +} + +.jp-Dialog-checkbox { + padding-right: 5px; +} + +.jp-Dialog-checkbox > input:focus-visible { + outline: 1px solid var(--jp-input-active-border-color); + outline-offset: 1px; +} + +.jp-Dialog-spacer { + flex: 1 1 auto; +} + +.jp-Dialog-title { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.jp-Dialog-body > .jp-select-wrapper { + width: 100%; +} + +.jp-Dialog-body > button { + padding: 0 16px; +} + +.jp-Dialog-body > label { + line-height: 1.4; + color: var(--jp-ui-font-color0); +} + +.jp-Dialog-button.jp-mod-styled:not(:last-child) { + margin-right: 12px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-Input-Boolean-Dialog { + flex-direction: row-reverse; + align-items: end; + width: 100%; +} + +.jp-Input-Boolean-Dialog > label { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-MainAreaWidget > :focus { + outline: none; +} + +.jp-MainAreaWidget .jp-MainAreaWidget-error { + padding: 6px; +} + +.jp-MainAreaWidget .jp-MainAreaWidget-error > pre { + width: auto; + padding: 10px; + background: var(--jp-error-color3); + border: var(--jp-border-width) solid var(--jp-error-color1); + border-radius: var(--jp-border-radius); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + white-space: pre-wrap; + word-wrap: break-word; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/** + * google-material-color v1.2.6 + * https://github.com/danlevan/google-material-color + */ +:root { + --md-red-50: #ffebee; + --md-red-100: #ffcdd2; + --md-red-200: #ef9a9a; + --md-red-300: #e57373; + --md-red-400: #ef5350; + --md-red-500: #f44336; + --md-red-600: #e53935; + --md-red-700: #d32f2f; + --md-red-800: #c62828; + --md-red-900: #b71c1c; + --md-red-A100: #ff8a80; + --md-red-A200: #ff5252; + --md-red-A400: #ff1744; + --md-red-A700: #d50000; + --md-pink-50: #fce4ec; + --md-pink-100: #f8bbd0; + --md-pink-200: #f48fb1; + --md-pink-300: #f06292; + --md-pink-400: #ec407a; + --md-pink-500: #e91e63; + --md-pink-600: #d81b60; + --md-pink-700: #c2185b; + --md-pink-800: #ad1457; + --md-pink-900: #880e4f; + --md-pink-A100: #ff80ab; + --md-pink-A200: #ff4081; + --md-pink-A400: #f50057; + --md-pink-A700: #c51162; + --md-purple-50: #f3e5f5; + --md-purple-100: #e1bee7; + --md-purple-200: #ce93d8; + --md-purple-300: #ba68c8; + --md-purple-400: #ab47bc; + --md-purple-500: #9c27b0; + --md-purple-600: #8e24aa; + --md-purple-700: #7b1fa2; + --md-purple-800: #6a1b9a; + --md-purple-900: #4a148c; + --md-purple-A100: #ea80fc; + --md-purple-A200: #e040fb; + --md-purple-A400: #d500f9; + --md-purple-A700: #a0f; + --md-deep-purple-50: #ede7f6; + --md-deep-purple-100: #d1c4e9; + --md-deep-purple-200: #b39ddb; + --md-deep-purple-300: #9575cd; + --md-deep-purple-400: #7e57c2; + --md-deep-purple-500: #673ab7; + --md-deep-purple-600: #5e35b1; + --md-deep-purple-700: #512da8; + --md-deep-purple-800: #4527a0; + --md-deep-purple-900: #311b92; + --md-deep-purple-A100: #b388ff; + --md-deep-purple-A200: #7c4dff; + --md-deep-purple-A400: #651fff; + --md-deep-purple-A700: #6200ea; + --md-indigo-50: #e8eaf6; + --md-indigo-100: #c5cae9; + --md-indigo-200: #9fa8da; + --md-indigo-300: #7986cb; + --md-indigo-400: #5c6bc0; + --md-indigo-500: #3f51b5; + --md-indigo-600: #3949ab; + --md-indigo-700: #303f9f; + --md-indigo-800: #283593; + --md-indigo-900: #1a237e; + --md-indigo-A100: #8c9eff; + --md-indigo-A200: #536dfe; + --md-indigo-A400: #3d5afe; + --md-indigo-A700: #304ffe; + --md-blue-50: #e3f2fd; + --md-blue-100: #bbdefb; + --md-blue-200: #90caf9; + --md-blue-300: #64b5f6; + --md-blue-400: #42a5f5; + --md-blue-500: #2196f3; + --md-blue-600: #1e88e5; + --md-blue-700: #1976d2; + --md-blue-800: #1565c0; + --md-blue-900: #0d47a1; + --md-blue-A100: #82b1ff; + --md-blue-A200: #448aff; + --md-blue-A400: #2979ff; + --md-blue-A700: #2962ff; + --md-light-blue-50: #e1f5fe; + --md-light-blue-100: #b3e5fc; + --md-light-blue-200: #81d4fa; + --md-light-blue-300: #4fc3f7; + --md-light-blue-400: #29b6f6; + --md-light-blue-500: #03a9f4; + --md-light-blue-600: #039be5; + --md-light-blue-700: #0288d1; + --md-light-blue-800: #0277bd; + --md-light-blue-900: #01579b; + --md-light-blue-A100: #80d8ff; + --md-light-blue-A200: #40c4ff; + --md-light-blue-A400: #00b0ff; + --md-light-blue-A700: #0091ea; + --md-cyan-50: #e0f7fa; + --md-cyan-100: #b2ebf2; + --md-cyan-200: #80deea; + --md-cyan-300: #4dd0e1; + --md-cyan-400: #26c6da; + --md-cyan-500: #00bcd4; + --md-cyan-600: #00acc1; + --md-cyan-700: #0097a7; + --md-cyan-800: #00838f; + --md-cyan-900: #006064; + --md-cyan-A100: #84ffff; + --md-cyan-A200: #18ffff; + --md-cyan-A400: #00e5ff; + --md-cyan-A700: #00b8d4; + --md-teal-50: #e0f2f1; + --md-teal-100: #b2dfdb; + --md-teal-200: #80cbc4; + --md-teal-300: #4db6ac; + --md-teal-400: #26a69a; + --md-teal-500: #009688; + --md-teal-600: #00897b; + --md-teal-700: #00796b; + --md-teal-800: #00695c; + --md-teal-900: #004d40; + --md-teal-A100: #a7ffeb; + --md-teal-A200: #64ffda; + --md-teal-A400: #1de9b6; + --md-teal-A700: #00bfa5; + --md-green-50: #e8f5e9; + --md-green-100: #c8e6c9; + --md-green-200: #a5d6a7; + --md-green-300: #81c784; + --md-green-400: #66bb6a; + --md-green-500: #4caf50; + --md-green-600: #43a047; + --md-green-700: #388e3c; + --md-green-800: #2e7d32; + --md-green-900: #1b5e20; + --md-green-A100: #b9f6ca; + --md-green-A200: #69f0ae; + --md-green-A400: #00e676; + --md-green-A700: #00c853; + --md-light-green-50: #f1f8e9; + --md-light-green-100: #dcedc8; + --md-light-green-200: #c5e1a5; + --md-light-green-300: #aed581; + --md-light-green-400: #9ccc65; + --md-light-green-500: #8bc34a; + --md-light-green-600: #7cb342; + --md-light-green-700: #689f38; + --md-light-green-800: #558b2f; + --md-light-green-900: #33691e; + --md-light-green-A100: #ccff90; + --md-light-green-A200: #b2ff59; + --md-light-green-A400: #76ff03; + --md-light-green-A700: #64dd17; + --md-lime-50: #f9fbe7; + --md-lime-100: #f0f4c3; + --md-lime-200: #e6ee9c; + --md-lime-300: #dce775; + --md-lime-400: #d4e157; + --md-lime-500: #cddc39; + --md-lime-600: #c0ca33; + --md-lime-700: #afb42b; + --md-lime-800: #9e9d24; + --md-lime-900: #827717; + --md-lime-A100: #f4ff81; + --md-lime-A200: #eeff41; + --md-lime-A400: #c6ff00; + --md-lime-A700: #aeea00; + --md-yellow-50: #fffde7; + --md-yellow-100: #fff9c4; + --md-yellow-200: #fff59d; + --md-yellow-300: #fff176; + --md-yellow-400: #ffee58; + --md-yellow-500: #ffeb3b; + --md-yellow-600: #fdd835; + --md-yellow-700: #fbc02d; + --md-yellow-800: #f9a825; + --md-yellow-900: #f57f17; + --md-yellow-A100: #ffff8d; + --md-yellow-A200: #ff0; + --md-yellow-A400: #ffea00; + --md-yellow-A700: #ffd600; + --md-amber-50: #fff8e1; + --md-amber-100: #ffecb3; + --md-amber-200: #ffe082; + --md-amber-300: #ffd54f; + --md-amber-400: #ffca28; + --md-amber-500: #ffc107; + --md-amber-600: #ffb300; + --md-amber-700: #ffa000; + --md-amber-800: #ff8f00; + --md-amber-900: #ff6f00; + --md-amber-A100: #ffe57f; + --md-amber-A200: #ffd740; + --md-amber-A400: #ffc400; + --md-amber-A700: #ffab00; + --md-orange-50: #fff3e0; + --md-orange-100: #ffe0b2; + --md-orange-200: #ffcc80; + --md-orange-300: #ffb74d; + --md-orange-400: #ffa726; + --md-orange-500: #ff9800; + --md-orange-600: #fb8c00; + --md-orange-700: #f57c00; + --md-orange-800: #ef6c00; + --md-orange-900: #e65100; + --md-orange-A100: #ffd180; + --md-orange-A200: #ffab40; + --md-orange-A400: #ff9100; + --md-orange-A700: #ff6d00; + --md-deep-orange-50: #fbe9e7; + --md-deep-orange-100: #ffccbc; + --md-deep-orange-200: #ffab91; + --md-deep-orange-300: #ff8a65; + --md-deep-orange-400: #ff7043; + --md-deep-orange-500: #ff5722; + --md-deep-orange-600: #f4511e; + --md-deep-orange-700: #e64a19; + --md-deep-orange-800: #d84315; + --md-deep-orange-900: #bf360c; + --md-deep-orange-A100: #ff9e80; + --md-deep-orange-A200: #ff6e40; + --md-deep-orange-A400: #ff3d00; + --md-deep-orange-A700: #dd2c00; + --md-brown-50: #efebe9; + --md-brown-100: #d7ccc8; + --md-brown-200: #bcaaa4; + --md-brown-300: #a1887f; + --md-brown-400: #8d6e63; + --md-brown-500: #795548; + --md-brown-600: #6d4c41; + --md-brown-700: #5d4037; + --md-brown-800: #4e342e; + --md-brown-900: #3e2723; + --md-grey-50: #fafafa; + --md-grey-100: #f5f5f5; + --md-grey-200: #eee; + --md-grey-300: #e0e0e0; + --md-grey-400: #bdbdbd; + --md-grey-500: #9e9e9e; + --md-grey-600: #757575; + --md-grey-700: #616161; + --md-grey-800: #424242; + --md-grey-900: #212121; + --md-blue-grey-50: #eceff1; + --md-blue-grey-100: #cfd8dc; + --md-blue-grey-200: #b0bec5; + --md-blue-grey-300: #90a4ae; + --md-blue-grey-400: #78909c; + --md-blue-grey-500: #607d8b; + --md-blue-grey-600: #546e7a; + --md-blue-grey-700: #455a64; + --md-blue-grey-800: #37474f; + --md-blue-grey-900: #263238; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| RenderedText +|----------------------------------------------------------------------------*/ + +:root { + /* This is the padding value to fill the gaps between lines containing spans with background color. */ + --jp-private-code-span-padding: calc( + (var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2 + ); +} + +.jp-RenderedText { + text-align: left; + padding-left: var(--jp-code-padding); + line-height: var(--jp-code-line-height); + font-family: var(--jp-code-font-family); +} + +.jp-RenderedText pre, +.jp-RenderedJavaScript pre, +.jp-RenderedHTMLCommon pre { + color: var(--jp-content-font-color1); + font-size: var(--jp-code-font-size); + border: none; + margin: 0; + padding: 0; +} + +.jp-RenderedText pre a:link { + text-decoration: none; + color: var(--jp-content-link-color); +} + +.jp-RenderedText pre a:hover { + text-decoration: underline; + color: var(--jp-content-link-color); +} + +.jp-RenderedText pre a:visited { + text-decoration: none; + color: var(--jp-content-link-color); +} + +/* console foregrounds and backgrounds */ +.jp-RenderedText pre .ansi-black-fg { + color: #3e424d; +} + +.jp-RenderedText pre .ansi-red-fg { + color: #e75c58; +} + +.jp-RenderedText pre .ansi-green-fg { + color: #00a250; +} + +.jp-RenderedText pre .ansi-yellow-fg { + color: #ddb62b; +} + +.jp-RenderedText pre .ansi-blue-fg { + color: #208ffb; +} + +.jp-RenderedText pre .ansi-magenta-fg { + color: #d160c4; +} + +.jp-RenderedText pre .ansi-cyan-fg { + color: #60c6c8; +} + +.jp-RenderedText pre .ansi-white-fg { + color: #c5c1b4; +} + +.jp-RenderedText pre .ansi-black-bg { + background-color: #3e424d; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-red-bg { + background-color: #e75c58; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-green-bg { + background-color: #00a250; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-yellow-bg { + background-color: #ddb62b; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-blue-bg { + background-color: #208ffb; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-magenta-bg { + background-color: #d160c4; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-cyan-bg { + background-color: #60c6c8; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-white-bg { + background-color: #c5c1b4; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-black-intense-fg { + color: #282c36; +} + +.jp-RenderedText pre .ansi-red-intense-fg { + color: #b22b31; +} + +.jp-RenderedText pre .ansi-green-intense-fg { + color: #007427; +} + +.jp-RenderedText pre .ansi-yellow-intense-fg { + color: #b27d12; +} + +.jp-RenderedText pre .ansi-blue-intense-fg { + color: #0065ca; +} + +.jp-RenderedText pre .ansi-magenta-intense-fg { + color: #a03196; +} + +.jp-RenderedText pre .ansi-cyan-intense-fg { + color: #258f8f; +} + +.jp-RenderedText pre .ansi-white-intense-fg { + color: #a1a6b2; +} + +.jp-RenderedText pre .ansi-black-intense-bg { + background-color: #282c36; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-red-intense-bg { + background-color: #b22b31; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-green-intense-bg { + background-color: #007427; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-yellow-intense-bg { + background-color: #b27d12; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-blue-intense-bg { + background-color: #0065ca; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-magenta-intense-bg { + background-color: #a03196; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-cyan-intense-bg { + background-color: #258f8f; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-white-intense-bg { + background-color: #a1a6b2; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-default-inverse-fg { + color: var(--jp-ui-inverse-font-color0); +} + +.jp-RenderedText pre .ansi-default-inverse-bg { + background-color: var(--jp-inverse-layout-color0); + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-bold { + font-weight: bold; +} + +.jp-RenderedText pre .ansi-underline { + text-decoration: underline; +} + +.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] { + background: var(--jp-rendermime-error-background); + padding-top: var(--jp-code-padding); +} + +/*----------------------------------------------------------------------------- +| RenderedLatex +|----------------------------------------------------------------------------*/ + +.jp-RenderedLatex { + color: var(--jp-content-font-color1); + font-size: var(--jp-content-font-size1); + line-height: var(--jp-content-line-height); +} + +/* Left-justify outputs.*/ +.jp-OutputArea-output.jp-RenderedLatex { + padding: var(--jp-code-padding); + text-align: left; +} + +/*----------------------------------------------------------------------------- +| RenderedHTML +|----------------------------------------------------------------------------*/ + +.jp-RenderedHTMLCommon { + color: var(--jp-content-font-color1); + font-family: var(--jp-content-font-family); + font-size: var(--jp-content-font-size1); + line-height: var(--jp-content-line-height); + + /* Give a bit more R padding on Markdown text to keep line lengths reasonable */ + padding-right: 20px; +} + +.jp-RenderedHTMLCommon em { + font-style: italic; +} + +.jp-RenderedHTMLCommon strong { + font-weight: bold; +} + +.jp-RenderedHTMLCommon u { + text-decoration: underline; +} + +.jp-RenderedHTMLCommon a:link { + text-decoration: none; + color: var(--jp-content-link-color); +} + +.jp-RenderedHTMLCommon a:hover { + text-decoration: underline; + color: var(--jp-content-link-color); +} + +.jp-RenderedHTMLCommon a:visited { + text-decoration: none; + color: var(--jp-content-link-color); +} + +/* Headings */ + +.jp-RenderedHTMLCommon h1, +.jp-RenderedHTMLCommon h2, +.jp-RenderedHTMLCommon h3, +.jp-RenderedHTMLCommon h4, +.jp-RenderedHTMLCommon h5, +.jp-RenderedHTMLCommon h6 { + line-height: var(--jp-content-heading-line-height); + font-weight: var(--jp-content-heading-font-weight); + font-style: normal; + margin: var(--jp-content-heading-margin-top) 0 + var(--jp-content-heading-margin-bottom) 0; +} + +.jp-RenderedHTMLCommon h1:first-child, +.jp-RenderedHTMLCommon h2:first-child, +.jp-RenderedHTMLCommon h3:first-child, +.jp-RenderedHTMLCommon h4:first-child, +.jp-RenderedHTMLCommon h5:first-child, +.jp-RenderedHTMLCommon h6:first-child { + margin-top: calc(0.5 * var(--jp-content-heading-margin-top)); +} + +.jp-RenderedHTMLCommon h1:last-child, +.jp-RenderedHTMLCommon h2:last-child, +.jp-RenderedHTMLCommon h3:last-child, +.jp-RenderedHTMLCommon h4:last-child, +.jp-RenderedHTMLCommon h5:last-child, +.jp-RenderedHTMLCommon h6:last-child { + margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom)); +} + +.jp-RenderedHTMLCommon h1 { + font-size: var(--jp-content-font-size5); +} + +.jp-RenderedHTMLCommon h2 { + font-size: var(--jp-content-font-size4); +} + +.jp-RenderedHTMLCommon h3 { + font-size: var(--jp-content-font-size3); +} + +.jp-RenderedHTMLCommon h4 { + font-size: var(--jp-content-font-size2); +} + +.jp-RenderedHTMLCommon h5 { + font-size: var(--jp-content-font-size1); +} + +.jp-RenderedHTMLCommon h6 { + font-size: var(--jp-content-font-size0); +} + +/* Lists */ + +/* stylelint-disable selector-max-type, selector-max-compound-selectors */ + +.jp-RenderedHTMLCommon ul:not(.list-inline), +.jp-RenderedHTMLCommon ol:not(.list-inline) { + padding-left: 2em; +} + +.jp-RenderedHTMLCommon ul { + list-style: disc; +} + +.jp-RenderedHTMLCommon ul ul { + list-style: square; +} + +.jp-RenderedHTMLCommon ul ul ul { + list-style: circle; +} + +.jp-RenderedHTMLCommon ol { + list-style: decimal; +} + +.jp-RenderedHTMLCommon ol ol { + list-style: upper-alpha; +} + +.jp-RenderedHTMLCommon ol ol ol { + list-style: lower-alpha; +} + +.jp-RenderedHTMLCommon ol ol ol ol { + list-style: lower-roman; +} + +.jp-RenderedHTMLCommon ol ol ol ol ol { + list-style: decimal; +} + +.jp-RenderedHTMLCommon ol, +.jp-RenderedHTMLCommon ul { + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon ul ul, +.jp-RenderedHTMLCommon ul ol, +.jp-RenderedHTMLCommon ol ul, +.jp-RenderedHTMLCommon ol ol { + margin-bottom: 0; +} + +/* stylelint-enable selector-max-type, selector-max-compound-selectors */ + +.jp-RenderedHTMLCommon hr { + color: var(--jp-border-color2); + background-color: var(--jp-border-color1); + margin-top: 1em; + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon > pre { + margin: 1.5em 2em; +} + +.jp-RenderedHTMLCommon pre, +.jp-RenderedHTMLCommon code { + border: 0; + background-color: var(--jp-layout-color0); + color: var(--jp-content-font-color1); + font-family: var(--jp-code-font-family); + font-size: inherit; + line-height: var(--jp-code-line-height); + padding: 0; + white-space: pre-wrap; +} + +.jp-RenderedHTMLCommon :not(pre) > code { + background-color: var(--jp-layout-color2); + padding: 1px 5px; +} + +/* Tables */ + +.jp-RenderedHTMLCommon table { + border-collapse: collapse; + border-spacing: 0; + border: none; + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + table-layout: fixed; + margin-left: auto; + margin-bottom: 1em; + margin-right: auto; +} + +.jp-RenderedHTMLCommon thead { + border-bottom: var(--jp-border-width) solid var(--jp-border-color1); + vertical-align: bottom; +} + +.jp-RenderedHTMLCommon td, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon tr { + vertical-align: middle; + padding: 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} + +.jp-RenderedMarkdown.jp-RenderedHTMLCommon td, +.jp-RenderedMarkdown.jp-RenderedHTMLCommon th { + max-width: none; +} + +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td, +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th, +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr { + text-align: right; +} + +.jp-RenderedHTMLCommon th { + font-weight: bold; +} + +.jp-RenderedHTMLCommon tbody tr:nth-child(odd) { + background: var(--jp-layout-color0); +} + +.jp-RenderedHTMLCommon tbody tr:nth-child(even) { + background: var(--jp-rendermime-table-row-background); +} + +.jp-RenderedHTMLCommon tbody tr:hover { + background: var(--jp-rendermime-table-row-hover-background); +} + +.jp-RenderedHTMLCommon p { + text-align: left; + margin: 0; + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon img { + -moz-force-broken-image-icon: 1; +} + +/* Restrict to direct children as other images could be nested in other content. */ +.jp-RenderedHTMLCommon > img { + display: block; + margin-left: 0; + margin-right: 0; + margin-bottom: 1em; +} + +/* Change color behind transparent images if they need it... */ +[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background { + background-color: var(--jp-inverse-layout-color1); +} + +[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background { + background-color: var(--jp-inverse-layout-color1); +} + +.jp-RenderedHTMLCommon img, +.jp-RenderedImage img, +.jp-RenderedHTMLCommon svg, +.jp-RenderedSVG svg { + max-width: 100%; + height: auto; +} + +.jp-RenderedHTMLCommon img.jp-mod-unconfined, +.jp-RenderedImage img.jp-mod-unconfined, +.jp-RenderedHTMLCommon svg.jp-mod-unconfined, +.jp-RenderedSVG svg.jp-mod-unconfined { + max-width: none; +} + +.jp-RenderedHTMLCommon .alert { + padding: var(--jp-notebook-padding); + border: var(--jp-border-width) solid transparent; + border-radius: var(--jp-border-radius); + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon .alert-info { + color: var(--jp-info-color0); + background-color: var(--jp-info-color3); + border-color: var(--jp-info-color2); +} + +.jp-RenderedHTMLCommon .alert-info hr { + border-color: var(--jp-info-color3); +} + +.jp-RenderedHTMLCommon .alert-info > p:last-child, +.jp-RenderedHTMLCommon .alert-info > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-warning { + color: var(--jp-warn-color0); + background-color: var(--jp-warn-color3); + border-color: var(--jp-warn-color2); +} + +.jp-RenderedHTMLCommon .alert-warning hr { + border-color: var(--jp-warn-color3); +} + +.jp-RenderedHTMLCommon .alert-warning > p:last-child, +.jp-RenderedHTMLCommon .alert-warning > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-success { + color: var(--jp-success-color0); + background-color: var(--jp-success-color3); + border-color: var(--jp-success-color2); +} + +.jp-RenderedHTMLCommon .alert-success hr { + border-color: var(--jp-success-color3); +} + +.jp-RenderedHTMLCommon .alert-success > p:last-child, +.jp-RenderedHTMLCommon .alert-success > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-danger { + color: var(--jp-error-color0); + background-color: var(--jp-error-color3); + border-color: var(--jp-error-color2); +} + +.jp-RenderedHTMLCommon .alert-danger hr { + border-color: var(--jp-error-color3); +} + +.jp-RenderedHTMLCommon .alert-danger > p:last-child, +.jp-RenderedHTMLCommon .alert-danger > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon blockquote { + margin: 1em 2em; + padding: 0 1em; + border-left: 5px solid var(--jp-border-color2); +} + +a.jp-InternalAnchorLink { + visibility: hidden; + margin-left: 8px; + color: var(--md-blue-800); +} + +h1:hover .jp-InternalAnchorLink, +h2:hover .jp-InternalAnchorLink, +h3:hover .jp-InternalAnchorLink, +h4:hover .jp-InternalAnchorLink, +h5:hover .jp-InternalAnchorLink, +h6:hover .jp-InternalAnchorLink { + visibility: visible; +} + +.jp-RenderedHTMLCommon kbd { + background-color: var(--jp-rendermime-table-row-background); + border: 1px solid var(--jp-border-color0); + border-bottom-color: var(--jp-border-color2); + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + display: inline-block; + font-size: var(--jp-ui-font-size0); + line-height: 1em; + padding: 0.2em 0.5em; +} + +/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0. + * At the bottom of cells this is a bit too much as there is also spacing + * between cells. Going all the way to 0 gets too tight between markdown and + * code cells. + */ +.jp-RenderedHTMLCommon > *:last-child { + margin-bottom: 0.5em; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-cursor-backdrop { + position: fixed; + width: 200px; + height: 200px; + margin-top: -100px; + margin-left: -100px; + will-change: transform; + z-index: 100; +} + +.lm-mod-drag-image { + will-change: transform; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-lineFormSearch { + padding: 4px 12px; + background-color: var(--jp-layout-color2); + box-shadow: var(--jp-toolbar-box-shadow); + z-index: 2; + font-size: var(--jp-ui-font-size1); +} + +.jp-lineFormCaption { + font-size: var(--jp-ui-font-size0); + line-height: var(--jp-ui-font-size1); + margin-top: 4px; + color: var(--jp-ui-font-color0); +} + +.jp-baseLineForm { + border: none; + border-radius: 0; + position: absolute; + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + outline: none; +} + +.jp-lineFormButtonContainer { + top: 4px; + right: 8px; + height: 24px; + padding: 0 12px; + width: 12px; +} + +.jp-lineFormButtonIcon { + top: 0; + right: 0; + background-color: var(--jp-brand-color1); + height: 100%; + width: 100%; + box-sizing: border-box; + padding: 4px 6px; +} + +.jp-lineFormButton { + top: 0; + right: 0; + background-color: transparent; + height: 100%; + width: 100%; + box-sizing: border-box; +} + +.jp-lineFormWrapper { + overflow: hidden; + padding: 0 8px; + border: 1px solid var(--jp-border-color0); + background-color: var(--jp-input-active-background); + height: 22px; +} + +.jp-lineFormWrapperFocusWithin { + border: var(--jp-border-width) solid var(--md-blue-500); + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-lineFormInput { + background: transparent; + width: 200px; + height: 100%; + border: none; + outline: none; + color: var(--jp-ui-font-color0); + line-height: 28px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-JSONEditor { + display: flex; + flex-direction: column; + width: 100%; +} + +.jp-JSONEditor-host { + flex: 1 1 auto; + border: var(--jp-border-width) solid var(--jp-input-border-color); + border-radius: 0; + background: var(--jp-layout-color0); + min-height: 50px; + padding: 1px; +} + +.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host { + border-color: red; + outline-color: red; +} + +.jp-JSONEditor-header { + display: flex; + flex: 1 0 auto; + padding: 0 0 0 12px; +} + +.jp-JSONEditor-header label { + flex: 0 0 auto; +} + +.jp-JSONEditor-commitButton { + height: 16px; + width: 16px; + background-size: 18px; + background-repeat: no-repeat; + background-position: center; +} + +.jp-JSONEditor-host.jp-mod-focused { + background-color: var(--jp-input-active-background); + border: 1px solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); +} + +.jp-Editor.jp-mod-dropTarget { + border: var(--jp-border-width) solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ +.jp-DocumentSearch-input { + border: none; + outline: none; + color: var(--jp-ui-font-color0); + font-size: var(--jp-ui-font-size1); + background-color: var(--jp-layout-color0); + font-family: var(--jp-ui-font-family); + padding: 2px 1px; + resize: none; +} + +.jp-DocumentSearch-overlay { + position: absolute; + background-color: var(--jp-toolbar-background); + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color); + top: 0; + right: 0; + z-index: 7; + min-width: 405px; + padding: 2px; + font-size: var(--jp-ui-font-size1); + + --jp-private-document-search-button-height: 20px; +} + +.jp-DocumentSearch-overlay button { + background-color: var(--jp-toolbar-background); + outline: 0; +} + +.jp-DocumentSearch-overlay button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-overlay button:active { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-overlay-row { + display: flex; + align-items: center; + margin-bottom: 2px; +} + +.jp-DocumentSearch-button-content { + display: inline-block; + cursor: pointer; + box-sizing: border-box; + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-button-content svg { + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-input-wrapper { + border: var(--jp-border-width) solid var(--jp-border-color0); + display: flex; + background-color: var(--jp-layout-color0); + margin: 2px; +} + +.jp-DocumentSearch-input-wrapper:focus-within { + border-color: var(--jp-cell-editor-active-border-color); +} + +.jp-DocumentSearch-toggle-wrapper, +.jp-DocumentSearch-button-wrapper { + all: initial; + overflow: hidden; + display: inline-block; + border: none; + box-sizing: border-box; +} + +.jp-DocumentSearch-toggle-wrapper { + width: 14px; + height: 14px; +} + +.jp-DocumentSearch-button-wrapper { + width: var(--jp-private-document-search-button-height); + height: var(--jp-private-document-search-button-height); +} + +.jp-DocumentSearch-toggle-wrapper:focus, +.jp-DocumentSearch-button-wrapper:focus { + outline: var(--jp-border-width) solid + var(--jp-cell-editor-active-border-color); + outline-offset: -1px; +} + +.jp-DocumentSearch-toggle-wrapper, +.jp-DocumentSearch-button-wrapper, +.jp-DocumentSearch-button-content:focus { + outline: none; +} + +.jp-DocumentSearch-toggle-placeholder { + width: 5px; +} + +.jp-DocumentSearch-input-button::before { + display: block; + padding-top: 100%; +} + +.jp-DocumentSearch-input-button-off { + opacity: var(--jp-search-toggle-off-opacity); +} + +.jp-DocumentSearch-input-button-off:hover { + opacity: var(--jp-search-toggle-hover-opacity); +} + +.jp-DocumentSearch-input-button-on { + opacity: var(--jp-search-toggle-on-opacity); +} + +.jp-DocumentSearch-index-counter { + padding-left: 10px; + padding-right: 10px; + user-select: none; + min-width: 35px; + display: inline-block; +} + +.jp-DocumentSearch-up-down-wrapper { + display: inline-block; + padding-right: 2px; + margin-left: auto; + white-space: nowrap; +} + +.jp-DocumentSearch-spacer { + margin-left: auto; +} + +.jp-DocumentSearch-up-down-wrapper button { + outline: 0; + border: none; + width: var(--jp-private-document-search-button-height); + height: var(--jp-private-document-search-button-height); + vertical-align: middle; + margin: 1px 5px 2px; +} + +.jp-DocumentSearch-up-down-button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-up-down-button:active { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-filter-button { + border-radius: var(--jp-border-radius); +} + +.jp-DocumentSearch-filter-button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-filter-button-enabled { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-filter-button-enabled:hover { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-search-options { + padding: 0 8px; + margin-left: 3px; + width: 100%; + display: grid; + justify-content: start; + grid-template-columns: 1fr 1fr; + align-items: center; + justify-items: stretch; +} + +.jp-DocumentSearch-search-filter-disabled { + color: var(--jp-ui-font-color2); +} + +.jp-DocumentSearch-search-filter { + display: flex; + align-items: center; + user-select: none; +} + +.jp-DocumentSearch-regex-error { + color: var(--jp-error-color0); +} + +.jp-DocumentSearch-replace-button-wrapper { + overflow: hidden; + display: inline-block; + box-sizing: border-box; + border: var(--jp-border-width) solid var(--jp-border-color0); + margin: auto 2px; + padding: 1px 4px; + height: calc(var(--jp-private-document-search-button-height) + 2px); +} + +.jp-DocumentSearch-replace-button-wrapper:focus { + border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color); +} + +.jp-DocumentSearch-replace-button { + display: inline-block; + text-align: center; + cursor: pointer; + box-sizing: border-box; + color: var(--jp-ui-font-color1); + + /* height - 2 * (padding of wrapper) */ + line-height: calc(var(--jp-private-document-search-button-height) - 2px); + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-replace-button:focus { + outline: none; +} + +.jp-DocumentSearch-replace-wrapper-class { + margin-left: 14px; + display: flex; +} + +.jp-DocumentSearch-replace-toggle { + border: none; + background-color: var(--jp-toolbar-background); + border-radius: var(--jp-border-radius); +} + +.jp-DocumentSearch-replace-toggle:hover { + background-color: var(--jp-layout-color2); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.cm-editor { + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + font-family: var(--jp-code-font-family); + border: 0; + border-radius: 0; + height: auto; + + /* Changed to auto to autogrow */ +} + +.cm-editor pre { + padding: 0 var(--jp-code-padding); +} + +.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog { + background-color: var(--jp-layout-color0); + color: var(--jp-content-font-color1); +} + +.jp-CodeMirrorEditor { + cursor: text; +} + +/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */ +@media screen and (min-width: 2138px) and (max-width: 4319px) { + .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor { + border-left: var(--jp-code-cursor-width1) solid + var(--jp-editor-cursor-color); + } +} + +/* When zoomed out less than 33% */ +@media screen and (min-width: 4320px) { + .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor { + border-left: var(--jp-code-cursor-width2) solid + var(--jp-editor-cursor-color); + } +} + +.cm-editor.jp-mod-readOnly .cm-cursor { + display: none; +} + +.jp-CollaboratorCursor { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: none; + border-bottom: 3px solid; + background-clip: content-box; + margin-left: -5px; + margin-right: -5px; +} + +.cm-searching, +.cm-searching span { + /* `.cm-searching span`: we need to override syntax highlighting */ + background-color: var(--jp-search-unselected-match-background-color); + color: var(--jp-search-unselected-match-color); +} + +.cm-searching::selection, +.cm-searching span::selection { + background-color: var(--jp-search-unselected-match-background-color); + color: var(--jp-search-unselected-match-color); +} + +.jp-current-match > .cm-searching, +.jp-current-match > .cm-searching span, +.cm-searching > .jp-current-match, +.cm-searching > .jp-current-match span { + background-color: var(--jp-search-selected-match-background-color); + color: var(--jp-search-selected-match-color); +} + +.jp-current-match > .cm-searching::selection, +.cm-searching > .jp-current-match::selection, +.jp-current-match > .cm-searching span::selection { + background-color: var(--jp-search-selected-match-background-color); + color: var(--jp-search-selected-match-color); +} + +.cm-trailingspace { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=); + background-position: center left; + background-repeat: repeat-x; +} + +.jp-CollaboratorCursor-hover { + position: absolute; + z-index: 1; + transform: translateX(-50%); + color: white; + border-radius: 3px; + padding-left: 4px; + padding-right: 4px; + padding-top: 1px; + padding-bottom: 1px; + text-align: center; + font-size: var(--jp-ui-font-size1); + white-space: nowrap; +} + +.jp-CodeMirror-ruler { + border-left: 1px dashed var(--jp-border-color2); +} + +/* Styles for shared cursors (remote cursor locations and selected ranges) */ +.jp-CodeMirrorEditor .cm-ySelectionCaret { + position: relative; + border-left: 1px solid black; + margin-left: -1px; + margin-right: -1px; + box-sizing: border-box; +} + +.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo { + white-space: nowrap; + position: absolute; + top: -1.15em; + padding-bottom: 0.05em; + left: -1px; + font-size: 0.95em; + font-family: var(--jp-ui-font-family); + font-weight: bold; + line-height: normal; + user-select: none; + color: white; + padding-left: 2px; + padding-right: 2px; + z-index: 101; + transition: opacity 0.3s ease-in-out; +} + +.jp-CodeMirrorEditor .cm-ySelectionInfo { + transition-delay: 0.7s; + opacity: 0; +} + +.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo { + opacity: 1; + transition-delay: 0s; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-MimeDocument { + outline: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-filebrowser-button-height: 28px; + --jp-private-filebrowser-button-width: 48px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-FileBrowser .jp-SidePanel-content { + display: flex; + flex-direction: column; +} + +.jp-FileBrowser-toolbar.jp-Toolbar { + flex-wrap: wrap; + row-gap: 12px; + border-bottom: none; + height: auto; + margin: 8px 12px 0; + box-shadow: none; + padding: 0; + justify-content: flex-start; +} + +.jp-FileBrowser-Panel { + flex: 1 1 auto; + display: flex; + flex-direction: column; +} + +.jp-BreadCrumbs { + flex: 0 0 auto; + margin: 8px 12px; +} + +.jp-BreadCrumbs-item { + margin: 0 2px; + padding: 0 2px; + border-radius: var(--jp-border-radius); + cursor: pointer; +} + +.jp-BreadCrumbs-item:hover { + background-color: var(--jp-layout-color2); +} + +.jp-BreadCrumbs-item:first-child { + margin-left: 0; +} + +.jp-BreadCrumbs-item.jp-mod-dropTarget { + background-color: var(--jp-brand-color2); + opacity: 0.7; +} + +/*----------------------------------------------------------------------------- +| Buttons +|----------------------------------------------------------------------------*/ + +.jp-FileBrowser-toolbar > .jp-Toolbar-item { + flex: 0 0 auto; + padding-left: 0; + padding-right: 2px; + align-items: center; + height: unset; +} + +.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent { + width: 40px; +} + +/*----------------------------------------------------------------------------- +| Other styles +|----------------------------------------------------------------------------*/ + +.jp-FileDialog.jp-mod-conflict input { + color: var(--jp-error-color1); +} + +.jp-FileDialog .jp-new-name-title { + margin-top: 12px; +} + +.jp-LastModified-hidden { + display: none; +} + +.jp-FileSize-hidden { + display: none; +} + +.jp-FileBrowser .lm-AccordionPanel > h3:first-child { + display: none; +} + +/*----------------------------------------------------------------------------- +| DirListing +|----------------------------------------------------------------------------*/ + +.jp-DirListing { + flex: 1 1 auto; + display: flex; + flex-direction: column; + outline: 0; +} + +.jp-DirListing-header { + flex: 0 0 auto; + display: flex; + flex-direction: row; + align-items: center; + overflow: hidden; + border-top: var(--jp-border-width) solid var(--jp-border-color2); + border-bottom: var(--jp-border-width) solid var(--jp-border-color1); + box-shadow: var(--jp-toolbar-box-shadow); + z-index: 2; +} + +.jp-DirListing-headerItem { + padding: 4px 12px 2px; + font-weight: 500; +} + +.jp-DirListing-headerItem:hover { + background: var(--jp-layout-color2); +} + +.jp-DirListing-headerItem.jp-id-name { + flex: 1 0 84px; +} + +.jp-DirListing-headerItem.jp-id-modified { + flex: 0 0 112px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; +} + +.jp-DirListing-headerItem.jp-id-filesize { + flex: 0 0 75px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; +} + +.jp-id-narrow { + display: none; + flex: 0 0 5px; + padding: 4px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; + color: var(--jp-border-color2); +} + +.jp-DirListing-narrow .jp-id-narrow { + display: block; +} + +.jp-DirListing-narrow .jp-id-modified, +.jp-DirListing-narrow .jp-DirListing-itemModified { + display: none; +} + +.jp-DirListing-headerItem.jp-mod-selected { + font-weight: 600; +} + +/* increase specificity to override bundled default */ +.jp-DirListing-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + list-style-type: none; + overflow: auto; + background-color: var(--jp-layout-color1); +} + +.jp-DirListing-content mark { + color: var(--jp-ui-font-color0); + background-color: transparent; + font-weight: bold; +} + +.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark { + color: var(--jp-ui-inverse-font-color0); +} + +/* Style the directory listing content when a user drops a file to upload */ +.jp-DirListing.jp-mod-native-drop .jp-DirListing-content { + outline: 5px dashed rgba(128, 128, 128, 0.5); + outline-offset: -10px; + cursor: copy; +} + +.jp-DirListing-item { + display: flex; + flex-direction: row; + align-items: center; + padding: 4px 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-DirListing-checkboxWrapper { + /* Increases hit area of checkbox. */ + padding: 4px; +} + +.jp-DirListing-header + .jp-DirListing-checkboxWrapper + + .jp-DirListing-headerItem { + padding-left: 4px; +} + +.jp-DirListing-content .jp-DirListing-checkboxWrapper { + position: relative; + left: -4px; + margin: -4px 0 -4px -8px; +} + +.jp-DirListing-checkboxWrapper.jp-mod-visible { + visibility: visible; +} + +/* For devices that support hovering, hide checkboxes until hovered, selected... +*/ +@media (hover: hover) { + .jp-DirListing-checkboxWrapper { + visibility: hidden; + } + + .jp-DirListing-item:hover .jp-DirListing-checkboxWrapper, + .jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper { + visibility: visible; + } +} + +.jp-DirListing-item[data-is-dot] { + opacity: 75%; +} + +.jp-DirListing-item.jp-mod-selected { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.jp-DirListing-item.jp-mod-dropTarget { + background: var(--jp-brand-color3); +} + +.jp-DirListing-item:hover:not(.jp-mod-selected) { + background: var(--jp-layout-color2); +} + +.jp-DirListing-itemIcon { + flex: 0 0 20px; + margin-right: 4px; +} + +.jp-DirListing-itemText { + flex: 1 0 64px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + user-select: none; +} + +.jp-DirListing-itemText:focus { + outline-width: 2px; + outline-color: var(--jp-inverse-layout-color1); + outline-style: solid; + outline-offset: 1px; +} + +.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemText:focus { + outline-color: var(--jp-layout-color1); +} + +.jp-DirListing-itemModified { + flex: 0 0 125px; + text-align: right; +} + +.jp-DirListing-itemFileSize { + flex: 0 0 90px; + text-align: right; +} + +.jp-DirListing-editor { + flex: 1 0 64px; + outline: none; + border: none; + color: var(--jp-ui-font-color1); + background-color: var(--jp-layout-color1); +} + +.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before { + color: var(--jp-success-color1); + content: '\25CF'; + font-size: 8px; + position: absolute; + left: -8px; +} + +.jp-DirListing-item.jp-mod-running.jp-mod-selected + .jp-DirListing-itemIcon::before { + color: var(--jp-ui-inverse-font-color1); +} + +.jp-DirListing-item.lm-mod-drag-image, +.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image { + font-size: var(--jp-ui-font-size1); + padding-left: 4px; + margin-left: 4px; + width: 160px; + background-color: var(--jp-ui-inverse-font-color2); + box-shadow: var(--jp-elevation-z2); + border-radius: 0; + color: var(--jp-ui-font-color1); + transform: translateX(-40%) translateY(-58%); +} + +.jp-Document { + min-width: 120px; + min-height: 120px; + outline: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Main OutputArea +| OutputArea has a list of Outputs +|----------------------------------------------------------------------------*/ + +.jp-OutputArea { + overflow-y: auto; +} + +.jp-OutputArea-child { + display: table; + table-layout: fixed; + width: 100%; + overflow: hidden; +} + +.jp-OutputPrompt { + width: var(--jp-cell-prompt-width); + color: var(--jp-cell-outprompt-font-color); + font-family: var(--jp-cell-prompt-font-family); + padding: var(--jp-code-padding); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; + opacity: var(--jp-cell-prompt-opacity); + + /* Right align prompt text, don't wrap to handle large prompt numbers */ + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + /* Disable text selection */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-OutputArea-prompt { + display: table-cell; + vertical-align: top; +} + +.jp-OutputArea-output { + display: table-cell; + width: 100%; + height: auto; + overflow: auto; + user-select: text; + -moz-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; +} + +.jp-OutputArea .jp-RenderedText { + padding-left: 1ch; +} + +/** + * Prompt overlay. + */ + +.jp-OutputArea-promptOverlay { + position: absolute; + top: 0; + width: var(--jp-cell-prompt-width); + height: 100%; + opacity: 0.5; +} + +.jp-OutputArea-promptOverlay:hover { + background: var(--jp-layout-color2); + box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0); + cursor: zoom-out; +} + +.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay:hover { + cursor: zoom-in; +} + +/** + * Isolated output. + */ +.jp-OutputArea-output.jp-mod-isolated { + width: 100%; + display: block; +} + +/* +When drag events occur, `lm-mod-override-cursor` is added to the body. +Because iframes steal all cursor events, the following two rules are necessary +to suppress pointer events while resize drags are occurring. There may be a +better solution to this problem. +*/ +body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated { + position: relative; +} + +body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/* pre */ + +.jp-OutputArea-output pre { + border: none; + margin: 0; + padding: 0; + overflow-x: auto; + overflow-y: auto; + word-break: break-all; + word-wrap: break-word; + white-space: pre-wrap; +} + +/* tables */ + +.jp-OutputArea-output.jp-RenderedHTMLCommon table { + margin-left: 0; + margin-right: 0; +} + +/* description lists */ + +.jp-OutputArea-output dl, +.jp-OutputArea-output dt, +.jp-OutputArea-output dd { + display: block; +} + +.jp-OutputArea-output dl { + width: 100%; + overflow: hidden; + padding: 0; + margin: 0; +} + +.jp-OutputArea-output dt { + font-weight: bold; + float: left; + width: 20%; + padding: 0; + margin: 0; +} + +.jp-OutputArea-output dd { + float: left; + width: 80%; + padding: 0; + margin: 0; +} + +.jp-TrimmedOutputs pre { + background: var(--jp-layout-color3); + font-size: calc(var(--jp-code-font-size) * 1.4); + text-align: center; + text-transform: uppercase; +} + +/* Hide the gutter in case of + * - nested output areas (e.g. in the case of output widgets) + * - mirrored output areas + */ +.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt { + display: none; +} + +/* Hide empty lines in the output area, for instance due to cleared widgets */ +.jp-OutputArea-prompt:empty { + padding: 0; + border: 0; +} + +/*----------------------------------------------------------------------------- +| executeResult is added to any Output-result for the display of the object +| returned by a cell +|----------------------------------------------------------------------------*/ + +.jp-OutputArea-output.jp-OutputArea-executeResult { + margin-left: 0; + width: 100%; +} + +/* Text output with the Out[] prompt needs a top padding to match the + * alignment of the Out[] prompt itself. + */ +.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output { + padding-top: var(--jp-code-padding); + border-top: var(--jp-border-width) solid transparent; +} + +/*----------------------------------------------------------------------------- +| The Stdin output +|----------------------------------------------------------------------------*/ + +.jp-Stdin-prompt { + color: var(--jp-content-font-color0); + padding-right: var(--jp-code-padding); + vertical-align: baseline; + flex: 0 0 auto; +} + +.jp-Stdin-input { + font-family: var(--jp-code-font-family); + font-size: inherit; + color: inherit; + background-color: inherit; + width: 42%; + min-width: 200px; + + /* make sure input baseline aligns with prompt */ + vertical-align: baseline; + + /* padding + margin = 0.5em between prompt and cursor */ + padding: 0 0.25em; + margin: 0 0.25em; + flex: 0 0 70%; +} + +.jp-Stdin-input::placeholder { + opacity: 0; +} + +.jp-Stdin-input:focus { + box-shadow: none; +} + +.jp-Stdin-input:focus::placeholder { + opacity: 1; +} + +/*----------------------------------------------------------------------------- +| Output Area View +|----------------------------------------------------------------------------*/ + +.jp-LinkedOutputView .jp-OutputArea { + height: 100%; + display: block; +} + +.jp-LinkedOutputView .jp-OutputArea-output:only-child { + height: 100%; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +@media print { + .jp-OutputArea-child { + break-inside: avoid-page; + } +} + +/*----------------------------------------------------------------------------- +| Mobile +|----------------------------------------------------------------------------*/ +@media only screen and (max-width: 760px) { + .jp-OutputPrompt { + display: table-row; + text-align: left; + } + + .jp-OutputArea-child .jp-OutputArea-output { + display: table-row; + margin-left: var(--jp-notebook-padding); + } +} + +/* Trimmed outputs warning */ +.jp-TrimmedOutputs > a { + margin: 10px; + text-decoration: none; + cursor: pointer; +} + +.jp-TrimmedOutputs > a:hover { + text-decoration: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Table of Contents +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-toc-active-width: 4px; +} + +.jp-TableOfContents { + display: flex; + flex-direction: column; + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + height: 100%; +} + +.jp-TableOfContents-placeholder { + text-align: center; +} + +.jp-TableOfContents-placeholderContent { + color: var(--jp-content-font-color2); + padding: 8px; +} + +.jp-TableOfContents-placeholderContent > h3 { + margin-bottom: var(--jp-content-heading-margin-bottom); +} + +.jp-TableOfContents .jp-SidePanel-content { + overflow-y: auto; +} + +.jp-TableOfContents-tree { + margin: 4px; +} + +.jp-TableOfContents ol { + list-style-type: none; +} + +/* stylelint-disable-next-line selector-max-type */ +.jp-TableOfContents li > ol { + /* Align left border with triangle icon center */ + padding-left: 11px; +} + +.jp-TableOfContents-content { + /* left margin for the active heading indicator */ + margin: 0 0 0 var(--jp-private-toc-active-width); + padding: 0; + background-color: var(--jp-layout-color1); +} + +.jp-tocItem { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-tocItem-heading { + display: flex; + cursor: pointer; +} + +.jp-tocItem-heading:hover { + background-color: var(--jp-layout-color2); +} + +.jp-tocItem-content { + display: block; + padding: 4px 0; + white-space: nowrap; + text-overflow: ellipsis; + overflow-x: hidden; +} + +.jp-tocItem-collapser { + height: 20px; + margin: 2px 2px 0; + padding: 0; + background: none; + border: none; + cursor: pointer; +} + +.jp-tocItem-collapser:hover { + background-color: var(--jp-layout-color3); +} + +/* Active heading indicator */ + +.jp-tocItem-heading::before { + content: ' '; + background: transparent; + width: var(--jp-private-toc-active-width); + height: 24px; + position: absolute; + left: 0; + border-radius: var(--jp-border-radius); +} + +.jp-tocItem-heading.jp-tocItem-active::before { + background-color: var(--jp-brand-color1); +} + +.jp-tocItem-heading:hover.jp-tocItem-active::before { + background: var(--jp-brand-color0); + opacity: 1; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Collapser { + flex: 0 0 var(--jp-cell-collapser-width); + padding: 0; + margin: 0; + border: none; + outline: none; + background: transparent; + border-radius: var(--jp-border-radius); + opacity: 1; +} + +.jp-Collapser-child { + display: block; + width: 100%; + box-sizing: border-box; + + /* height: 100% doesn't work because the height of its parent is computed from content */ + position: absolute; + top: 0; + bottom: 0; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +/* +Hiding collapsers in print mode. + +Note: input and output wrappers have "display: block" propery in print mode. +*/ + +@media print { + .jp-Collapser { + display: none; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Header/Footer +|----------------------------------------------------------------------------*/ + +/* Hidden by zero height by default */ +.jp-CellHeader, +.jp-CellFooter { + height: 0; + width: 100%; + padding: 0; + margin: 0; + border: none; + outline: none; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Input +|----------------------------------------------------------------------------*/ + +/* All input areas */ +.jp-InputArea { + display: table; + table-layout: fixed; + width: 100%; + overflow: hidden; +} + +.jp-InputArea-editor { + display: table-cell; + overflow: hidden; + vertical-align: top; + + /* This is the non-active, default styling */ + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + border-radius: 0; + background: var(--jp-cell-editor-background); +} + +.jp-InputPrompt { + display: table-cell; + vertical-align: top; + width: var(--jp-cell-prompt-width); + color: var(--jp-cell-inprompt-font-color); + font-family: var(--jp-cell-prompt-font-family); + padding: var(--jp-code-padding); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + opacity: var(--jp-cell-prompt-opacity); + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; + + /* Right align prompt text, don't wrap to handle large prompt numbers */ + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + /* Disable text selection */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/*----------------------------------------------------------------------------- +| Mobile +|----------------------------------------------------------------------------*/ +@media only screen and (max-width: 760px) { + .jp-InputArea-editor { + display: table-row; + margin-left: var(--jp-notebook-padding); + } + + .jp-InputPrompt { + display: table-row; + text-align: left; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Placeholder +|----------------------------------------------------------------------------*/ + +.jp-Placeholder { + display: table; + table-layout: fixed; + width: 100%; +} + +.jp-Placeholder-prompt { + display: table-cell; + box-sizing: border-box; +} + +.jp-Placeholder-content { + display: table-cell; + padding: 4px 6px; + border: 1px solid transparent; + border-radius: 0; + background: none; + box-sizing: border-box; + cursor: pointer; +} + +.jp-Placeholder-contentContainer { + display: flex; +} + +.jp-Placeholder-content:hover, +.jp-InputPlaceholder > .jp-Placeholder-content:hover { + border-color: var(--jp-layout-color3); +} + +.jp-Placeholder-content .jp-MoreHorizIcon { + width: 32px; + height: 16px; + border: 1px solid transparent; + border-radius: var(--jp-border-radius); +} + +.jp-Placeholder-content .jp-MoreHorizIcon:hover { + border: 1px solid var(--jp-border-color1); + box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25); + background-color: var(--jp-layout-color0); +} + +.jp-PlaceholderText { + white-space: nowrap; + overflow-x: hidden; + color: var(--jp-inverse-layout-color3); + font-family: var(--jp-code-font-family); +} + +.jp-InputPlaceholder > .jp-Placeholder-content { + border-color: var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Private CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-cell-scrolling-output-offset: 5px; +} + +/*----------------------------------------------------------------------------- +| Cell +|----------------------------------------------------------------------------*/ + +.jp-Cell { + padding: var(--jp-cell-padding); + margin: 0; + border: none; + outline: none; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Common input/output +|----------------------------------------------------------------------------*/ + +.jp-Cell-inputWrapper, +.jp-Cell-outputWrapper { + display: flex; + flex-direction: row; + padding: 0; + margin: 0; + + /* Added to reveal the box-shadow on the input and output collapsers. */ + overflow: visible; +} + +/* Only input/output areas inside cells */ +.jp-Cell-inputArea, +.jp-Cell-outputArea { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Collapser +|----------------------------------------------------------------------------*/ + +/* Make the output collapser disappear when there is not output, but do so + * in a manner that leaves it in the layout and preserves its width. + */ +.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser { + border: none !important; + background: transparent !important; +} + +.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser { + min-height: var(--jp-cell-collapser-min-height); +} + +/*----------------------------------------------------------------------------- +| Output +|----------------------------------------------------------------------------*/ + +/* Put a space between input and output when there IS output */ +.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper { + margin-top: 5px; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea { + overflow-y: auto; + max-height: 24em; + margin-left: var(--jp-private-cell-scrolling-output-offset); + resize: vertical; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] { + max-height: unset; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after { + content: ' '; + box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%); + width: 100%; + height: 100%; + position: sticky; + bottom: 0; + top: 0; + margin-top: -50%; + float: left; + display: block; + pointer-events: none; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child { + padding-top: 6px; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt { + width: calc( + var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset) + ); +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay { + left: calc(-1 * var(--jp-private-cell-scrolling-output-offset)); +} + +/*----------------------------------------------------------------------------- +| CodeCell +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| MarkdownCell +|----------------------------------------------------------------------------*/ + +.jp-MarkdownOutput { + display: table-cell; + width: 100%; + margin-top: 0; + margin-bottom: 0; + padding-left: var(--jp-code-padding); +} + +.jp-MarkdownOutput.jp-RenderedHTMLCommon { + overflow: auto; +} + +/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */ +.jp-collapseHeadingButton { + display: flex; + min-height: var(--jp-cell-collapser-min-height); + font-size: var(--jp-code-font-size); + position: absolute; + background-color: transparent; + background-size: 25px; + background-repeat: no-repeat; + background-position-x: center; + background-position-y: top; + background-image: var(--jp-icon-caret-down); + right: 0; + top: 0; + bottom: 0; +} + +.jp-collapseHeadingButton.jp-mod-collapsed { + background-image: var(--jp-icon-caret-right); +} + +/* + set the container font size to match that of content + so that the nested collapse buttons have the right size +*/ +.jp-MarkdownCell .jp-InputPrompt { + font-size: var(--jp-content-font-size1); +} + +/* + Align collapseHeadingButton with cell top header + The font sizes are identical to the ones in packages/rendermime/style/base.css +*/ +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] { + font-size: var(--jp-content-font-size5); + background-position-y: calc(0.3 * var(--jp-content-font-size5)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] { + font-size: var(--jp-content-font-size4); + background-position-y: calc(0.3 * var(--jp-content-font-size4)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] { + font-size: var(--jp-content-font-size3); + background-position-y: calc(0.3 * var(--jp-content-font-size3)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] { + font-size: var(--jp-content-font-size2); + background-position-y: calc(0.3 * var(--jp-content-font-size2)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] { + font-size: var(--jp-content-font-size1); + background-position-y: top; +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] { + font-size: var(--jp-content-font-size0); + background-position-y: top; +} + +/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */ +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton { + display: none; +} + +.jp-Notebook.jp-mod-showHiddenCellsButton + :is(.jp-MarkdownCell:hover, .jp-mod-active) + .jp-collapseHeadingButton { + display: flex; +} + +/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which +is a consequence of the showHiddenCellsButton option in Notebook Settings)*/ +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton { + margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding)); + margin-top: var(--jp-code-padding); + border: 1px solid var(--jp-border-color2); + background-color: var(--jp-border-color3) !important; + color: var(--jp-content-font-color0) !important; + display: flex; +} + +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover { + background-color: var(--jp-border-color2) !important; +} + +.jp-showHiddenCellsButton { + display: none; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +/* +Using block instead of flex to allow the use of the break-inside CSS property for +cell outputs. +*/ + +@media print { + .jp-Cell-inputWrapper, + .jp-Cell-outputWrapper { + display: block; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-notebook-toolbar-padding: 2px 5px 2px 2px; +} + +/*----------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-NotebookPanel-toolbar { + padding: var(--jp-notebook-toolbar-padding); + + /* disable paint containment from lumino 2.0 default strict CSS containment */ + contain: style size !important; +} + +.jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused { + border: none; + box-shadow: none; +} + +.jp-Notebook-toolbarCellTypeDropdown select { + height: 24px; + font-size: var(--jp-ui-font-size1); + line-height: 14px; + border-radius: 0; + display: block; +} + +.jp-Notebook-toolbarCellTypeDropdown span { + top: 5px !important; +} + +.jp-Toolbar-responsive-popup { + position: absolute; + height: fit-content; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-end; + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + background: var(--jp-toolbar-background); + min-height: var(--jp-toolbar-micro-height); + padding: var(--jp-notebook-toolbar-padding); + z-index: 1; + right: 0; + top: 0; +} + +.jp-Toolbar > .jp-Toolbar-responsive-opener { + margin-left: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-Notebook-ExecutionIndicator { + position: relative; + display: inline-block; + height: 100%; + z-index: 9997; +} + +.jp-Notebook-ExecutionIndicator-tooltip { + visibility: hidden; + height: auto; + width: max-content; + width: -moz-max-content; + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color1); + text-align: justify; + border-radius: 6px; + padding: 0 5px; + position: fixed; + display: table; +} + +.jp-Notebook-ExecutionIndicator-tooltip.up { + transform: translateX(-50%) translateY(-100%) translateY(-32px); +} + +.jp-Notebook-ExecutionIndicator-tooltip.down { + transform: translateX(calc(-100% + 16px)) translateY(5px); +} + +.jp-Notebook-ExecutionIndicator-tooltip.hidden { + display: none; +} + +.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip { + visibility: visible; +} + +.jp-Notebook-ExecutionIndicator span { + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + color: var(--jp-ui-font-color1); + line-height: 24px; + display: block; +} + +.jp-Notebook-ExecutionIndicator-progress-bar { + display: flex; + justify-content: center; + height: 100%; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/* + * Execution indicator + */ +.jp-tocItem-content::after { + content: ''; + + /* Must be identical to form a circle */ + width: 12px; + height: 12px; + background: none; + border: none; + position: absolute; + right: 0; +} + +.jp-tocItem-content[data-running='0']::after { + border-radius: 50%; + border: var(--jp-border-width) solid var(--jp-inverse-layout-color3); + background: none; +} + +.jp-tocItem-content[data-running='1']::after { + border-radius: 50%; + border: var(--jp-border-width) solid var(--jp-inverse-layout-color3); + background-color: var(--jp-inverse-layout-color3); +} + +.jp-tocItem-content[data-running='0'], +.jp-tocItem-content[data-running='1'] { + margin-right: 12px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-Notebook-footer { + height: 27px; + margin-left: calc( + var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + + var(--jp-cell-padding) + ); + width: calc( + 100% - + ( + var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + + var(--jp-cell-padding) + var(--jp-cell-padding) + ) + ); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + color: var(--jp-ui-font-color3); + margin-top: 6px; + background: none; + cursor: pointer; +} + +.jp-Notebook-footer:focus { + border-color: var(--jp-cell-editor-active-border-color); +} + +/* For devices that support hovering, hide footer until hover */ +@media (hover: hover) { + .jp-Notebook-footer { + opacity: 0; + } + + .jp-Notebook-footer:focus, + .jp-Notebook-footer:hover { + opacity: 1; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Imports +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-side-by-side-output-size: 1fr; + --jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size); + --jp-private-notebook-dragImage-width: 304px; + --jp-private-notebook-dragImage-height: 36px; + --jp-private-notebook-selected-color: var(--md-blue-400); + --jp-private-notebook-active-color: var(--md-green-400); +} + +/*----------------------------------------------------------------------------- +| Notebook +|----------------------------------------------------------------------------*/ + +/* stylelint-disable selector-max-class */ + +.jp-NotebookPanel { + display: block; + height: 100%; +} + +.jp-NotebookPanel.jp-Document { + min-width: 240px; + min-height: 120px; +} + +.jp-Notebook { + padding: var(--jp-notebook-padding); + outline: none; + overflow: auto; + background: var(--jp-layout-color0); +} + +.jp-Notebook.jp-mod-scrollPastEnd::after { + display: block; + content: ''; + min-height: var(--jp-notebook-scroll-padding); +} + +.jp-MainAreaWidget-ContainStrict .jp-Notebook * { + contain: strict; +} + +.jp-Notebook .jp-Cell { + overflow: visible; +} + +.jp-Notebook .jp-Cell .jp-InputPrompt { + cursor: move; +} + +/*----------------------------------------------------------------------------- +| Notebook state related styling +| +| The notebook and cells each have states, here are the possibilities: +| +| - Notebook +| - Command +| - Edit +| - Cell +| - None +| - Active (only one can be active) +| - Selected (the cells actions are applied to) +| - Multiselected (when multiple selected, the cursor) +| - No outputs +|----------------------------------------------------------------------------*/ + +/* Command or edit modes */ + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +/* cell is active */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser { + background: var(--jp-brand-color1); +} + +/* cell is dirty */ +.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt { + color: var(--jp-warn-color1); +} + +.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before { + color: var(--jp-warn-color1); + content: '•'; +} + +.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser { + background: var(--jp-warn-color1); +} + +/* collapser is hovered */ +.jp-Notebook .jp-Cell .jp-Collapser:hover { + box-shadow: var(--jp-elevation-z2); + background: var(--jp-brand-color1); + opacity: var(--jp-cell-collapser-not-active-hover-opacity); +} + +/* cell is active and collapser is hovered */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover { + background: var(--jp-brand-color0); + opacity: 1; +} + +/* Command mode */ + +.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected { + background: var(--jp-notebook-multiselected-color); +} + +.jp-Notebook.jp-mod-commandMode + .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) { + background: transparent; +} + +/* Edit mode */ + +.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor { + border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color); + box-shadow: var(--jp-input-box-shadow); + background-color: var(--jp-cell-editor-active-background); +} + +/*----------------------------------------------------------------------------- +| Notebook drag and drop +|----------------------------------------------------------------------------*/ + +.jp-Notebook-cell.jp-mod-dropSource { + opacity: 0.5; +} + +.jp-Notebook-cell.jp-mod-dropTarget, +.jp-Notebook.jp-mod-commandMode + .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget { + border-top-color: var(--jp-private-notebook-selected-color); + border-top-style: solid; + border-top-width: 2px; +} + +.jp-dragImage { + display: block; + flex-direction: row; + width: var(--jp-private-notebook-dragImage-width); + height: var(--jp-private-notebook-dragImage-height); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background); + overflow: visible; +} + +.jp-dragImage-singlePrompt { + box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12); +} + +.jp-dragImage .jp-dragImage-content { + flex: 1 1 auto; + z-index: 2; + font-size: var(--jp-code-font-size); + font-family: var(--jp-code-font-family); + line-height: var(--jp-code-line-height); + padding: var(--jp-code-padding); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background-color); + color: var(--jp-content-font-color3); + text-align: left; + margin: 4px 4px 4px 0; +} + +.jp-dragImage .jp-dragImage-prompt { + flex: 0 0 auto; + min-width: 36px; + color: var(--jp-cell-inprompt-font-color); + padding: var(--jp-code-padding); + padding-left: 12px; + font-family: var(--jp-cell-prompt-font-family); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + line-height: 1.9; + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; +} + +.jp-dragImage-multipleBack { + z-index: -1; + position: absolute; + height: 32px; + width: 300px; + top: 8px; + left: 8px; + background: var(--jp-layout-color2); + border: var(--jp-border-width) solid var(--jp-input-border-color); + box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12); +} + +/*----------------------------------------------------------------------------- +| Cell toolbar +|----------------------------------------------------------------------------*/ + +.jp-NotebookTools { + display: block; + min-width: var(--jp-sidebar-min-width); + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); + overflow: auto; +} + +.jp-ActiveCellTool { + padding: 12px 0; + display: flex; +} + +.jp-ActiveCellTool-Content { + flex: 1 1 auto; +} + +.jp-ActiveCellTool .jp-ActiveCellTool-CellContent { + background: var(--jp-cell-editor-background); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + border-radius: 0; + min-height: 29px; +} + +.jp-ActiveCellTool .jp-InputPrompt { + min-width: calc(var(--jp-cell-prompt-width) * 0.75); +} + +.jp-ActiveCellTool-CellContent > pre { + padding: 5px 4px; + margin: 0; + white-space: normal; +} + +.jp-MetadataEditorTool { + flex-direction: column; + padding: 12px 0; +} + +.jp-RankedPanel > :not(:first-child) { + margin-top: 12px; +} + +.jp-KeySelector select.jp-mod-styled { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + border: var(--jp-border-width) solid var(--jp-border-color1); +} + +.jp-KeySelector label, +.jp-MetadataEditorTool label, +.jp-NumberSetter label { + line-height: 1.4; +} + +.jp-NotebookTools .jp-select-wrapper { + margin-top: 4px; + margin-bottom: 0; +} + +.jp-NumberSetter input { + width: 100%; + margin-top: 4px; +} + +.jp-NotebookTools .jp-Collapse { + margin-top: 16px; +} + +/*----------------------------------------------------------------------------- +| Presentation Mode (.jp-mod-presentationMode) +|----------------------------------------------------------------------------*/ + +.jp-mod-presentationMode .jp-Notebook { + --jp-content-font-size1: var(--jp-content-presentation-font-size1); + --jp-code-font-size: var(--jp-code-presentation-font-size); +} + +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt, +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt { + flex: 0 0 110px; +} + +/*----------------------------------------------------------------------------- +| Side-by-side Mode (.jp-mod-sideBySide) +|----------------------------------------------------------------------------*/ +.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell { + margin-top: 3em; + margin-bottom: 3em; + margin-left: 5%; + margin-right: 5%; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell { + display: grid; + grid-template-columns: minmax(0, 1fr) min-content minmax( + 0, + var(--jp-side-by-side-output-size) + ); + grid-template-rows: auto minmax(0, 1fr) auto; + grid-template-areas: + 'header header header' + 'input handle output' + 'footer footer footer'; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell { + grid-template-columns: minmax(0, 1fr) min-content minmax( + 0, + var(--jp-side-by-side-resized-cell) + ); +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader { + grid-area: header; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper { + grid-area: input; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper { + /* overwrite the default margin (no vertical separation needed in side by side move */ + margin-top: 0; + grid-area: output; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter { + grid-area: footer; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle { + grid-area: handle; + user-select: none; + display: block; + height: 100%; + cursor: ew-resize; + padding: 0 var(--jp-cell-padding); +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after { + content: ''; + display: block; + background: var(--jp-border-color2); + height: 100%; + width: 5px; +} + +.jp-mod-sideBySide.jp-Notebook + .jp-CodeCell.jp-mod-resizedCell + .jp-CellResizeHandle::after { + background: var(--jp-border-color0); +} + +.jp-CellResizeHandle { + display: none; +} + +/*----------------------------------------------------------------------------- +| Placeholder +|----------------------------------------------------------------------------*/ + +.jp-Cell-Placeholder { + padding-left: 55px; +} + +.jp-Cell-Placeholder-wrapper { + background: #fff; + border: 1px solid; + border-color: #e5e6e9 #dfe0e4 #d0d1d5; + border-radius: 4px; + -webkit-border-radius: 4px; + margin: 10px 15px; +} + +.jp-Cell-Placeholder-wrapper-inner { + padding: 15px; + position: relative; +} + +.jp-Cell-Placeholder-wrapper-body { + background-repeat: repeat; + background-size: 50% auto; +} + +.jp-Cell-Placeholder-wrapper-body div { + background: #f6f7f8; + background-image: -webkit-linear-gradient( + left, + #f6f7f8 0%, + #edeef1 20%, + #f6f7f8 40%, + #f6f7f8 100% + ); + background-repeat: no-repeat; + background-size: 800px 104px; + height: 104px; + position: absolute; + right: 15px; + left: 15px; + top: 15px; +} + +div.jp-Cell-Placeholder-h1 { + top: 20px; + height: 20px; + left: 15px; + width: 150px; +} + +div.jp-Cell-Placeholder-h2 { + left: 15px; + top: 50px; + height: 10px; + width: 100px; +} + +div.jp-Cell-Placeholder-content-1, +div.jp-Cell-Placeholder-content-2, +div.jp-Cell-Placeholder-content-3 { + left: 15px; + right: 15px; + height: 10px; +} + +div.jp-Cell-Placeholder-content-1 { + top: 100px; +} + +div.jp-Cell-Placeholder-content-2 { + top: 120px; +} + +div.jp-Cell-Placeholder-content-3 { + top: 140px; +} + +</style> +<style type="text/css"> +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* +The following CSS variables define the main, public API for styling JupyterLab. +These variables should be used by all plugins wherever possible. In other +words, plugins should not define custom colors, sizes, etc unless absolutely +necessary. This enables users to change the visual theme of JupyterLab +by changing these variables. + +Many variables appear in an ordered sequence (0,1,2,3). These sequences +are designed to work well together, so for example, `--jp-border-color1` should +be used with `--jp-layout-color1`. The numbers have the following meanings: + +* 0: super-primary, reserved for special emphasis +* 1: primary, most important under normal situations +* 2: secondary, next most important under normal situations +* 3: tertiary, next most important under normal situations + +Throughout JupyterLab, we are mostly following principles from Google's +Material Design when selecting colors. We are not, however, following +all of MD as it is not optimized for dense, information rich UIs. +*/ + +:root { + /* Elevation + * + * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: + * + * https://github.com/material-components/material-components-web + * https://material-components-web.appspot.com/elevation.html + */ + + --jp-shadow-base-lightness: 0; + --jp-shadow-umbra-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.2 + ); + --jp-shadow-penumbra-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.14 + ); + --jp-shadow-ambient-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.12 + ); + --jp-elevation-z0: none; + --jp-elevation-z1: 0 2px 1px -1px var(--jp-shadow-umbra-color), + 0 1px 1px 0 var(--jp-shadow-penumbra-color), + 0 1px 3px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z2: 0 3px 1px -2px var(--jp-shadow-umbra-color), + 0 2px 2px 0 var(--jp-shadow-penumbra-color), + 0 1px 5px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z4: 0 2px 4px -1px var(--jp-shadow-umbra-color), + 0 4px 5px 0 var(--jp-shadow-penumbra-color), + 0 1px 10px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z6: 0 3px 5px -1px var(--jp-shadow-umbra-color), + 0 6px 10px 0 var(--jp-shadow-penumbra-color), + 0 1px 18px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z8: 0 5px 5px -3px var(--jp-shadow-umbra-color), + 0 8px 10px 1px var(--jp-shadow-penumbra-color), + 0 3px 14px 2px var(--jp-shadow-ambient-color); + --jp-elevation-z12: 0 7px 8px -4px var(--jp-shadow-umbra-color), + 0 12px 17px 2px var(--jp-shadow-penumbra-color), + 0 5px 22px 4px var(--jp-shadow-ambient-color); + --jp-elevation-z16: 0 8px 10px -5px var(--jp-shadow-umbra-color), + 0 16px 24px 2px var(--jp-shadow-penumbra-color), + 0 6px 30px 5px var(--jp-shadow-ambient-color); + --jp-elevation-z20: 0 10px 13px -6px var(--jp-shadow-umbra-color), + 0 20px 31px 3px var(--jp-shadow-penumbra-color), + 0 8px 38px 7px var(--jp-shadow-ambient-color); + --jp-elevation-z24: 0 11px 15px -7px var(--jp-shadow-umbra-color), + 0 24px 38px 3px var(--jp-shadow-penumbra-color), + 0 9px 46px 8px var(--jp-shadow-ambient-color); + + /* Borders + * + * The following variables, specify the visual styling of borders in JupyterLab. + */ + + --jp-border-width: 1px; + --jp-border-color0: var(--md-grey-400); + --jp-border-color1: var(--md-grey-400); + --jp-border-color2: var(--md-grey-300); + --jp-border-color3: var(--md-grey-200); + --jp-inverse-border-color: var(--md-grey-600); + --jp-border-radius: 2px; + + /* UI Fonts + * + * The UI font CSS variables are used for the typography all of the JupyterLab + * user interface elements that are not directly user generated content. + * + * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 + * is applied to a parent element. When children elements, such as headings, are sized + * in em all things will be computed relative to that body size. + */ + + --jp-ui-font-scale-factor: 1.2; + --jp-ui-font-size0: 0.83333em; + --jp-ui-font-size1: 13px; /* Base font size */ + --jp-ui-font-size2: 1.2em; + --jp-ui-font-size3: 1.44em; + --jp-ui-font-family: system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', + helvetica, arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol'; + + /* + * Use these font colors against the corresponding main layout colors. + * In a light theme, these go from dark to light. + */ + + /* Defaults use Material Design specification */ + --jp-ui-font-color0: rgba(0, 0, 0, 1); + --jp-ui-font-color1: rgba(0, 0, 0, 0.87); + --jp-ui-font-color2: rgba(0, 0, 0, 0.54); + --jp-ui-font-color3: rgba(0, 0, 0, 0.38); + + /* + * Use these against the brand/accent/warn/error colors. + * These will typically go from light to darker, in both a dark and light theme. + */ + + --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); + --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); + --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); + --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); + + /* Content Fonts + * + * Content font variables are used for typography of user generated content. + * + * The font sizing here is done assuming that the body font size of --jp-content-font-size1 + * is applied to a parent element. When children elements, such as headings, are sized + * in em all things will be computed relative to that body size. + */ + + --jp-content-line-height: 1.6; + --jp-content-font-scale-factor: 1.2; + --jp-content-font-size0: 0.83333em; + --jp-content-font-size1: 14px; /* Base font size */ + --jp-content-font-size2: 1.2em; + --jp-content-font-size3: 1.44em; + --jp-content-font-size4: 1.728em; + --jp-content-font-size5: 2.0736em; + + /* This gives a magnification of about 125% in presentation mode over normal. */ + --jp-content-presentation-font-size1: 17px; + --jp-content-heading-line-height: 1; + --jp-content-heading-margin-top: 1.2em; + --jp-content-heading-margin-bottom: 0.8em; + --jp-content-heading-font-weight: 500; + + /* Defaults use Material Design specification */ + --jp-content-font-color0: rgba(0, 0, 0, 1); + --jp-content-font-color1: rgba(0, 0, 0, 0.87); + --jp-content-font-color2: rgba(0, 0, 0, 0.54); + --jp-content-font-color3: rgba(0, 0, 0, 0.38); + --jp-content-link-color: var(--md-blue-900); + --jp-content-font-family: system-ui, -apple-system, blinkmacsystemfont, + 'Segoe UI', helvetica, arial, sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol'; + + /* + * Code Fonts + * + * Code font variables are used for typography of code and other monospaces content. + */ + + --jp-code-font-size: 13px; + --jp-code-line-height: 1.3077; /* 17px for 13px base */ + --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ + --jp-code-font-family-default: menlo, consolas, 'DejaVu Sans Mono', monospace; + --jp-code-font-family: var(--jp-code-font-family-default); + + /* This gives a magnification of about 125% in presentation mode over normal. */ + --jp-code-presentation-font-size: 16px; + + /* may need to tweak cursor width if you change font size */ + --jp-code-cursor-width0: 1.4px; + --jp-code-cursor-width1: 2px; + --jp-code-cursor-width2: 4px; + + /* Layout + * + * The following are the main layout colors use in JupyterLab. In a light + * theme these would go from light to dark. + */ + + --jp-layout-color0: white; + --jp-layout-color1: white; + --jp-layout-color2: var(--md-grey-200); + --jp-layout-color3: var(--md-grey-400); + --jp-layout-color4: var(--md-grey-600); + + /* Inverse Layout + * + * The following are the inverse layout colors use in JupyterLab. In a light + * theme these would go from dark to light. + */ + + --jp-inverse-layout-color0: #111; + --jp-inverse-layout-color1: var(--md-grey-900); + --jp-inverse-layout-color2: var(--md-grey-800); + --jp-inverse-layout-color3: var(--md-grey-700); + --jp-inverse-layout-color4: var(--md-grey-600); + + /* Brand/accent */ + + --jp-brand-color0: var(--md-blue-900); + --jp-brand-color1: var(--md-blue-700); + --jp-brand-color2: var(--md-blue-300); + --jp-brand-color3: var(--md-blue-100); + --jp-brand-color4: var(--md-blue-50); + --jp-accent-color0: var(--md-green-900); + --jp-accent-color1: var(--md-green-700); + --jp-accent-color2: var(--md-green-300); + --jp-accent-color3: var(--md-green-100); + + /* State colors (warn, error, success, info) */ + + --jp-warn-color0: var(--md-orange-900); + --jp-warn-color1: var(--md-orange-700); + --jp-warn-color2: var(--md-orange-300); + --jp-warn-color3: var(--md-orange-100); + --jp-error-color0: var(--md-red-900); + --jp-error-color1: var(--md-red-700); + --jp-error-color2: var(--md-red-300); + --jp-error-color3: var(--md-red-100); + --jp-success-color0: var(--md-green-900); + --jp-success-color1: var(--md-green-700); + --jp-success-color2: var(--md-green-300); + --jp-success-color3: var(--md-green-100); + --jp-info-color0: var(--md-cyan-900); + --jp-info-color1: var(--md-cyan-700); + --jp-info-color2: var(--md-cyan-300); + --jp-info-color3: var(--md-cyan-100); + + /* Cell specific styles */ + + --jp-cell-padding: 5px; + --jp-cell-collapser-width: 8px; + --jp-cell-collapser-min-height: 20px; + --jp-cell-collapser-not-active-hover-opacity: 0.6; + --jp-cell-editor-background: var(--md-grey-100); + --jp-cell-editor-border-color: var(--md-grey-300); + --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); + --jp-cell-editor-active-background: var(--jp-layout-color0); + --jp-cell-editor-active-border-color: var(--jp-brand-color1); + --jp-cell-prompt-width: 64px; + --jp-cell-prompt-font-family: var(--jp-code-font-family-default); + --jp-cell-prompt-letter-spacing: 0; + --jp-cell-prompt-opacity: 1; + --jp-cell-prompt-not-active-opacity: 0.5; + --jp-cell-prompt-not-active-font-color: var(--md-grey-700); + + /* A custom blend of MD grey and blue 600 + * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ + --jp-cell-inprompt-font-color: #307fc1; + + /* A custom blend of MD grey and orange 600 + * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ + --jp-cell-outprompt-font-color: #bf5b3d; + + /* Notebook specific styles */ + + --jp-notebook-padding: 10px; + --jp-notebook-select-background: var(--jp-layout-color1); + --jp-notebook-multiselected-color: var(--md-blue-50); + + /* The scroll padding is calculated to fill enough space at the bottom of the + notebook to show one single-line cell (with appropriate padding) at the top + when the notebook is scrolled all the way to the bottom. We also subtract one + pixel so that no scrollbar appears if we have just one single-line cell in the + notebook. This padding is to enable a 'scroll past end' feature in a notebook. + */ + --jp-notebook-scroll-padding: calc( + 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - + var(--jp-code-padding) - var(--jp-cell-padding) - 1px + ); + + /* Rendermime styles */ + + --jp-rendermime-error-background: #fdd; + --jp-rendermime-table-row-background: var(--md-grey-100); + --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); + + /* Dialog specific styles */ + + --jp-dialog-background: rgba(0, 0, 0, 0.25); + + /* Console specific styles */ + + --jp-console-padding: 10px; + + /* Toolbar specific styles */ + + --jp-toolbar-border-color: var(--jp-border-color1); + --jp-toolbar-micro-height: 8px; + --jp-toolbar-background: var(--jp-layout-color1); + --jp-toolbar-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.24); + --jp-toolbar-header-margin: 4px 4px 0 4px; + --jp-toolbar-active-background: var(--md-grey-300); + + /* Statusbar specific styles */ + + --jp-statusbar-height: 24px; + + /* Input field styles */ + + --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); + --jp-input-active-background: var(--jp-layout-color1); + --jp-input-hover-background: var(--jp-layout-color1); + --jp-input-background: var(--md-grey-100); + --jp-input-border-color: var(--jp-inverse-border-color); + --jp-input-active-border-color: var(--jp-brand-color1); + --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); + + /* General editor styles */ + + --jp-editor-selected-background: #d9d9d9; + --jp-editor-selected-focused-background: #d7d4f0; + --jp-editor-cursor-color: var(--jp-ui-font-color0); + + /* Code mirror specific styles */ + + --jp-mirror-editor-keyword-color: #008000; + --jp-mirror-editor-atom-color: #88f; + --jp-mirror-editor-number-color: #080; + --jp-mirror-editor-def-color: #00f; + --jp-mirror-editor-variable-color: var(--md-grey-900); + --jp-mirror-editor-variable-2-color: rgb(0, 54, 109); + --jp-mirror-editor-variable-3-color: #085; + --jp-mirror-editor-punctuation-color: #05a; + --jp-mirror-editor-property-color: #05a; + --jp-mirror-editor-operator-color: #a2f; + --jp-mirror-editor-comment-color: #408080; + --jp-mirror-editor-string-color: #ba2121; + --jp-mirror-editor-string-2-color: #708; + --jp-mirror-editor-meta-color: #a2f; + --jp-mirror-editor-qualifier-color: #555; + --jp-mirror-editor-builtin-color: #008000; + --jp-mirror-editor-bracket-color: #997; + --jp-mirror-editor-tag-color: #170; + --jp-mirror-editor-attribute-color: #00c; + --jp-mirror-editor-header-color: blue; + --jp-mirror-editor-quote-color: #090; + --jp-mirror-editor-link-color: #00c; + --jp-mirror-editor-error-color: #f00; + --jp-mirror-editor-hr-color: #999; + + /* + RTC user specific colors. + These colors are used for the cursor, username in the editor, + and the icon of the user. + */ + + --jp-collaborator-color1: #ffad8e; + --jp-collaborator-color2: #dac83d; + --jp-collaborator-color3: #72dd76; + --jp-collaborator-color4: #00e4d0; + --jp-collaborator-color5: #45d4ff; + --jp-collaborator-color6: #e2b1ff; + --jp-collaborator-color7: #ff9de6; + + /* Vega extension styles */ + + --jp-vega-background: white; + + /* Sidebar-related styles */ + + --jp-sidebar-min-width: 250px; + + /* Search-related styles */ + + --jp-search-toggle-off-opacity: 0.5; + --jp-search-toggle-hover-opacity: 0.8; + --jp-search-toggle-on-opacity: 1; + --jp-search-selected-match-background-color: rgb(245, 200, 0); + --jp-search-selected-match-color: black; + --jp-search-unselected-match-background-color: var( + --jp-inverse-layout-color0 + ); + --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); + + /* Icon colors that work well with light or dark backgrounds */ + --jp-icon-contrast-color0: var(--md-purple-600); + --jp-icon-contrast-color1: var(--md-green-600); + --jp-icon-contrast-color2: var(--md-pink-600); + --jp-icon-contrast-color3: var(--md-blue-600); + + /* Button colors */ + --jp-accept-color-normal: var(--md-blue-700); + --jp-accept-color-hover: var(--md-blue-800); + --jp-accept-color-active: var(--md-blue-900); + --jp-warn-color-normal: var(--md-red-700); + --jp-warn-color-hover: var(--md-red-800); + --jp-warn-color-active: var(--md-red-900); + --jp-reject-color-normal: var(--md-grey-600); + --jp-reject-color-hover: var(--md-grey-700); + --jp-reject-color-active: var(--md-grey-800); + + /* File or activity icons and switch semantic variables */ + --jp-jupyter-icon-color: #f37626; + --jp-notebook-icon-color: #f37626; + --jp-json-icon-color: var(--md-orange-700); + --jp-console-icon-background-color: var(--md-blue-700); + --jp-console-icon-color: white; + --jp-terminal-icon-background-color: var(--md-grey-800); + --jp-terminal-icon-color: var(--md-grey-200); + --jp-text-editor-icon-color: var(--md-grey-700); + --jp-inspector-icon-color: var(--md-grey-700); + --jp-switch-color: var(--md-grey-400); + --jp-switch-true-position-color: var(--md-orange-900); +} +</style> +<style type="text/css"> +/* Force rendering true colors when outputing to pdf */ +* { + -webkit-print-color-adjust: exact; +} + +/* Misc */ +a.anchor-link { + display: none; +} + +/* Input area styling */ +.jp-InputArea { + overflow: hidden; +} + +.jp-InputArea-editor { + overflow: hidden; +} + +.cm-editor.cm-s-jupyter .highlight pre { +/* weird, but --jp-code-padding defined to be 5px but 4px horizontal padding is hardcoded for pre.cm-line */ + padding: var(--jp-code-padding) 4px; + margin: 0; + + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; + +} + +.jp-OutputArea-output pre { + line-height: inherit; + font-family: inherit; +} + +.jp-RenderedText pre { + color: var(--jp-content-font-color1); + font-size: var(--jp-code-font-size); +} + +/* Hiding the collapser by default */ +.jp-Collapser { + display: none; +} + +@page { + margin: 0.5in; /* Margin for each printed piece of paper */ +} + +@media print { + .jp-Cell-inputWrapper, + .jp-Cell-outputWrapper { + display: block; + } +} +</style> +<!-- Load mathjax --> +<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe"> </script> +<!-- MathJax configuration --> +<script type="text/x-mathjax-config"> + init_mathjax = function() { + if (window.MathJax) { + // MathJax loaded + MathJax.Hub.Config({ + TeX: { + equationNumbers: { + autoNumber: "AMS", + useLabelIds: true + } + }, + tex2jax: { + inlineMath: [ ['$','$'], ["\\(","\\)"] ], + displayMath: [ ['$$','$$'], ["\\[","\\]"] ], + processEscapes: true, + processEnvironments: true + }, + displayAlign: 'center', + CommonHTML: { + linebreaks: { + automatic: true + } + } + }); + + MathJax.Hub.Queue(["Typeset", MathJax.Hub]); + } + } + init_mathjax(); + </script> +<!-- End of mathjax configuration --><script type="module"> + document.addEventListener("DOMContentLoaded", async () => { + const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid"); + // do not load mermaidjs if not needed + if (!diagrams.length) { + return; + } + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.6.0/mermaid.esm.min.mjs")).default; + const parser = new DOMParser(); + + mermaid.initialize({ + maxTextSize: 100000, + startOnLoad: false, + fontFamily: window + .getComputedStyle(document.body) + .getPropertyValue("--jp-ui-font-family"), + theme: document.querySelector("body[data-jp-theme-light='true']") + ? "default" + : "dark", + }); + + let _nextMermaidId = 0; + + function makeMermaidImage(svg) { + const img = document.createElement("img"); + const doc = parser.parseFromString(svg, "image/svg+xml"); + const svgEl = doc.querySelector("svg"); + const { maxWidth } = svgEl?.style || {}; + const firstTitle = doc.querySelector("title"); + const firstDesc = doc.querySelector("desc"); + + img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`); + if (maxWidth) { + img.width = parseInt(maxWidth); + } + if (firstTitle) { + img.setAttribute("alt", firstTitle.textContent); + } + if (firstDesc) { + const caption = document.createElement("figcaption"); + caption.className = "sr-only"; + caption.textContent = firstDesc.textContent; + return [img, caption]; + } + return [img]; + } + + async function makeMermaidError(text) { + let errorMessage = ""; + try { + await mermaid.parse(text); + } catch (err) { + errorMessage = `${err}`; + } + + const result = document.createElement("details"); + result.className = 'jp-RenderedMermaid-Details'; + const summary = document.createElement("summary"); + summary.className = 'jp-RenderedMermaid-Summary'; + const pre = document.createElement("pre"); + const code = document.createElement("code"); + code.innerText = text; + pre.appendChild(code); + summary.appendChild(pre); + result.appendChild(summary); + + const warning = document.createElement("pre"); + warning.innerText = errorMessage; + result.appendChild(warning); + return [result]; + } + + async function renderOneMarmaid(src) { + const id = `jp-mermaid-${_nextMermaidId++}`; + const parent = src.parentNode; + let raw = src.textContent.trim(); + const el = document.createElement("div"); + el.style.visibility = "hidden"; + document.body.appendChild(el); + let results = null; + let output = null; + try { + const { svg } = await mermaid.render(id, raw, el); + results = makeMermaidImage(svg); + output = document.createElement("figure"); + results.map(output.appendChild, output); + } catch (err) { + parent.classList.add("jp-mod-warning"); + results = await makeMermaidError(raw); + output = results[0]; + } finally { + el.remove(); + } + parent.classList.add("jp-RenderedMermaid"); + parent.appendChild(output); + } + + void Promise.all([...diagrams].map(renderOneMarmaid)); + }); +</script> +<style> + .jp-Mermaid:not(.jp-RenderedMermaid) { + display: none; + } + + .jp-RenderedMermaid { + overflow: auto; + display: flex; + } + + .jp-RenderedMermaid.jp-mod-warning { + width: auto; + padding: 0.5em; + margin-top: 0.5em; + border: var(--jp-border-width) solid var(--jp-warn-color2); + border-radius: var(--jp-border-radius); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + white-space: pre-wrap; + word-wrap: break-word; + } + + .jp-RenderedMermaid figure { + margin: 0; + overflow: auto; + max-width: 100%; + } + + .jp-RenderedMermaid img { + max-width: 100%; + } + + .jp-RenderedMermaid-Details > pre { + margin-top: 1em; + } + + .jp-RenderedMermaid-Summary { + color: var(--jp-warn-color2); + } + + .jp-RenderedMermaid:not(.jp-mod-warning) pre { + display: none; + } + + .jp-RenderedMermaid-Summary > pre { + display: inline-block; + white-space: normal; + } +</style> +<!-- End of mermaid configuration --></head> +<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light"> +<main> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=81475e62"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h1 id="WS-2.3:-Discrete-Fourier-Transform-(DFT):-You-Try-Meow-(Miauw)">WS 2.3: Discrete Fourier Transform (DFT): You Try Meow (Miauw)<a class="anchor-link" href="#WS-2.3:-Discrete-Fourier-Transform-(DFT):-You-Try-Meow-(Miauw)">¶</a></h1><h1 style="position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; top: 60px;right: 30px; margin: 0; border: 0"> +<style> + .markdown {width:100%; position: relative} + article { position: relative } + </style> +<img alt="No description has been provided for this image" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png" style="width:100px"/> +<img alt="No description has been provided for this image" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png" style="width:100px"/> +</h1> +<h2 style="height: 10px"> +</h2> +<p><em><a href="http://mude.citg.tudelft.nl/">CEGM1000 MUDE</a>: Week 2.3, Signal Processing. For: November 27, 2024</em></p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=eff9791a"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>The goal of this workshop to work with the <em>Discrete Fourier Transform</em> (DFT), implemented in Python as the <em>Fast Fourier Transform</em> (FFT) through <code>np.fft.fft</code>, and to understand and interpret its output.</p> +<p>The notebook consists of two parts:</p> +<ul> +<li>The first part (Task 0) is a demonstration of the use of the DFT (<em>you read and execute the code cells</em>),</li> +<li>The second part is a simple exercise with the DFT (<em>you write the code</em>).</li> +</ul> +<p>To start off, let's do a quick quiz question: <em>what is the primary purpose of the DFT?</em></p> +<p><em>Run the code cell below to find the answer.</em></p> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=36a05bbd-69a1-4805-a4ad-e84de89de560"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="o">%%html</span> +<span class="p"><</span><span class="nt">iframe</span> <span class="na">src</span><span class="o">=</span><span class="s">"https://tudelft.h5p.com/content/1292126914399042257/embed"</span> <span class="na">aria-label</span><span class="o">=</span><span class="s">"Meow"</span> <span class="na">width</span><span class="o">=</span><span class="s">"1088"</span> <span class="na">height</span><span class="o">=</span><span class="s">"637"</span> <span class="na">frameborder</span><span class="o">=</span><span class="s">"0"</span> <span class="na">allowfullscreen</span><span class="o">=</span><span class="s">"allowfullscreen"</span> <span class="na">allow</span><span class="o">=</span><span class="s">"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *"</span><span class="p">></</span><span class="nt">iframe</span><span class="p">><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"https://tudelft.h5p.com/js/h5p-resizer.js"</span> <span class="na">charset</span><span class="o">=</span><span class="s">"UTF-8"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=03f3b3c6-d3f6-4121-9f39-c30c8bf70ea5"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>That's right! We convert our signal into the frequency domain.</p> +<p>And if you would like an additional explanation of the key frequencies, you can find it <a href="https://medium.com/@kovalenko.alx/fun-with-fourier-591662576a77">here</a>.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=bfca25a5-75ce-4837-9387-01f95be10bd0"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#facb8e; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> <p>Note the use of <code>zip</code>, <code>stem</code>, <code>annotate</code> and the modulo operator +<code>%</code>. Refer to PA 2.3 if you do not understand these tools. Furthermore, note that the term _modulus_ is also used here (and in the textbook), which is another term for _absolute value._</p></div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=da13fbf3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=13234855"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h2 id="Task-0:-Demonstration-of-DFT-using-pulse-function">Task 0: Demonstration of DFT using pulse function<a class="anchor-link" href="#Task-0:-Demonstration-of-DFT-using-pulse-function">¶</a></h2><p>In the first part of this notebook, we use $x(t)=\Pi(\frac{t}{4})$, and its Fourier transform $X(f)=4 \,\textrm{sinc}(4f)$, as an example (see the first worked example in Chapter 3 on the Fourier transform). The pulse lasts for 4 seconds in the time domain; for convenience, below it is not centered at $t$ = 0, but shifted (delayed) to the right.</p> +<p>The signal $x(t)$ clearly is non-periodic and is an energy signal; apart from a short time span of 'activity' it is zero elsewhere.</p> +<p>We create a pulse function $x(t)$ in discrete time $x_n$ by numpy. The total signal duration is $T$ = 20 seconds (observation or record length). The sampling interval is $\Delta t$ = 1 second. There are $N$ = 20 samples, and each sample represents 1 second, hence $N \Delta t = T$.</p> +<p>Note that the time array starts at $t$ = 0 s, and hence, the last sample is at $t$ = 19 s (and not at $t$ = 20 s, as then we would have 21 samples).</p> +<h3 id="Task-0.1:-Visualize-the-Signal">Task 0.1: Visualize the Signal<a class="anchor-link" href="#Task-0.1:-Visualize-the-Signal">¶</a></h3> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=b33e1be2"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">t</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<span class="n">xt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">8</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">8</span><span class="p">)))</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">xt</span><span class="p">,</span><span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">12</span><span class="p">],</span> <span class="n">xt</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">12</span><span class="p">])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">ticks</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">21</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span> <span class="n">labels</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">21</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'time [s]'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'xn'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a338eede"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h3 id="Task-0.2:-Evaluate-(and-visualize)-the-DFT">Task 0.2: Evaluate (and visualize) the DFT<a class="anchor-link" href="#Task-0.2:-Evaluate-(and-visualize)-the-DFT">¶</a></h3><p>We use <code>numpy.fft.fft</code> to compute the one-dimensional Discrete Fourier Transform (DFT) of $x_n$, which takes a signal as argument and returns an array of coefficients (refer to the <a href="https://numpy.org/doc/stable/reference/generated/numpy.fft.fft.html">documentation</a> as needed).</p> +<p>The DFT converts $N$ samples of the time domain signal $x_n$, into $N$ samples of the frequency domain. In this case, it produces $X_k$ with $k = 0, 1, 2, \ldots, N-1$, with $N$ = 20, which are complex numbers.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=26d0f558-caa7-41f2-9477-60d74940fc10"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.2:</b> +Read the code cell below before executing it and identify the following: +<ol> +<li>Where is the DFT computed, and what is the output?</li> +<li>Why is the modulus (absolute value) used on the DFT output?</li> +<li>What are the values are used for the x and y axes of the plot?</li> +<li>How is frequency information found and added to the plot (mathematically)?</li> +</ol> +Once you understand the figure, continue reading to understand <em>what do these 20 complex numbers mean, and how should we interpret them?</em> +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=3acb465b"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">index_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> + +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">):</span> + <span class="k">if</span> <span class="n">x</span><span class="o">%</span><span class="k">5</span> == 0 or x==19: + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"f=</span><span class="si">{</span><span class="n">freq</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2"> Hz"</span> + <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> + <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">),</span> + <span class="n">textcoords</span><span class="o">=</span><span class="s2">"offset points"</span><span class="p">,</span> + <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span> + <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> + <span class="n">ha</span><span class="o">=</span><span class="s1">'center'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">21</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'fft-index'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=09c72cdd"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>The frequency resolution $\Delta f$ equals one-over-the-measurement-duration, hence $\Delta f = 1/T$. With that knowledge, we can reconstruct the frequencies expressed in Hertz.</p> +<p>The spectrum of the sampled signal is periodic in the sampling frequency $f_s$ which equals 1 Hz ($\Delta t$ = 1 s). Therefore, it is computed just for one period $[0,f_s)$. The last value, with index 19, represents the component with frequency $f$ = 0.95 Hz. A spectrum is commonly presented and interpreted as double-sided, so in the above graph we can interpret the spectral components with indices 10 to 19 corresponding to negative frequencies.</p> +<h3 id="Task-0.3:-Identify-negative-frequencies">Task 0.3: Identify negative frequencies<a class="anchor-link" href="#Task-0.3:-Identify-negative-frequencies">¶</a></h3> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=df1f483b"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> + +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)))</span> +<span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">):</span> + <span class="k">if</span> <span class="n">x</span><span class="o">%</span><span class="k">5</span> == 0 or x==19: + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"f=</span><span class="si">{</span><span class="n">freq</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2"> Hz"</span> + <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> + <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">),</span> + <span class="n">textcoords</span><span class="o">=</span><span class="s2">"offset points"</span><span class="p">,</span> + <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span> + <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> + <span class="n">ha</span><span class="o">=</span><span class="s1">'center'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">21</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'fft-index'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2d87a9a6"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>Now we can interpret the DFT of the $x(t)=\Pi(\frac{t}{4})$. The sampling interval is $\Delta t$ = 1 second, and the obsesrvation length is T=20 seconds, and we have N=20 samples.</p> +<ul> +<li>We can recognize a bit of a sinc function.</li> +<li>The DFT is computed from 0 Hz, for positive frequencies up to $\frac{fs}{2} = 0.5$ Hz, after which the negative frequencies follow from -0.5 to -0.05 Hz.</li> +<li>$X(f)=4 \textrm{sinc}(4f)$ has its first null at $f=0.25$Hz.</li> +</ul> +<h3 id="Task-0.4:-Create-symmetric-plot">Task 0.4: Create symmetric plot<a class="anchor-link" href="#Task-0.4:-Create-symmetric-plot">¶</a></h3><p>For convenient visualization, we may want to explicitly shift the negative frequencies to the left-hand side to create a symmetric plot. We can use <code>numpy.fft.fftshift</code> to do that. In other words, the zero-frequency component appears in the center of the spectrum. Now, it nicely shows a symmetric sprectrum. It well resembles the sinc-function (taking into account that we plot the modulus/absolute value). The output of the DFT still consists of $N$ = 20 elements. To enable this, we set up a new frequency array (in Hz) on the interval $[-fs/2,fs/2)$.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e1eef6b6-1e90-43db-b059-6521b2a840d3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.4:</b> +Read the code cell below before executing it and identify how the plot is modified based on the (new) specification of frequency. Note that it is more than just the <code>freq</code> variable! +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=a8aac894"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft_shift</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">)))</span> +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft_shift</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft_shift</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'|Xk|'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=569ca2d3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h3 id="Task-0.5:-Showing-spectrum-only-for-positive-frequencies">Task 0.5: Showing spectrum only for positive frequencies<a class="anchor-link" href="#Task-0.5:-Showing-spectrum-only-for-positive-frequencies">¶</a></h3><p>In practice, because of the symmetry, one typically plots only the right-hand side of the (double-sided) spectrum, hence only the part for positive frequencies $f \geq 0$. This is simply a matter of preference, and a way to save some space.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a26e361d-c5fa-47a2-b32c-416cc3d10659"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.5:</b> +Can you identify what has changed (in the code and visually), compared to the previous plot? +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=b9608638"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">N</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">xt</span><span class="p">)</span> +<span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=83c4ca67-9234-4741-a56f-294a12bcd98a"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.6:</b> +Confirm that you understand how we have arrived at the plot above, which illustrates the magnitude (amplitude) spectrum for frequencies $f \in [0,f_s/2)$, rather than $[0,f_s)$. +</p> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=9f5558b4"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h2 id="Task-1:-Application-of-DFT-using-simple-cosine">Task 1: Application of DFT using simple cosine<a class="anchor-link" href="#Task-1:-Application-of-DFT-using-simple-cosine">¶</a></h2> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=46dd5c0c"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>It is always a good idea, in spectral analysis, to run a test with a very simple, basic signal. In this way you can test and verify your coding and interpretation of the results.</p> +<p>Our basic signal is just a plain cosine. We take the amplitude equal to one, and zero initial phase, so the signal reads $x(t) = \cos(2 \pi f_c t)$, with $f_c$ = 3 Hz in this exercise. With such a simple signal, we know in advance how the spectrum should look like. Namely just a spike at $f$ = 3 Hz, and also one at $f$ = -3 Hz, as we're, for mathematical convenience, working with double sided spectra. The spectrum should be zero at all other frequencies.</p> +<p>As a side note: the cosine is strictly a periodic function, not a-periodic (as above); still, the Fourier transform of the cosine is defined as two Dirac delta pulses or peaks (at 3 Hz and -3 Hz). You may want to check out the second worked example in Chapter 3 on the Fourier transform: Fourier transform in the limit.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=87de3cc5"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 1:</b> +<p>Create a sampled (discrete time) cosine signal by sampling at $f_s$ = 10 Hz, for a duration of $T$ = 2 seconds (make sure you use exactly $N$ = 20 samples). Plot the sampled signal, compute its DFT and plot its magnitude spectrum $|X_k|$ with proper labeling of the axes (just like we did in the first part of this notebook). Include a plot of the spectrum of the sampled cosine signal using only the positive frequencies (up to $f_s/2$, as in the last plot of the previous task).</p> +<p><em>Note: you are expected to produce three separate plots.</em></p> +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=28ad034e"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">YOUR_CODE_HERE_PLOT_1</span> +</pre></div> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=af87d120"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">YOUR_CODE_HERE_PLOT_2</span> +</pre></div> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=6fd9014c"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">YOUR_CODE_HERE_PLOT_3</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=0b3584c9"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p><strong>End of notebook.</strong></p> +<h2 style="height: 60px"> +</h2> +<h3 style="position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; bottom: 60px; right: 50px; margin: 0; border: 0"> +<style> + .markdown {width:100%; position: relative} + article { position: relative } + </style> +<a href="http://creativecommons.org/licenses/by/4.0/" rel="license"> +<img alt="Creative Commons License" src="https://i.creativecommons.org/l/by/4.0/88x31.png" style="border-width:; width:88px; height:auto; padding-top:10px"/> +</a> +<a href="https://www.tudelft.nl/en/ceg" rel="TU Delft"> +<img alt="TU Delft" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png" style="border-width:0; width:100px; height:auto; padding-bottom:0px"/> +</a> +<a href="http://mude.citg.tudelft.nl/" rel="MUDE"> +<img alt="MUDE" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png" style="border-width:0; width:100px; height:auto; padding-bottom:0px"/> +</a> +</h3> +<span style="font-size: 75%"> +© Copyright 2024 <a href="http://mude.citg.tudelft.nl/" rel="MUDE">MUDE</a> TU Delft. This work is licensed under a <a href="http://creativecommons.org/licenses/by/4.0/" rel="license">CC BY 4.0 License</a>. + +</span></div> +</div> +</div> +</div> +</main> +</body> +<script type="application/vnd.jupyter.widget-state+json"> +{"state": {}, "version_major": 2, "version_minor": 0} +</script> +</html> diff --git a/src/teachers/Week_2_3/WS_2_3_solution.html b/src/teachers/Week_2_3/WS_2_3_solution.html new file mode 100644 index 00000000..979d95ec --- /dev/null +++ b/src/teachers/Week_2_3/WS_2_3_solution.html @@ -0,0 +1,8086 @@ +<!DOCTYPE html> + +<html lang="en"> +<head><meta charset="utf-8"/> +<meta content="width=device-width, initial-scale=1.0" name="viewport"/> +<title>WS_2_3_solution</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script><script> +(function() { + function addWidgetsRenderer() { + var mimeElement = document.querySelector('script[type="application/vnd.jupyter.widget-view+json"]'); + var scriptElement = document.createElement('script'); + + var widgetRendererSrc = 'https://unpkg.com/@jupyter-widgets/html-manager@*/dist/embed-amd.js'; + + var widgetState; + + // Fallback for older version: + try { + widgetState = mimeElement && JSON.parse(mimeElement.innerHTML); + + if (widgetState && (widgetState.version_major < 2 || !widgetState.version_major)) { + + var widgetRendererSrc = 'https://unpkg.com/@jupyter-js-widgets@*/dist/embed.js'; + + } + } catch(e) {} + + scriptElement.src = widgetRendererSrc; + document.body.appendChild(scriptElement); + } + + document.addEventListener('DOMContentLoaded', addWidgetsRenderer); +}()); +</script> +<style type="text/css"> + pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: var(--jp-cell-editor-active-background) } +.highlight { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } +.highlight .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ +.highlight .err { color: var(--jp-mirror-editor-error-color) } /* Error */ +.highlight .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ +.highlight .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ +.highlight .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ +.highlight .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ +.highlight .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ +.highlight .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ +.highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ +.highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ +.highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ +.highlight .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ +.highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ +.highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ +.highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ +.highlight .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ +.highlight .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ +.highlight .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ +.highlight .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ +.highlight .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ +.highlight .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ +.highlight .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ +.highlight .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ +.highlight .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ +.highlight .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ +.highlight .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ +.highlight .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ +.highlight .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ +.highlight .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ +.highlight .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ +.highlight .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ +.highlight .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ + </style> +<style type="text/css"> +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* + * Mozilla scrollbar styling + */ + +/* use standard opaque scrollbars for most nodes */ +[data-jp-theme-scrollbars='true'] { + scrollbar-color: rgb(var(--jp-scrollbar-thumb-color)) + var(--jp-scrollbar-background-color); +} + +/* for code nodes, use a transparent style of scrollbar. These selectors + * will match lower in the tree, and so will override the above */ +[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar, +[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; +} + +/* tiny scrollbar */ + +.jp-scrollbar-tiny { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; + scrollbar-width: thin; +} + +/* tiny scrollbar */ + +.jp-scrollbar-tiny::-webkit-scrollbar, +.jp-scrollbar-tiny::-webkit-scrollbar-corner { + background-color: transparent; + height: 4px; + width: 4px; +} + +.jp-scrollbar-tiny::-webkit-scrollbar-thumb { + background: rgba(var(--jp-scrollbar-thumb-color), 0.5); +} + +.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal { + border-left: 0 solid transparent; + border-right: 0 solid transparent; +} + +.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical { + border-top: 0 solid transparent; + border-bottom: 0 solid transparent; +} + +/* + * Lumino + */ + +.lm-ScrollBar[data-orientation='horizontal'] { + min-height: 16px; + max-height: 16px; + min-width: 45px; + border-top: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] { + min-width: 16px; + max-width: 16px; + min-height: 45px; + border-left: 1px solid #a0a0a0; +} + +.lm-ScrollBar-button { + background-color: #f0f0f0; + background-position: center center; + min-height: 15px; + max-height: 15px; + min-width: 15px; + max-width: 15px; +} + +.lm-ScrollBar-button:hover { + background-color: #dadada; +} + +.lm-ScrollBar-button.lm-mod-active { + background-color: #cdcdcd; +} + +.lm-ScrollBar-track { + background: #f0f0f0; +} + +.lm-ScrollBar-thumb { + background: #cdcdcd; +} + +.lm-ScrollBar-thumb:hover { + background: #bababa; +} + +.lm-ScrollBar-thumb.lm-mod-active { + background: #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb { + height: 100%; + min-width: 15px; + border-left: 1px solid #a0a0a0; + border-right: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb { + width: 100%; + min-height: 15px; + border-top: 1px solid #a0a0a0; + border-bottom: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: var(--jp-icon-caret-left); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: var(--jp-icon-caret-right); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: var(--jp-icon-caret-up); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: var(--jp-icon-caret-down); + background-size: 17px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Widget { + box-sizing: border-box; + position: relative; + overflow: hidden; +} + +.lm-Widget.lm-mod-hidden { + display: none !important; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + display: flex; + flex-direction: column; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-CommandPalette-search { + flex: 0 0 auto; +} + +.lm-CommandPalette-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + min-height: 0; + overflow: auto; + list-style-type: none; +} + +.lm-CommandPalette-header { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-CommandPalette-item { + display: flex; + flex-direction: row; +} + +.lm-CommandPalette-itemIcon { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemContent { + flex: 1 1 auto; + overflow: hidden; +} + +.lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemLabel { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-close-icon { + border: 1px solid transparent; + background-color: transparent; + position: absolute; + z-index: 1; + right: 3%; + top: 0; + bottom: 0; + margin: auto; + padding: 7px 0; + display: none; + vertical-align: middle; + outline: 0; + cursor: pointer; +} +.lm-close-icon:after { + content: 'X'; + display: block; + width: 15px; + height: 15px; + text-align: center; + color: #000; + font-weight: normal; + font-size: 12px; + cursor: pointer; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DockPanel { + z-index: 0; +} + +.lm-DockPanel-widget { + z-index: 0; +} + +.lm-DockPanel-tabBar { + z-index: 1; +} + +.lm-DockPanel-handle { + z-index: 2; +} + +.lm-DockPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-DockPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-DockPanel-handle[data-orientation='horizontal'] { + cursor: ew-resize; +} + +.lm-DockPanel-handle[data-orientation='vertical'] { + cursor: ns-resize; +} + +.lm-DockPanel-handle[data-orientation='horizontal']:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-DockPanel-handle[data-orientation='vertical']:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +.lm-DockPanel-overlay { + z-index: 3; + box-sizing: border-box; + pointer-events: none; +} + +.lm-DockPanel-overlay.lm-mod-hidden { + display: none !important; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Menu { + z-index: 10000; + position: absolute; + white-space: nowrap; + overflow-x: hidden; + overflow-y: auto; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-Menu-content { + margin: 0; + padding: 0; + display: table; + list-style-type: none; +} + +.lm-Menu-item { + display: table-row; +} + +.lm-Menu-item.lm-mod-hidden, +.lm-Menu-item.lm-mod-collapsed { + display: none !important; +} + +.lm-Menu-itemIcon, +.lm-Menu-itemSubmenuIcon { + display: table-cell; + text-align: center; +} + +.lm-Menu-itemLabel { + display: table-cell; + text-align: left; +} + +.lm-Menu-itemShortcut { + display: table-cell; + text-align: right; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-MenuBar { + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-MenuBar-content { + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + list-style-type: none; +} + +.lm-MenuBar-item { + box-sizing: border-box; +} + +.lm-MenuBar-itemIcon, +.lm-MenuBar-itemLabel { + display: inline-block; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-ScrollBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-ScrollBar[data-orientation='horizontal'] { + flex-direction: row; +} + +.lm-ScrollBar[data-orientation='vertical'] { + flex-direction: column; +} + +.lm-ScrollBar-button { + box-sizing: border-box; + flex: 0 0 auto; +} + +.lm-ScrollBar-track { + box-sizing: border-box; + position: relative; + overflow: hidden; + flex: 1 1 auto; +} + +.lm-ScrollBar-thumb { + box-sizing: border-box; + position: absolute; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-SplitPanel-child { + z-index: 0; +} + +.lm-SplitPanel-handle { + z-index: 1; +} + +.lm-SplitPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-SplitPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { + cursor: ew-resize; +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { + cursor: ns-resize; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-TabBar[data-orientation='horizontal'] { + flex-direction: row; + align-items: flex-end; +} + +.lm-TabBar[data-orientation='vertical'] { + flex-direction: column; + align-items: flex-end; +} + +.lm-TabBar-content { + margin: 0; + padding: 0; + display: flex; + flex: 1 1 auto; + list-style-type: none; +} + +.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { + flex-direction: row; +} + +.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { + flex-direction: column; +} + +.lm-TabBar-tab { + display: flex; + flex-direction: row; + box-sizing: border-box; + overflow: hidden; + touch-action: none; /* Disable native Drag/Drop */ +} + +.lm-TabBar-tabIcon, +.lm-TabBar-tabCloseIcon { + flex: 0 0 auto; +} + +.lm-TabBar-tabLabel { + flex: 1 1 auto; + overflow: hidden; + white-space: nowrap; +} + +.lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; +} + +.lm-TabBar-tab.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar-addButton.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { + position: relative; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { + left: 0; + transition: left 150ms ease; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { + top: 0; + transition: top 150ms ease; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { + transition: none; +} + +.lm-TabBar-tabLabel .lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; + background: inherit; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabPanel-tabBar { + z-index: 1; +} + +.lm-TabPanel-stackedPanel { + z-index: 0; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Collapse { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.jp-Collapse-header { + padding: 1px 12px; + background-color: var(--jp-layout-color1); + border-bottom: solid var(--jp-border-width) var(--jp-border-color2); + color: var(--jp-ui-font-color1); + cursor: pointer; + display: flex; + align-items: center; + font-size: var(--jp-ui-font-size0); + font-weight: 600; + text-transform: uppercase; + user-select: none; +} + +.jp-Collapser-icon { + height: 16px; +} + +.jp-Collapse-header-collapsed .jp-Collapser-icon { + transform: rotate(-90deg); + margin: auto 0; +} + +.jp-Collapser-title { + line-height: 25px; +} + +.jp-Collapse-contents { + padding: 0 12px; + background-color: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + overflow: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */ + +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +/* Icons urls */ + +:root { + --jp-icon-add-above: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5MikiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik00Ljc1IDQuOTMwNjZINi42MjVWNi44MDU2NkM2LjYyNSA3LjAxMTkxIDYuNzkzNzUgNy4xODA2NiA3IDcuMTgwNjZDNy4yMDYyNSA3LjE4MDY2IDcuMzc1IDcuMDExOTEgNy4zNzUgNi44MDU2NlY0LjkzMDY2SDkuMjVDOS40NTYyNSA0LjkzMDY2IDkuNjI1IDQuNzYxOTEgOS42MjUgNC41NTU2NkM5LjYyNSA0LjM0OTQxIDkuNDU2MjUgNC4xODA2NiA5LjI1IDQuMTgwNjZINy4zNzVWMi4zMDU2NkM3LjM3NSAyLjA5OTQxIDcuMjA2MjUgMS45MzA2NiA3IDEuOTMwNjZDNi43OTM3NSAxLjkzMDY2IDYuNjI1IDIuMDk5NDEgNi42MjUgMi4zMDU2NlY0LjE4MDY2SDQuNzVDNC41NDM3NSA0LjE4MDY2IDQuMzc1IDQuMzQ5NDEgNC4zNzUgNC41NTU2NkM0LjM3NSA0Ljc2MTkxIDQuNTQzNzUgNC45MzA2NiA0Ljc1IDQuOTMwNjZaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC43Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgOS41VjExLjVMMi41IDExLjVWOS41TDExLjUgOS41Wk0xMiA4QzEyLjU1MjMgOCAxMyA4LjQ0NzcyIDEzIDlWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzTDIgMTNDMS40NDc3MiAxMyAxIDEyLjU1MjMgMSAxMlY5QzEgOC40NDc3MiAxLjQ0NzcxIDggMiA4TDEyIDhaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5MiI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEwIDEuNTU1NjYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==); + --jp-icon-add-below: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5OCkiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik05LjI1IDEwLjA2OTNMNy4zNzUgMTAuMDY5M0w3LjM3NSA4LjE5NDM0QzcuMzc1IDcuOTg4MDkgNy4yMDYyNSA3LjgxOTM0IDcgNy44MTkzNEM2Ljc5Mzc1IDcuODE5MzQgNi42MjUgNy45ODgwOSA2LjYyNSA4LjE5NDM0TDYuNjI1IDEwLjA2OTNMNC43NSAxMC4wNjkzQzQuNTQzNzUgMTAuMDY5MyA0LjM3NSAxMC4yMzgxIDQuMzc1IDEwLjQ0NDNDNC4zNzUgMTAuNjUwNiA0LjU0Mzc1IDEwLjgxOTMgNC43NSAxMC44MTkzTDYuNjI1IDEwLjgxOTNMNi42MjUgMTIuNjk0M0M2LjYyNSAxMi45MDA2IDYuNzkzNzUgMTMuMDY5MyA3IDEzLjA2OTNDNy4yMDYyNSAxMy4wNjkzIDcuMzc1IDEyLjkwMDYgNy4zNzUgMTIuNjk0M0w3LjM3NSAxMC44MTkzTDkuMjUgMTAuODE5M0M5LjQ1NjI1IDEwLjgxOTMgOS42MjUgMTAuNjUwNiA5LjYyNSAxMC40NDQzQzkuNjI1IDEwLjIzODEgOS40NTYyNSAxMC4wNjkzIDkuMjUgMTAuMDY5M1oiIGZpbGw9IiM2MTYxNjEiIHN0cm9rZT0iIzYxNjE2MSIgc3Ryb2tlLXdpZHRoPSIwLjciLz4KPC9nPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDUuNUwyLjUgMy41TDExLjUgMy41TDExLjUgNS41TDIuNSA1LjVaTTIgN0MxLjQ0NzcyIDcgMSA2LjU1MjI4IDEgNkwxIDNDMSAyLjQ0NzcyIDEuNDQ3NzIgMiAyIDJMMTIgMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzTDEzIDZDMTMgNi41NTIyOSAxMi41NTIzIDcgMTIgN0wyIDdaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5OCI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KDEgMS43NDg0NmUtMDcgMS43NDg0NmUtMDcgLTEgNCAxMy40NDQzKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=); + --jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-bell: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgogICA8cGF0aCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzMzMzMzIgogICAgICBkPSJtOCAwLjI5Yy0xLjQgMC0yLjcgMC43My0zLjYgMS44LTEuMiAxLjUtMS40IDMuNC0xLjUgNS4yLTAuMTggMi4yLTAuNDQgNC0yLjMgNS4zbDAuMjggMS4zaDVjMC4wMjYgMC42NiAwLjMyIDEuMSAwLjcxIDEuNSAwLjg0IDAuNjEgMiAwLjYxIDIuOCAwIDAuNTItMC40IDAuNi0xIDAuNzEtMS41aDVsMC4yOC0xLjNjLTEuOS0wLjk3LTIuMi0zLjMtMi4zLTUuMy0wLjEzLTEuOC0wLjI2LTMuNy0xLjUtNS4yLTAuODUtMS0yLjItMS44LTMuNi0xLjh6bTAgMS40YzAuODggMCAxLjkgMC41NSAyLjUgMS4zIDAuODggMS4xIDEuMSAyLjcgMS4yIDQuNCAwLjEzIDEuNyAwLjIzIDMuNiAxLjMgNS4yaC0xMGMxLjEtMS42IDEuMi0zLjQgMS4zLTUuMiAwLjEzLTEuNyAwLjMtMy4zIDEuMi00LjQgMC41OS0wLjcyIDEuNi0xLjMgMi41LTEuM3ptLTAuNzQgMTJoMS41Yy0wLjAwMTUgMC4yOCAwLjAxNSAwLjc5LTAuNzQgMC43OS0wLjczIDAuMDAxNi0wLjcyLTAuNTMtMC43NC0wLjc5eiIgLz4KPC9zdmc+Cg==); + --jp-icon-bug-dot: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTcuMTkgOEgyMFYxMEgxNy45MUMxNy45NiAxMC4zMyAxOCAxMC42NiAxOCAxMVYxMkgyMFYxNEgxOC41SDE4VjE0LjAyNzVDMTUuNzUgMTQuMjc2MiAxNCAxNi4xODM3IDE0IDE4LjVDMTQgMTkuMjA4IDE0LjE2MzUgMTkuODc3OSAxNC40NTQ5IDIwLjQ3MzlDMTMuNzA2MyAyMC44MTE3IDEyLjg3NTcgMjEgMTIgMjFDOS43OCAyMSA3Ljg1IDE5Ljc5IDYuODEgMThINFYxNkg2LjA5QzYuMDQgMTUuNjcgNiAxNS4zNCA2IDE1VjE0SDRWMTJINlYxMUM2IDEwLjY2IDYuMDQgMTAuMzMgNi4wOSAxMEg0VjhINi44MUM3LjI2IDcuMjIgNy44OCA2LjU1IDguNjIgNi4wNEw3IDQuNDFMOC40MSAzTDEwLjU5IDUuMTdDMTEuMDQgNS4wNiAxMS41MSA1IDEyIDVDMTIuNDkgNSAxMi45NiA1LjA2IDEzLjQyIDUuMTdMMTUuNTkgM0wxNyA0LjQxTDE1LjM3IDYuMDRDMTYuMTIgNi41NSAxNi43NCA3LjIyIDE3LjE5IDhaTTEwIDE2SDE0VjE0SDEwVjE2Wk0xMCAxMkgxNFYxMEgxMFYxMloiIGZpbGw9IiM2MTYxNjEiLz4KICAgICAgICA8cGF0aCBkPSJNMjIgMTguNUMyMiAyMC40MzMgMjAuNDMzIDIyIDE4LjUgMjJDMTYuNTY3IDIyIDE1IDIwLjQzMyAxNSAxOC41QzE1IDE2LjU2NyAxNi41NjcgMTUgMTguNSAxNUMyMC40MzMgMTUgMjIgMTYuNTY3IDIyIDE4LjVaIiBmaWxsPSIjNjE2MTYxIi8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=); + --jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-code-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICA8cGF0aCBkPSJNNi41OSwzLjQxTDIsOEw2LjU5LDEyLjZMOCwxMS4xOEw0LjgyLDhMOCw0LjgyTDYuNTksMy40MU0xMi40MSwzLjQxTDExLDQuODJMMTQuMTgsOEwxMSwxMS4xOEwxMi40MSwxMi42TDE3LDhMMTIuNDEsMy40MU0yMS41OSwxMS41OUwxMy41LDE5LjY4TDkuODMsMTZMOC40MiwxNy40MUwxMy41LDIyLjVMMjMsMTNMMjEuNTksMTEuNTlaIiAvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-code: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==); + --jp-icon-collapse-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiAxM3YyaDh2LTJ6IiAvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1jb25zb2xlLWljb24tYmFja2dyb3VuZC1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtY29uc29sZS1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIj4KICAgIDxwYXRoIGQ9Ik0xMDUgMTI3LjNoNDB2MTIuOGgtNDB6TTUxLjEgNzdMNzQgOTkuOWwtMjMuMyAyMy4zIDEwLjUgMTAuNSAyMy4zLTIzLjNMOTUgOTkuOSA4NC41IDg5LjQgNjEuNiA2Ni41eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-copyright: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0xMS44OCw5LjE0YzEuMjgsMC4wNiwxLjYxLDEuMTUsMS42MywxLjY2aDEuNzljLTAuMDgtMS45OC0xLjQ5LTMuMTktMy40NS0zLjE5QzkuNjQsNy42MSw4LDksOCwxMi4xNCBjMCwxLjk0LDAuOTMsNC4yNCwzLjg0LDQuMjRjMi4yMiwwLDMuNDEtMS42NSwzLjQ0LTIuOTVoLTEuNzljLTAuMDMsMC41OS0wLjQ1LDEuMzgtMS42MywxLjQ0QzEwLjU1LDE0LjgzLDEwLDEzLjgxLDEwLDEyLjE0IEMxMCw5LjI1LDExLjI4LDkuMTYsMTEuODgsOS4xNHogTTEyLDJDNi40OCwyLDIsNi40OCwyLDEyczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMFMxNy41MiwyLDEyLDJ6IE0xMiwyMGMtNC40MSwwLTgtMy41OS04LTggczMuNTktOCw4LThzOCwzLjU5LDgsOFMxNi40MSwyMCwxMiwyMHoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-delete: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjI2MjYyIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz4KPC9zdmc+Cg==); + --jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-duplicate: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuNzk5OTggMC44NzVIOC44OTU4MkM5LjIwMDYxIDAuODc1IDkuNDQ5OTggMS4xMzkxNCA5LjQ0OTk4IDEuNDYxOThDOS40NDk5OCAxLjc4NDgyIDkuMjAwNjEgMi4wNDg5NiA4Ljg5NTgyIDIuMDQ4OTZIMy4zNTQxNUMzLjA0OTM2IDIuMDQ4OTYgMi43OTk5OCAyLjMxMzEgMi43OTk5OCAyLjYzNTk0VjkuNjc5NjlDMi43OTk5OCAxMC4wMDI1IDIuNTUwNjEgMTAuMjY2NyAyLjI0NTgyIDEwLjI2NjdDMS45NDEwMyAxMC4yNjY3IDEuNjkxNjUgMTAuMDAyNSAxLjY5MTY1IDkuNjc5NjlWMi4wNDg5NkMxLjY5MTY1IDEuNDAzMjggMi4xOTA0IDAuODc1IDIuNzk5OTggMC44NzVaTTUuMzY2NjUgMTEuOVY0LjU1SDExLjA4MzNWMTEuOUg1LjM2NjY1Wk00LjE0MTY1IDQuMTQxNjdDNC4xNDE2NSAzLjY5MDYzIDQuNTA3MjggMy4zMjUgNC45NTgzMiAzLjMyNUgxMS40OTE3QzExLjk0MjcgMy4zMjUgMTIuMzA4MyAzLjY5MDYzIDEyLjMwODMgNC4xNDE2N1YxMi4zMDgzQzEyLjMwODMgMTIuNzU5NCAxMS45NDI3IDEzLjEyNSAxMS40OTE3IDEzLjEyNUg0Ljk1ODMyQzQuNTA3MjggMTMuMTI1IDQuMTQxNjUgMTIuNzU5NCA0LjE0MTY1IDEyLjMwODNWNC4xNDE2N1oiIGZpbGw9IiM2MTYxNjEiLz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNOS40MzU3NCA4LjI2NTA3SDguMzY0MzFWOS4zMzY1QzguMzY0MzEgOS40NTQzNSA4LjI2Nzg4IDkuNTUwNzggOC4xNTAwMiA5LjU1MDc4QzguMDMyMTcgOS41NTA3OCA3LjkzNTc0IDkuNDU0MzUgNy45MzU3NCA5LjMzNjVWOC4yNjUwN0g2Ljg2NDMxQzYuNzQ2NDUgOC4yNjUwNyA2LjY1MDAyIDguMTY4NjQgNi42NTAwMiA4LjA1MDc4QzYuNjUwMDIgNy45MzI5MiA2Ljc0NjQ1IDcuODM2NSA2Ljg2NDMxIDcuODM2NUg3LjkzNTc0VjYuNzY1MDdDNy45MzU3NCA2LjY0NzIxIDguMDMyMTcgNi41NTA3OCA4LjE1MDAyIDYuNTUwNzhDOC4yNjc4OCA2LjU1MDc4IDguMzY0MzEgNi42NDcyMSA4LjM2NDMxIDYuNzY1MDdWNy44MzY1SDkuNDM1NzRDOS41NTM2IDcuODM2NSA5LjY1MDAyIDcuOTMyOTIgOS42NTAwMiA4LjA1MDc4QzkuNjUwMDIgOC4xNjg2NCA5LjU1MzYgOC4yNjUwNyA5LjQzNTc0IDguMjY1MDdaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC41Ii8+Cjwvc3ZnPgo=); + --jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-error: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIyIi8+PHBhdGggZD0iTTEwIDNoNHYxMmgtNHoiLz48L2c+CjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz4KPC9zdmc+Cg==); + --jp-icon-expand-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNMTEgMTBIOXYzSDZ2MmgzdjNoMnYtM2gzdi0yaC0zeiIgLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==); + --jp-icon-filter-dot: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWRvdCIgZmlsbD0iI0ZGRiI+CiAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE3IiByPSIzIj48L2NpcmNsZT4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-filter: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-folder-favorite: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggY2xhc3M9ImpwLWljb24zIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxNjE2MSIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0yLjA2IDExTDE1IDE1LjI4IDEyLjA2IDE3bC43OC0zLjMzLTIuNTktMi4yNCAzLjQxLS4yOUwxNSA4bDEuMzQgMy4xNCAzLjQxLjI5LTIuNTkgMi4yNC43OCAzLjMzeiIvPgo8L3N2Zz4K); + --jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=); + --jp-icon-home: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ii8+Cjwvc3ZnPgo=); + --jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==); + --jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=); + --jp-icon-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUwLjk3OCA1MC45NzgiPgoJPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KCQk8cGF0aCBkPSJNNDMuNTIsNy40NThDMzguNzExLDIuNjQ4LDMyLjMwNywwLDI1LjQ4OSwwQzE4LjY3LDAsMTIuMjY2LDIuNjQ4LDcuNDU4LDcuNDU4CgkJCWMtOS45NDMsOS45NDEtOS45NDMsMjYuMTE5LDAsMzYuMDYyYzQuODA5LDQuODA5LDExLjIxMiw3LjQ1NiwxOC4wMzEsNy40NThjMCwwLDAuMDAxLDAsMC4wMDIsMAoJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoKCQkJIE00Mi4xMDYsNDIuMTA1Yy00LjQzMiw0LjQzMS0xMC4zMzIsNi44NzItMTYuNjE1LDYuODcyaC0wLjAwMmMtNi4yODUtMC4wMDEtMTIuMTg3LTIuNDQxLTE2LjYxNy02Ljg3MgoJCQljLTkuMTYyLTkuMTYzLTkuMTYyLTI0LjA3MSwwLTMzLjIzM0MxMy4zMDMsNC40NCwxOS4yMDQsMiwyNS40ODksMmM2LjI4NCwwLDEyLjE4NiwyLjQ0LDE2LjYxNyw2Ljg3MgoJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4KCQk8cGF0aCBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1MwoJCQljMC40NjgtMC41MzYsMC45MjMtMS4wNjIsMS4zNjctMS41NzVjMC42MjYtMC43NTMsMS4xMDQtMS40NzgsMS40MzYtMi4xNzVjMC4zMzEtMC43MDcsMC40OTUtMS41NDEsMC40OTUtMi41CgkJCWMwLTEuMDk2LTAuMjYtMi4wODgtMC43NzktMi45NzljLTAuNTY1LTAuODc5LTEuNTAxLTEuMzM2LTIuODA2LTEuMzY5Yy0xLjgwMiwwLjA1Ny0yLjk4NSwwLjY2Ny0zLjU1LDEuODMyCgkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkKCQkJYzEuMDYyLTEuNjQsMi44NTUtMi40ODEsNS4zNzgtMi41MjdjMi4xNiwwLjAyMywzLjg3NCwwLjYwOCw1LjE0MSwxLjc1OGMxLjI3OCwxLjE2LDEuOTI5LDIuNzY0LDEuOTUsNC44MTEKCQkJYzAsMS4xNDItMC4xMzcsMi4xMTEtMC40MSwyLjkxMWMtMC4zMDksMC44NDUtMC43MzEsMS41OTMtMS4yNjgsMi4yNDNjLTAuNDkyLDAuNjUtMS4wNjgsMS4zMTgtMS43MywyLjAwMgoJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5CgkJCUMyNi41ODksMzIuMjE4LDIzLjU3OCwzMi4yMTgsMjMuNTc4LDMyLjIxOHogTTIzLjU3OCwzOC4yMnYtMy40ODRoMy4wNzZ2My40ODRIMjMuNTc4eiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaW5zcGVjdG9yLWljb24tY29sb3IganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K); + --jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtanNvbi1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0Y5QTgyNSI+CiAgICA8cGF0aCBkPSJNMjAuMiAxMS44Yy0xLjYgMC0xLjcuNS0xLjcgMSAwIC40LjEuOS4xIDEuMy4xLjUuMS45LjEgMS4zIDAgMS43LTEuNCAyLjMtMy41IDIuM2gtLjl2LTEuOWguNWMxLjEgMCAxLjQgMCAxLjQtLjggMC0uMyAwLS42LS4xLTEgMC0uNC0uMS0uOC0uMS0xLjIgMC0xLjMgMC0xLjggMS4zLTItMS4zLS4yLTEuMy0uNy0xLjMtMiAwLS40LjEtLjguMS0xLjIuMS0uNC4xLS43LjEtMSAwLS44LS40LS43LTEuNC0uOGgtLjVWNC4xaC45YzIuMiAwIDMuNS43IDMuNSAyLjMgMCAuNC0uMS45LS4xIDEuMy0uMS41LS4xLjktLjEgMS4zIDAgLjUuMiAxIDEuNyAxdjEuOHpNMS44IDEwLjFjMS42IDAgMS43LS41IDEuNy0xIDAtLjQtLjEtLjktLjEtMS4zLS4xLS41LS4xLS45LS4xLTEuMyAwLTEuNiAxLjQtMi4zIDMuNS0yLjNoLjl2MS45aC0uNWMtMSAwLTEuNCAwLTEuNC44IDAgLjMgMCAuNi4xIDEgMCAuMi4xLjYuMSAxIDAgMS4zIDAgMS44LTEuMyAyQzYgMTEuMiA2IDExLjcgNiAxM2MwIC40LS4xLjgtLjEgMS4yLS4xLjMtLjEuNy0uMSAxIDAgLjguMy44IDEuNC44aC41djEuOWgtLjljLTIuMSAwLTMuNS0uNi0zLjUtMi4zIDAtLjQuMS0uOS4xLTEuMy4xLS41LjEtLjkuMS0xLjMgMC0uNS0uMi0xLTEuNy0xdi0xLjl6Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjEzLjgiIHI9IjIuMSIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSI4LjIiIHI9IjIuMSIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGcgY2xhc3M9ImpwLWp1cHl0ZXItaWNvbi1jb2xvciIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgIDxnIGNsYXNzPSJqcC1qdXB5dGVyLWljb24tY29sb3IiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=); + --jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K); + --jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==); + --jp-icon-launch: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yNiwyOEg2YTIuMDAyNywyLjAwMjcsMCwwLDEtMi0yVjZBMi4wMDI3LDIuMDAyNywwLDAsMSw2LDRIMTZWNkg2VjI2SDI2VjE2aDJWMjZBMi4wMDI3LDIuMDAyNywwLDAsMSwyNiwyOFoiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMjAgMiAyMCA0IDI2LjU4NiA0IDE4IDEyLjU4NiAxOS40MTQgMTQgMjggNS40MTQgMjggMTIgMzAgMTIgMzAgMiAyMCAyIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==); + --jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=); + --jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4K); + --jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==); + --jp-icon-move-down: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMTIuNDcxIDcuNTI4OTlDMTIuNzYzMiA3LjIzNjg0IDEyLjc2MzIgNi43NjMxNiAxMi40NzEgNi40NzEwMVY2LjQ3MTAxQzEyLjE3OSA2LjE3OTA1IDExLjcwNTcgNi4xNzg4NCAxMS40MTM1IDYuNDcwNTRMNy43NSAxMC4xMjc1VjEuNzVDNy43NSAxLjMzNTc5IDcuNDE0MjEgMSA3IDFWMUM2LjU4NTc5IDEgNi4yNSAxLjMzNTc5IDYuMjUgMS43NVYxMC4xMjc1TDIuNTk3MjYgNi40NjgyMkMyLjMwMzM4IDYuMTczODEgMS44MjY0MSA2LjE3MzU5IDEuNTMyMjYgNi40Njc3NFY2LjQ2Nzc0QzEuMjM4MyA2Ljc2MTcgMS4yMzgzIDcuMjM4MyAxLjUzMjI2IDcuNTMyMjZMNi4yOTI4OSAxMi4yOTI5QzYuNjgzNDIgMTIuNjgzNCA3LjMxNjU4IDEyLjY4MzQgNy43MDcxMSAxMi4yOTI5TDEyLjQ3MSA3LjUyODk5WiIgZmlsbD0iIzYxNjE2MSIvPgo8L3N2Zz4K); + --jp-icon-move-up: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMS41Mjg5OSA2LjQ3MTAxQzEuMjM2ODQgNi43NjMxNiAxLjIzNjg0IDcuMjM2ODQgMS41Mjg5OSA3LjUyODk5VjcuNTI4OTlDMS44MjA5NSA3LjgyMDk1IDIuMjk0MjYgNy44MjExNiAyLjU4NjQ5IDcuNTI5NDZMNi4yNSAzLjg3MjVWMTIuMjVDNi4yNSAxMi42NjQyIDYuNTg1NzkgMTMgNyAxM1YxM0M3LjQxNDIxIDEzIDcuNzUgMTIuNjY0MiA3Ljc1IDEyLjI1VjMuODcyNUwxMS40MDI3IDcuNTMxNzhDMTEuNjk2NiA3LjgyNjE5IDEyLjE3MzYgNy44MjY0MSAxMi40Njc3IDcuNTMyMjZWNy41MzIyNkMxMi43NjE3IDcuMjM4MyAxMi43NjE3IDYuNzYxNyAxMi40Njc3IDYuNDY3NzRMNy43MDcxMSAxLjcwNzExQzcuMzE2NTggMS4zMTY1OCA2LjY4MzQyIDEuMzE2NTggNi4yOTI4OSAxLjcwNzExTDEuNTI4OTkgNi40NzEwMVoiIGZpbGw9IiM2MTYxNjEiLz4KPC9zdmc+Cg==); + --jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=); + --jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtbm90ZWJvb2staWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-numbering: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTQgMTlINlYxOS41SDVWMjAuNUg2VjIxSDRWMjJIN1YxOEg0VjE5Wk01IDEwSDZWNkg0VjdINVYxMFpNNCAxM0g1LjhMNCAxNS4xVjE2SDdWMTVINS4yTDcgMTIuOVYxMkg0VjEzWk05IDdWOUgyM1Y3SDlaTTkgMjFIMjNWMTlIOVYyMVpNOSAxNUgyM1YxM0g5VjE1WiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-offline-bolt: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDIuMDJjLTUuNTEgMC05Ljk4IDQuNDctOS45OCA5Ljk4czQuNDcgOS45OCA5Ljk4IDkuOTggOS45OC00LjQ3IDkuOTgtOS45OFMxNy41MSAyLjAyIDEyIDIuMDJ6TTExLjQ4IDIwdi02LjI2SDhMMTMgNHY2LjI2aDMuMzVMMTEuNDggMjB6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-pdf: url(data:image/svg+xml;base64,PHN2ZwogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiIgd2lkdGg9IjE2Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0ZGMkEyQSIKICAgICAgIGQ9Im0gMjIuMzQ0MzY5LC0zLjAxNjM2NDIgaCA1LjYzODYwNCB2IDEuNTc5MjQzMyBoIC0zLjU0OTIyNyB2IDEuNTA4NjkyOTkgaCAzLjMzNzU3NiBWIDEuNjUwODE1NCBoIC0zLjMzNzU3NiB2IDMuNDM1MjYxMyBoIC0yLjA4OTM3NyB6IG0gLTcuMTM2NDQ0LDEuNTc5MjQzMyB2IDQuOTQzOTU0MyBoIDAuNzQ4OTIgcSAxLjI4MDc2MSwwIDEuOTUzNzAzLC0wLjYzNDk1MzUgMC42NzgzNjksLTAuNjM0OTUzNSAwLjY3ODM2OSwtMS44NDUxNjQxIDAsLTEuMjA0NzgzNTUgLTAuNjcyOTQyLC0xLjgzNDMxMDExIC0wLjY3Mjk0MiwtMC42Mjk1MjY1OSAtMS45NTkxMywtMC42Mjk1MjY1OSB6IG0gLTIuMDg5Mzc3LC0xLjU3OTI0MzMgaCAyLjIwMzM0MyBxIDEuODQ1MTY0LDAgMi43NDYwMzksMC4yNjU5MjA3IDAuOTA2MzAxLDAuMjYwNDkzNyAxLjU1MjEwOCwwLjg5MDAyMDMgMC41Njk4MywwLjU0ODEyMjMgMC44NDY2MDUsMS4yNjQ0ODAwNiAwLjI3Njc3NCwwLjcxNjM1NzgxIDAuMjc2Nzc0LDEuNjIyNjU4OTQgMCwwLjkxNzE1NTEgLTAuMjc2Nzc0LDEuNjM4OTM5OSAtMC4yNzY3NzUsMC43MTYzNTc4IC0wLjg0NjYwNSwxLjI2NDQ4IC0wLjY1MTIzNCwwLjYyOTUyNjYgLTEuNTYyOTYyLDAuODk1NDQ3MyAtMC45MTE3MjgsMC4yNjA0OTM3IC0yLjczNTE4NSwwLjI2MDQ5MzcgaCAtMi4yMDMzNDMgeiBtIC04LjE0NTg1NjUsMCBoIDMuNDY3ODIzIHEgMS41NDY2ODE2LDAgMi4zNzE1Nzg1LDAuNjg5MjIzIDAuODMwMzI0LDAuNjgzNzk2MSAwLjgzMDMyNCwxLjk1MzcwMzE0IDAsMS4yNzUzMzM5NyAtMC44MzAzMjQsMS45NjQ1NTcwNiBRIDkuOTg3MTk2MSwyLjI3NDkxNSA4LjQ0MDUxNDUsMi4yNzQ5MTUgSCA3LjA2MjA2ODQgViA1LjA4NjA3NjcgSCA0Ljk3MjY5MTUgWiBtIDIuMDg5Mzc2OSwxLjUxNDExOTkgdiAyLjI2MzAzOTQzIGggMS4xNTU5NDEgcSAwLjYwNzgxODgsMCAwLjkzODg2MjksLTAuMjkzMDU1NDcgMC4zMzEwNDQxLC0wLjI5ODQ4MjQxIDAuMzMxMDQ0MSwtMC44NDExNzc3MiAwLC0wLjU0MjY5NTMxIC0wLjMzMTA0NDEsLTAuODM1NzUwNzQgLTAuMzMxMDQ0MSwtMC4yOTMwNTU1IC0wLjkzODg2MjksLTAuMjkzMDU1NSB6IgovPgo8L3N2Zz4K); + --jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iLTEwIC0xMCAxMzEuMTYxMzYxNjk0MzM1OTQgMTMyLjM4ODk5OTkzODk2NDg0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzA2OTk4IiBkPSJNIDU0LjkxODc4NSw5LjE5Mjc0MjFlLTQgQyA1MC4zMzUxMzIsMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4wOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0NzcxNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYgMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0LjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYxODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1IDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0OTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5MDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43ODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYyNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4LC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0OCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUsOS4xOTI3NDIxZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNTc5IGMgMi43Njk1NDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUtNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1IC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUsLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2IDUuMDMxMjUsLTUuMTI0OTk5NiB6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2ZmZDQzYiIgZD0ibSA4NS42Mzc1MzUsMjguNjU3MTY5IHYgMTEuOTA2MjUgYyAwLDkuMjMwNzU1IC03LjgyNTg5NSwxNi45OTk5OTkgLTE2Ljc1LDE3IGggLTI2Ljc4MTI1IGMgLTcuMzM1ODMzLDAgLTEzLjQwNjI0OSw2LjI3ODQ4MyAtMTMuNDA2MjUsMTMuNjI1IHYgMjUuNTMxMjQ3IGMgMCw3LjI2NjM0NCA2LjMxODU4OCwxMS41NDAzMjQgMTMuNDA2MjUsMTMuNjI1MDA0IDguNDg3MzMxLDIuNDk1NjEgMTYuNjI2MjM3LDIuOTQ2NjMgMjYuNzgxMjUsMCA2Ljc1MDE1NSwtMS45NTQzOSAxMy40MDYyNTMsLTUuODg3NjEgMTMuNDA2MjUsLTEzLjYyNTAwNCBWIDg2LjUwMDkxOSBoIC0yNi43ODEyNSB2IC0zLjQwNjI1IGggMjYuNzgxMjUgMTMuNDA2MjU0IGMgNy43OTI0NjEsMCAxMC42OTYyNTEsLTUuNDM1NDA4IDEzLjQwNjI0MSwtMTMuNTkzNzUgMi43OTkzMywtOC4zOTg4ODYgMi42ODAyMiwtMTYuNDc1Nzc2IDAsLTI3LjI1IC0xLjkyNTc4LC03Ljc1NzQ0MSAtNS42MDM4NywtMTMuNTkzNzUgLTEzLjQwNjI0MSwtMTMuNTkzNzUgeiBtIC0xNS4wNjI1LDY0LjY1NjI1IGMgMi43Nzk0NzgsM2UtNiA1LjAzMTI1LDIuMjc3NDE3IDUuMDMxMjUsNS4wOTM3NDcgLTJlLTYsMi44MjYzNTQgLTIuMjUxNzc1LDUuMTI1MDA0IC01LjAzMTI1LDUuMTI1MDA0IC0yLjc2OTU1LDAgLTUuMDMxMjUsLTIuMjk4NjUgLTUuMDMxMjUsLTUuMTI1MDA0IDJlLTYsLTIuODE2MzMgMi4yNjE2OTcsLTUuMDkzNzQ3IDUuMDMxMjUsLTUuMDkzNzQ3IHoiLz4KPC9zdmc+Cg==); + --jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==); + --jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-redo: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==); + --jp-icon-share: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTSAxOCAyIEMgMTYuMzU0OTkgMiAxNSAzLjM1NDk5MDQgMTUgNSBDIDE1IDUuMTkwOTUyOSAxNS4wMjE3OTEgNS4zNzcxMjI0IDE1LjA1NjY0MSA1LjU1ODU5MzggTCA3LjkyMTg3NSA5LjcyMDcwMzEgQyA3LjM5ODUzOTkgOS4yNzc4NTM5IDYuNzMyMDc3MSA5IDYgOSBDIDQuMzU0OTkwNCA5IDMgMTAuMzU0OTkgMyAxMiBDIDMgMTMuNjQ1MDEgNC4zNTQ5OTA0IDE1IDYgMTUgQyA2LjczMjA3NzEgMTUgNy4zOTg1Mzk5IDE0LjcyMjE0NiA3LjkyMTg3NSAxNC4yNzkyOTcgTCAxNS4wNTY2NDEgMTguNDM5NDUzIEMgMTUuMDIxNTU1IDE4LjYyMTUxNCAxNSAxOC44MDgzODYgMTUgMTkgQyAxNSAyMC42NDUwMSAxNi4zNTQ5OSAyMiAxOCAyMiBDIDE5LjY0NTAxIDIyIDIxIDIwLjY0NTAxIDIxIDE5IEMgMjEgMTcuMzU0OTkgMTkuNjQ1MDEgMTYgMTggMTYgQyAxNy4yNjc0OCAxNiAxNi42MDE1OTMgMTYuMjc5MzI4IDE2LjA3ODEyNSAxNi43MjI2NTYgTCA4Ljk0MzM1OTQgMTIuNTU4NTk0IEMgOC45NzgyMDk1IDEyLjM3NzEyMiA5IDEyLjE5MDk1MyA5IDEyIEMgOSAxMS44MDkwNDcgOC45NzgyMDk1IDExLjYyMjg3OCA4Ljk0MzM1OTQgMTEuNDQxNDA2IEwgMTYuMDc4MTI1IDcuMjc5Mjk2OSBDIDE2LjYwMTQ2IDcuNzIyMTQ2MSAxNy4yNjc5MjMgOCAxOCA4IEMgMTkuNjQ1MDEgOCAyMSA2LjY0NTAwOTYgMjEgNSBDIDIxIDMuMzU0OTkwNCAxOS42NDUwMSAyIDE4IDIgeiBNIDE4IDQgQyAxOC41NjQxMjkgNCAxOSA0LjQzNTg3MDYgMTkgNSBDIDE5IDUuNTY0MTI5NCAxOC41NjQxMjkgNiAxOCA2IEMgMTcuNDM1ODcxIDYgMTcgNS41NjQxMjk0IDE3IDUgQyAxNyA0LjQzNTg3MDYgMTcuNDM1ODcxIDQgMTggNCB6IE0gNiAxMSBDIDYuNTY0MTI5NCAxMSA3IDExLjQzNTg3MSA3IDEyIEMgNyAxMi41NjQxMjkgNi41NjQxMjk0IDEzIDYgMTMgQyA1LjQzNTg3MDYgMTMgNSAxMi41NjQxMjkgNSAxMiBDIDUgMTEuNDM1ODcxIDUuNDM1ODcwNiAxMSA2IDExIHogTSAxOCAxOCBDIDE4LjU2NDEyOSAxOCAxOSAxOC40MzU4NzEgMTkgMTkgQyAxOSAxOS41NjQxMjkgMTguNTY0MTI5IDIwIDE4IDIwIEMgMTcuNDM1ODcxIDIwIDE3IDE5LjU2NDEyOSAxNyAxOSBDIDE3IDE4LjQzNTg3MSAxNy40MzU4NzEgMTggMTggMTggeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=); + --jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-table-rows: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIiBmaWxsPSIjMzMzMzMzIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUtaW52ZXJzZSIgZD0iTTUuMDU2NjQgOC43NjE3MkM1LjA1NjY0IDguNTk3NjYgNS4wMzEyNSA4LjQ1MzEyIDQuOTgwNDcgOC4zMjgxMkM0LjkzMzU5IDguMTk5MjIgNC44NTU0NyA4LjA4MjAzIDQuNzQ2MDkgNy45NzY1NkM0LjY0MDYyIDcuODcxMDkgNC41IDcuNzc1MzkgNC4zMjQyMiA3LjY4OTQ1QzQuMTUyMzQgNy41OTk2MSAzLjk0MzM2IDcuNTExNzIgMy42OTcyNyA3LjQyNTc4QzMuMzAyNzMgNy4yODUxNiAyLjk0MzM2IDcuMTM2NzIgMi42MTkxNCA2Ljk4MDQ3QzIuMjk0OTIgNi44MjQyMiAyLjAxNzU4IDYuNjQyNTggMS43ODcxMSA2LjQzNTU1QzEuNTYwNTUgNi4yMjg1MiAxLjM4NDc3IDUuOTg4MjggMS4yNTk3NyA1LjcxNDg0QzEuMTM0NzcgNS40Mzc1IDEuMDcyMjcgNS4xMDkzOCAxLjA3MjI3IDQuNzMwNDdDMS4wNzIyNyA0LjM5ODQ0IDEuMTI4OTEgNC4wOTU3IDEuMjQyMTkgMy44MjIyN0MxLjM1NTQ3IDMuNTQ0OTIgMS41MTU2MiAzLjMwNDY5IDEuNzIyNjYgMy4xMDE1NkMxLjkyOTY5IDIuODk4NDQgMi4xNzk2OSAyLjczNDM3IDIuNDcyNjYgMi42MDkzOEMyLjc2NTYyIDIuNDg0MzggMy4wOTE4IDIuNDA0MyAzLjQ1MTE3IDIuMzY5MTRWMS4xMDkzOEg0LjM4ODY3VjIuMzgwODZDNC43NDAyMyAyLjQyNzczIDUuMDU2NjQgMi41MjM0NCA1LjMzNzg5IDIuNjY3OTdDNS42MTkxNCAyLjgxMjUgNS44NTc0MiAzLjAwMTk1IDYuMDUyNzMgMy4yMzYzM0M2LjI1MTk1IDMuNDY2OCA2LjQwNDMgMy43NDAyMyA2LjUwOTc3IDQuMDU2NjRDNi42MTkxNCA0LjM2OTE0IDYuNjczODMgNC43MjA3IDYuNjczODMgNS4xMTEzM0g1LjA0NDkyQzUuMDQ0OTIgNC42Mzg2NyA0LjkzNzUgNC4yODEyNSA0LjcyMjY2IDQuMDM5MDZDNC41MDc4MSAzLjc5Mjk3IDQuMjE2OCAzLjY2OTkyIDMuODQ5NjEgMy42Njk5MkMzLjY1MDM5IDMuNjY5OTIgMy40NzY1NiAzLjY5NzI3IDMuMzI4MTIgMy43NTE5NUMzLjE4MzU5IDMuODAyNzMgMy4wNjQ0NSAzLjg3Njk1IDIuOTcwNyAzLjk3NDYxQzIuODc2OTUgNC4wNjgzNiAyLjgwNjY0IDQuMTc5NjkgMi43NTk3NyA0LjMwODU5QzIuNzE2OCA0LjQzNzUgMi42OTUzMSA0LjU3ODEyIDIuNjk1MzEgNC43MzA0N0MyLjY5NTMxIDQuODgyODEgMi43MTY4IDUuMDE5NTMgMi43NTk3NyA1LjE0MDYyQzIuODA2NjQgNS4yNTc4MSAyLjg4MjgxIDUuMzY3MTkgMi45ODgyOCA1LjQ2ODc1QzMuMDk3NjYgNS41NzAzMSAzLjI0MDIzIDUuNjY3OTcgMy40MTYwMiA1Ljc2MTcyQzMuNTkxOCA1Ljg1MTU2IDMuODEwNTUgNS45NDMzNiA0LjA3MjI3IDYuMDM3MTFDNC40NjY4IDYuMTg1NTUgNC44MjQyMiA2LjMzOTg0IDUuMTQ0NTMgNi41QzUuNDY0ODQgNi42NTYyNSA1LjczODI4IDYuODM5ODQgNS45NjQ4NCA3LjA1MDc4QzYuMTk1MzEgNy4yNTc4MSA2LjM3MTA5IDcuNSA2LjQ5MjE5IDcuNzc3MzRDNi42MTcxOSA4LjA1MDc4IDYuNjc5NjkgOC4zNzUgNi42Nzk2OSA4Ljc1QzYuNjc5NjkgOS4wOTM3NSA2LjYyMzA1IDkuNDA0MyA2LjUwOTc3IDkuNjgxNjRDNi4zOTY0OCA5Ljk1NTA4IDYuMjM0MzggMTAuMTkxNCA2LjAyMzQ0IDEwLjM5MDZDNS44MTI1IDEwLjU4OTggNS41NTg1OSAxMC43NSA1LjI2MTcyIDEwLjg3MTFDNC45NjQ4NCAxMC45ODgzIDQuNjMyODEgMTEuMDY0NSA0LjI2NTYyIDExLjA5OTZWMTIuMjQ4SDMuMzMzOThWMTEuMDk5NkMzLjAwMTk1IDExLjA2ODQgMi42Nzk2OSAxMC45OTYxIDIuMzY3MTkgMTAuODgyOEMyLjA1NDY5IDEwLjc2NTYgMS43NzczNCAxMC41OTc3IDEuNTM1MTYgMTAuMzc4OUMxLjI5Njg4IDEwLjE2MDIgMS4xMDU0NyA5Ljg4NDc3IDAuOTYwOTM4IDkuNTUyNzNDMC44MTY0MDYgOS4yMTY4IDAuNzQ0MTQxIDguODE0NDUgMC43NDQxNDEgOC4zNDU3SDIuMzc4OTFDMi4zNzg5MSA4LjYyNjk1IDIuNDE5OTIgOC44NjMyOCAyLjUwMTk1IDkuMDU0NjlDMi41ODM5OCA5LjI0MjE5IDIuNjg5NDUgOS4zOTI1OCAyLjgxODM2IDkuNTA1ODZDMi45NTExNyA5LjYxNTIzIDMuMTAxNTYgOS42OTMzNiAzLjI2OTUzIDkuNzQwMjNDMy40Mzc1IDkuNzg3MTEgMy42MDkzOCA5LjgxMDU1IDMuNzg1MTYgOS44MTA1NUM0LjIwMzEyIDkuODEwNTUgNC41MTk1MyA5LjcxMjg5IDQuNzM0MzggOS41MTc1OEM0Ljk0OTIyIDkuMzIyMjcgNS4wNTY2NCA5LjA3MDMxIDUuMDU2NjQgOC43NjE3MlpNMTMuNDE4IDEyLjI3MTVIOC4wNzQyMlYxMUgxMy40MThWMTIuMjcxNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuOTUyNjQgNikiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=); + --jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtdGV4dC1lZGl0b3ItaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiLz4KPC9zdmc+Cg==); + --jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K); + --jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-user: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-users: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImpwLWljb24zIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjczMjcgMCAwIDEuNzMyNyAtMy42MjgyIC4wOTk1NzcpIiBmaWxsPSIjNjE2MTYxIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjUsMCwwLDEuNSwwLC02KSIgZD0ibTEyLjE4NiA3LjUwOThjLTEuMDUzNSAwLTEuOTc1NyAwLjU2NjUtMi40Nzg1IDEuNDEwMiAwLjc1MDYxIDAuMzEyNzcgMS4zOTc0IDAuODI2NDggMS44NzMgMS40NzI3aDMuNDg2M2MwLTEuNTkyLTEuMjg4OS0yLjg4MjgtMi44ODA5LTIuODgyOHoiLz4KICA8cGF0aCBkPSJtMjAuNDY1IDIuMzg5NWEyLjE4ODUgMi4xODg1IDAgMCAxLTIuMTg4NCAyLjE4ODUgMi4xODg1IDIuMTg4NSAwIDAgMS0yLjE4ODUtMi4xODg1IDIuMTg4NSAyLjE4ODUgMCAwIDEgMi4xODg1LTIuMTg4NSAyLjE4ODUgMi4xODg1IDAgMCAxIDIuMTg4NCAyLjE4ODV6Ii8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS41LDAsMCwxLjUsMCwtNikiIGQ9Im0zLjU4OTggOC40MjE5Yy0xLjExMjYgMC0yLjAxMzcgMC45MDExMS0yLjAxMzcgMi4wMTM3aDIuODE0NWMwLjI2Nzk3LTAuMzczMDkgMC41OTA3LTAuNzA0MzUgMC45NTg5OC0wLjk3ODUyLTAuMzQ0MzMtMC42MTY4OC0xLjAwMzEtMS4wMzUyLTEuNzU5OC0xLjAzNTJ6Ii8+CiAgPHBhdGggZD0ibTYuOTE1NCA0LjYyM2ExLjUyOTQgMS41Mjk0IDAgMCAxLTEuNTI5NCAxLjUyOTQgMS41Mjk0IDEuNTI5NCAwIDAgMS0xLjUyOTQtMS41Mjk0IDEuNTI5NCAxLjUyOTQgMCAwIDEgMS41Mjk0LTEuNTI5NCAxLjUyOTQgMS41Mjk0IDAgMCAxIDEuNTI5NCAxLjUyOTR6Ii8+CiAgPHBhdGggZD0ibTYuMTM1IDEzLjUzNWMwLTMuMjM5MiAyLjYyNTktNS44NjUgNS44NjUtNS44NjUgMy4yMzkyIDAgNS44NjUgMi42MjU5IDUuODY1IDUuODY1eiIvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMy43Njg1IiByPSIyLjk2ODUiLz4KIDwvZz4KPC9zdmc+Cg==); + --jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-word: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KIDxnIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzQxNDE0MSI+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiA8L2c+CiA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNDMgLjA0MDEpIiBmaWxsPSIjZmZmIj4KICA8cGF0aCBkPSJtNC4xNCA4Ljc2cTAuMDY4Mi0xLjg5IDIuNDItMS44OSAxLjE2IDAgMS42OCAwLjQyIDAuNTY3IDAuNDEgMC41NjcgMS4xNnYzLjQ3cTAgMC40NjIgMC41MTQgMC40NjIgMC4xMDMgMCAwLjItMC4wMjMxdjAuNzE0cS0wLjM5OSAwLjEwMy0wLjY1MSAwLjEwMy0wLjQ1MiAwLTAuNjkzLTAuMjItMC4yMzEtMC4yLTAuMjg0LTAuNjYyLTAuOTU2IDAuODcyLTIgMC44NzItMC45MDMgMC0xLjQ3LTAuNDcyLTAuNTI1LTAuNDcyLTAuNTI1LTEuMjYgMC0wLjI2MiAwLjA0NTItMC40NzIgMC4wNTY3LTAuMjIgMC4xMTYtMC4zNzggMC4wNjgyLTAuMTY4IDAuMjMxLTAuMzA0IDAuMTU4LTAuMTQ3IDAuMjYyLTAuMjQyIDAuMTE2LTAuMDkxNCAwLjM2OC0wLjE2OCAwLjI2Mi0wLjA5MTQgMC4zOTktMC4xMjYgMC4xMzYtMC4wNDUyIDAuNDcyLTAuMTAzIDAuMzM2LTAuMDU3OCAwLjUwNC0wLjA3OTggMC4xNTgtMC4wMjMxIDAuNTY3LTAuMDc5OCAwLjU1Ni0wLjA2ODIgMC43NzctMC4yMjEgMC4yMi0wLjE1MiAwLjIyLTAuNDQxdi0wLjI1MnEwLTAuNDMtMC4zNTctMC42NjItMC4zMzYtMC4yMzEtMC45NzYtMC4yMzEtMC42NjIgMC0wLjk5OCAwLjI2Mi0wLjMzNiAwLjI1Mi0wLjM5OSAwLjc5OHptMS44OSAzLjY4cTAuNzg4IDAgMS4yNi0wLjQxIDAuNTA0LTAuNDIgMC41MDQtMC45MDN2LTEuMDVxLTAuMjg0IDAuMTM2LTAuODYxIDAuMjMxLTAuNTY3IDAuMDkxNC0wLjk4NyAwLjE1OC0wLjQyIDAuMDY4Mi0wLjc2NiAwLjMyNi0wLjMzNiAwLjI1Mi0wLjMzNiAwLjcwNHQwLjMwNCAwLjcwNCAwLjg2MSAwLjI1MnoiIHN0cm9rZS13aWR0aD0iMS4wNSIvPgogIDxwYXRoIGQ9Im0xMCA0LjU2aDAuOTQ1djMuMTVxMC42NTEtMC45NzYgMS44OS0wLjk3NiAxLjE2IDAgMS44OSAwLjg0IDAuNjgyIDAuODQgMC42ODIgMi4zMSAwIDEuNDctMC43MDQgMi40Mi0wLjcwNCAwLjg4Mi0xLjg5IDAuODgyLTEuMjYgMC0xLjg5LTEuMDJ2MC43NjZoLTAuODV6bTIuNjIgMy4wNHEtMC43NDYgMC0xLjE2IDAuNjQtMC40NTIgMC42My0wLjQ1MiAxLjY4IDAgMS4wNSAwLjQ1MiAxLjY4dDEuMTYgMC42M3EwLjc3NyAwIDEuMjYtMC42MyAwLjQ5NC0wLjY0IDAuNDk0LTEuNjggMC0xLjA1LTAuNDcyLTEuNjgtMC40NjItMC42NC0xLjI2LTAuNjR6IiBzdHJva2Utd2lkdGg9IjEuMDUiLz4KICA8cGF0aCBkPSJtMi43MyAxNS44IDEzLjYgMC4wMDgxYzAuMDA2OSAwIDAtMi42IDAtMi42IDAtMC4wMDc4LTEuMTUgMC0xLjE1IDAtMC4wMDY5IDAtMC4wMDgzIDEuNS0wLjAwODMgMS41LTJlLTMgLTAuMDAxNC0xMS4zLTAuMDAxNC0xMS4zLTAuMDAxNGwtMC4wMDU5Mi0xLjVjMC0wLjAwNzgtMS4xNyAwLjAwMTMtMS4xNyAwLjAwMTN6IiBzdHJva2Utd2lkdGg9Ii45NzUiLz4KIDwvZz4KPC9zdmc+Cg==); + --jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K); +} + +/* Icon CSS class declarations */ + +.jp-AddAboveIcon { + background-image: var(--jp-icon-add-above); +} + +.jp-AddBelowIcon { + background-image: var(--jp-icon-add-below); +} + +.jp-AddIcon { + background-image: var(--jp-icon-add); +} + +.jp-BellIcon { + background-image: var(--jp-icon-bell); +} + +.jp-BugDotIcon { + background-image: var(--jp-icon-bug-dot); +} + +.jp-BugIcon { + background-image: var(--jp-icon-bug); +} + +.jp-BuildIcon { + background-image: var(--jp-icon-build); +} + +.jp-CaretDownEmptyIcon { + background-image: var(--jp-icon-caret-down-empty); +} + +.jp-CaretDownEmptyThinIcon { + background-image: var(--jp-icon-caret-down-empty-thin); +} + +.jp-CaretDownIcon { + background-image: var(--jp-icon-caret-down); +} + +.jp-CaretLeftIcon { + background-image: var(--jp-icon-caret-left); +} + +.jp-CaretRightIcon { + background-image: var(--jp-icon-caret-right); +} + +.jp-CaretUpEmptyThinIcon { + background-image: var(--jp-icon-caret-up-empty-thin); +} + +.jp-CaretUpIcon { + background-image: var(--jp-icon-caret-up); +} + +.jp-CaseSensitiveIcon { + background-image: var(--jp-icon-case-sensitive); +} + +.jp-CheckIcon { + background-image: var(--jp-icon-check); +} + +.jp-CircleEmptyIcon { + background-image: var(--jp-icon-circle-empty); +} + +.jp-CircleIcon { + background-image: var(--jp-icon-circle); +} + +.jp-ClearIcon { + background-image: var(--jp-icon-clear); +} + +.jp-CloseIcon { + background-image: var(--jp-icon-close); +} + +.jp-CodeCheckIcon { + background-image: var(--jp-icon-code-check); +} + +.jp-CodeIcon { + background-image: var(--jp-icon-code); +} + +.jp-CollapseAllIcon { + background-image: var(--jp-icon-collapse-all); +} + +.jp-ConsoleIcon { + background-image: var(--jp-icon-console); +} + +.jp-CopyIcon { + background-image: var(--jp-icon-copy); +} + +.jp-CopyrightIcon { + background-image: var(--jp-icon-copyright); +} + +.jp-CutIcon { + background-image: var(--jp-icon-cut); +} + +.jp-DeleteIcon { + background-image: var(--jp-icon-delete); +} + +.jp-DownloadIcon { + background-image: var(--jp-icon-download); +} + +.jp-DuplicateIcon { + background-image: var(--jp-icon-duplicate); +} + +.jp-EditIcon { + background-image: var(--jp-icon-edit); +} + +.jp-EllipsesIcon { + background-image: var(--jp-icon-ellipses); +} + +.jp-ErrorIcon { + background-image: var(--jp-icon-error); +} + +.jp-ExpandAllIcon { + background-image: var(--jp-icon-expand-all); +} + +.jp-ExtensionIcon { + background-image: var(--jp-icon-extension); +} + +.jp-FastForwardIcon { + background-image: var(--jp-icon-fast-forward); +} + +.jp-FileIcon { + background-image: var(--jp-icon-file); +} + +.jp-FileUploadIcon { + background-image: var(--jp-icon-file-upload); +} + +.jp-FilterDotIcon { + background-image: var(--jp-icon-filter-dot); +} + +.jp-FilterIcon { + background-image: var(--jp-icon-filter); +} + +.jp-FilterListIcon { + background-image: var(--jp-icon-filter-list); +} + +.jp-FolderFavoriteIcon { + background-image: var(--jp-icon-folder-favorite); +} + +.jp-FolderIcon { + background-image: var(--jp-icon-folder); +} + +.jp-HomeIcon { + background-image: var(--jp-icon-home); +} + +.jp-Html5Icon { + background-image: var(--jp-icon-html5); +} + +.jp-ImageIcon { + background-image: var(--jp-icon-image); +} + +.jp-InfoIcon { + background-image: var(--jp-icon-info); +} + +.jp-InspectorIcon { + background-image: var(--jp-icon-inspector); +} + +.jp-JsonIcon { + background-image: var(--jp-icon-json); +} + +.jp-JuliaIcon { + background-image: var(--jp-icon-julia); +} + +.jp-JupyterFaviconIcon { + background-image: var(--jp-icon-jupyter-favicon); +} + +.jp-JupyterIcon { + background-image: var(--jp-icon-jupyter); +} + +.jp-JupyterlabWordmarkIcon { + background-image: var(--jp-icon-jupyterlab-wordmark); +} + +.jp-KernelIcon { + background-image: var(--jp-icon-kernel); +} + +.jp-KeyboardIcon { + background-image: var(--jp-icon-keyboard); +} + +.jp-LaunchIcon { + background-image: var(--jp-icon-launch); +} + +.jp-LauncherIcon { + background-image: var(--jp-icon-launcher); +} + +.jp-LineFormIcon { + background-image: var(--jp-icon-line-form); +} + +.jp-LinkIcon { + background-image: var(--jp-icon-link); +} + +.jp-ListIcon { + background-image: var(--jp-icon-list); +} + +.jp-MarkdownIcon { + background-image: var(--jp-icon-markdown); +} + +.jp-MoveDownIcon { + background-image: var(--jp-icon-move-down); +} + +.jp-MoveUpIcon { + background-image: var(--jp-icon-move-up); +} + +.jp-NewFolderIcon { + background-image: var(--jp-icon-new-folder); +} + +.jp-NotTrustedIcon { + background-image: var(--jp-icon-not-trusted); +} + +.jp-NotebookIcon { + background-image: var(--jp-icon-notebook); +} + +.jp-NumberingIcon { + background-image: var(--jp-icon-numbering); +} + +.jp-OfflineBoltIcon { + background-image: var(--jp-icon-offline-bolt); +} + +.jp-PaletteIcon { + background-image: var(--jp-icon-palette); +} + +.jp-PasteIcon { + background-image: var(--jp-icon-paste); +} + +.jp-PdfIcon { + background-image: var(--jp-icon-pdf); +} + +.jp-PythonIcon { + background-image: var(--jp-icon-python); +} + +.jp-RKernelIcon { + background-image: var(--jp-icon-r-kernel); +} + +.jp-ReactIcon { + background-image: var(--jp-icon-react); +} + +.jp-RedoIcon { + background-image: var(--jp-icon-redo); +} + +.jp-RefreshIcon { + background-image: var(--jp-icon-refresh); +} + +.jp-RegexIcon { + background-image: var(--jp-icon-regex); +} + +.jp-RunIcon { + background-image: var(--jp-icon-run); +} + +.jp-RunningIcon { + background-image: var(--jp-icon-running); +} + +.jp-SaveIcon { + background-image: var(--jp-icon-save); +} + +.jp-SearchIcon { + background-image: var(--jp-icon-search); +} + +.jp-SettingsIcon { + background-image: var(--jp-icon-settings); +} + +.jp-ShareIcon { + background-image: var(--jp-icon-share); +} + +.jp-SpreadsheetIcon { + background-image: var(--jp-icon-spreadsheet); +} + +.jp-StopIcon { + background-image: var(--jp-icon-stop); +} + +.jp-TabIcon { + background-image: var(--jp-icon-tab); +} + +.jp-TableRowsIcon { + background-image: var(--jp-icon-table-rows); +} + +.jp-TagIcon { + background-image: var(--jp-icon-tag); +} + +.jp-TerminalIcon { + background-image: var(--jp-icon-terminal); +} + +.jp-TextEditorIcon { + background-image: var(--jp-icon-text-editor); +} + +.jp-TocIcon { + background-image: var(--jp-icon-toc); +} + +.jp-TreeViewIcon { + background-image: var(--jp-icon-tree-view); +} + +.jp-TrustedIcon { + background-image: var(--jp-icon-trusted); +} + +.jp-UndoIcon { + background-image: var(--jp-icon-undo); +} + +.jp-UserIcon { + background-image: var(--jp-icon-user); +} + +.jp-UsersIcon { + background-image: var(--jp-icon-users); +} + +.jp-VegaIcon { + background-image: var(--jp-icon-vega); +} + +.jp-WordIcon { + background-image: var(--jp-icon-word); +} + +.jp-YamlIcon { + background-image: var(--jp-icon-yaml); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +.jp-Icon, +.jp-MaterialIcon { + background-position: center; + background-repeat: no-repeat; + background-size: 16px; + min-width: 16px; + min-height: 16px; +} + +.jp-Icon-cover { + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} + +/** + * (DEPRECATED) Support for specific CSS icon sizes + */ + +.jp-Icon-16 { + background-size: 16px; + min-width: 16px; + min-height: 16px; +} + +.jp-Icon-18 { + background-size: 18px; + min-width: 18px; + min-height: 18px; +} + +.jp-Icon-20 { + background-size: 20px; + min-width: 20px; + min-height: 20px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.lm-TabBar .lm-TabBar-addButton { + align-items: center; + display: flex; + padding: 4px; + padding-bottom: 5px; + margin-right: 1px; + background-color: var(--jp-layout-color2); +} + +.lm-TabBar .lm-TabBar-addButton:hover { + background-color: var(--jp-layout-color1); +} + +.lm-DockPanel-tabBar .lm-TabBar-tab { + width: var(--jp-private-horizontal-tab-width); +} + +.lm-DockPanel-tabBar .lm-TabBar-content { + flex: unset; +} + +.lm-DockPanel-tabBar[data-orientation='horizontal'] { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * Support for icons as inline SVG HTMLElements + */ + +/* recolor the primary elements of an icon */ +.jp-icon0[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon1[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon2[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon3[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon4[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon0[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon1[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon2[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon3[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon4[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/* recolor the accent elements of an icon */ +.jp-icon-accent0[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-accent1[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-accent2[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-accent3[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-accent4[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-accent0[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-accent1[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-accent2[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-accent3[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-accent4[stroke] { + stroke: var(--jp-layout-color4); +} + +/* set the color of an icon to transparent */ +.jp-icon-none[fill] { + fill: none; +} + +.jp-icon-none[stroke] { + stroke: none; +} + +/* brand icon colors. Same for light and dark */ +.jp-icon-brand0[fill] { + fill: var(--jp-brand-color0); +} + +.jp-icon-brand1[fill] { + fill: var(--jp-brand-color1); +} + +.jp-icon-brand2[fill] { + fill: var(--jp-brand-color2); +} + +.jp-icon-brand3[fill] { + fill: var(--jp-brand-color3); +} + +.jp-icon-brand4[fill] { + fill: var(--jp-brand-color4); +} + +.jp-icon-brand0[stroke] { + stroke: var(--jp-brand-color0); +} + +.jp-icon-brand1[stroke] { + stroke: var(--jp-brand-color1); +} + +.jp-icon-brand2[stroke] { + stroke: var(--jp-brand-color2); +} + +.jp-icon-brand3[stroke] { + stroke: var(--jp-brand-color3); +} + +.jp-icon-brand4[stroke] { + stroke: var(--jp-brand-color4); +} + +/* warn icon colors. Same for light and dark */ +.jp-icon-warn0[fill] { + fill: var(--jp-warn-color0); +} + +.jp-icon-warn1[fill] { + fill: var(--jp-warn-color1); +} + +.jp-icon-warn2[fill] { + fill: var(--jp-warn-color2); +} + +.jp-icon-warn3[fill] { + fill: var(--jp-warn-color3); +} + +.jp-icon-warn0[stroke] { + stroke: var(--jp-warn-color0); +} + +.jp-icon-warn1[stroke] { + stroke: var(--jp-warn-color1); +} + +.jp-icon-warn2[stroke] { + stroke: var(--jp-warn-color2); +} + +.jp-icon-warn3[stroke] { + stroke: var(--jp-warn-color3); +} + +/* icon colors that contrast well with each other and most backgrounds */ +.jp-icon-contrast0[fill] { + fill: var(--jp-icon-contrast-color0); +} + +.jp-icon-contrast1[fill] { + fill: var(--jp-icon-contrast-color1); +} + +.jp-icon-contrast2[fill] { + fill: var(--jp-icon-contrast-color2); +} + +.jp-icon-contrast3[fill] { + fill: var(--jp-icon-contrast-color3); +} + +.jp-icon-contrast0[stroke] { + stroke: var(--jp-icon-contrast-color0); +} + +.jp-icon-contrast1[stroke] { + stroke: var(--jp-icon-contrast-color1); +} + +.jp-icon-contrast2[stroke] { + stroke: var(--jp-icon-contrast-color2); +} + +.jp-icon-contrast3[stroke] { + stroke: var(--jp-icon-contrast-color3); +} + +.jp-icon-dot[fill] { + fill: var(--jp-warn-color0); +} + +.jp-jupyter-icon-color[fill] { + fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0)); +} + +.jp-notebook-icon-color[fill] { + fill: var(--jp-notebook-icon-color, var(--jp-warn-color0)); +} + +.jp-json-icon-color[fill] { + fill: var(--jp-json-icon-color, var(--jp-warn-color1)); +} + +.jp-console-icon-color[fill] { + fill: var(--jp-console-icon-color, white); +} + +.jp-console-icon-background-color[fill] { + fill: var(--jp-console-icon-background-color, var(--jp-brand-color1)); +} + +.jp-terminal-icon-color[fill] { + fill: var(--jp-terminal-icon-color, var(--jp-layout-color2)); +} + +.jp-terminal-icon-background-color[fill] { + fill: var( + --jp-terminal-icon-background-color, + var(--jp-inverse-layout-color2) + ); +} + +.jp-text-editor-icon-color[fill] { + fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3)); +} + +.jp-inspector-icon-color[fill] { + fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3)); +} + +/* CSS for icons in selected filebrowser listing items */ +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] { + fill: #fff; +} + +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* stylelint-disable selector-max-class, selector-max-compound-selectors */ + +/** +* TODO: come up with non css-hack solution for showing the busy icon on top +* of the close icon +* CSS for complex behavior of close icon of tabs in the main area tabbar +*/ +.lm-DockPanel-tabBar + .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon3[fill] { + fill: none; +} + +.lm-DockPanel-tabBar + .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon-busy[fill] { + fill: var(--jp-inverse-layout-color3); +} + +/* stylelint-enable selector-max-class, selector-max-compound-selectors */ + +/* CSS for icons in status bar */ +#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] { + fill: #fff; +} + +#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* special handling for splash icon CSS. While the theme CSS reloads during + splash, the splash icon can loose theming. To prevent that, we set a + default for its color variable */ +:root { + --jp-warn-color0: var(--md-orange-700); +} + +/* not sure what to do with this one, used in filebrowser listing */ +.jp-DragIcon { + margin-right: 4px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * Support for alt colors for icons as inline SVG HTMLElements + */ + +/* alt recolor the primary elements of an icon */ +.jp-icon-alt .jp-icon0[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-alt .jp-icon1[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-alt .jp-icon2[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-alt .jp-icon3[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-alt .jp-icon4[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-alt .jp-icon0[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-alt .jp-icon1[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-alt .jp-icon2[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-alt .jp-icon3[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-alt .jp-icon4[stroke] { + stroke: var(--jp-layout-color4); +} + +/* alt recolor the accent elements of an icon */ +.jp-icon-alt .jp-icon-accent0[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-alt .jp-icon-accent1[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-alt .jp-icon-accent2[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-alt .jp-icon-accent3[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-alt .jp-icon-accent4[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-alt .jp-icon-accent0[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-alt .jp-icon-accent1[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-alt .jp-icon-accent2[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-alt .jp-icon-accent3[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-alt .jp-icon-accent4[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content { + display: none !important; +} + +/** + * Support for hover colors for icons as inline SVG HTMLElements + */ + +/** + * regular colors + */ + +/* recolor the primary elements of an icon */ +.jp-icon-hover :hover .jp-icon0-hover[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover :hover .jp-icon1-hover[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover :hover .jp-icon2-hover[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover :hover .jp-icon3-hover[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover :hover .jp-icon4-hover[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-hover :hover .jp-icon0-hover[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover :hover .jp-icon1-hover[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover :hover .jp-icon2-hover[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover :hover .jp-icon3-hover[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover :hover .jp-icon4-hover[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/* recolor the accent elements of an icon */ +.jp-icon-hover :hover .jp-icon-accent0-hover[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-hover :hover .jp-icon-accent1-hover[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-hover :hover .jp-icon-accent2-hover[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-hover :hover .jp-icon-accent3-hover[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-hover :hover .jp-icon-accent4-hover[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] { + stroke: var(--jp-layout-color4); +} + +/* set the color of an icon to transparent */ +.jp-icon-hover :hover .jp-icon-none-hover[fill] { + fill: none; +} + +.jp-icon-hover :hover .jp-icon-none-hover[stroke] { + stroke: none; +} + +/** + * inverse colors + */ + +/* inverse recolor the primary elements of an icon */ +.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] { + stroke: var(--jp-layout-color4); +} + +/* inverse recolor the accent elements of an icon */ +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-IFrame { + width: 100%; + height: 100%; +} + +.jp-IFrame > iframe { + border: none; +} + +/* +When drag events occur, `lm-mod-override-cursor` is added to the body. +Because iframes steal all cursor events, the following two rules are necessary +to suppress pointer events while resize drags are occurring. There may be a +better solution to this problem. +*/ +body.lm-mod-override-cursor .jp-IFrame { + position: relative; +} + +body.lm-mod-override-cursor .jp-IFrame::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-HoverBox { + position: fixed; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-FormGroup-content fieldset { + border: none; + padding: 0; + min-width: 0; + width: 100%; +} + +/* stylelint-disable selector-max-type */ + +.jp-FormGroup-content fieldset .jp-inputFieldWrapper input, +.jp-FormGroup-content fieldset .jp-inputFieldWrapper select, +.jp-FormGroup-content fieldset .jp-inputFieldWrapper textarea { + font-size: var(--jp-content-font-size2); + border-color: var(--jp-input-border-color); + border-style: solid; + border-radius: var(--jp-border-radius); + border-width: 1px; + padding: 6px 8px; + background: none; + color: var(--jp-ui-font-color0); + height: inherit; +} + +.jp-FormGroup-content fieldset input[type='checkbox'] { + position: relative; + top: 2px; + margin-left: 0; +} + +.jp-FormGroup-content button.jp-mod-styled { + cursor: pointer; +} + +.jp-FormGroup-content .checkbox label { + cursor: pointer; + font-size: var(--jp-content-font-size1); +} + +.jp-FormGroup-content .jp-root > fieldset > legend { + display: none; +} + +.jp-FormGroup-content .jp-root > fieldset > p { + display: none; +} + +/** copy of `input.jp-mod-styled:focus` style */ +.jp-FormGroup-content fieldset input:focus, +.jp-FormGroup-content fieldset select:focus { + -moz-outline-radius: unset; + outline: var(--jp-border-width) solid var(--md-blue-500); + outline-offset: -1px; + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-FormGroup-content fieldset input:hover:not(:focus), +.jp-FormGroup-content fieldset select:hover:not(:focus) { + background-color: var(--jp-border-color2); +} + +/* stylelint-enable selector-max-type */ + +.jp-FormGroup-content .checkbox .field-description { + /* Disable default description field for checkbox: + because other widgets do not have description fields, + we add descriptions to each widget on the field level. + */ + display: none; +} + +.jp-FormGroup-content #root__description { + display: none; +} + +.jp-FormGroup-content .jp-modifiedIndicator { + width: 5px; + background-color: var(--jp-brand-color2); + margin-top: 0; + margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1); + flex-shrink: 0; +} + +.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator { + background-color: var(--jp-error-color0); + margin-right: 0.5em; +} + +/* RJSF ARRAY style */ + +.jp-arrayFieldWrapper legend { + font-size: var(--jp-content-font-size2); + color: var(--jp-ui-font-color0); + flex-basis: 100%; + padding: 4px 0; + font-weight: var(--jp-content-heading-font-weight); + border-bottom: 1px solid var(--jp-border-color2); +} + +.jp-arrayFieldWrapper .field-description { + padding: 4px 0; + white-space: pre-wrap; +} + +.jp-arrayFieldWrapper .array-item { + width: 100%; + border: 1px solid var(--jp-border-color2); + border-radius: 4px; + margin: 4px; +} + +.jp-ArrayOperations { + display: flex; + margin-left: 8px; +} + +.jp-ArrayOperationsButton { + margin: 2px; +} + +.jp-ArrayOperationsButton .jp-icon3[fill] { + fill: var(--jp-ui-font-color0); +} + +button.jp-ArrayOperationsButton.jp-mod-styled:disabled { + cursor: not-allowed; + opacity: 0.5; +} + +/* RJSF form validation error */ + +.jp-FormGroup-content .validationErrors { + color: var(--jp-error-color0); +} + +/* Hide panel level error as duplicated the field level error */ +.jp-FormGroup-content .panel.errors { + display: none; +} + +/* RJSF normal content (settings-editor) */ + +.jp-FormGroup-contentNormal { + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-contentItem { + margin-left: 7px; + color: var(--jp-ui-font-color0); +} + +.jp-FormGroup-contentNormal .jp-FormGroup-description { + flex-basis: 100%; + padding: 4px 7px; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-default { + flex-basis: 100%; + padding: 4px 7px; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel { + font-size: var(--jp-content-font-size1); + font-weight: normal; + min-width: 120px; +} + +.jp-FormGroup-contentNormal fieldset:not(:first-child) { + margin-left: 7px; +} + +.jp-FormGroup-contentNormal .field-array-of-string .array-item { + /* Display `jp-ArrayOperations` buttons side-by-side with content except + for small screens where flex-wrap will place them one below the other. + */ + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group { + padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent); + margin-top: 2px; +} + +/* RJSF compact content (metadata-form) */ + +.jp-FormGroup-content.jp-FormGroup-contentCompact { + width: 100%; +} + +.jp-FormGroup-contentCompact .form-group { + display: flex; + padding: 0.5em 0.2em 0.5em 0; +} + +.jp-FormGroup-contentCompact + .jp-FormGroup-compactTitle + .jp-FormGroup-description { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color2); +} + +.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel { + padding-bottom: 0.3em; +} + +.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control { + width: 100%; + box-sizing: border-box; +} + +.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle { + padding-bottom: 7px; +} + +.jp-FormGroup-contentCompact + .jp-objectFieldWrapper + .jp-objectFieldWrapper + .form-group { + padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent); + margin-top: 2px; +} + +.jp-FormGroup-contentCompact ul.error-detail { + margin-block-start: 0.5em; + margin-block-end: 0.5em; + padding-inline-start: 1em; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-SidePanel { + display: flex; + flex-direction: column; + min-width: var(--jp-sidebar-min-width); + overflow-y: auto; + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + font-size: var(--jp-ui-font-size1); +} + +.jp-SidePanel-header { + flex: 0 0 auto; + display: flex; + border-bottom: var(--jp-border-width) solid var(--jp-border-color2); + font-size: var(--jp-ui-font-size0); + font-weight: 600; + letter-spacing: 1px; + margin: 0; + padding: 2px; + text-transform: uppercase; +} + +.jp-SidePanel-toolbar { + flex: 0 0 auto; +} + +.jp-SidePanel-content { + flex: 1 1 auto; +} + +.jp-SidePanel-toolbar, +.jp-AccordionPanel-toolbar { + height: var(--jp-private-toolbar-height); +} + +.jp-SidePanel-toolbar.jp-Toolbar-micro { + display: none; +} + +.lm-AccordionPanel .jp-AccordionPanel-title { + box-sizing: border-box; + line-height: 25px; + margin: 0; + display: flex; + align-items: center; + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + font-size: var(--jp-ui-font-size0); +} + +.jp-AccordionPanel-title { + cursor: pointer; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + text-transform: uppercase; +} + +.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} + +.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel { + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser { + transform: rotate(-90deg); + margin: auto 0; + height: 16px; +} + +.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser { + transform: rotate(0deg); +} + +.lm-AccordionPanel .jp-AccordionPanel-toolbar { + background: none; + box-shadow: none; + border: none; + margin-left: auto; +} + +.lm-AccordionPanel .lm-SplitPanel-handle:hover { + background: var(--jp-layout-color3); +} + +.jp-text-truncated { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Spinner { + position: absolute; + display: flex; + justify-content: center; + align-items: center; + z-index: 10; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: var(--jp-layout-color0); + outline: none; +} + +.jp-SpinnerContent { + font-size: 10px; + margin: 50px auto; + text-indent: -9999em; + width: 3em; + height: 3em; + border-radius: 50%; + background: var(--jp-brand-color3); + background: linear-gradient( + to right, + #f37626 10%, + rgba(255, 255, 255, 0) 42% + ); + position: relative; + animation: load3 1s infinite linear, fadeIn 1s; +} + +.jp-SpinnerContent::before { + width: 50%; + height: 50%; + background: #f37626; + border-radius: 100% 0 0; + position: absolute; + top: 0; + left: 0; + content: ''; +} + +.jp-SpinnerContent::after { + background: var(--jp-layout-color0); + width: 75%; + height: 75%; + border-radius: 50%; + content: ''; + margin: auto; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes load3 { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +button.jp-mod-styled { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + border: none; + box-sizing: border-box; + text-align: center; + line-height: 32px; + height: 32px; + padding: 0 12px; + letter-spacing: 0.8px; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +input.jp-mod-styled { + background: var(--jp-input-background); + height: 28px; + box-sizing: border-box; + border: var(--jp-border-width) solid var(--jp-border-color1); + padding-left: 7px; + padding-right: 7px; + font-size: var(--jp-ui-font-size2); + color: var(--jp-ui-font-color0); + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +input[type='checkbox'].jp-mod-styled { + appearance: checkbox; + -webkit-appearance: checkbox; + -moz-appearance: checkbox; + height: auto; +} + +input.jp-mod-styled:focus { + border: var(--jp-border-width) solid var(--md-blue-500); + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-select-wrapper { + display: flex; + position: relative; + flex-direction: column; + padding: 1px; + background-color: var(--jp-layout-color1); + box-sizing: border-box; + margin-bottom: 12px; +} + +.jp-select-wrapper:not(.multiple) { + height: 28px; +} + +.jp-select-wrapper.jp-mod-focused select.jp-mod-styled { + border: var(--jp-border-width) solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); + background-color: var(--jp-input-active-background); +} + +select.jp-mod-styled:hover { + cursor: pointer; + color: var(--jp-ui-font-color0); + background-color: var(--jp-input-hover-background); + box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5); +} + +select.jp-mod-styled { + flex: 1 1 auto; + width: 100%; + font-size: var(--jp-ui-font-size2); + background: var(--jp-input-background); + color: var(--jp-ui-font-color0); + padding: 0 25px 0 8px; + border: var(--jp-border-width) solid var(--jp-input-border-color); + border-radius: 0; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +select.jp-mod-styled:not([multiple]) { + height: 32px; +} + +select.jp-mod-styled[multiple] { + max-height: 200px; + overflow-y: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-switch { + display: flex; + align-items: center; + padding-left: 4px; + padding-right: 4px; + font-size: var(--jp-ui-font-size1); + background-color: transparent; + color: var(--jp-ui-font-color1); + border: none; + height: 20px; +} + +.jp-switch:hover { + background-color: var(--jp-layout-color2); +} + +.jp-switch-label { + margin-right: 5px; + font-family: var(--jp-ui-font-family); +} + +.jp-switch-track { + cursor: pointer; + background-color: var(--jp-switch-color, var(--jp-border-color1)); + -webkit-transition: 0.4s; + transition: 0.4s; + border-radius: 34px; + height: 16px; + width: 35px; + position: relative; +} + +.jp-switch-track::before { + content: ''; + position: absolute; + height: 10px; + width: 10px; + margin: 3px; + left: 0; + background-color: var(--jp-ui-inverse-font-color1); + -webkit-transition: 0.4s; + transition: 0.4s; + border-radius: 50%; +} + +.jp-switch[aria-checked='true'] .jp-switch-track { + background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0)); +} + +.jp-switch[aria-checked='true'] .jp-switch-track::before { + /* track width (35) - margins (3 + 3) - thumb width (10) */ + left: 19px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-toolbar-height: calc( + 28px + var(--jp-border-width) + ); /* leave 28px for content */ +} + +.jp-Toolbar { + color: var(--jp-ui-font-color1); + flex: 0 0 auto; + display: flex; + flex-direction: row; + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + background: var(--jp-toolbar-background); + min-height: var(--jp-toolbar-micro-height); + padding: 2px; + z-index: 8; + overflow-x: hidden; +} + +/* Toolbar items */ + +.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer { + flex-grow: 1; + flex-shrink: 1; +} + +.jp-Toolbar-item.jp-Toolbar-kernelStatus { + display: inline-block; + width: 32px; + background-repeat: no-repeat; + background-position: center; + background-size: 16px; +} + +.jp-Toolbar > .jp-Toolbar-item { + flex: 0 0 auto; + display: flex; + padding-left: 1px; + padding-right: 1px; + font-size: var(--jp-ui-font-size1); + line-height: var(--jp-private-toolbar-height); + height: 100%; +} + +/* Toolbar buttons */ + +/* This is the div we use to wrap the react component into a Widget */ +div.jp-ToolbarButton { + color: transparent; + border: none; + box-sizing: border-box; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding: 0; + margin: 0; +} + +button.jp-ToolbarButtonComponent { + background: var(--jp-layout-color1); + border: none; + box-sizing: border-box; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding: 0 6px; + margin: 0; + height: 24px; + border-radius: var(--jp-border-radius); + display: flex; + align-items: center; + text-align: center; + font-size: 14px; + min-width: unset; + min-height: unset; +} + +button.jp-ToolbarButtonComponent:disabled { + opacity: 0.4; +} + +button.jp-ToolbarButtonComponent > span { + padding: 0; + flex: 0 0 auto; +} + +button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label { + font-size: var(--jp-ui-font-size1); + line-height: 100%; + padding-left: 2px; + color: var(--jp-ui-font-color1); + font-family: var(--jp-ui-font-family); +} + +#jp-main-dock-panel[data-mode='single-document'] + .jp-MainAreaWidget + > .jp-Toolbar.jp-Toolbar-micro { + padding: 0; + min-height: 0; +} + +#jp-main-dock-panel[data-mode='single-document'] + .jp-MainAreaWidget + > .jp-Toolbar { + border: none; + box-shadow: none; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-WindowedPanel-outer { + position: relative; + overflow-y: auto; +} + +.jp-WindowedPanel-inner { + position: relative; +} + +.jp-WindowedPanel-window { + position: absolute; + left: 0; + right: 0; + overflow: visible; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* Sibling imports */ + +body { + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); +} + +/* Disable native link decoration styles everywhere outside of dialog boxes */ +a { + text-decoration: unset; + color: unset; +} + +a:hover { + text-decoration: unset; + color: unset; +} + +/* Accessibility for links inside dialog box text */ +.jp-Dialog-content a { + text-decoration: revert; + color: var(--jp-content-link-color); +} + +.jp-Dialog-content a:hover { + text-decoration: revert; +} + +/* Styles for ui-components */ +.jp-Button { + color: var(--jp-ui-font-color2); + border-radius: var(--jp-border-radius); + padding: 0 12px; + font-size: var(--jp-ui-font-size1); + + /* Copy from blueprint 3 */ + display: inline-flex; + flex-direction: row; + border: none; + cursor: pointer; + align-items: center; + justify-content: center; + text-align: left; + vertical-align: middle; + min-height: 30px; + min-width: 30px; +} + +.jp-Button:disabled { + cursor: not-allowed; +} + +.jp-Button:empty { + padding: 0 !important; +} + +.jp-Button.jp-mod-small { + min-height: 24px; + min-width: 24px; + font-size: 12px; + padding: 0 7px; +} + +/* Use our own theme for hover styles */ +.jp-Button.jp-mod-minimal:hover { + background-color: var(--jp-layout-color2); +} + +.jp-Button.jp-mod-minimal { + background: none; +} + +.jp-InputGroup { + display: block; + position: relative; +} + +.jp-InputGroup input { + box-sizing: border-box; + border: none; + border-radius: 0; + background-color: transparent; + color: var(--jp-ui-font-color0); + box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color); + padding-bottom: 0; + padding-top: 0; + padding-left: 10px; + padding-right: 28px; + position: relative; + width: 100%; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + font-size: 14px; + font-weight: 400; + height: 30px; + line-height: 30px; + outline: none; + vertical-align: middle; +} + +.jp-InputGroup input:focus { + box-shadow: inset 0 0 0 var(--jp-border-width) + var(--jp-input-active-box-shadow-color), + inset 0 0 0 3px var(--jp-input-active-box-shadow-color); +} + +.jp-InputGroup input:disabled { + cursor: not-allowed; + resize: block; + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color2); +} + +.jp-InputGroup input:disabled ~ span { + cursor: not-allowed; + color: var(--jp-ui-font-color2); +} + +.jp-InputGroup input::placeholder, +input::placeholder { + color: var(--jp-ui-font-color2); +} + +.jp-InputGroupAction { + position: absolute; + bottom: 1px; + right: 0; + padding: 6px; +} + +.jp-HTMLSelect.jp-DefaultStyle select { + background-color: initial; + border: none; + border-radius: 0; + box-shadow: none; + color: var(--jp-ui-font-color0); + display: block; + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + height: 24px; + line-height: 14px; + padding: 0 25px 0 10px; + text-align: left; + -moz-appearance: none; + -webkit-appearance: none; +} + +.jp-HTMLSelect.jp-DefaultStyle select:disabled { + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color2); + cursor: not-allowed; + resize: block; +} + +.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span { + cursor: not-allowed; +} + +/* Use our own theme for hover and option styles */ +/* stylelint-disable-next-line selector-max-type */ +.jp-HTMLSelect.jp-DefaultStyle select:hover, +.jp-HTMLSelect.jp-DefaultStyle select > option { + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color0); +} + +select { + box-sizing: border-box; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-StatusBar-Widget { + display: flex; + align-items: center; + background: var(--jp-layout-color2); + min-height: var(--jp-statusbar-height); + justify-content: space-between; + padding: 0 10px; +} + +.jp-StatusBar-Left { + display: flex; + align-items: center; + flex-direction: row; +} + +.jp-StatusBar-Middle { + display: flex; + align-items: center; +} + +.jp-StatusBar-Right { + display: flex; + align-items: center; + flex-direction: row-reverse; +} + +.jp-StatusBar-Item { + max-height: var(--jp-statusbar-height); + margin: 0 2px; + height: var(--jp-statusbar-height); + white-space: nowrap; + text-overflow: ellipsis; + color: var(--jp-ui-font-color1); + padding: 0 6px; +} + +.jp-mod-highlighted:hover { + background-color: var(--jp-layout-color3); +} + +.jp-mod-clicked { + background-color: var(--jp-brand-color1); +} + +.jp-mod-clicked:hover { + background-color: var(--jp-brand-color0); +} + +.jp-mod-clicked .jp-StatusBar-TextItem { + color: var(--jp-ui-inverse-font-color1); +} + +.jp-StatusBar-HoverItem { + box-shadow: '0px 4px 4px rgba(0, 0, 0, 0.25)'; +} + +.jp-StatusBar-TextItem { + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + line-height: 24px; + color: var(--jp-ui-font-color1); +} + +.jp-StatusBar-GroupItem { + display: flex; + align-items: center; + flex-direction: row; +} + +.jp-Statusbar-ProgressCircle svg { + display: block; + margin: 0 auto; + width: 16px; + height: 24px; + align-self: normal; +} + +.jp-Statusbar-ProgressCircle path { + fill: var(--jp-inverse-layout-color3); +} + +.jp-Statusbar-ProgressBar-progress-bar { + height: 10px; + width: 100px; + border: solid 0.25px var(--jp-brand-color2); + border-radius: 3px; + overflow: hidden; + align-self: center; +} + +.jp-Statusbar-ProgressBar-progress-bar > div { + background-color: var(--jp-brand-color2); + background-image: linear-gradient( + -45deg, + rgba(255, 255, 255, 0.2) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.2) 50%, + rgba(255, 255, 255, 0.2) 75%, + transparent 75%, + transparent + ); + background-size: 40px 40px; + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 14px; + color: #fff; + text-align: center; + animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite; +} + +.jp-Statusbar-ProgressBar-progress-bar p { + color: var(--jp-ui-font-color1); + font-family: var(--jp-ui-font-family); + font-size: var(--jp-ui-font-size1); + line-height: 10px; + width: 100px; +} + +@keyframes jp-Statusbar-ExecutionTime-progress-bar { + 0% { + background-position: 0 0; + } + + 100% { + background-position: 40px 40px; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-commandpalette-search-height: 28px; +} + +/*----------------------------------------------------------------------------- +| Overall styles +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + padding-bottom: 0; + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); +} + +/*----------------------------------------------------------------------------- +| Modal variant +|----------------------------------------------------------------------------*/ + +.jp-ModalCommandPalette { + position: absolute; + z-index: 10000; + top: 38px; + left: 30%; + margin: 0; + padding: 4px; + width: 40%; + box-shadow: var(--jp-elevation-z4); + border-radius: 4px; + background: var(--jp-layout-color0); +} + +.jp-ModalCommandPalette .lm-CommandPalette { + max-height: 40vh; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after { + display: none; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header { + display: none; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item { + margin-left: 4px; + margin-right: 4px; +} + +.jp-ModalCommandPalette + .lm-CommandPalette + .lm-CommandPalette-item.lm-mod-disabled { + display: none; +} + +/*----------------------------------------------------------------------------- +| Search +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette-search { + padding: 4px; + background-color: var(--jp-layout-color1); + z-index: 2; +} + +.lm-CommandPalette-wrapper { + overflow: overlay; + padding: 0 9px; + background-color: var(--jp-input-active-background); + height: 30px; + box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color); +} + +.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper { + box-shadow: inset 0 0 0 1px var(--jp-input-active-box-shadow-color), + inset 0 0 0 3px var(--jp-input-active-box-shadow-color); +} + +.jp-SearchIconGroup { + color: white; + background-color: var(--jp-brand-color1); + position: absolute; + top: 4px; + right: 4px; + padding: 5px 5px 1px; +} + +.jp-SearchIconGroup svg { + height: 20px; + width: 20px; +} + +.jp-SearchIconGroup .jp-icon3[fill] { + fill: var(--jp-layout-color0); +} + +.lm-CommandPalette-input { + background: transparent; + width: calc(100% - 18px); + float: left; + border: none; + outline: none; + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + line-height: var(--jp-private-commandpalette-search-height); +} + +.lm-CommandPalette-input::-webkit-input-placeholder, +.lm-CommandPalette-input::-moz-placeholder, +.lm-CommandPalette-input:-ms-input-placeholder { + color: var(--jp-ui-font-color2); + font-size: var(--jp-ui-font-size1); +} + +/*----------------------------------------------------------------------------- +| Results +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette-header:first-child { + margin-top: 0; +} + +.lm-CommandPalette-header { + border-bottom: solid var(--jp-border-width) var(--jp-border-color2); + color: var(--jp-ui-font-color1); + cursor: pointer; + display: flex; + font-size: var(--jp-ui-font-size0); + font-weight: 600; + letter-spacing: 1px; + margin-top: 8px; + padding: 8px 0 8px 12px; + text-transform: uppercase; +} + +.lm-CommandPalette-header.lm-mod-active { + background: var(--jp-layout-color2); +} + +.lm-CommandPalette-header > mark { + background-color: transparent; + font-weight: bold; + color: var(--jp-ui-font-color1); +} + +.lm-CommandPalette-item { + padding: 4px 12px 4px 4px; + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + font-weight: 400; + display: flex; +} + +.lm-CommandPalette-item.lm-mod-disabled { + color: var(--jp-ui-font-color2); +} + +.lm-CommandPalette-item.lm-mod-active { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark { + color: var(--jp-ui-inverse-font-color0); +} + +.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] { + fill: var(--jp-layout-color0); +} + +.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) { + background: var(--jp-layout-color2); +} + +.lm-CommandPalette-itemContent { + overflow: hidden; +} + +.lm-CommandPalette-itemLabel > mark { + color: var(--jp-ui-font-color0); + background-color: transparent; + font-weight: bold; +} + +.lm-CommandPalette-item.lm-mod-disabled mark { + color: var(--jp-ui-font-color2); +} + +.lm-CommandPalette-item .lm-CommandPalette-itemIcon { + margin: 0 4px 0 0; + position: relative; + width: 16px; + top: 2px; + flex: 0 0 auto; +} + +.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon { + opacity: 0.6; +} + +.lm-CommandPalette-item .lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemCaption { + display: none; +} + +.lm-CommandPalette-content { + background-color: var(--jp-layout-color1); +} + +.lm-CommandPalette-content:empty::after { + content: 'No results'; + margin: auto; + margin-top: 20px; + width: 100px; + display: block; + font-size: var(--jp-ui-font-size2); + font-family: var(--jp-ui-font-family); + font-weight: lighter; +} + +.lm-CommandPalette-emptyMessage { + text-align: center; + margin-top: 24px; + line-height: 1.32; + padding: 0 8px; + color: var(--jp-content-font-color3); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Dialog { + position: absolute; + z-index: 10000; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + top: 0; + left: 0; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + background: var(--jp-dialog-background); +} + +.jp-Dialog-content { + display: flex; + flex-direction: column; + margin-left: auto; + margin-right: auto; + background: var(--jp-layout-color1); + padding: 24px 24px 12px; + min-width: 300px; + min-height: 150px; + max-width: 1000px; + max-height: 500px; + box-sizing: border-box; + box-shadow: var(--jp-elevation-z20); + word-wrap: break-word; + border-radius: var(--jp-border-radius); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color1); + resize: both; +} + +.jp-Dialog-content.jp-Dialog-content-small { + max-width: 500px; +} + +.jp-Dialog-button { + overflow: visible; +} + +button.jp-Dialog-button:focus { + outline: 1px solid var(--jp-brand-color1); + outline-offset: 4px; + -moz-outline-radius: 0; +} + +button.jp-Dialog-button:focus::-moz-focus-inner { + border: 0; +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus, +button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus, +button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus { + outline-offset: 4px; + -moz-outline-radius: 0; +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus { + outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1)); +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus { + outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1)); +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus { + outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600)); +} + +button.jp-Dialog-close-button { + padding: 0; + height: 100%; + min-width: unset; + min-height: unset; +} + +.jp-Dialog-header { + display: flex; + justify-content: space-between; + flex: 0 0 auto; + padding-bottom: 12px; + font-size: var(--jp-ui-font-size3); + font-weight: 400; + color: var(--jp-ui-font-color1); +} + +.jp-Dialog-body { + display: flex; + flex-direction: column; + flex: 1 1 auto; + font-size: var(--jp-ui-font-size1); + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + overflow: auto; +} + +.jp-Dialog-footer { + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; + flex: 0 0 auto; + margin-left: -12px; + margin-right: -12px; + padding: 12px; +} + +.jp-Dialog-checkbox { + padding-right: 5px; +} + +.jp-Dialog-checkbox > input:focus-visible { + outline: 1px solid var(--jp-input-active-border-color); + outline-offset: 1px; +} + +.jp-Dialog-spacer { + flex: 1 1 auto; +} + +.jp-Dialog-title { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.jp-Dialog-body > .jp-select-wrapper { + width: 100%; +} + +.jp-Dialog-body > button { + padding: 0 16px; +} + +.jp-Dialog-body > label { + line-height: 1.4; + color: var(--jp-ui-font-color0); +} + +.jp-Dialog-button.jp-mod-styled:not(:last-child) { + margin-right: 12px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-Input-Boolean-Dialog { + flex-direction: row-reverse; + align-items: end; + width: 100%; +} + +.jp-Input-Boolean-Dialog > label { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-MainAreaWidget > :focus { + outline: none; +} + +.jp-MainAreaWidget .jp-MainAreaWidget-error { + padding: 6px; +} + +.jp-MainAreaWidget .jp-MainAreaWidget-error > pre { + width: auto; + padding: 10px; + background: var(--jp-error-color3); + border: var(--jp-border-width) solid var(--jp-error-color1); + border-radius: var(--jp-border-radius); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + white-space: pre-wrap; + word-wrap: break-word; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/** + * google-material-color v1.2.6 + * https://github.com/danlevan/google-material-color + */ +:root { + --md-red-50: #ffebee; + --md-red-100: #ffcdd2; + --md-red-200: #ef9a9a; + --md-red-300: #e57373; + --md-red-400: #ef5350; + --md-red-500: #f44336; + --md-red-600: #e53935; + --md-red-700: #d32f2f; + --md-red-800: #c62828; + --md-red-900: #b71c1c; + --md-red-A100: #ff8a80; + --md-red-A200: #ff5252; + --md-red-A400: #ff1744; + --md-red-A700: #d50000; + --md-pink-50: #fce4ec; + --md-pink-100: #f8bbd0; + --md-pink-200: #f48fb1; + --md-pink-300: #f06292; + --md-pink-400: #ec407a; + --md-pink-500: #e91e63; + --md-pink-600: #d81b60; + --md-pink-700: #c2185b; + --md-pink-800: #ad1457; + --md-pink-900: #880e4f; + --md-pink-A100: #ff80ab; + --md-pink-A200: #ff4081; + --md-pink-A400: #f50057; + --md-pink-A700: #c51162; + --md-purple-50: #f3e5f5; + --md-purple-100: #e1bee7; + --md-purple-200: #ce93d8; + --md-purple-300: #ba68c8; + --md-purple-400: #ab47bc; + --md-purple-500: #9c27b0; + --md-purple-600: #8e24aa; + --md-purple-700: #7b1fa2; + --md-purple-800: #6a1b9a; + --md-purple-900: #4a148c; + --md-purple-A100: #ea80fc; + --md-purple-A200: #e040fb; + --md-purple-A400: #d500f9; + --md-purple-A700: #a0f; + --md-deep-purple-50: #ede7f6; + --md-deep-purple-100: #d1c4e9; + --md-deep-purple-200: #b39ddb; + --md-deep-purple-300: #9575cd; + --md-deep-purple-400: #7e57c2; + --md-deep-purple-500: #673ab7; + --md-deep-purple-600: #5e35b1; + --md-deep-purple-700: #512da8; + --md-deep-purple-800: #4527a0; + --md-deep-purple-900: #311b92; + --md-deep-purple-A100: #b388ff; + --md-deep-purple-A200: #7c4dff; + --md-deep-purple-A400: #651fff; + --md-deep-purple-A700: #6200ea; + --md-indigo-50: #e8eaf6; + --md-indigo-100: #c5cae9; + --md-indigo-200: #9fa8da; + --md-indigo-300: #7986cb; + --md-indigo-400: #5c6bc0; + --md-indigo-500: #3f51b5; + --md-indigo-600: #3949ab; + --md-indigo-700: #303f9f; + --md-indigo-800: #283593; + --md-indigo-900: #1a237e; + --md-indigo-A100: #8c9eff; + --md-indigo-A200: #536dfe; + --md-indigo-A400: #3d5afe; + --md-indigo-A700: #304ffe; + --md-blue-50: #e3f2fd; + --md-blue-100: #bbdefb; + --md-blue-200: #90caf9; + --md-blue-300: #64b5f6; + --md-blue-400: #42a5f5; + --md-blue-500: #2196f3; + --md-blue-600: #1e88e5; + --md-blue-700: #1976d2; + --md-blue-800: #1565c0; + --md-blue-900: #0d47a1; + --md-blue-A100: #82b1ff; + --md-blue-A200: #448aff; + --md-blue-A400: #2979ff; + --md-blue-A700: #2962ff; + --md-light-blue-50: #e1f5fe; + --md-light-blue-100: #b3e5fc; + --md-light-blue-200: #81d4fa; + --md-light-blue-300: #4fc3f7; + --md-light-blue-400: #29b6f6; + --md-light-blue-500: #03a9f4; + --md-light-blue-600: #039be5; + --md-light-blue-700: #0288d1; + --md-light-blue-800: #0277bd; + --md-light-blue-900: #01579b; + --md-light-blue-A100: #80d8ff; + --md-light-blue-A200: #40c4ff; + --md-light-blue-A400: #00b0ff; + --md-light-blue-A700: #0091ea; + --md-cyan-50: #e0f7fa; + --md-cyan-100: #b2ebf2; + --md-cyan-200: #80deea; + --md-cyan-300: #4dd0e1; + --md-cyan-400: #26c6da; + --md-cyan-500: #00bcd4; + --md-cyan-600: #00acc1; + --md-cyan-700: #0097a7; + --md-cyan-800: #00838f; + --md-cyan-900: #006064; + --md-cyan-A100: #84ffff; + --md-cyan-A200: #18ffff; + --md-cyan-A400: #00e5ff; + --md-cyan-A700: #00b8d4; + --md-teal-50: #e0f2f1; + --md-teal-100: #b2dfdb; + --md-teal-200: #80cbc4; + --md-teal-300: #4db6ac; + --md-teal-400: #26a69a; + --md-teal-500: #009688; + --md-teal-600: #00897b; + --md-teal-700: #00796b; + --md-teal-800: #00695c; + --md-teal-900: #004d40; + --md-teal-A100: #a7ffeb; + --md-teal-A200: #64ffda; + --md-teal-A400: #1de9b6; + --md-teal-A700: #00bfa5; + --md-green-50: #e8f5e9; + --md-green-100: #c8e6c9; + --md-green-200: #a5d6a7; + --md-green-300: #81c784; + --md-green-400: #66bb6a; + --md-green-500: #4caf50; + --md-green-600: #43a047; + --md-green-700: #388e3c; + --md-green-800: #2e7d32; + --md-green-900: #1b5e20; + --md-green-A100: #b9f6ca; + --md-green-A200: #69f0ae; + --md-green-A400: #00e676; + --md-green-A700: #00c853; + --md-light-green-50: #f1f8e9; + --md-light-green-100: #dcedc8; + --md-light-green-200: #c5e1a5; + --md-light-green-300: #aed581; + --md-light-green-400: #9ccc65; + --md-light-green-500: #8bc34a; + --md-light-green-600: #7cb342; + --md-light-green-700: #689f38; + --md-light-green-800: #558b2f; + --md-light-green-900: #33691e; + --md-light-green-A100: #ccff90; + --md-light-green-A200: #b2ff59; + --md-light-green-A400: #76ff03; + --md-light-green-A700: #64dd17; + --md-lime-50: #f9fbe7; + --md-lime-100: #f0f4c3; + --md-lime-200: #e6ee9c; + --md-lime-300: #dce775; + --md-lime-400: #d4e157; + --md-lime-500: #cddc39; + --md-lime-600: #c0ca33; + --md-lime-700: #afb42b; + --md-lime-800: #9e9d24; + --md-lime-900: #827717; + --md-lime-A100: #f4ff81; + --md-lime-A200: #eeff41; + --md-lime-A400: #c6ff00; + --md-lime-A700: #aeea00; + --md-yellow-50: #fffde7; + --md-yellow-100: #fff9c4; + --md-yellow-200: #fff59d; + --md-yellow-300: #fff176; + --md-yellow-400: #ffee58; + --md-yellow-500: #ffeb3b; + --md-yellow-600: #fdd835; + --md-yellow-700: #fbc02d; + --md-yellow-800: #f9a825; + --md-yellow-900: #f57f17; + --md-yellow-A100: #ffff8d; + --md-yellow-A200: #ff0; + --md-yellow-A400: #ffea00; + --md-yellow-A700: #ffd600; + --md-amber-50: #fff8e1; + --md-amber-100: #ffecb3; + --md-amber-200: #ffe082; + --md-amber-300: #ffd54f; + --md-amber-400: #ffca28; + --md-amber-500: #ffc107; + --md-amber-600: #ffb300; + --md-amber-700: #ffa000; + --md-amber-800: #ff8f00; + --md-amber-900: #ff6f00; + --md-amber-A100: #ffe57f; + --md-amber-A200: #ffd740; + --md-amber-A400: #ffc400; + --md-amber-A700: #ffab00; + --md-orange-50: #fff3e0; + --md-orange-100: #ffe0b2; + --md-orange-200: #ffcc80; + --md-orange-300: #ffb74d; + --md-orange-400: #ffa726; + --md-orange-500: #ff9800; + --md-orange-600: #fb8c00; + --md-orange-700: #f57c00; + --md-orange-800: #ef6c00; + --md-orange-900: #e65100; + --md-orange-A100: #ffd180; + --md-orange-A200: #ffab40; + --md-orange-A400: #ff9100; + --md-orange-A700: #ff6d00; + --md-deep-orange-50: #fbe9e7; + --md-deep-orange-100: #ffccbc; + --md-deep-orange-200: #ffab91; + --md-deep-orange-300: #ff8a65; + --md-deep-orange-400: #ff7043; + --md-deep-orange-500: #ff5722; + --md-deep-orange-600: #f4511e; + --md-deep-orange-700: #e64a19; + --md-deep-orange-800: #d84315; + --md-deep-orange-900: #bf360c; + --md-deep-orange-A100: #ff9e80; + --md-deep-orange-A200: #ff6e40; + --md-deep-orange-A400: #ff3d00; + --md-deep-orange-A700: #dd2c00; + --md-brown-50: #efebe9; + --md-brown-100: #d7ccc8; + --md-brown-200: #bcaaa4; + --md-brown-300: #a1887f; + --md-brown-400: #8d6e63; + --md-brown-500: #795548; + --md-brown-600: #6d4c41; + --md-brown-700: #5d4037; + --md-brown-800: #4e342e; + --md-brown-900: #3e2723; + --md-grey-50: #fafafa; + --md-grey-100: #f5f5f5; + --md-grey-200: #eee; + --md-grey-300: #e0e0e0; + --md-grey-400: #bdbdbd; + --md-grey-500: #9e9e9e; + --md-grey-600: #757575; + --md-grey-700: #616161; + --md-grey-800: #424242; + --md-grey-900: #212121; + --md-blue-grey-50: #eceff1; + --md-blue-grey-100: #cfd8dc; + --md-blue-grey-200: #b0bec5; + --md-blue-grey-300: #90a4ae; + --md-blue-grey-400: #78909c; + --md-blue-grey-500: #607d8b; + --md-blue-grey-600: #546e7a; + --md-blue-grey-700: #455a64; + --md-blue-grey-800: #37474f; + --md-blue-grey-900: #263238; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| RenderedText +|----------------------------------------------------------------------------*/ + +:root { + /* This is the padding value to fill the gaps between lines containing spans with background color. */ + --jp-private-code-span-padding: calc( + (var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2 + ); +} + +.jp-RenderedText { + text-align: left; + padding-left: var(--jp-code-padding); + line-height: var(--jp-code-line-height); + font-family: var(--jp-code-font-family); +} + +.jp-RenderedText pre, +.jp-RenderedJavaScript pre, +.jp-RenderedHTMLCommon pre { + color: var(--jp-content-font-color1); + font-size: var(--jp-code-font-size); + border: none; + margin: 0; + padding: 0; +} + +.jp-RenderedText pre a:link { + text-decoration: none; + color: var(--jp-content-link-color); +} + +.jp-RenderedText pre a:hover { + text-decoration: underline; + color: var(--jp-content-link-color); +} + +.jp-RenderedText pre a:visited { + text-decoration: none; + color: var(--jp-content-link-color); +} + +/* console foregrounds and backgrounds */ +.jp-RenderedText pre .ansi-black-fg { + color: #3e424d; +} + +.jp-RenderedText pre .ansi-red-fg { + color: #e75c58; +} + +.jp-RenderedText pre .ansi-green-fg { + color: #00a250; +} + +.jp-RenderedText pre .ansi-yellow-fg { + color: #ddb62b; +} + +.jp-RenderedText pre .ansi-blue-fg { + color: #208ffb; +} + +.jp-RenderedText pre .ansi-magenta-fg { + color: #d160c4; +} + +.jp-RenderedText pre .ansi-cyan-fg { + color: #60c6c8; +} + +.jp-RenderedText pre .ansi-white-fg { + color: #c5c1b4; +} + +.jp-RenderedText pre .ansi-black-bg { + background-color: #3e424d; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-red-bg { + background-color: #e75c58; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-green-bg { + background-color: #00a250; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-yellow-bg { + background-color: #ddb62b; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-blue-bg { + background-color: #208ffb; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-magenta-bg { + background-color: #d160c4; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-cyan-bg { + background-color: #60c6c8; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-white-bg { + background-color: #c5c1b4; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-black-intense-fg { + color: #282c36; +} + +.jp-RenderedText pre .ansi-red-intense-fg { + color: #b22b31; +} + +.jp-RenderedText pre .ansi-green-intense-fg { + color: #007427; +} + +.jp-RenderedText pre .ansi-yellow-intense-fg { + color: #b27d12; +} + +.jp-RenderedText pre .ansi-blue-intense-fg { + color: #0065ca; +} + +.jp-RenderedText pre .ansi-magenta-intense-fg { + color: #a03196; +} + +.jp-RenderedText pre .ansi-cyan-intense-fg { + color: #258f8f; +} + +.jp-RenderedText pre .ansi-white-intense-fg { + color: #a1a6b2; +} + +.jp-RenderedText pre .ansi-black-intense-bg { + background-color: #282c36; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-red-intense-bg { + background-color: #b22b31; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-green-intense-bg { + background-color: #007427; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-yellow-intense-bg { + background-color: #b27d12; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-blue-intense-bg { + background-color: #0065ca; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-magenta-intense-bg { + background-color: #a03196; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-cyan-intense-bg { + background-color: #258f8f; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-white-intense-bg { + background-color: #a1a6b2; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-default-inverse-fg { + color: var(--jp-ui-inverse-font-color0); +} + +.jp-RenderedText pre .ansi-default-inverse-bg { + background-color: var(--jp-inverse-layout-color0); + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-bold { + font-weight: bold; +} + +.jp-RenderedText pre .ansi-underline { + text-decoration: underline; +} + +.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] { + background: var(--jp-rendermime-error-background); + padding-top: var(--jp-code-padding); +} + +/*----------------------------------------------------------------------------- +| RenderedLatex +|----------------------------------------------------------------------------*/ + +.jp-RenderedLatex { + color: var(--jp-content-font-color1); + font-size: var(--jp-content-font-size1); + line-height: var(--jp-content-line-height); +} + +/* Left-justify outputs.*/ +.jp-OutputArea-output.jp-RenderedLatex { + padding: var(--jp-code-padding); + text-align: left; +} + +/*----------------------------------------------------------------------------- +| RenderedHTML +|----------------------------------------------------------------------------*/ + +.jp-RenderedHTMLCommon { + color: var(--jp-content-font-color1); + font-family: var(--jp-content-font-family); + font-size: var(--jp-content-font-size1); + line-height: var(--jp-content-line-height); + + /* Give a bit more R padding on Markdown text to keep line lengths reasonable */ + padding-right: 20px; +} + +.jp-RenderedHTMLCommon em { + font-style: italic; +} + +.jp-RenderedHTMLCommon strong { + font-weight: bold; +} + +.jp-RenderedHTMLCommon u { + text-decoration: underline; +} + +.jp-RenderedHTMLCommon a:link { + text-decoration: none; + color: var(--jp-content-link-color); +} + +.jp-RenderedHTMLCommon a:hover { + text-decoration: underline; + color: var(--jp-content-link-color); +} + +.jp-RenderedHTMLCommon a:visited { + text-decoration: none; + color: var(--jp-content-link-color); +} + +/* Headings */ + +.jp-RenderedHTMLCommon h1, +.jp-RenderedHTMLCommon h2, +.jp-RenderedHTMLCommon h3, +.jp-RenderedHTMLCommon h4, +.jp-RenderedHTMLCommon h5, +.jp-RenderedHTMLCommon h6 { + line-height: var(--jp-content-heading-line-height); + font-weight: var(--jp-content-heading-font-weight); + font-style: normal; + margin: var(--jp-content-heading-margin-top) 0 + var(--jp-content-heading-margin-bottom) 0; +} + +.jp-RenderedHTMLCommon h1:first-child, +.jp-RenderedHTMLCommon h2:first-child, +.jp-RenderedHTMLCommon h3:first-child, +.jp-RenderedHTMLCommon h4:first-child, +.jp-RenderedHTMLCommon h5:first-child, +.jp-RenderedHTMLCommon h6:first-child { + margin-top: calc(0.5 * var(--jp-content-heading-margin-top)); +} + +.jp-RenderedHTMLCommon h1:last-child, +.jp-RenderedHTMLCommon h2:last-child, +.jp-RenderedHTMLCommon h3:last-child, +.jp-RenderedHTMLCommon h4:last-child, +.jp-RenderedHTMLCommon h5:last-child, +.jp-RenderedHTMLCommon h6:last-child { + margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom)); +} + +.jp-RenderedHTMLCommon h1 { + font-size: var(--jp-content-font-size5); +} + +.jp-RenderedHTMLCommon h2 { + font-size: var(--jp-content-font-size4); +} + +.jp-RenderedHTMLCommon h3 { + font-size: var(--jp-content-font-size3); +} + +.jp-RenderedHTMLCommon h4 { + font-size: var(--jp-content-font-size2); +} + +.jp-RenderedHTMLCommon h5 { + font-size: var(--jp-content-font-size1); +} + +.jp-RenderedHTMLCommon h6 { + font-size: var(--jp-content-font-size0); +} + +/* Lists */ + +/* stylelint-disable selector-max-type, selector-max-compound-selectors */ + +.jp-RenderedHTMLCommon ul:not(.list-inline), +.jp-RenderedHTMLCommon ol:not(.list-inline) { + padding-left: 2em; +} + +.jp-RenderedHTMLCommon ul { + list-style: disc; +} + +.jp-RenderedHTMLCommon ul ul { + list-style: square; +} + +.jp-RenderedHTMLCommon ul ul ul { + list-style: circle; +} + +.jp-RenderedHTMLCommon ol { + list-style: decimal; +} + +.jp-RenderedHTMLCommon ol ol { + list-style: upper-alpha; +} + +.jp-RenderedHTMLCommon ol ol ol { + list-style: lower-alpha; +} + +.jp-RenderedHTMLCommon ol ol ol ol { + list-style: lower-roman; +} + +.jp-RenderedHTMLCommon ol ol ol ol ol { + list-style: decimal; +} + +.jp-RenderedHTMLCommon ol, +.jp-RenderedHTMLCommon ul { + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon ul ul, +.jp-RenderedHTMLCommon ul ol, +.jp-RenderedHTMLCommon ol ul, +.jp-RenderedHTMLCommon ol ol { + margin-bottom: 0; +} + +/* stylelint-enable selector-max-type, selector-max-compound-selectors */ + +.jp-RenderedHTMLCommon hr { + color: var(--jp-border-color2); + background-color: var(--jp-border-color1); + margin-top: 1em; + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon > pre { + margin: 1.5em 2em; +} + +.jp-RenderedHTMLCommon pre, +.jp-RenderedHTMLCommon code { + border: 0; + background-color: var(--jp-layout-color0); + color: var(--jp-content-font-color1); + font-family: var(--jp-code-font-family); + font-size: inherit; + line-height: var(--jp-code-line-height); + padding: 0; + white-space: pre-wrap; +} + +.jp-RenderedHTMLCommon :not(pre) > code { + background-color: var(--jp-layout-color2); + padding: 1px 5px; +} + +/* Tables */ + +.jp-RenderedHTMLCommon table { + border-collapse: collapse; + border-spacing: 0; + border: none; + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + table-layout: fixed; + margin-left: auto; + margin-bottom: 1em; + margin-right: auto; +} + +.jp-RenderedHTMLCommon thead { + border-bottom: var(--jp-border-width) solid var(--jp-border-color1); + vertical-align: bottom; +} + +.jp-RenderedHTMLCommon td, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon tr { + vertical-align: middle; + padding: 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} + +.jp-RenderedMarkdown.jp-RenderedHTMLCommon td, +.jp-RenderedMarkdown.jp-RenderedHTMLCommon th { + max-width: none; +} + +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td, +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th, +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr { + text-align: right; +} + +.jp-RenderedHTMLCommon th { + font-weight: bold; +} + +.jp-RenderedHTMLCommon tbody tr:nth-child(odd) { + background: var(--jp-layout-color0); +} + +.jp-RenderedHTMLCommon tbody tr:nth-child(even) { + background: var(--jp-rendermime-table-row-background); +} + +.jp-RenderedHTMLCommon tbody tr:hover { + background: var(--jp-rendermime-table-row-hover-background); +} + +.jp-RenderedHTMLCommon p { + text-align: left; + margin: 0; + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon img { + -moz-force-broken-image-icon: 1; +} + +/* Restrict to direct children as other images could be nested in other content. */ +.jp-RenderedHTMLCommon > img { + display: block; + margin-left: 0; + margin-right: 0; + margin-bottom: 1em; +} + +/* Change color behind transparent images if they need it... */ +[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background { + background-color: var(--jp-inverse-layout-color1); +} + +[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background { + background-color: var(--jp-inverse-layout-color1); +} + +.jp-RenderedHTMLCommon img, +.jp-RenderedImage img, +.jp-RenderedHTMLCommon svg, +.jp-RenderedSVG svg { + max-width: 100%; + height: auto; +} + +.jp-RenderedHTMLCommon img.jp-mod-unconfined, +.jp-RenderedImage img.jp-mod-unconfined, +.jp-RenderedHTMLCommon svg.jp-mod-unconfined, +.jp-RenderedSVG svg.jp-mod-unconfined { + max-width: none; +} + +.jp-RenderedHTMLCommon .alert { + padding: var(--jp-notebook-padding); + border: var(--jp-border-width) solid transparent; + border-radius: var(--jp-border-radius); + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon .alert-info { + color: var(--jp-info-color0); + background-color: var(--jp-info-color3); + border-color: var(--jp-info-color2); +} + +.jp-RenderedHTMLCommon .alert-info hr { + border-color: var(--jp-info-color3); +} + +.jp-RenderedHTMLCommon .alert-info > p:last-child, +.jp-RenderedHTMLCommon .alert-info > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-warning { + color: var(--jp-warn-color0); + background-color: var(--jp-warn-color3); + border-color: var(--jp-warn-color2); +} + +.jp-RenderedHTMLCommon .alert-warning hr { + border-color: var(--jp-warn-color3); +} + +.jp-RenderedHTMLCommon .alert-warning > p:last-child, +.jp-RenderedHTMLCommon .alert-warning > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-success { + color: var(--jp-success-color0); + background-color: var(--jp-success-color3); + border-color: var(--jp-success-color2); +} + +.jp-RenderedHTMLCommon .alert-success hr { + border-color: var(--jp-success-color3); +} + +.jp-RenderedHTMLCommon .alert-success > p:last-child, +.jp-RenderedHTMLCommon .alert-success > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-danger { + color: var(--jp-error-color0); + background-color: var(--jp-error-color3); + border-color: var(--jp-error-color2); +} + +.jp-RenderedHTMLCommon .alert-danger hr { + border-color: var(--jp-error-color3); +} + +.jp-RenderedHTMLCommon .alert-danger > p:last-child, +.jp-RenderedHTMLCommon .alert-danger > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon blockquote { + margin: 1em 2em; + padding: 0 1em; + border-left: 5px solid var(--jp-border-color2); +} + +a.jp-InternalAnchorLink { + visibility: hidden; + margin-left: 8px; + color: var(--md-blue-800); +} + +h1:hover .jp-InternalAnchorLink, +h2:hover .jp-InternalAnchorLink, +h3:hover .jp-InternalAnchorLink, +h4:hover .jp-InternalAnchorLink, +h5:hover .jp-InternalAnchorLink, +h6:hover .jp-InternalAnchorLink { + visibility: visible; +} + +.jp-RenderedHTMLCommon kbd { + background-color: var(--jp-rendermime-table-row-background); + border: 1px solid var(--jp-border-color0); + border-bottom-color: var(--jp-border-color2); + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + display: inline-block; + font-size: var(--jp-ui-font-size0); + line-height: 1em; + padding: 0.2em 0.5em; +} + +/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0. + * At the bottom of cells this is a bit too much as there is also spacing + * between cells. Going all the way to 0 gets too tight between markdown and + * code cells. + */ +.jp-RenderedHTMLCommon > *:last-child { + margin-bottom: 0.5em; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-cursor-backdrop { + position: fixed; + width: 200px; + height: 200px; + margin-top: -100px; + margin-left: -100px; + will-change: transform; + z-index: 100; +} + +.lm-mod-drag-image { + will-change: transform; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-lineFormSearch { + padding: 4px 12px; + background-color: var(--jp-layout-color2); + box-shadow: var(--jp-toolbar-box-shadow); + z-index: 2; + font-size: var(--jp-ui-font-size1); +} + +.jp-lineFormCaption { + font-size: var(--jp-ui-font-size0); + line-height: var(--jp-ui-font-size1); + margin-top: 4px; + color: var(--jp-ui-font-color0); +} + +.jp-baseLineForm { + border: none; + border-radius: 0; + position: absolute; + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + outline: none; +} + +.jp-lineFormButtonContainer { + top: 4px; + right: 8px; + height: 24px; + padding: 0 12px; + width: 12px; +} + +.jp-lineFormButtonIcon { + top: 0; + right: 0; + background-color: var(--jp-brand-color1); + height: 100%; + width: 100%; + box-sizing: border-box; + padding: 4px 6px; +} + +.jp-lineFormButton { + top: 0; + right: 0; + background-color: transparent; + height: 100%; + width: 100%; + box-sizing: border-box; +} + +.jp-lineFormWrapper { + overflow: hidden; + padding: 0 8px; + border: 1px solid var(--jp-border-color0); + background-color: var(--jp-input-active-background); + height: 22px; +} + +.jp-lineFormWrapperFocusWithin { + border: var(--jp-border-width) solid var(--md-blue-500); + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-lineFormInput { + background: transparent; + width: 200px; + height: 100%; + border: none; + outline: none; + color: var(--jp-ui-font-color0); + line-height: 28px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-JSONEditor { + display: flex; + flex-direction: column; + width: 100%; +} + +.jp-JSONEditor-host { + flex: 1 1 auto; + border: var(--jp-border-width) solid var(--jp-input-border-color); + border-radius: 0; + background: var(--jp-layout-color0); + min-height: 50px; + padding: 1px; +} + +.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host { + border-color: red; + outline-color: red; +} + +.jp-JSONEditor-header { + display: flex; + flex: 1 0 auto; + padding: 0 0 0 12px; +} + +.jp-JSONEditor-header label { + flex: 0 0 auto; +} + +.jp-JSONEditor-commitButton { + height: 16px; + width: 16px; + background-size: 18px; + background-repeat: no-repeat; + background-position: center; +} + +.jp-JSONEditor-host.jp-mod-focused { + background-color: var(--jp-input-active-background); + border: 1px solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); +} + +.jp-Editor.jp-mod-dropTarget { + border: var(--jp-border-width) solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ +.jp-DocumentSearch-input { + border: none; + outline: none; + color: var(--jp-ui-font-color0); + font-size: var(--jp-ui-font-size1); + background-color: var(--jp-layout-color0); + font-family: var(--jp-ui-font-family); + padding: 2px 1px; + resize: none; +} + +.jp-DocumentSearch-overlay { + position: absolute; + background-color: var(--jp-toolbar-background); + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color); + top: 0; + right: 0; + z-index: 7; + min-width: 405px; + padding: 2px; + font-size: var(--jp-ui-font-size1); + + --jp-private-document-search-button-height: 20px; +} + +.jp-DocumentSearch-overlay button { + background-color: var(--jp-toolbar-background); + outline: 0; +} + +.jp-DocumentSearch-overlay button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-overlay button:active { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-overlay-row { + display: flex; + align-items: center; + margin-bottom: 2px; +} + +.jp-DocumentSearch-button-content { + display: inline-block; + cursor: pointer; + box-sizing: border-box; + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-button-content svg { + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-input-wrapper { + border: var(--jp-border-width) solid var(--jp-border-color0); + display: flex; + background-color: var(--jp-layout-color0); + margin: 2px; +} + +.jp-DocumentSearch-input-wrapper:focus-within { + border-color: var(--jp-cell-editor-active-border-color); +} + +.jp-DocumentSearch-toggle-wrapper, +.jp-DocumentSearch-button-wrapper { + all: initial; + overflow: hidden; + display: inline-block; + border: none; + box-sizing: border-box; +} + +.jp-DocumentSearch-toggle-wrapper { + width: 14px; + height: 14px; +} + +.jp-DocumentSearch-button-wrapper { + width: var(--jp-private-document-search-button-height); + height: var(--jp-private-document-search-button-height); +} + +.jp-DocumentSearch-toggle-wrapper:focus, +.jp-DocumentSearch-button-wrapper:focus { + outline: var(--jp-border-width) solid + var(--jp-cell-editor-active-border-color); + outline-offset: -1px; +} + +.jp-DocumentSearch-toggle-wrapper, +.jp-DocumentSearch-button-wrapper, +.jp-DocumentSearch-button-content:focus { + outline: none; +} + +.jp-DocumentSearch-toggle-placeholder { + width: 5px; +} + +.jp-DocumentSearch-input-button::before { + display: block; + padding-top: 100%; +} + +.jp-DocumentSearch-input-button-off { + opacity: var(--jp-search-toggle-off-opacity); +} + +.jp-DocumentSearch-input-button-off:hover { + opacity: var(--jp-search-toggle-hover-opacity); +} + +.jp-DocumentSearch-input-button-on { + opacity: var(--jp-search-toggle-on-opacity); +} + +.jp-DocumentSearch-index-counter { + padding-left: 10px; + padding-right: 10px; + user-select: none; + min-width: 35px; + display: inline-block; +} + +.jp-DocumentSearch-up-down-wrapper { + display: inline-block; + padding-right: 2px; + margin-left: auto; + white-space: nowrap; +} + +.jp-DocumentSearch-spacer { + margin-left: auto; +} + +.jp-DocumentSearch-up-down-wrapper button { + outline: 0; + border: none; + width: var(--jp-private-document-search-button-height); + height: var(--jp-private-document-search-button-height); + vertical-align: middle; + margin: 1px 5px 2px; +} + +.jp-DocumentSearch-up-down-button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-up-down-button:active { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-filter-button { + border-radius: var(--jp-border-radius); +} + +.jp-DocumentSearch-filter-button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-filter-button-enabled { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-filter-button-enabled:hover { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-search-options { + padding: 0 8px; + margin-left: 3px; + width: 100%; + display: grid; + justify-content: start; + grid-template-columns: 1fr 1fr; + align-items: center; + justify-items: stretch; +} + +.jp-DocumentSearch-search-filter-disabled { + color: var(--jp-ui-font-color2); +} + +.jp-DocumentSearch-search-filter { + display: flex; + align-items: center; + user-select: none; +} + +.jp-DocumentSearch-regex-error { + color: var(--jp-error-color0); +} + +.jp-DocumentSearch-replace-button-wrapper { + overflow: hidden; + display: inline-block; + box-sizing: border-box; + border: var(--jp-border-width) solid var(--jp-border-color0); + margin: auto 2px; + padding: 1px 4px; + height: calc(var(--jp-private-document-search-button-height) + 2px); +} + +.jp-DocumentSearch-replace-button-wrapper:focus { + border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color); +} + +.jp-DocumentSearch-replace-button { + display: inline-block; + text-align: center; + cursor: pointer; + box-sizing: border-box; + color: var(--jp-ui-font-color1); + + /* height - 2 * (padding of wrapper) */ + line-height: calc(var(--jp-private-document-search-button-height) - 2px); + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-replace-button:focus { + outline: none; +} + +.jp-DocumentSearch-replace-wrapper-class { + margin-left: 14px; + display: flex; +} + +.jp-DocumentSearch-replace-toggle { + border: none; + background-color: var(--jp-toolbar-background); + border-radius: var(--jp-border-radius); +} + +.jp-DocumentSearch-replace-toggle:hover { + background-color: var(--jp-layout-color2); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.cm-editor { + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + font-family: var(--jp-code-font-family); + border: 0; + border-radius: 0; + height: auto; + + /* Changed to auto to autogrow */ +} + +.cm-editor pre { + padding: 0 var(--jp-code-padding); +} + +.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog { + background-color: var(--jp-layout-color0); + color: var(--jp-content-font-color1); +} + +.jp-CodeMirrorEditor { + cursor: text; +} + +/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */ +@media screen and (min-width: 2138px) and (max-width: 4319px) { + .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor { + border-left: var(--jp-code-cursor-width1) solid + var(--jp-editor-cursor-color); + } +} + +/* When zoomed out less than 33% */ +@media screen and (min-width: 4320px) { + .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor { + border-left: var(--jp-code-cursor-width2) solid + var(--jp-editor-cursor-color); + } +} + +.cm-editor.jp-mod-readOnly .cm-cursor { + display: none; +} + +.jp-CollaboratorCursor { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: none; + border-bottom: 3px solid; + background-clip: content-box; + margin-left: -5px; + margin-right: -5px; +} + +.cm-searching, +.cm-searching span { + /* `.cm-searching span`: we need to override syntax highlighting */ + background-color: var(--jp-search-unselected-match-background-color); + color: var(--jp-search-unselected-match-color); +} + +.cm-searching::selection, +.cm-searching span::selection { + background-color: var(--jp-search-unselected-match-background-color); + color: var(--jp-search-unselected-match-color); +} + +.jp-current-match > .cm-searching, +.jp-current-match > .cm-searching span, +.cm-searching > .jp-current-match, +.cm-searching > .jp-current-match span { + background-color: var(--jp-search-selected-match-background-color); + color: var(--jp-search-selected-match-color); +} + +.jp-current-match > .cm-searching::selection, +.cm-searching > .jp-current-match::selection, +.jp-current-match > .cm-searching span::selection { + background-color: var(--jp-search-selected-match-background-color); + color: var(--jp-search-selected-match-color); +} + +.cm-trailingspace { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=); + background-position: center left; + background-repeat: repeat-x; +} + +.jp-CollaboratorCursor-hover { + position: absolute; + z-index: 1; + transform: translateX(-50%); + color: white; + border-radius: 3px; + padding-left: 4px; + padding-right: 4px; + padding-top: 1px; + padding-bottom: 1px; + text-align: center; + font-size: var(--jp-ui-font-size1); + white-space: nowrap; +} + +.jp-CodeMirror-ruler { + border-left: 1px dashed var(--jp-border-color2); +} + +/* Styles for shared cursors (remote cursor locations and selected ranges) */ +.jp-CodeMirrorEditor .cm-ySelectionCaret { + position: relative; + border-left: 1px solid black; + margin-left: -1px; + margin-right: -1px; + box-sizing: border-box; +} + +.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo { + white-space: nowrap; + position: absolute; + top: -1.15em; + padding-bottom: 0.05em; + left: -1px; + font-size: 0.95em; + font-family: var(--jp-ui-font-family); + font-weight: bold; + line-height: normal; + user-select: none; + color: white; + padding-left: 2px; + padding-right: 2px; + z-index: 101; + transition: opacity 0.3s ease-in-out; +} + +.jp-CodeMirrorEditor .cm-ySelectionInfo { + transition-delay: 0.7s; + opacity: 0; +} + +.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo { + opacity: 1; + transition-delay: 0s; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-MimeDocument { + outline: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-filebrowser-button-height: 28px; + --jp-private-filebrowser-button-width: 48px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-FileBrowser .jp-SidePanel-content { + display: flex; + flex-direction: column; +} + +.jp-FileBrowser-toolbar.jp-Toolbar { + flex-wrap: wrap; + row-gap: 12px; + border-bottom: none; + height: auto; + margin: 8px 12px 0; + box-shadow: none; + padding: 0; + justify-content: flex-start; +} + +.jp-FileBrowser-Panel { + flex: 1 1 auto; + display: flex; + flex-direction: column; +} + +.jp-BreadCrumbs { + flex: 0 0 auto; + margin: 8px 12px; +} + +.jp-BreadCrumbs-item { + margin: 0 2px; + padding: 0 2px; + border-radius: var(--jp-border-radius); + cursor: pointer; +} + +.jp-BreadCrumbs-item:hover { + background-color: var(--jp-layout-color2); +} + +.jp-BreadCrumbs-item:first-child { + margin-left: 0; +} + +.jp-BreadCrumbs-item.jp-mod-dropTarget { + background-color: var(--jp-brand-color2); + opacity: 0.7; +} + +/*----------------------------------------------------------------------------- +| Buttons +|----------------------------------------------------------------------------*/ + +.jp-FileBrowser-toolbar > .jp-Toolbar-item { + flex: 0 0 auto; + padding-left: 0; + padding-right: 2px; + align-items: center; + height: unset; +} + +.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent { + width: 40px; +} + +/*----------------------------------------------------------------------------- +| Other styles +|----------------------------------------------------------------------------*/ + +.jp-FileDialog.jp-mod-conflict input { + color: var(--jp-error-color1); +} + +.jp-FileDialog .jp-new-name-title { + margin-top: 12px; +} + +.jp-LastModified-hidden { + display: none; +} + +.jp-FileSize-hidden { + display: none; +} + +.jp-FileBrowser .lm-AccordionPanel > h3:first-child { + display: none; +} + +/*----------------------------------------------------------------------------- +| DirListing +|----------------------------------------------------------------------------*/ + +.jp-DirListing { + flex: 1 1 auto; + display: flex; + flex-direction: column; + outline: 0; +} + +.jp-DirListing-header { + flex: 0 0 auto; + display: flex; + flex-direction: row; + align-items: center; + overflow: hidden; + border-top: var(--jp-border-width) solid var(--jp-border-color2); + border-bottom: var(--jp-border-width) solid var(--jp-border-color1); + box-shadow: var(--jp-toolbar-box-shadow); + z-index: 2; +} + +.jp-DirListing-headerItem { + padding: 4px 12px 2px; + font-weight: 500; +} + +.jp-DirListing-headerItem:hover { + background: var(--jp-layout-color2); +} + +.jp-DirListing-headerItem.jp-id-name { + flex: 1 0 84px; +} + +.jp-DirListing-headerItem.jp-id-modified { + flex: 0 0 112px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; +} + +.jp-DirListing-headerItem.jp-id-filesize { + flex: 0 0 75px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; +} + +.jp-id-narrow { + display: none; + flex: 0 0 5px; + padding: 4px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; + color: var(--jp-border-color2); +} + +.jp-DirListing-narrow .jp-id-narrow { + display: block; +} + +.jp-DirListing-narrow .jp-id-modified, +.jp-DirListing-narrow .jp-DirListing-itemModified { + display: none; +} + +.jp-DirListing-headerItem.jp-mod-selected { + font-weight: 600; +} + +/* increase specificity to override bundled default */ +.jp-DirListing-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + list-style-type: none; + overflow: auto; + background-color: var(--jp-layout-color1); +} + +.jp-DirListing-content mark { + color: var(--jp-ui-font-color0); + background-color: transparent; + font-weight: bold; +} + +.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark { + color: var(--jp-ui-inverse-font-color0); +} + +/* Style the directory listing content when a user drops a file to upload */ +.jp-DirListing.jp-mod-native-drop .jp-DirListing-content { + outline: 5px dashed rgba(128, 128, 128, 0.5); + outline-offset: -10px; + cursor: copy; +} + +.jp-DirListing-item { + display: flex; + flex-direction: row; + align-items: center; + padding: 4px 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-DirListing-checkboxWrapper { + /* Increases hit area of checkbox. */ + padding: 4px; +} + +.jp-DirListing-header + .jp-DirListing-checkboxWrapper + + .jp-DirListing-headerItem { + padding-left: 4px; +} + +.jp-DirListing-content .jp-DirListing-checkboxWrapper { + position: relative; + left: -4px; + margin: -4px 0 -4px -8px; +} + +.jp-DirListing-checkboxWrapper.jp-mod-visible { + visibility: visible; +} + +/* For devices that support hovering, hide checkboxes until hovered, selected... +*/ +@media (hover: hover) { + .jp-DirListing-checkboxWrapper { + visibility: hidden; + } + + .jp-DirListing-item:hover .jp-DirListing-checkboxWrapper, + .jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper { + visibility: visible; + } +} + +.jp-DirListing-item[data-is-dot] { + opacity: 75%; +} + +.jp-DirListing-item.jp-mod-selected { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.jp-DirListing-item.jp-mod-dropTarget { + background: var(--jp-brand-color3); +} + +.jp-DirListing-item:hover:not(.jp-mod-selected) { + background: var(--jp-layout-color2); +} + +.jp-DirListing-itemIcon { + flex: 0 0 20px; + margin-right: 4px; +} + +.jp-DirListing-itemText { + flex: 1 0 64px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + user-select: none; +} + +.jp-DirListing-itemText:focus { + outline-width: 2px; + outline-color: var(--jp-inverse-layout-color1); + outline-style: solid; + outline-offset: 1px; +} + +.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemText:focus { + outline-color: var(--jp-layout-color1); +} + +.jp-DirListing-itemModified { + flex: 0 0 125px; + text-align: right; +} + +.jp-DirListing-itemFileSize { + flex: 0 0 90px; + text-align: right; +} + +.jp-DirListing-editor { + flex: 1 0 64px; + outline: none; + border: none; + color: var(--jp-ui-font-color1); + background-color: var(--jp-layout-color1); +} + +.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before { + color: var(--jp-success-color1); + content: '\25CF'; + font-size: 8px; + position: absolute; + left: -8px; +} + +.jp-DirListing-item.jp-mod-running.jp-mod-selected + .jp-DirListing-itemIcon::before { + color: var(--jp-ui-inverse-font-color1); +} + +.jp-DirListing-item.lm-mod-drag-image, +.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image { + font-size: var(--jp-ui-font-size1); + padding-left: 4px; + margin-left: 4px; + width: 160px; + background-color: var(--jp-ui-inverse-font-color2); + box-shadow: var(--jp-elevation-z2); + border-radius: 0; + color: var(--jp-ui-font-color1); + transform: translateX(-40%) translateY(-58%); +} + +.jp-Document { + min-width: 120px; + min-height: 120px; + outline: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Main OutputArea +| OutputArea has a list of Outputs +|----------------------------------------------------------------------------*/ + +.jp-OutputArea { + overflow-y: auto; +} + +.jp-OutputArea-child { + display: table; + table-layout: fixed; + width: 100%; + overflow: hidden; +} + +.jp-OutputPrompt { + width: var(--jp-cell-prompt-width); + color: var(--jp-cell-outprompt-font-color); + font-family: var(--jp-cell-prompt-font-family); + padding: var(--jp-code-padding); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; + opacity: var(--jp-cell-prompt-opacity); + + /* Right align prompt text, don't wrap to handle large prompt numbers */ + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + /* Disable text selection */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-OutputArea-prompt { + display: table-cell; + vertical-align: top; +} + +.jp-OutputArea-output { + display: table-cell; + width: 100%; + height: auto; + overflow: auto; + user-select: text; + -moz-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; +} + +.jp-OutputArea .jp-RenderedText { + padding-left: 1ch; +} + +/** + * Prompt overlay. + */ + +.jp-OutputArea-promptOverlay { + position: absolute; + top: 0; + width: var(--jp-cell-prompt-width); + height: 100%; + opacity: 0.5; +} + +.jp-OutputArea-promptOverlay:hover { + background: var(--jp-layout-color2); + box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0); + cursor: zoom-out; +} + +.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay:hover { + cursor: zoom-in; +} + +/** + * Isolated output. + */ +.jp-OutputArea-output.jp-mod-isolated { + width: 100%; + display: block; +} + +/* +When drag events occur, `lm-mod-override-cursor` is added to the body. +Because iframes steal all cursor events, the following two rules are necessary +to suppress pointer events while resize drags are occurring. There may be a +better solution to this problem. +*/ +body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated { + position: relative; +} + +body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/* pre */ + +.jp-OutputArea-output pre { + border: none; + margin: 0; + padding: 0; + overflow-x: auto; + overflow-y: auto; + word-break: break-all; + word-wrap: break-word; + white-space: pre-wrap; +} + +/* tables */ + +.jp-OutputArea-output.jp-RenderedHTMLCommon table { + margin-left: 0; + margin-right: 0; +} + +/* description lists */ + +.jp-OutputArea-output dl, +.jp-OutputArea-output dt, +.jp-OutputArea-output dd { + display: block; +} + +.jp-OutputArea-output dl { + width: 100%; + overflow: hidden; + padding: 0; + margin: 0; +} + +.jp-OutputArea-output dt { + font-weight: bold; + float: left; + width: 20%; + padding: 0; + margin: 0; +} + +.jp-OutputArea-output dd { + float: left; + width: 80%; + padding: 0; + margin: 0; +} + +.jp-TrimmedOutputs pre { + background: var(--jp-layout-color3); + font-size: calc(var(--jp-code-font-size) * 1.4); + text-align: center; + text-transform: uppercase; +} + +/* Hide the gutter in case of + * - nested output areas (e.g. in the case of output widgets) + * - mirrored output areas + */ +.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt { + display: none; +} + +/* Hide empty lines in the output area, for instance due to cleared widgets */ +.jp-OutputArea-prompt:empty { + padding: 0; + border: 0; +} + +/*----------------------------------------------------------------------------- +| executeResult is added to any Output-result for the display of the object +| returned by a cell +|----------------------------------------------------------------------------*/ + +.jp-OutputArea-output.jp-OutputArea-executeResult { + margin-left: 0; + width: 100%; +} + +/* Text output with the Out[] prompt needs a top padding to match the + * alignment of the Out[] prompt itself. + */ +.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output { + padding-top: var(--jp-code-padding); + border-top: var(--jp-border-width) solid transparent; +} + +/*----------------------------------------------------------------------------- +| The Stdin output +|----------------------------------------------------------------------------*/ + +.jp-Stdin-prompt { + color: var(--jp-content-font-color0); + padding-right: var(--jp-code-padding); + vertical-align: baseline; + flex: 0 0 auto; +} + +.jp-Stdin-input { + font-family: var(--jp-code-font-family); + font-size: inherit; + color: inherit; + background-color: inherit; + width: 42%; + min-width: 200px; + + /* make sure input baseline aligns with prompt */ + vertical-align: baseline; + + /* padding + margin = 0.5em between prompt and cursor */ + padding: 0 0.25em; + margin: 0 0.25em; + flex: 0 0 70%; +} + +.jp-Stdin-input::placeholder { + opacity: 0; +} + +.jp-Stdin-input:focus { + box-shadow: none; +} + +.jp-Stdin-input:focus::placeholder { + opacity: 1; +} + +/*----------------------------------------------------------------------------- +| Output Area View +|----------------------------------------------------------------------------*/ + +.jp-LinkedOutputView .jp-OutputArea { + height: 100%; + display: block; +} + +.jp-LinkedOutputView .jp-OutputArea-output:only-child { + height: 100%; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +@media print { + .jp-OutputArea-child { + break-inside: avoid-page; + } +} + +/*----------------------------------------------------------------------------- +| Mobile +|----------------------------------------------------------------------------*/ +@media only screen and (max-width: 760px) { + .jp-OutputPrompt { + display: table-row; + text-align: left; + } + + .jp-OutputArea-child .jp-OutputArea-output { + display: table-row; + margin-left: var(--jp-notebook-padding); + } +} + +/* Trimmed outputs warning */ +.jp-TrimmedOutputs > a { + margin: 10px; + text-decoration: none; + cursor: pointer; +} + +.jp-TrimmedOutputs > a:hover { + text-decoration: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Table of Contents +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-toc-active-width: 4px; +} + +.jp-TableOfContents { + display: flex; + flex-direction: column; + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + height: 100%; +} + +.jp-TableOfContents-placeholder { + text-align: center; +} + +.jp-TableOfContents-placeholderContent { + color: var(--jp-content-font-color2); + padding: 8px; +} + +.jp-TableOfContents-placeholderContent > h3 { + margin-bottom: var(--jp-content-heading-margin-bottom); +} + +.jp-TableOfContents .jp-SidePanel-content { + overflow-y: auto; +} + +.jp-TableOfContents-tree { + margin: 4px; +} + +.jp-TableOfContents ol { + list-style-type: none; +} + +/* stylelint-disable-next-line selector-max-type */ +.jp-TableOfContents li > ol { + /* Align left border with triangle icon center */ + padding-left: 11px; +} + +.jp-TableOfContents-content { + /* left margin for the active heading indicator */ + margin: 0 0 0 var(--jp-private-toc-active-width); + padding: 0; + background-color: var(--jp-layout-color1); +} + +.jp-tocItem { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-tocItem-heading { + display: flex; + cursor: pointer; +} + +.jp-tocItem-heading:hover { + background-color: var(--jp-layout-color2); +} + +.jp-tocItem-content { + display: block; + padding: 4px 0; + white-space: nowrap; + text-overflow: ellipsis; + overflow-x: hidden; +} + +.jp-tocItem-collapser { + height: 20px; + margin: 2px 2px 0; + padding: 0; + background: none; + border: none; + cursor: pointer; +} + +.jp-tocItem-collapser:hover { + background-color: var(--jp-layout-color3); +} + +/* Active heading indicator */ + +.jp-tocItem-heading::before { + content: ' '; + background: transparent; + width: var(--jp-private-toc-active-width); + height: 24px; + position: absolute; + left: 0; + border-radius: var(--jp-border-radius); +} + +.jp-tocItem-heading.jp-tocItem-active::before { + background-color: var(--jp-brand-color1); +} + +.jp-tocItem-heading:hover.jp-tocItem-active::before { + background: var(--jp-brand-color0); + opacity: 1; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Collapser { + flex: 0 0 var(--jp-cell-collapser-width); + padding: 0; + margin: 0; + border: none; + outline: none; + background: transparent; + border-radius: var(--jp-border-radius); + opacity: 1; +} + +.jp-Collapser-child { + display: block; + width: 100%; + box-sizing: border-box; + + /* height: 100% doesn't work because the height of its parent is computed from content */ + position: absolute; + top: 0; + bottom: 0; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +/* +Hiding collapsers in print mode. + +Note: input and output wrappers have "display: block" propery in print mode. +*/ + +@media print { + .jp-Collapser { + display: none; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Header/Footer +|----------------------------------------------------------------------------*/ + +/* Hidden by zero height by default */ +.jp-CellHeader, +.jp-CellFooter { + height: 0; + width: 100%; + padding: 0; + margin: 0; + border: none; + outline: none; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Input +|----------------------------------------------------------------------------*/ + +/* All input areas */ +.jp-InputArea { + display: table; + table-layout: fixed; + width: 100%; + overflow: hidden; +} + +.jp-InputArea-editor { + display: table-cell; + overflow: hidden; + vertical-align: top; + + /* This is the non-active, default styling */ + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + border-radius: 0; + background: var(--jp-cell-editor-background); +} + +.jp-InputPrompt { + display: table-cell; + vertical-align: top; + width: var(--jp-cell-prompt-width); + color: var(--jp-cell-inprompt-font-color); + font-family: var(--jp-cell-prompt-font-family); + padding: var(--jp-code-padding); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + opacity: var(--jp-cell-prompt-opacity); + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; + + /* Right align prompt text, don't wrap to handle large prompt numbers */ + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + /* Disable text selection */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/*----------------------------------------------------------------------------- +| Mobile +|----------------------------------------------------------------------------*/ +@media only screen and (max-width: 760px) { + .jp-InputArea-editor { + display: table-row; + margin-left: var(--jp-notebook-padding); + } + + .jp-InputPrompt { + display: table-row; + text-align: left; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Placeholder +|----------------------------------------------------------------------------*/ + +.jp-Placeholder { + display: table; + table-layout: fixed; + width: 100%; +} + +.jp-Placeholder-prompt { + display: table-cell; + box-sizing: border-box; +} + +.jp-Placeholder-content { + display: table-cell; + padding: 4px 6px; + border: 1px solid transparent; + border-radius: 0; + background: none; + box-sizing: border-box; + cursor: pointer; +} + +.jp-Placeholder-contentContainer { + display: flex; +} + +.jp-Placeholder-content:hover, +.jp-InputPlaceholder > .jp-Placeholder-content:hover { + border-color: var(--jp-layout-color3); +} + +.jp-Placeholder-content .jp-MoreHorizIcon { + width: 32px; + height: 16px; + border: 1px solid transparent; + border-radius: var(--jp-border-radius); +} + +.jp-Placeholder-content .jp-MoreHorizIcon:hover { + border: 1px solid var(--jp-border-color1); + box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25); + background-color: var(--jp-layout-color0); +} + +.jp-PlaceholderText { + white-space: nowrap; + overflow-x: hidden; + color: var(--jp-inverse-layout-color3); + font-family: var(--jp-code-font-family); +} + +.jp-InputPlaceholder > .jp-Placeholder-content { + border-color: var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Private CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-cell-scrolling-output-offset: 5px; +} + +/*----------------------------------------------------------------------------- +| Cell +|----------------------------------------------------------------------------*/ + +.jp-Cell { + padding: var(--jp-cell-padding); + margin: 0; + border: none; + outline: none; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Common input/output +|----------------------------------------------------------------------------*/ + +.jp-Cell-inputWrapper, +.jp-Cell-outputWrapper { + display: flex; + flex-direction: row; + padding: 0; + margin: 0; + + /* Added to reveal the box-shadow on the input and output collapsers. */ + overflow: visible; +} + +/* Only input/output areas inside cells */ +.jp-Cell-inputArea, +.jp-Cell-outputArea { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Collapser +|----------------------------------------------------------------------------*/ + +/* Make the output collapser disappear when there is not output, but do so + * in a manner that leaves it in the layout and preserves its width. + */ +.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser { + border: none !important; + background: transparent !important; +} + +.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser { + min-height: var(--jp-cell-collapser-min-height); +} + +/*----------------------------------------------------------------------------- +| Output +|----------------------------------------------------------------------------*/ + +/* Put a space between input and output when there IS output */ +.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper { + margin-top: 5px; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea { + overflow-y: auto; + max-height: 24em; + margin-left: var(--jp-private-cell-scrolling-output-offset); + resize: vertical; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] { + max-height: unset; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after { + content: ' '; + box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%); + width: 100%; + height: 100%; + position: sticky; + bottom: 0; + top: 0; + margin-top: -50%; + float: left; + display: block; + pointer-events: none; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child { + padding-top: 6px; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt { + width: calc( + var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset) + ); +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay { + left: calc(-1 * var(--jp-private-cell-scrolling-output-offset)); +} + +/*----------------------------------------------------------------------------- +| CodeCell +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| MarkdownCell +|----------------------------------------------------------------------------*/ + +.jp-MarkdownOutput { + display: table-cell; + width: 100%; + margin-top: 0; + margin-bottom: 0; + padding-left: var(--jp-code-padding); +} + +.jp-MarkdownOutput.jp-RenderedHTMLCommon { + overflow: auto; +} + +/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */ +.jp-collapseHeadingButton { + display: flex; + min-height: var(--jp-cell-collapser-min-height); + font-size: var(--jp-code-font-size); + position: absolute; + background-color: transparent; + background-size: 25px; + background-repeat: no-repeat; + background-position-x: center; + background-position-y: top; + background-image: var(--jp-icon-caret-down); + right: 0; + top: 0; + bottom: 0; +} + +.jp-collapseHeadingButton.jp-mod-collapsed { + background-image: var(--jp-icon-caret-right); +} + +/* + set the container font size to match that of content + so that the nested collapse buttons have the right size +*/ +.jp-MarkdownCell .jp-InputPrompt { + font-size: var(--jp-content-font-size1); +} + +/* + Align collapseHeadingButton with cell top header + The font sizes are identical to the ones in packages/rendermime/style/base.css +*/ +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] { + font-size: var(--jp-content-font-size5); + background-position-y: calc(0.3 * var(--jp-content-font-size5)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] { + font-size: var(--jp-content-font-size4); + background-position-y: calc(0.3 * var(--jp-content-font-size4)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] { + font-size: var(--jp-content-font-size3); + background-position-y: calc(0.3 * var(--jp-content-font-size3)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] { + font-size: var(--jp-content-font-size2); + background-position-y: calc(0.3 * var(--jp-content-font-size2)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] { + font-size: var(--jp-content-font-size1); + background-position-y: top; +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] { + font-size: var(--jp-content-font-size0); + background-position-y: top; +} + +/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */ +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton { + display: none; +} + +.jp-Notebook.jp-mod-showHiddenCellsButton + :is(.jp-MarkdownCell:hover, .jp-mod-active) + .jp-collapseHeadingButton { + display: flex; +} + +/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which +is a consequence of the showHiddenCellsButton option in Notebook Settings)*/ +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton { + margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding)); + margin-top: var(--jp-code-padding); + border: 1px solid var(--jp-border-color2); + background-color: var(--jp-border-color3) !important; + color: var(--jp-content-font-color0) !important; + display: flex; +} + +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover { + background-color: var(--jp-border-color2) !important; +} + +.jp-showHiddenCellsButton { + display: none; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +/* +Using block instead of flex to allow the use of the break-inside CSS property for +cell outputs. +*/ + +@media print { + .jp-Cell-inputWrapper, + .jp-Cell-outputWrapper { + display: block; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-notebook-toolbar-padding: 2px 5px 2px 2px; +} + +/*----------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-NotebookPanel-toolbar { + padding: var(--jp-notebook-toolbar-padding); + + /* disable paint containment from lumino 2.0 default strict CSS containment */ + contain: style size !important; +} + +.jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused { + border: none; + box-shadow: none; +} + +.jp-Notebook-toolbarCellTypeDropdown select { + height: 24px; + font-size: var(--jp-ui-font-size1); + line-height: 14px; + border-radius: 0; + display: block; +} + +.jp-Notebook-toolbarCellTypeDropdown span { + top: 5px !important; +} + +.jp-Toolbar-responsive-popup { + position: absolute; + height: fit-content; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-end; + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + background: var(--jp-toolbar-background); + min-height: var(--jp-toolbar-micro-height); + padding: var(--jp-notebook-toolbar-padding); + z-index: 1; + right: 0; + top: 0; +} + +.jp-Toolbar > .jp-Toolbar-responsive-opener { + margin-left: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-Notebook-ExecutionIndicator { + position: relative; + display: inline-block; + height: 100%; + z-index: 9997; +} + +.jp-Notebook-ExecutionIndicator-tooltip { + visibility: hidden; + height: auto; + width: max-content; + width: -moz-max-content; + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color1); + text-align: justify; + border-radius: 6px; + padding: 0 5px; + position: fixed; + display: table; +} + +.jp-Notebook-ExecutionIndicator-tooltip.up { + transform: translateX(-50%) translateY(-100%) translateY(-32px); +} + +.jp-Notebook-ExecutionIndicator-tooltip.down { + transform: translateX(calc(-100% + 16px)) translateY(5px); +} + +.jp-Notebook-ExecutionIndicator-tooltip.hidden { + display: none; +} + +.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip { + visibility: visible; +} + +.jp-Notebook-ExecutionIndicator span { + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + color: var(--jp-ui-font-color1); + line-height: 24px; + display: block; +} + +.jp-Notebook-ExecutionIndicator-progress-bar { + display: flex; + justify-content: center; + height: 100%; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/* + * Execution indicator + */ +.jp-tocItem-content::after { + content: ''; + + /* Must be identical to form a circle */ + width: 12px; + height: 12px; + background: none; + border: none; + position: absolute; + right: 0; +} + +.jp-tocItem-content[data-running='0']::after { + border-radius: 50%; + border: var(--jp-border-width) solid var(--jp-inverse-layout-color3); + background: none; +} + +.jp-tocItem-content[data-running='1']::after { + border-radius: 50%; + border: var(--jp-border-width) solid var(--jp-inverse-layout-color3); + background-color: var(--jp-inverse-layout-color3); +} + +.jp-tocItem-content[data-running='0'], +.jp-tocItem-content[data-running='1'] { + margin-right: 12px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-Notebook-footer { + height: 27px; + margin-left: calc( + var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + + var(--jp-cell-padding) + ); + width: calc( + 100% - + ( + var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + + var(--jp-cell-padding) + var(--jp-cell-padding) + ) + ); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + color: var(--jp-ui-font-color3); + margin-top: 6px; + background: none; + cursor: pointer; +} + +.jp-Notebook-footer:focus { + border-color: var(--jp-cell-editor-active-border-color); +} + +/* For devices that support hovering, hide footer until hover */ +@media (hover: hover) { + .jp-Notebook-footer { + opacity: 0; + } + + .jp-Notebook-footer:focus, + .jp-Notebook-footer:hover { + opacity: 1; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Imports +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-side-by-side-output-size: 1fr; + --jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size); + --jp-private-notebook-dragImage-width: 304px; + --jp-private-notebook-dragImage-height: 36px; + --jp-private-notebook-selected-color: var(--md-blue-400); + --jp-private-notebook-active-color: var(--md-green-400); +} + +/*----------------------------------------------------------------------------- +| Notebook +|----------------------------------------------------------------------------*/ + +/* stylelint-disable selector-max-class */ + +.jp-NotebookPanel { + display: block; + height: 100%; +} + +.jp-NotebookPanel.jp-Document { + min-width: 240px; + min-height: 120px; +} + +.jp-Notebook { + padding: var(--jp-notebook-padding); + outline: none; + overflow: auto; + background: var(--jp-layout-color0); +} + +.jp-Notebook.jp-mod-scrollPastEnd::after { + display: block; + content: ''; + min-height: var(--jp-notebook-scroll-padding); +} + +.jp-MainAreaWidget-ContainStrict .jp-Notebook * { + contain: strict; +} + +.jp-Notebook .jp-Cell { + overflow: visible; +} + +.jp-Notebook .jp-Cell .jp-InputPrompt { + cursor: move; +} + +/*----------------------------------------------------------------------------- +| Notebook state related styling +| +| The notebook and cells each have states, here are the possibilities: +| +| - Notebook +| - Command +| - Edit +| - Cell +| - None +| - Active (only one can be active) +| - Selected (the cells actions are applied to) +| - Multiselected (when multiple selected, the cursor) +| - No outputs +|----------------------------------------------------------------------------*/ + +/* Command or edit modes */ + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +/* cell is active */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser { + background: var(--jp-brand-color1); +} + +/* cell is dirty */ +.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt { + color: var(--jp-warn-color1); +} + +.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before { + color: var(--jp-warn-color1); + content: '•'; +} + +.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser { + background: var(--jp-warn-color1); +} + +/* collapser is hovered */ +.jp-Notebook .jp-Cell .jp-Collapser:hover { + box-shadow: var(--jp-elevation-z2); + background: var(--jp-brand-color1); + opacity: var(--jp-cell-collapser-not-active-hover-opacity); +} + +/* cell is active and collapser is hovered */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover { + background: var(--jp-brand-color0); + opacity: 1; +} + +/* Command mode */ + +.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected { + background: var(--jp-notebook-multiselected-color); +} + +.jp-Notebook.jp-mod-commandMode + .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) { + background: transparent; +} + +/* Edit mode */ + +.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor { + border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color); + box-shadow: var(--jp-input-box-shadow); + background-color: var(--jp-cell-editor-active-background); +} + +/*----------------------------------------------------------------------------- +| Notebook drag and drop +|----------------------------------------------------------------------------*/ + +.jp-Notebook-cell.jp-mod-dropSource { + opacity: 0.5; +} + +.jp-Notebook-cell.jp-mod-dropTarget, +.jp-Notebook.jp-mod-commandMode + .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget { + border-top-color: var(--jp-private-notebook-selected-color); + border-top-style: solid; + border-top-width: 2px; +} + +.jp-dragImage { + display: block; + flex-direction: row; + width: var(--jp-private-notebook-dragImage-width); + height: var(--jp-private-notebook-dragImage-height); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background); + overflow: visible; +} + +.jp-dragImage-singlePrompt { + box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12); +} + +.jp-dragImage .jp-dragImage-content { + flex: 1 1 auto; + z-index: 2; + font-size: var(--jp-code-font-size); + font-family: var(--jp-code-font-family); + line-height: var(--jp-code-line-height); + padding: var(--jp-code-padding); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background-color); + color: var(--jp-content-font-color3); + text-align: left; + margin: 4px 4px 4px 0; +} + +.jp-dragImage .jp-dragImage-prompt { + flex: 0 0 auto; + min-width: 36px; + color: var(--jp-cell-inprompt-font-color); + padding: var(--jp-code-padding); + padding-left: 12px; + font-family: var(--jp-cell-prompt-font-family); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + line-height: 1.9; + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; +} + +.jp-dragImage-multipleBack { + z-index: -1; + position: absolute; + height: 32px; + width: 300px; + top: 8px; + left: 8px; + background: var(--jp-layout-color2); + border: var(--jp-border-width) solid var(--jp-input-border-color); + box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12); +} + +/*----------------------------------------------------------------------------- +| Cell toolbar +|----------------------------------------------------------------------------*/ + +.jp-NotebookTools { + display: block; + min-width: var(--jp-sidebar-min-width); + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); + overflow: auto; +} + +.jp-ActiveCellTool { + padding: 12px 0; + display: flex; +} + +.jp-ActiveCellTool-Content { + flex: 1 1 auto; +} + +.jp-ActiveCellTool .jp-ActiveCellTool-CellContent { + background: var(--jp-cell-editor-background); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + border-radius: 0; + min-height: 29px; +} + +.jp-ActiveCellTool .jp-InputPrompt { + min-width: calc(var(--jp-cell-prompt-width) * 0.75); +} + +.jp-ActiveCellTool-CellContent > pre { + padding: 5px 4px; + margin: 0; + white-space: normal; +} + +.jp-MetadataEditorTool { + flex-direction: column; + padding: 12px 0; +} + +.jp-RankedPanel > :not(:first-child) { + margin-top: 12px; +} + +.jp-KeySelector select.jp-mod-styled { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + border: var(--jp-border-width) solid var(--jp-border-color1); +} + +.jp-KeySelector label, +.jp-MetadataEditorTool label, +.jp-NumberSetter label { + line-height: 1.4; +} + +.jp-NotebookTools .jp-select-wrapper { + margin-top: 4px; + margin-bottom: 0; +} + +.jp-NumberSetter input { + width: 100%; + margin-top: 4px; +} + +.jp-NotebookTools .jp-Collapse { + margin-top: 16px; +} + +/*----------------------------------------------------------------------------- +| Presentation Mode (.jp-mod-presentationMode) +|----------------------------------------------------------------------------*/ + +.jp-mod-presentationMode .jp-Notebook { + --jp-content-font-size1: var(--jp-content-presentation-font-size1); + --jp-code-font-size: var(--jp-code-presentation-font-size); +} + +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt, +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt { + flex: 0 0 110px; +} + +/*----------------------------------------------------------------------------- +| Side-by-side Mode (.jp-mod-sideBySide) +|----------------------------------------------------------------------------*/ +.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell { + margin-top: 3em; + margin-bottom: 3em; + margin-left: 5%; + margin-right: 5%; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell { + display: grid; + grid-template-columns: minmax(0, 1fr) min-content minmax( + 0, + var(--jp-side-by-side-output-size) + ); + grid-template-rows: auto minmax(0, 1fr) auto; + grid-template-areas: + 'header header header' + 'input handle output' + 'footer footer footer'; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell { + grid-template-columns: minmax(0, 1fr) min-content minmax( + 0, + var(--jp-side-by-side-resized-cell) + ); +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader { + grid-area: header; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper { + grid-area: input; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper { + /* overwrite the default margin (no vertical separation needed in side by side move */ + margin-top: 0; + grid-area: output; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter { + grid-area: footer; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle { + grid-area: handle; + user-select: none; + display: block; + height: 100%; + cursor: ew-resize; + padding: 0 var(--jp-cell-padding); +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after { + content: ''; + display: block; + background: var(--jp-border-color2); + height: 100%; + width: 5px; +} + +.jp-mod-sideBySide.jp-Notebook + .jp-CodeCell.jp-mod-resizedCell + .jp-CellResizeHandle::after { + background: var(--jp-border-color0); +} + +.jp-CellResizeHandle { + display: none; +} + +/*----------------------------------------------------------------------------- +| Placeholder +|----------------------------------------------------------------------------*/ + +.jp-Cell-Placeholder { + padding-left: 55px; +} + +.jp-Cell-Placeholder-wrapper { + background: #fff; + border: 1px solid; + border-color: #e5e6e9 #dfe0e4 #d0d1d5; + border-radius: 4px; + -webkit-border-radius: 4px; + margin: 10px 15px; +} + +.jp-Cell-Placeholder-wrapper-inner { + padding: 15px; + position: relative; +} + +.jp-Cell-Placeholder-wrapper-body { + background-repeat: repeat; + background-size: 50% auto; +} + +.jp-Cell-Placeholder-wrapper-body div { + background: #f6f7f8; + background-image: -webkit-linear-gradient( + left, + #f6f7f8 0%, + #edeef1 20%, + #f6f7f8 40%, + #f6f7f8 100% + ); + background-repeat: no-repeat; + background-size: 800px 104px; + height: 104px; + position: absolute; + right: 15px; + left: 15px; + top: 15px; +} + +div.jp-Cell-Placeholder-h1 { + top: 20px; + height: 20px; + left: 15px; + width: 150px; +} + +div.jp-Cell-Placeholder-h2 { + left: 15px; + top: 50px; + height: 10px; + width: 100px; +} + +div.jp-Cell-Placeholder-content-1, +div.jp-Cell-Placeholder-content-2, +div.jp-Cell-Placeholder-content-3 { + left: 15px; + right: 15px; + height: 10px; +} + +div.jp-Cell-Placeholder-content-1 { + top: 100px; +} + +div.jp-Cell-Placeholder-content-2 { + top: 120px; +} + +div.jp-Cell-Placeholder-content-3 { + top: 140px; +} + +</style> +<style type="text/css"> +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* +The following CSS variables define the main, public API for styling JupyterLab. +These variables should be used by all plugins wherever possible. In other +words, plugins should not define custom colors, sizes, etc unless absolutely +necessary. This enables users to change the visual theme of JupyterLab +by changing these variables. + +Many variables appear in an ordered sequence (0,1,2,3). These sequences +are designed to work well together, so for example, `--jp-border-color1` should +be used with `--jp-layout-color1`. The numbers have the following meanings: + +* 0: super-primary, reserved for special emphasis +* 1: primary, most important under normal situations +* 2: secondary, next most important under normal situations +* 3: tertiary, next most important under normal situations + +Throughout JupyterLab, we are mostly following principles from Google's +Material Design when selecting colors. We are not, however, following +all of MD as it is not optimized for dense, information rich UIs. +*/ + +:root { + /* Elevation + * + * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: + * + * https://github.com/material-components/material-components-web + * https://material-components-web.appspot.com/elevation.html + */ + + --jp-shadow-base-lightness: 0; + --jp-shadow-umbra-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.2 + ); + --jp-shadow-penumbra-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.14 + ); + --jp-shadow-ambient-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.12 + ); + --jp-elevation-z0: none; + --jp-elevation-z1: 0 2px 1px -1px var(--jp-shadow-umbra-color), + 0 1px 1px 0 var(--jp-shadow-penumbra-color), + 0 1px 3px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z2: 0 3px 1px -2px var(--jp-shadow-umbra-color), + 0 2px 2px 0 var(--jp-shadow-penumbra-color), + 0 1px 5px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z4: 0 2px 4px -1px var(--jp-shadow-umbra-color), + 0 4px 5px 0 var(--jp-shadow-penumbra-color), + 0 1px 10px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z6: 0 3px 5px -1px var(--jp-shadow-umbra-color), + 0 6px 10px 0 var(--jp-shadow-penumbra-color), + 0 1px 18px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z8: 0 5px 5px -3px var(--jp-shadow-umbra-color), + 0 8px 10px 1px var(--jp-shadow-penumbra-color), + 0 3px 14px 2px var(--jp-shadow-ambient-color); + --jp-elevation-z12: 0 7px 8px -4px var(--jp-shadow-umbra-color), + 0 12px 17px 2px var(--jp-shadow-penumbra-color), + 0 5px 22px 4px var(--jp-shadow-ambient-color); + --jp-elevation-z16: 0 8px 10px -5px var(--jp-shadow-umbra-color), + 0 16px 24px 2px var(--jp-shadow-penumbra-color), + 0 6px 30px 5px var(--jp-shadow-ambient-color); + --jp-elevation-z20: 0 10px 13px -6px var(--jp-shadow-umbra-color), + 0 20px 31px 3px var(--jp-shadow-penumbra-color), + 0 8px 38px 7px var(--jp-shadow-ambient-color); + --jp-elevation-z24: 0 11px 15px -7px var(--jp-shadow-umbra-color), + 0 24px 38px 3px var(--jp-shadow-penumbra-color), + 0 9px 46px 8px var(--jp-shadow-ambient-color); + + /* Borders + * + * The following variables, specify the visual styling of borders in JupyterLab. + */ + + --jp-border-width: 1px; + --jp-border-color0: var(--md-grey-400); + --jp-border-color1: var(--md-grey-400); + --jp-border-color2: var(--md-grey-300); + --jp-border-color3: var(--md-grey-200); + --jp-inverse-border-color: var(--md-grey-600); + --jp-border-radius: 2px; + + /* UI Fonts + * + * The UI font CSS variables are used for the typography all of the JupyterLab + * user interface elements that are not directly user generated content. + * + * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 + * is applied to a parent element. When children elements, such as headings, are sized + * in em all things will be computed relative to that body size. + */ + + --jp-ui-font-scale-factor: 1.2; + --jp-ui-font-size0: 0.83333em; + --jp-ui-font-size1: 13px; /* Base font size */ + --jp-ui-font-size2: 1.2em; + --jp-ui-font-size3: 1.44em; + --jp-ui-font-family: system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', + helvetica, arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol'; + + /* + * Use these font colors against the corresponding main layout colors. + * In a light theme, these go from dark to light. + */ + + /* Defaults use Material Design specification */ + --jp-ui-font-color0: rgba(0, 0, 0, 1); + --jp-ui-font-color1: rgba(0, 0, 0, 0.87); + --jp-ui-font-color2: rgba(0, 0, 0, 0.54); + --jp-ui-font-color3: rgba(0, 0, 0, 0.38); + + /* + * Use these against the brand/accent/warn/error colors. + * These will typically go from light to darker, in both a dark and light theme. + */ + + --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); + --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); + --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); + --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); + + /* Content Fonts + * + * Content font variables are used for typography of user generated content. + * + * The font sizing here is done assuming that the body font size of --jp-content-font-size1 + * is applied to a parent element. When children elements, such as headings, are sized + * in em all things will be computed relative to that body size. + */ + + --jp-content-line-height: 1.6; + --jp-content-font-scale-factor: 1.2; + --jp-content-font-size0: 0.83333em; + --jp-content-font-size1: 14px; /* Base font size */ + --jp-content-font-size2: 1.2em; + --jp-content-font-size3: 1.44em; + --jp-content-font-size4: 1.728em; + --jp-content-font-size5: 2.0736em; + + /* This gives a magnification of about 125% in presentation mode over normal. */ + --jp-content-presentation-font-size1: 17px; + --jp-content-heading-line-height: 1; + --jp-content-heading-margin-top: 1.2em; + --jp-content-heading-margin-bottom: 0.8em; + --jp-content-heading-font-weight: 500; + + /* Defaults use Material Design specification */ + --jp-content-font-color0: rgba(0, 0, 0, 1); + --jp-content-font-color1: rgba(0, 0, 0, 0.87); + --jp-content-font-color2: rgba(0, 0, 0, 0.54); + --jp-content-font-color3: rgba(0, 0, 0, 0.38); + --jp-content-link-color: var(--md-blue-900); + --jp-content-font-family: system-ui, -apple-system, blinkmacsystemfont, + 'Segoe UI', helvetica, arial, sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol'; + + /* + * Code Fonts + * + * Code font variables are used for typography of code and other monospaces content. + */ + + --jp-code-font-size: 13px; + --jp-code-line-height: 1.3077; /* 17px for 13px base */ + --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ + --jp-code-font-family-default: menlo, consolas, 'DejaVu Sans Mono', monospace; + --jp-code-font-family: var(--jp-code-font-family-default); + + /* This gives a magnification of about 125% in presentation mode over normal. */ + --jp-code-presentation-font-size: 16px; + + /* may need to tweak cursor width if you change font size */ + --jp-code-cursor-width0: 1.4px; + --jp-code-cursor-width1: 2px; + --jp-code-cursor-width2: 4px; + + /* Layout + * + * The following are the main layout colors use in JupyterLab. In a light + * theme these would go from light to dark. + */ + + --jp-layout-color0: white; + --jp-layout-color1: white; + --jp-layout-color2: var(--md-grey-200); + --jp-layout-color3: var(--md-grey-400); + --jp-layout-color4: var(--md-grey-600); + + /* Inverse Layout + * + * The following are the inverse layout colors use in JupyterLab. In a light + * theme these would go from dark to light. + */ + + --jp-inverse-layout-color0: #111; + --jp-inverse-layout-color1: var(--md-grey-900); + --jp-inverse-layout-color2: var(--md-grey-800); + --jp-inverse-layout-color3: var(--md-grey-700); + --jp-inverse-layout-color4: var(--md-grey-600); + + /* Brand/accent */ + + --jp-brand-color0: var(--md-blue-900); + --jp-brand-color1: var(--md-blue-700); + --jp-brand-color2: var(--md-blue-300); + --jp-brand-color3: var(--md-blue-100); + --jp-brand-color4: var(--md-blue-50); + --jp-accent-color0: var(--md-green-900); + --jp-accent-color1: var(--md-green-700); + --jp-accent-color2: var(--md-green-300); + --jp-accent-color3: var(--md-green-100); + + /* State colors (warn, error, success, info) */ + + --jp-warn-color0: var(--md-orange-900); + --jp-warn-color1: var(--md-orange-700); + --jp-warn-color2: var(--md-orange-300); + --jp-warn-color3: var(--md-orange-100); + --jp-error-color0: var(--md-red-900); + --jp-error-color1: var(--md-red-700); + --jp-error-color2: var(--md-red-300); + --jp-error-color3: var(--md-red-100); + --jp-success-color0: var(--md-green-900); + --jp-success-color1: var(--md-green-700); + --jp-success-color2: var(--md-green-300); + --jp-success-color3: var(--md-green-100); + --jp-info-color0: var(--md-cyan-900); + --jp-info-color1: var(--md-cyan-700); + --jp-info-color2: var(--md-cyan-300); + --jp-info-color3: var(--md-cyan-100); + + /* Cell specific styles */ + + --jp-cell-padding: 5px; + --jp-cell-collapser-width: 8px; + --jp-cell-collapser-min-height: 20px; + --jp-cell-collapser-not-active-hover-opacity: 0.6; + --jp-cell-editor-background: var(--md-grey-100); + --jp-cell-editor-border-color: var(--md-grey-300); + --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); + --jp-cell-editor-active-background: var(--jp-layout-color0); + --jp-cell-editor-active-border-color: var(--jp-brand-color1); + --jp-cell-prompt-width: 64px; + --jp-cell-prompt-font-family: var(--jp-code-font-family-default); + --jp-cell-prompt-letter-spacing: 0; + --jp-cell-prompt-opacity: 1; + --jp-cell-prompt-not-active-opacity: 0.5; + --jp-cell-prompt-not-active-font-color: var(--md-grey-700); + + /* A custom blend of MD grey and blue 600 + * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ + --jp-cell-inprompt-font-color: #307fc1; + + /* A custom blend of MD grey and orange 600 + * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ + --jp-cell-outprompt-font-color: #bf5b3d; + + /* Notebook specific styles */ + + --jp-notebook-padding: 10px; + --jp-notebook-select-background: var(--jp-layout-color1); + --jp-notebook-multiselected-color: var(--md-blue-50); + + /* The scroll padding is calculated to fill enough space at the bottom of the + notebook to show one single-line cell (with appropriate padding) at the top + when the notebook is scrolled all the way to the bottom. We also subtract one + pixel so that no scrollbar appears if we have just one single-line cell in the + notebook. This padding is to enable a 'scroll past end' feature in a notebook. + */ + --jp-notebook-scroll-padding: calc( + 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - + var(--jp-code-padding) - var(--jp-cell-padding) - 1px + ); + + /* Rendermime styles */ + + --jp-rendermime-error-background: #fdd; + --jp-rendermime-table-row-background: var(--md-grey-100); + --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); + + /* Dialog specific styles */ + + --jp-dialog-background: rgba(0, 0, 0, 0.25); + + /* Console specific styles */ + + --jp-console-padding: 10px; + + /* Toolbar specific styles */ + + --jp-toolbar-border-color: var(--jp-border-color1); + --jp-toolbar-micro-height: 8px; + --jp-toolbar-background: var(--jp-layout-color1); + --jp-toolbar-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.24); + --jp-toolbar-header-margin: 4px 4px 0 4px; + --jp-toolbar-active-background: var(--md-grey-300); + + /* Statusbar specific styles */ + + --jp-statusbar-height: 24px; + + /* Input field styles */ + + --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); + --jp-input-active-background: var(--jp-layout-color1); + --jp-input-hover-background: var(--jp-layout-color1); + --jp-input-background: var(--md-grey-100); + --jp-input-border-color: var(--jp-inverse-border-color); + --jp-input-active-border-color: var(--jp-brand-color1); + --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); + + /* General editor styles */ + + --jp-editor-selected-background: #d9d9d9; + --jp-editor-selected-focused-background: #d7d4f0; + --jp-editor-cursor-color: var(--jp-ui-font-color0); + + /* Code mirror specific styles */ + + --jp-mirror-editor-keyword-color: #008000; + --jp-mirror-editor-atom-color: #88f; + --jp-mirror-editor-number-color: #080; + --jp-mirror-editor-def-color: #00f; + --jp-mirror-editor-variable-color: var(--md-grey-900); + --jp-mirror-editor-variable-2-color: rgb(0, 54, 109); + --jp-mirror-editor-variable-3-color: #085; + --jp-mirror-editor-punctuation-color: #05a; + --jp-mirror-editor-property-color: #05a; + --jp-mirror-editor-operator-color: #a2f; + --jp-mirror-editor-comment-color: #408080; + --jp-mirror-editor-string-color: #ba2121; + --jp-mirror-editor-string-2-color: #708; + --jp-mirror-editor-meta-color: #a2f; + --jp-mirror-editor-qualifier-color: #555; + --jp-mirror-editor-builtin-color: #008000; + --jp-mirror-editor-bracket-color: #997; + --jp-mirror-editor-tag-color: #170; + --jp-mirror-editor-attribute-color: #00c; + --jp-mirror-editor-header-color: blue; + --jp-mirror-editor-quote-color: #090; + --jp-mirror-editor-link-color: #00c; + --jp-mirror-editor-error-color: #f00; + --jp-mirror-editor-hr-color: #999; + + /* + RTC user specific colors. + These colors are used for the cursor, username in the editor, + and the icon of the user. + */ + + --jp-collaborator-color1: #ffad8e; + --jp-collaborator-color2: #dac83d; + --jp-collaborator-color3: #72dd76; + --jp-collaborator-color4: #00e4d0; + --jp-collaborator-color5: #45d4ff; + --jp-collaborator-color6: #e2b1ff; + --jp-collaborator-color7: #ff9de6; + + /* Vega extension styles */ + + --jp-vega-background: white; + + /* Sidebar-related styles */ + + --jp-sidebar-min-width: 250px; + + /* Search-related styles */ + + --jp-search-toggle-off-opacity: 0.5; + --jp-search-toggle-hover-opacity: 0.8; + --jp-search-toggle-on-opacity: 1; + --jp-search-selected-match-background-color: rgb(245, 200, 0); + --jp-search-selected-match-color: black; + --jp-search-unselected-match-background-color: var( + --jp-inverse-layout-color0 + ); + --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); + + /* Icon colors that work well with light or dark backgrounds */ + --jp-icon-contrast-color0: var(--md-purple-600); + --jp-icon-contrast-color1: var(--md-green-600); + --jp-icon-contrast-color2: var(--md-pink-600); + --jp-icon-contrast-color3: var(--md-blue-600); + + /* Button colors */ + --jp-accept-color-normal: var(--md-blue-700); + --jp-accept-color-hover: var(--md-blue-800); + --jp-accept-color-active: var(--md-blue-900); + --jp-warn-color-normal: var(--md-red-700); + --jp-warn-color-hover: var(--md-red-800); + --jp-warn-color-active: var(--md-red-900); + --jp-reject-color-normal: var(--md-grey-600); + --jp-reject-color-hover: var(--md-grey-700); + --jp-reject-color-active: var(--md-grey-800); + + /* File or activity icons and switch semantic variables */ + --jp-jupyter-icon-color: #f37626; + --jp-notebook-icon-color: #f37626; + --jp-json-icon-color: var(--md-orange-700); + --jp-console-icon-background-color: var(--md-blue-700); + --jp-console-icon-color: white; + --jp-terminal-icon-background-color: var(--md-grey-800); + --jp-terminal-icon-color: var(--md-grey-200); + --jp-text-editor-icon-color: var(--md-grey-700); + --jp-inspector-icon-color: var(--md-grey-700); + --jp-switch-color: var(--md-grey-400); + --jp-switch-true-position-color: var(--md-orange-900); +} +</style> +<style type="text/css"> +/* Force rendering true colors when outputing to pdf */ +* { + -webkit-print-color-adjust: exact; +} + +/* Misc */ +a.anchor-link { + display: none; +} + +/* Input area styling */ +.jp-InputArea { + overflow: hidden; +} + +.jp-InputArea-editor { + overflow: hidden; +} + +.cm-editor.cm-s-jupyter .highlight pre { +/* weird, but --jp-code-padding defined to be 5px but 4px horizontal padding is hardcoded for pre.cm-line */ + padding: var(--jp-code-padding) 4px; + margin: 0; + + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; + +} + +.jp-OutputArea-output pre { + line-height: inherit; + font-family: inherit; +} + +.jp-RenderedText pre { + color: var(--jp-content-font-color1); + font-size: var(--jp-code-font-size); +} + +/* Hiding the collapser by default */ +.jp-Collapser { + display: none; +} + +@page { + margin: 0.5in; /* Margin for each printed piece of paper */ +} + +@media print { + .jp-Cell-inputWrapper, + .jp-Cell-outputWrapper { + display: block; + } +} +</style> +<!-- Load mathjax --> +<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe"> </script> +<!-- MathJax configuration --> +<script type="text/x-mathjax-config"> + init_mathjax = function() { + if (window.MathJax) { + // MathJax loaded + MathJax.Hub.Config({ + TeX: { + equationNumbers: { + autoNumber: "AMS", + useLabelIds: true + } + }, + tex2jax: { + inlineMath: [ ['$','$'], ["\\(","\\)"] ], + displayMath: [ ['$$','$$'], ["\\[","\\]"] ], + processEscapes: true, + processEnvironments: true + }, + displayAlign: 'center', + CommonHTML: { + linebreaks: { + automatic: true + } + } + }); + + MathJax.Hub.Queue(["Typeset", MathJax.Hub]); + } + } + init_mathjax(); + </script> +<!-- End of mathjax configuration --><script type="module"> + document.addEventListener("DOMContentLoaded", async () => { + const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid"); + // do not load mermaidjs if not needed + if (!diagrams.length) { + return; + } + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.6.0/mermaid.esm.min.mjs")).default; + const parser = new DOMParser(); + + mermaid.initialize({ + maxTextSize: 100000, + startOnLoad: false, + fontFamily: window + .getComputedStyle(document.body) + .getPropertyValue("--jp-ui-font-family"), + theme: document.querySelector("body[data-jp-theme-light='true']") + ? "default" + : "dark", + }); + + let _nextMermaidId = 0; + + function makeMermaidImage(svg) { + const img = document.createElement("img"); + const doc = parser.parseFromString(svg, "image/svg+xml"); + const svgEl = doc.querySelector("svg"); + const { maxWidth } = svgEl?.style || {}; + const firstTitle = doc.querySelector("title"); + const firstDesc = doc.querySelector("desc"); + + img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`); + if (maxWidth) { + img.width = parseInt(maxWidth); + } + if (firstTitle) { + img.setAttribute("alt", firstTitle.textContent); + } + if (firstDesc) { + const caption = document.createElement("figcaption"); + caption.className = "sr-only"; + caption.textContent = firstDesc.textContent; + return [img, caption]; + } + return [img]; + } + + async function makeMermaidError(text) { + let errorMessage = ""; + try { + await mermaid.parse(text); + } catch (err) { + errorMessage = `${err}`; + } + + const result = document.createElement("details"); + result.className = 'jp-RenderedMermaid-Details'; + const summary = document.createElement("summary"); + summary.className = 'jp-RenderedMermaid-Summary'; + const pre = document.createElement("pre"); + const code = document.createElement("code"); + code.innerText = text; + pre.appendChild(code); + summary.appendChild(pre); + result.appendChild(summary); + + const warning = document.createElement("pre"); + warning.innerText = errorMessage; + result.appendChild(warning); + return [result]; + } + + async function renderOneMarmaid(src) { + const id = `jp-mermaid-${_nextMermaidId++}`; + const parent = src.parentNode; + let raw = src.textContent.trim(); + const el = document.createElement("div"); + el.style.visibility = "hidden"; + document.body.appendChild(el); + let results = null; + let output = null; + try { + const { svg } = await mermaid.render(id, raw, el); + results = makeMermaidImage(svg); + output = document.createElement("figure"); + results.map(output.appendChild, output); + } catch (err) { + parent.classList.add("jp-mod-warning"); + results = await makeMermaidError(raw); + output = results[0]; + } finally { + el.remove(); + } + parent.classList.add("jp-RenderedMermaid"); + parent.appendChild(output); + } + + void Promise.all([...diagrams].map(renderOneMarmaid)); + }); +</script> +<style> + .jp-Mermaid:not(.jp-RenderedMermaid) { + display: none; + } + + .jp-RenderedMermaid { + overflow: auto; + display: flex; + } + + .jp-RenderedMermaid.jp-mod-warning { + width: auto; + padding: 0.5em; + margin-top: 0.5em; + border: var(--jp-border-width) solid var(--jp-warn-color2); + border-radius: var(--jp-border-radius); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + white-space: pre-wrap; + word-wrap: break-word; + } + + .jp-RenderedMermaid figure { + margin: 0; + overflow: auto; + max-width: 100%; + } + + .jp-RenderedMermaid img { + max-width: 100%; + } + + .jp-RenderedMermaid-Details > pre { + margin-top: 1em; + } + + .jp-RenderedMermaid-Summary { + color: var(--jp-warn-color2); + } + + .jp-RenderedMermaid:not(.jp-mod-warning) pre { + display: none; + } + + .jp-RenderedMermaid-Summary > pre { + display: inline-block; + white-space: normal; + } +</style> +<!-- End of mermaid configuration --></head> +<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light"> +<main> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4af6b45f-f7aa-46a8-9d79-c1579ae0a799"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h1 id="WS-2.3:-Discrete-Fourier-Transform-(DFT):-You-Try-Meow-(Miauw)">WS 2.3: Discrete Fourier Transform (DFT): You Try Meow (Miauw)<a class="anchor-link" href="#WS-2.3:-Discrete-Fourier-Transform-(DFT):-You-Try-Meow-(Miauw)">¶</a></h1><h1 style="position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; top: 60px;right: 30px; margin: 0; border: 0"> +<style> + .markdown {width:100%; position: relative} + article { position: relative } + </style> +<img alt="No description has been provided for this image" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png" style="width:100px"/> +<img alt="No description has been provided for this image" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png" style="width:100px"/> +</h1> +<h2 style="height: 10px"> +</h2> +<p><em><a href="http://mude.citg.tudelft.nl/">CEGM1000 MUDE</a>: Week 2.3, Signal Processing. For: November 27, 2024</em></p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=eff9791a"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>The goal of this workshop to work with the <em>Discrete Fourier Transform</em> (DFT), implemented in Python as the <em>Fast Fourier Transform</em> (FFT) through <code>np.fft.fft</code>, and to understand and interpret its output.</p> +<p>The notebook consists of two parts:</p> +<ul> +<li>The first part (Task 0) is a demonstration of the use of the DFT (<em>you read and execute the code cells</em>),</li> +<li>The second part is a simple exercise with the DFT (<em>you write the code</em>).</li> +</ul> +<p>To start off, let's do a quick quiz question: <em>what is the primary purpose of the DFT?</em></p> +<p><em>Find the answer <a href="https://tudelft.h5p.com/content/1292126914399042257/embed">here</a>.</em></p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=03f3b3c6-d3f6-4121-9f39-c30c8bf70ea5"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>That's right! We convert our signal into the frequency domain. And if you would like an additional explanation of the key frequencies, you can find it <a href="https://medium.com/@kovalenko.alx/fun-with-fourier-591662576a77">here</a>.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=bfca25a5-75ce-4837-9387-01f95be10bd0"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#facb8e; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> <p>Note the use of <code>zip</code>, <code>stem</code>, <code>annotate</code> and the modulo operator +<code>%</code>. Refer to PA11 if you do not understand these tools. Furthermore, note that the term _modulus_ is also used here (and in the textbook), which is another term for _absolute value._</p></div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=da13fbf3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=13234855"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h2 id="Task-0:-Demonstration-of-DFT-using-pulse-function">Task 0: Demonstration of DFT using pulse function<a class="anchor-link" href="#Task-0:-Demonstration-of-DFT-using-pulse-function">¶</a></h2><p>In the first part of this notebook, we use $x(t)=\Pi(\frac{t}{4})$, and its Fourier transform $X(f)=4 \,\textrm{sinc}(4f)$, as an example (see the first worked example in Chapter 3 on the Fourier transform). The pulse lasts for 4 seconds in the time domain; for convenience, below it is not centered at $t$ = 0, but shifted (delayed) to the right.</p> +<p>The signal $x(t)$ clearly is non-periodic and is an energy signal; apart from a short time span of 'activity' it is zero elsewhere.</p> +<p>We create a pulse function $x(t)$ in discrete time $x_n$ by numpy. The total signal duration is $T$ = 20 seconds (observation or record length). The sampling interval is $\Delta t$ = 1 second. There are $N$ = 20 samples, and each sample represents 1 second, hence $N \Delta t = T$.</p> +<p>Note that the time array starts at $t$ = 0 s, and hence, the last sample is at $t$ = 19 s (and not at $t$ = 20 s, as then we would have 21 samples).</p> +<h3 id="Task-0.1:-Visualize-the-Signal">Task 0.1: Visualize the Signal<a class="anchor-link" href="#Task-0.1:-Visualize-the-Signal">¶</a></h3> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=b33e1be2"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">t</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<span class="n">xt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">8</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">8</span><span class="p">)))</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">xt</span><span class="p">,</span><span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">12</span><span class="p">],</span> <span class="n">xt</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">12</span><span class="p">])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">ticks</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">21</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span> <span class="n">labels</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">21</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'time [s]'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'xn'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a338eede"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h3 id="Task-0.2:-Evaluate-(and-visualize)-the-DFT">Task 0.2: Evaluate (and visualize) the DFT<a class="anchor-link" href="#Task-0.2:-Evaluate-(and-visualize)-the-DFT">¶</a></h3><p>We use <code>numpy.fft.fft</code> to compute the one-dimensional Discrete Fourier Transform (DFT) of $x_n$, which takes a signal as argument and returns an array of coefficients (refer to the <a href="https://numpy.org/doc/stable/reference/generated/numpy.fft.fft.html">documentation</a> as needed).</p> +<p>The DFT converts $N$ samples of the time domain signal $x_n$, into $N$ samples of the frequency domain. In this case, it produces $X_k$ with $k = 0, 1, 2, \ldots, N-1$, with $N$ = 20, which are complex numbers.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=26d0f558-caa7-41f2-9477-60d74940fc10"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.2:</b> +Read the code cell below before executing it and identify the following: +<ol> +<li>Where is the DFT computed, and what is the output?</li> +<li>Why is the modulus (absolute value) used on the DFT output?</li> +<li>What are the values are used for the x and y axes of the plot?</li> +<li>How is frequency information found and added to the plot (mathematically)?</li> +</ol> +Once you understand the figure, continue reading to understand <em>what do these 20 complex numbers mean, and how should we interpret them?</em> +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=3acb465b"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [5]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">index_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> + +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">):</span> + <span class="k">if</span> <span class="n">x</span><span class="o">%</span><span class="k">5</span> == 0 or x==19: + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"f=</span><span class="si">{</span><span class="n">freq</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2"> Hz"</span> + <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> + <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">),</span> + <span class="n">textcoords</span><span class="o">=</span><span class="s2">"offset points"</span><span class="p">,</span> + <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span> + <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> + <span class="n">ha</span><span class="o">=</span><span class="s1">'center'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">21</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'fft-index'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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4OBgDRgwwGMZScrIyHAvEx0drfDwcI82ZWVlyszMrLbf2jh79qxGjRqlnj17auHChfXuDwCAxsapon+qzakip9OphIQEPf3002rTpo1cLpdmzZqlvn37asSIEe52w4cP1+jRozV9+nRJUlJSkiZMmKCBAwcqJiZGb775pvLy8jR16lRJ508RJSYmav78+erWrZu6deum+fPnq0WLFho/fny9X+Pjjz+u/Px8ffbZZ/rpp588XntwcHC9+wcAoKERXOrolVdeUVBQkMaOHaszZ85o+PDhSktLU2BgoLvNvn37dPjwYff0uHHjdOTIEc2dO9d947v09HSPUzrPPPOMzpw5oyeffFLHjh3Trbfeqk8//VShoaH1rjkzM1MFBQXq1auXx/yNGzdWeS0MAAB247Au/eqJwUpKSuR0OlVcXKzWrVv7uhwAAHAFavP5zTUuAADAGAQXAABgDIILAAAwBsEFAAAYg+ACAACMQXABAMDLLMvSlClT5HK55HA4tGPHDl+X1GQQXAAA8LL169crLS1NH330kfu+XbVVWlqqGTNmqG3btmrZsqVGjhypgwcP1rjMiRMnlJiYqKioKDVv3lyDBw9Wdna2R5tJkybJ4XB4PAYNGlRjvykpKerfv3+l+fv372/0YEZw8YGy8gq9lfUP/Z8Pd+qtrH+orLzC1yUBALxo3759ioiI0ODBgxUeHq6goNrf7zUxMVFr167VqlWrtGXLFp08eVL33Xefzp07V+0yjz32mDIyMrRy5Url5OQoLi5OI0aM0KFDhzza3X333SooKHA/0tPTa12fr9g2uKSmprpvgd+UpKbvVs/n/qoXPt6jFV8c0Asf71HP5/6q1PTdvi4NAOAFkyZN0owZM5SXlyeHw6HOnTvXuo/i4mK99dZbevnllzVixAjdeOONevfdd5WTk6MNGzZUucyZM2f0l7/8RQsWLNBtt92mrl27KiUlRdHR0VqyZIlH25CQEIWHh7sfV/qTN5dT1dEch8OhTZs2eaV/yabBJTs7W2+++aZuuOEGX5fiVanpu/XG5lxVXHKv4gpLemNzLuEFAJqARYsWae7cuerQoYMKCgrcp2rmz5+vVq1a1fjIysqSJG3btk0///yz4uLi3P1GRkaqT58++vzzz6v8d8vLy3Xu3DldddVVHvObN2+uLVu2eMzbtGmTwsLC1L17d02ePFlF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AABjEFxge5ZlacqUKXK5XHI4HNqxY4evS0INGC+zMF4wDcEFtrd+/XqlpaXpo48+UkFBgfr06VPrPkpLSzVjxgy1bdtWLVu21MiRI3Xw4MEal0lNTdXNN9+s0NBQhYWF6YEHHtB3333n0WbSpElyOBwej0GDBtXYb0pKivr3719p/v79+5vEB4evxislJaXSWISHh3u0sSxLKSkpioyMVPPmzTVs2DDt2rXrsv0yXjWry3h17ty50ng5HA5NmzbN3aau+9egmwdUmt9UxgsEFxhg3759ioiI0ODBgxUeHq6goKBa95GYmKi1a9dq1apV2rJli06ePKn77rtP586dq3aZzMxMTZs2TVu3blVGRobKy8sVFxenU6dOebS7++67VVBQ4H6kp6fXur6mxFfjJUm9e/f2GIucnByP5xcsWKCFCxdq8eLFys7OVnh4uO68806dOHGi1jU2Fb4ar+zsbI+xysjIkCQ99NBDHu3Yv3ApggtsbdKkSZoxY4by8vLkcDjUuXPnWvdRXFyst956Sy+//LJGjBihG2+8Ue+++65ycnK0YcOGapdbv369Jk2apN69e6tfv35avny58vLytG3bNo92ISEhCg8Pdz9cLleta6xKVX9tOhwObdq0ySv9NwRfjpckBQUFeYxFu3bt3M9ZlqVXX31Vc+bM0ZgxY9SnTx+98847On36tN5///1a13kpxqt249WuXTuPsfroo4/UpUsXDR061KMd+xcuRXCBrS1atEhz585Vhw4dVFBQoOzsbEnS/Pnz1apVq0qPMNfVylv4S+Ut/KX+35YtkqRt27bp559/VlxcnLvfyMhI9enTR59//vkV11JcXCxJld44N23apLCwMHXv3l2TJ09WUVFRfV+2pPOv/eK/NGfOnKmwsDD17NnTK/03hNqM18VjFea6WllZWZLqN1579+5VZGSkoqOj9atf/Ur/+Mc/3M/l5uaqsLDQo9+QkBANHTq0VttBTa+d8TqvtvtXWVmZ3n33XT366KNyOBwez7F/4VK1PyYINCKn06nQ0FAFBgZ6XK8wdepUjR07tlL7M2XlunvR+TfUmwacP89dWFio4OBgXXPNNR5t27dvr8LCwiuqw7IsJSUlaciQIR7XAMTHx+uhhx5SVFSUcnNz9dxzz+mOO+7Qtm3bFBISUm1/OTk5CnNdrdNl5w+lhy0OlGVZlV67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"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=09c72cdd"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>The frequency resolution $\Delta f$ equals one-over-the-measurement-duration, hence $\Delta f = 1/T$. With that knowledge, we can reconstruct the frequencies expressed in Hertz.</p> +<p>The spectrum of the sampled signal is periodic in the sampling frequency $f_s$ which equals 1 Hz ($\Delta t$ = 1 s). Therefore, it is computed just for one period $[0,f_s)$. The last value, with index 19, represents the component with frequency $f$ = 0.95 Hz. A spectrum is commonly presented and interpreted as double-sided, so in the above graph we can interpret the spectral components with indices 10 to 19 corresponding to negative frequencies.</p> +<h3 id="Task-0.3:-Identify-negative-frequencies">Task 0.3: Identify negative frequencies<a class="anchor-link" href="#Task-0.3:-Identify-negative-frequencies">¶</a></h3> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=df1f483b"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> + +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)))</span> +<span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">):</span> + <span class="k">if</span> <span class="n">x</span><span class="o">%</span><span class="k">5</span> == 0 or x==19: + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"f=</span><span class="si">{</span><span class="n">freq</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2"> Hz"</span> + <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> + <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">),</span> + <span class="n">textcoords</span><span class="o">=</span><span class="s2">"offset points"</span><span class="p">,</span> + <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span> + <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> + <span class="n">ha</span><span class="o">=</span><span class="s1">'center'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">21</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'fft-index'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAi4AAAG2CAYAAABYlw1sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0xklEQVR4nO3de1hVdd7//9cGBEFxFxJuGBFpPGVYplbiaNHJUStNZia7bUjv2zAnj0NeFXn3k9sp6G5mLO9xsrIpO9joNd9bp6YhJjIFm7RhVMpTjnmjUEHmCc8gsn5/OO5xuzkIbNjrw34+rmtdutb+rMV7r89ae79YJxyWZVkCAAAwQJC/CwAAALhUBBcAAGAMggsAADAGwQUAABiD4AIAAIxBcAEAAMYguAAAAGMQXAAAgDEILgAAwBgEFwAAYAxbBZesrCw5HA6PweVy+bssAABgEyH+LuBiV199tT788EP3eHBwsB+rAQAAdmK74BISEsJRFgAAUCfbBZfdu3crLi5OYWFhuvHGG5Wdna0rr7yyzrZVVVWqqqpyj9fW1urQoUPq2rWrHA5HW5UMAABawLIsHTt2THFxcQoKavgqFodlWVYb1dWo999/XydPnlSfPn307bff6qmnntIXX3yh7du3q2vXrl7ts7Ky9F//9V9+qBQAAPhaWVmZunfv3mAbWwWXi504cULf//739eijjyojI8Pr9YuPuFRWVqpHjx4qKytTly5d2rJUAADQTEePHlV8fLyOHDkip9PZYFvbnSq6UKdOnTRgwADt3r27ztfDwsIUFhbmNb1Lly4EFwAADHMpl3nY6nboi1VVVWnnzp2KjY31dykAAMAGbBVc5s6dq4KCApWUlOjTTz/Vj3/8Yx09elSTJk3yd2kAAMAGbHWq6KuvvtK//du/6cCBA7riiis0dOhQbdy4UQkJCf4uDQAA2ICtgsuKFSv8XQIAALAxW50qAgAAaAjBBQAAGIPgAgAAjEFwAQAAxiC4AAAAYxBcAACAMQguAADAGAQXAABgDIILAAAwBsEFAAAYg+ACAACMQXABAADGILgAAABjEFwAAIAxCC4AAMAYBBcAAGAMggsAADAGwQUAABiD4AIAAIxBcAEAAMYguAAAAGMQXAAAgDEILgAAwBgEFwAAYAyCCwAAMAbBBQAAGIPgAgAAjEFwAQAAxiC4AAAAYxBcAACAMQguAADAGAQXAABgDIILAAAwBsEFAAAYg+ACAACMQXABAADGILgAAABjEFwAAIAxCC4AAMAYBBcAAGAMggsAADAGwQUAABiD4AIAAIwRkMHFsixNnTpVUVFRcjgcKi4u9ndJAADgEgRkcMnLy9OyZcv03nvvqby8XElJSU1eRlVVlWbOnKno6Gh16tRJY8eO1VdffdXofC+88IISExPVsWNHDR48WOvXr/d43bIsZWVlKS4uTuHh4UpJSdH27dsbXGZWVpYGDhzoNX3v3r0EMwBAuxKQwWXPnj2KjY3VsGHD5HK5FBIS0uRlzJkzR6tXr9aKFSv08ccf6/jx47rrrrt09uzZeudZuXKl5syZo3nz5mnLli0aMWKERo8erdLSUnebZ599VgsXLtTixYtVVFQkl8ulO+64Q8eOHWvWewUAoF2x2pHKykpLklVZWVlvm0mTJlmS3ENCQkKTf86RI0esDh06WCtWrHBP+/rrr62goCArLy+v3vluuOEGa9q0aR7T+vXrZz3++OOWZVlWbW2t5XK5rGeeecb9+unTpy2n02m9+OKL9S53/vz51rXXXus1vaSkxJJkbdmyxbIs7/d+fli7du0lvGsAAFrHpXx/nxdwR1wWLVqkBQsWqHv37iovL1dRUZEkKTs7W507d25wOH9aZ9OmTTpz5oxGjhzpXm5cXJySkpL0ySef1Plzq6urtWnTJo95JGnkyJHueUpKSlRRUeHRJiwsTDfffHO9y23qey8vL3cPs2fPVkxMjPr169fiZQMA0Baafo7EcE6nU5GRkQoODpbL5XJPnzZtmu69994G5/3e974nSaqoqFBoaKguv/xyj9e7deumioqKOuc9cOCAzp49q27dutU7z/l/62qzb9++BmvbunWrOnfu7DHNsiyPcafTKafTKUlatWqVXnzxRX344Yce6wEAADsLuOBSn6ioKEVFRbVoGZZlyeFwNNjm4tfrmudS2lysb9++evfddz2mff3110pJSfFqu2XLFj3wwAP67W9/q+HDhze4XAAA7CTgThXVpymnilwul6qrq3X48GGPZezfv9/raMl50dHRCg4O9joic+E85498NNSmPqGhoerVq5fHkJCQ4NWuoqJCY8eO1ZQpUzRlypQGlwkAgN0QXP5p2rRpKi4ubnAYMmSIJGnw4MHq0KGD8vPz3fOXl5dr27ZtGjZsWJ3LDw0N1eDBgz3mkaT8/Hz3PImJiXK5XB5tqqurVVBQUO9ym+L06dMaN26c+vXrp4ULF7Z4eQAAtDVOFf1TU04VOZ1OTZkyRY888oi6du2qqKgozZ07VwMGDNDtt9/ubnfbbbdp/PjxmjFjhiQpIyNDaWlpGjJkiJKTk/Xyyy+rtLRU06ZNk3TuFNGcOXOUnZ2t3r17q3fv3srOzlZERIQmTpzY4vf40EMPqaysTGvWrNF3333n8d5DQ0NbvHwAAFobwaWZnnvuOYWEhOjee+/VqVOndNttt2nZsmUKDg52t9mzZ48OHDjgHp8wYYIOHjyoBQsWuB98l5ub63FK59FHH9WpU6f08MMP6/Dhw7rxxhv1wQcfKDIyssU1FxQUqLy8XP379/eYvnbt2jqvhQEAwG4c1sW3nhjs6NGjcjqdqqysVJcuXfxdDgAAuARN+f7mGhcAAGAMggsAADAGwQUAABiD4AIAAIxBcAEAAMYguAAA4COWZWnq1KmKioqSw+FQcXGxv0tqdwguAAD4SF5enpYtW6b33nvP/bwuXzh8+LDS0tLcfyw3LS1NR44caXAey7KUlZWluLg4hYeHKyUlRdu3b/dok5KSIofD4THcd999DS538uTJuueee7ymr1u3Tg6Ho9G6Worg4gfVNbX63fr/0//3zjb9bv3/qbqm1t8lAQB8YM+ePYqNjdWwYcPkcrkUEuKb57xOnDhRxcXFysvLU15enoqLi5WWltbgPM8++6wWLlyoxYsXq6ioSC6XS3fccYeOHTvm0S49PV3l5eXu4aWXXvJJza3FtsElJyfH/Qj89iQnd4f6Pfm+fvHnnXpjwz794s871e/J95WTu8PfpQEAWmDy5MmaOXOmSktL5XA41LNnT58sd+fOncrLy9Mrr7yi5ORkJScna+nSpXrvvfe0a9euOuexLEvPP/+85s2bp9TUVCUlJen111/XyZMn9fbbb3u0jYiIkMvlcg9Op9Mnddd1NMfhcGjv3r0tWq4tg0tRUZFefvllXXPNNf4uxadycnfopcIS1V70rOJaS3qpsITwAgAGW7RokRYsWKDu3burvLxcRUVFkqTs7Gx17ty5wWH9+vX1LnfDhg1yOp268cYb3dOGDh0qp9OpTz75pM55SkpKVFFRoZEjR7qnhYWF6eabb/aaZ/ny5YqOjtbVV1+tuXPneh2Raa5Vq1Z5HMlJTU1V37591a1btxYt13Z/q+j48eO6//77tXTpUj311FP+LsdnqmtqtXR9SYNtlq4v0SMj+yk0xJZ5EgDQAKfTqcjISAUHB8vlcrmnT5s2Tffee2+D837ve9+r97WKigrFxMR4TY+JiVFFRUW980jyCgndunXTvn373OP333+/EhMT5XK5tG3bNmVmZuqzzz5Tfn5+g/W+99576ty5s8e0s2fPeoxf+IeLn3vuOX300Uf69NNPFR4e3uCyG2O74DJ9+nTdeeeduv322xsNLlVVVaqqqnKPHz16tLXLa7Y3N+z1OtJysVrrXLspI65sm6IAAK0uKirK40u8IdOmTdNbb73lHj9+/LgkyeFweLW1LKvO6Re6+PWL50lPT3f/PykpSb1799aQIUO0efNmDRo0qN7l3nLLLVqyZInHtE8//VQ//elPvdq+//77evzxx/WnP/1Jffr0abDeS2GrX+1XrFihzZs3Kycn55La5+TkuK+wdjqdio+Pb+UKm2/foZM+bQcAMENTThUtWLBAxcXF7kGSXC6Xvv32W6/lfvfdd/Wedjl/xOfiIzL79+9v8FTNoEGD1KFDB+3evbvB99SpUyf16tXLY6jrqNGOHTt033336ZlnnvE4bdUStjniUlZWptmzZ+uDDz5Qx44dL2mezMxMZWRkuMePHj1q2/CSEBXh03YAADM05VRRTEyM12mh5ORkVVZW6m9/+5tuuOEGSeeOblRWVmrYsGF1Lu/86Z/8/Hxdd911kqTq6moVFBTov//7v+utY/v27Tpz5oxiY2Mv+f3V5+DBg7r77ruVmpqqn//85y1e3nm2CS6bNm3S/v37NXjwYPe0s2fPqrCwUIsXL1ZVVZWCg4M95gkLC1NYWFhbl9osack99XTuzgZPFwU5zrUDALQfTTlVVJerrrpKo0aNUnp6uvtW5alTp+quu+5S37593e369eunnJwcjR8/3n1XbnZ2tnr37q3evXsrOztbERERmjhxoqRzt24vX75cY8aMUXR0tHbs2KFHHnlE1113nX7wgx+07E1LSk1NVXh4uLKysjyO/FxxxRVe3+dNYZvgctttt2nr1q0e0/793/9d/fr102OPPdaiN2kHoSFBSh+RqJcK679AN31EIhfmAgC8LF++XLNmzXKfbhk7dqwWL17s0WbXrl2qrKx0jz/66KM6deqUHn74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"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2d87a9a6"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>Now we can interpret the DFT of the $x(t)=\Pi(\frac{t}{4})$. The sampling interval is $\Delta t$ = 1 second, and the obsesrvation length is T=20 seconds, and we have N=20 samples.</p> +<ul> +<li>We can recognize a bit of a sinc function.</li> +<li>The DFT is computed from 0 Hz, for positive frequencies up to $\frac{fs}{2} = 0.5$ Hz, after which the negative frequencies follow from -0.5 to -0.05 Hz.</li> +<li>$X(f)=4 \textrm{sinc}(4f)$ has its first null at $f=0.25$Hz.</li> +</ul> +<h3 id="Task-0.4:-Create-symmetric-plot">Task 0.4: Create symmetric plot<a class="anchor-link" href="#Task-0.4:-Create-symmetric-plot">¶</a></h3><p>For convenient visualization, we may want to explicitly shift the negative frequencies to the left-hand side to create a symmetric plot. We can use <code>numpy.fft.fftshift</code> to do that. In other words, the zero-frequency component appears in the center of the spectrum. Now, it nicely shows a symmetric sprectrum. It well resembles the sinc-function (taking into account that we plot the modulus/absolute value). The output of the DFT still consists of $N$ = 20 elements. To enable this, we set up a new frequency array (in Hz) on the interval $[-fs/2,fs/2)$.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e1eef6b6-1e90-43db-b059-6521b2a840d3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.4:</b> +Read the code cell below before executing it and identify how the plot is modified based on the (new) specification of frequency. Note that it is more than just the <code>freq</code> variable! +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=a8aac894"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [15]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft_shift</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">)))</span> +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft_shift</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft_shift</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'|Xk|'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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GS1fvlyXX365evfurcGDB2vWrFn68ssvO69oL7Zq1SpFRESoR48eio6OVmFhYYv98/PzFR0drR49emj48OFavXp1J1VqnraM/datWzV58mQNHDhQgYGBiomJ0TvvvNOJ1Zqjrev8Oe+//758fX01duxY1xboYoSbLu6uu+5SaWmpduzYoR07dqi0tFQJCQmtWvbNN9/UBx98oMGDB7u4SvO0ddxPnz6tPXv26PHHH9eePXu0detW/f3vf9fNN9/ciVV7py1btmjJkiV69NFHVVJSotjYWE2bNk0VFRVN9i8vL1d8fLxiY2NVUlKiFStWaPHixcrKyurkyr1fW8e+oKBAkydPVnZ2tnbv3q1rr71WN910k0pKSjq5cu/W1nE/p7q6WrNmzdKkSZM6qVIXstBllZWVWZKsXbt2OdqKioosSdZnn33W4rJffPGF9S//8i/WJ598Yg0bNsx68cUXXVytOS5l3M/34YcfWpKsw4cPu6JMY1x11VXWwoULndouu+wy65FHHmmyf1JSknXZZZc5tS1YsMC6+uqrXVajqdo69k0ZNWqU9dRTT3V0aUZr77jPnDnTeuyxx6wnnnjCuuKKK1xYoeux56YLKyoqUlBQkH7+85872q6++moFBQXpb3/7W7PL2e12JSQk6OGHH1ZUVFRnlGqU9o77haqrq2Wz2dS3b18XVGmGuro67d69W1OmTHFqnzJlSrNjXVRU1Kj/1KlTVVxcrDNnzrisVtO0Z+wvZLfbdfLkSfXr188VJRqpveO+YcMGHTx4UE888YSrS+wUXfKHM3FWVVWVgoODG7UHBwerqqqq2eV+97vfydfXV4sXL3ZlecZq77if74cfftAjjzyiu+66y+t+9K4zHT9+XA0NDQoJCXFqDwkJaXasq6qqmuxfX1+v48ePKzQ01GX1mqQ9Y3+hF154QadOndIdd9zhihKN1J5xP3DggB555BEVFhbK19eMWMCeGwM9+eSTstlsLU7FxcWSJJvN1mh5y7KabJek3bt366WXXlJmZmazfboqV477+c6cOaM777xTdrtdq1at6vDnYaILx/ViY91U/6bacXFtHftz3njjDT355JPasmVLk/8MoGWtHfeGhgbdddddeuqpp/STn/yks8pzOTMiGpw88MADuvPOO1vsEx4ero8//lhfffVVo9v+7//+r1HqP6ewsFDHjh3T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edE67r33XiUkJOjFF1/Uhg0bNHPmTPXq1atVz+FCgwYN0ogRI5zaAgIC9O233zq1PfPMM9qxY4c+/PDDRuENwKUj3ABok5/+9KfKyspSeHi4fH0bf4SMGDFC3bt3165duzR06FBJ0jfffKO///3vTntQBg4cqMrKSsf8gQMHdPr0aafH2bJli4KDgxUYGNiuWi+//HLZ7Xbl5+c32qNyTnx8vHr37q309HS9/fbbKigoaNdjtVZWVpaefvppvf322y45rwcAJxQDaKNFixbpxIkT+vd//3d9+OGH+sc//qGdO3dq7ty5amhoUJ8+fTRv3jw9/PDD+t///V998sknmjNnTqNDL9ddd51efvll7dmzR8XFxVq4cKHTXpi7775bAwYM0PTp01VYWKjy8nLl5+froYce0hdffNGqWsPDwzV79mzNnTtXb775psrLy5WXl6c//vGPjj7dunXTnDlzlJycrBEjRjgdTuton3zyiWbNmqXly5crKipKVVVVqqqq0okTJ1z2mEBXRLgB0CaDBw/W+++/r4aGBk2dOlWjR4/WQw89pKCgIEeAef755xUXF6ebb75Z119/vcaPH6/o6Gin+3nhhRcUFhamuLg43XXXXVq2bJnT4aBevXqpoKBAQ4cO1a233qqRI0dq7ty5+v7779u0Jyc9PV233Xab7r//fl122WWaP3++Tp065dRn3rx5qqur09y5cy9hZC6uuLhYp0+f1jPPPKPQ0FDHdOutt7r0cYGuxmZdeNAbAFxg4sSJGjt2rNLS0txdSiPvv/++Jk6cqC+++EIhISEt9p0zZ46+/fbbDv/phc5+DMBk7LkB0GXV1tbq888/1+OPP6477rjjosHmnO3bt6tPnz7avn17h9ZTWFioPn36NHkSNYDW44RiAF3WG2+8oXnz5mns2LHauHFjq5Z57rnn9Nhjj0k6++2wjjRu3DjHD5Y29VV7AK3DYSkAAGAUDksBAACjEG4AAIBRCDcAAMAohBsAAGAUwg0AADAK4QYAABiFcAMAAIxCuAEAAEb5f+MVs8jcKRfhAAAAAElFTkSuQmCC"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=569ca2d3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h3 id="Task-0.5:-Showing-spectrum-only-for-positive-frequencies">Task 0.5: Showing spectrum only for positive frequencies<a class="anchor-link" href="#Task-0.5:-Showing-spectrum-only-for-positive-frequencies">¶</a></h3><p>In practice, because of the symmetry, one typically plots only the right-hand side of the (double-sided) spectrum, hence only the part for positive frequencies $f \geq 0$. This is simply a matter of preference, and a way to save some space.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a26e361d-c5fa-47a2-b32c-416cc3d10659"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.5:</b> +Can you identify what has changed (in the code and visually), compared to the previous plot? +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=b9608638"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [16]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">N</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">xt</span><span class="p">)</span> +<span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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E9zmjxw5okOHDqlfv35Naj/99FN9/fXXcjqdio2NdY0PGDBAUVFRrXrdI0eO6JNPPlH//v3dxv/2t7+57WKKjo5Wr169XPOhoaH68MMPJUnHjh1Tr169FB8f7/E1QkNDdf/992vr1q367ne/qzfffFN/+9vf9OCDD7aq16uef/553XvvvW5jjz/+uBoaGprULliwQBcuXFBubq58fNjoDngTYQdAq/Tt29dtvrGxUdOmTdOvf/3rJrWhoaE6depUi57X4XDIsiy3sWuPtWlsbFRMTIx+//vfN1l20KBBrv/u3bt3k+dtbGyUJAUEBNywj4ULF2r27Nl6/vnntW3bNs2cOVOBgYEteg/fNGTIEI0cOdJtrH///vryyy/dxn75y1/qwIEDeu+995qEOQDtR9gB0C7f+c53lJ2drYiICPn6Nv2TMnLkSPXu3VuHDx/W8OHDJUn/8z//o48//thtC8ugQYNUVVXlmj916pQuXbrk9jqvvvqqBg8erKCgoDb1esstt6ixsVH5+flNtrhclZSUpL59+2rjxo3av3+/CgoK2vRaLZWdna01a9Zo//79HXJcEAAOUAbQTosXL9b58+f14x//WO+9957+/Oc/6+DBg5o/f74aGhrUr18/LViwQD/72c/0X//1X/roo480b968Jrtq7rnnHr344os6evSoiouLlZyc7LaV5uGHH9bNN9+s6dOnq7CwUGVlZcrPz9eyZcv0l7/8pUW9RkREaO7cuZo/f75ee+01lZWVKS8vT//+7//uqunVq5fmzZun1NRUjRw50m33m7d99NFHmjNnjh5//HFFR0erurpa1dXVOn/+fIe9JtATEXYAtMvQoUP1zjvvqKGhQVOmTNHYsWO1bNkyBQcHuwLNv/3bv2nSpEn6h3/4B91777266667FBMT4/Y8zz33nMLCwjRp0iTNmjVLK1eudNt9FBgYqIKCAg0fPlw/+tGPNHr0aM2fP19ff/11q7b0bNy4Uf/4j/+oRx99VKNGjdKiRYt08eJFt5oFCxbI6XRq/vz57fhkbqy4uFiXLl3SL3/5S4WGhrqmH/3oRx36ukBP47C+uZMcADpBQkKCxo0bp/T09K5upYl33nlHCQkJ+stf/qKQkJBma+fNm6cvv/zS67eK6OzXAEzGlh0A+F91dXX65JNP9NRTT+mhhx66YdC56s0331S/fv305ptverWfwsJC9evXz+NB2QBajgOUAeB/vfLKK1qwYIHGjRunHTt2tGiZ3/zmN/r5z38u6crZZ940YcIE1w1YPZ3aD6Bl2I0FAACMxm4sAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBo/x/fK7l1H/ZV1AAAAABJRU5ErkJggg=="/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=83c4ca67-9234-4741-a56f-294a12bcd98a"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.6:</b> +Confirm that you understand how we have arrived at the plot above, which illustrates the magnitude (amplitude) spectrum for frequencies $f \in [0,f_s/2)$, rather than $[0,f_s)$. +</p> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=9f5558b4"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h2 id="Task-1:-Application-of-DFT-using-simple-cosine">Task 1: Application of DFT using simple cosine<a class="anchor-link" href="#Task-1:-Application-of-DFT-using-simple-cosine">¶</a></h2> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=46dd5c0c"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>It is always a good idea, in spectral analysis, to run a test with a very simple, basic signal. In this way you can test and verify your coding and interpretation of the results.</p> +<p>Our basic signal is just a plain cosine. We take the amplitude equal to one, and zero initial phase, so the signal reads $x(t) = \cos(2 \pi f_c t)$, with $f_c$ = 3 Hz in this exercise. With such a simple signal, we know in advance how the spectrum should look like. Namely just a spike at $f$ = 3 Hz, and also one at $f$ = -3 Hz, as we're, for mathematical convenience, working with double sided spectra. The spectrum should be zero at all other frequencies.</p> +<p>As a side note: the cosine is strictly a periodic function, not a-periodic (as above); still, the Fourier transform of the cosine is defined as two Dirac delta pulses or peaks (at 3 Hz and -3 Hz). You may want to check out the second worked example in Chapter 3 on the Fourier transform: Fourier transform in the limit.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=87de3cc5"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 1:</b> +<p>Create a sampled (discrete time) cosine signal by sampling at $f_s$ = 10 Hz, for a duration of $T$ = 2 seconds (make sure you use exactly $N$ = 20 samples). Plot the sampled signal, compute its DFT and plot its magnitude spectrum $|X_k|$ with proper labeling of the axes (just like we did in the first part of this notebook). Include a plot of the spectrum of the sampled cosine signal using only the positive frequencies (up to $f_s/2$, as in the last plot of the previous task).</p> +<p><em>Note: you are expected to produce three separate plots.</em></p> +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=28ad034e"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [7]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="c1">### SOLUTION</span> + +<span class="n">fc</span><span class="o">=</span><span class="mi">3</span> +<span class="n">fs</span><span class="o">=</span><span class="mi">10</span> +<span class="n">dt</span><span class="o">=</span><span class="mi">1</span><span class="o">/</span><span class="n">fs</span> +<span class="n">T</span><span class="o">=</span><span class="mi">2</span> +<span class="n">N</span><span class="o">=</span><span class="n">T</span><span class="o">*</span><span class="n">fs</span> +<span class="n">t</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">T</span><span class="p">,</span><span class="n">dt</span><span class="p">)</span> +<span class="n">xt</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="n">fc</span><span class="o">*</span><span class="n">t</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">t</span><span class="p">,</span><span class="n">xt</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'time [s]'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'xn'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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"/> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=af87d120"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [8]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="c1">### SOLUTION</span> + +<span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">freq</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">fs</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">T</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'|Xk|'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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"/> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=6fd9014c"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [9]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="c1">### SOLUTION</span> + +<span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">freq</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">fs</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">T</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'|Xk|'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=35961e4d"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p><strong>End of notebook.</strong></p> +<h2 style="height: 60px"> +</h2> +<h3 style="position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; bottom: 60px; right: 50px; margin: 0; border: 0"> +<style> + .markdown {width:100%; position: relative} + article { position: relative } + </style> +<a href="http://creativecommons.org/licenses/by/4.0/" rel="license"> +<img alt="Creative Commons License" src="https://i.creativecommons.org/l/by/4.0/88x31.png" style="border-width:; width:88px; height:auto; padding-top:10px"> +</img></a> +<a href="https://www.tudelft.nl/en/ceg" rel="TU Delft"> +<img alt="TU Delft" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png" style="border-width:0; width:100px; height:auto; padding-bottom:0px"> +</img></a> +<a href="http://mude.citg.tudelft.nl/" rel="MUDE"> +<img alt="MUDE" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png" style="border-width:0; width:100px; height:auto; padding-bottom:0px"> +</img></a> +</h3> +<span style="font-size: 75%"> +© Copyright 2024 <a href="http://mude.citg.tudelft.nl/" rel="MUDE">MUDE</a> TU Delft. This work is licensed under a <a href="http://creativecommons.org/licenses/by/4.0/" rel="license">CC BY 4.0 License</a>. + +</span></div> +</div> +</div> +</div> +</main> +</body> +<script type="application/vnd.jupyter.widget-state+json"> +{"state": {}, "version_major": 2, "version_minor": 0} +</script> +</html> -- GitLab