CINXE.COM
Mozilla AI Guide
<!-- ██ ▄█ ▄▀ ▄ ▄█ ██▄ ▄███▄ █ █ ██ ▄▀ █ ██ █ █ █▀ ▀ █▄▄█ ██ █ ▀▄ █ █ ██ █ █ ██▄▄ █ █ ▐█ █ █ █ █ ▐█ █ █ █▄ ▄▀ █ ▐ ███ █▄ ▄█ ▐ ███▀ ▀███▀ █ ▀▀▀ ▀ ███ ▀▄ ▄ █▀▄▀█ ████▄ ▄▄▄▄▄▄ ▄█ █ █ ██ █ █ █ █ █ █ █ █ █ ▀ ▄▄▀ ██ █ █ █ █ █ ▀ ▄ ▀█ █ ▄ █ █ █ ▄▀▀ ▄▀ ██ █ █ █▄▄█ █ ▄▀ █ █ █ ▀████ ▀▀▀▀▀▀ ▐█ ███▄ ███▄ █ █ ███ ▄▀ █ ▐ ▀ ▀ █ ▀ █ We need your help to make OSS AI best-in-class. Mozilla champions an open, accessible Internet where people have the reins. We welcome these amazing new AI breakthroughs. However, with substantial corporate dollars being invested into AI R&D, it's unclear for engineers new to the scene which paths are the ones that lead to sustainable open software. We've seen this story before. Mozilla's efforts in AI are more than just technical - they're a call to action and unity across the currently fragmented open source AI Community. Our AI Guide is a living, breathing resource, rooted in collaboration and community input for experts and newcomers alike, and we invite you to build alongside us. Reach out to ai-guide@mozilla.com to contribute or make suggestions. This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <!DOCTYPE html> <html lang="en" data-theme="moz_ai_guide_base"> <head> <meta charset="UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>Mozilla AI Guide</title> <meta name="description" content="Mozilla AI Guide"/> <meta property="og:type" content="website"> <meta property="og:site_name" content="Mozilla"/> <meta property="og:image" content="/img/mozilla-256.jpg"/> <meta property="og:title" content="Mozilla AI Guide"/> <meta property="og:description" content="Mozilla AI Guide"/> <meta name="twitter:card" content="summary"> <meta name="twitter:site" content="@mozilla"/> <meta name="twitter:domain" content="future.mozilla.org"/> <link rel="stylesheet" href="/css/ai.657e2df9.css"/> <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/img/apple-touch-icon.d3a66416.png"/> <link rel="icon" type="image/png" sizes="196x196" href="/img/favicon-196x196.ec815fec.png"/> <link rel="shortcut icon" href="/img/favicon.a7f28fde.ico"/> <script type="module" src="/scripts/analytics.e4b8dc38.js"></script> <script type="text/javascript" src="/scripts/dark_mode.84907acb.js"></script> <script type="text/javascript" src="/scripts/ai.72a79c03.js"></script> </head> <body> <div class="drawer lg:drawer-open"> <input id="my-drawer-2" type="checkbox" class="drawer-toggle" /> <div class="drawer-content"> <div id='mobile_banner'> <label id='hamburger-btn' class="hamburger-btn" for="my-drawer-2"> <svg viewBox="0 0 100 80" width="20" height="20" fill="currentColor"> <rect width="100" height="10" rx="8"></rect> <rect y="30" width="80" height="10" rx="8"></rect> <rect y="60" width="60" height="10" rx="8"></rect> </svg> </label> <div id="linkbar"> <div class="inner"> </div> </div> <div id="header-bg"> <div id="header-content"> <a href='/'> <h1 id="header-title">AI Guide</h1> <h4 id="header-subtitle">Fall '23 Release</h4> </a> </div> </div> </div> <main id="content" class=""> <div class="inner"> <h2 id="introduction">Introduction</h2> <h4 id="if-youre-new-to-ai">If you're new to AI</h4> <p>Read these two sections first. They will help you understand the current lay of the land, along with what all this new jargon means so that you're not completely lost.</p> <div class="imagelinks"> <a href="/content/ai-basics/" class="imagelink">AI Basics ></a> <a href="/content/llms-101/" class="imagelink">Language Models 101 ></a> </div> <h4 id="getting-started-with-code">Getting started with code</h4> <p>This is the first part of the "Choosing ML Models" section.</p> <code> <!DOCTYPE html> <html lang="en"> <head><meta charset="utf-8"/> <meta content="width=device-width, initial-scale=1.0" name="viewport"/> <title>ai-guide-pick-a-model-test-a-model-fixed</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script> <style type="text/css"> pre { line-height: 125%; } td.linenos .normal { color: #D8DEE9; background-color: #242933; padding-left: 5px; padding-right: 5px; } span.linenos { color: #D8DEE9; background-color: #242933; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #242933; background-color: #D8DEE9; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #242933; background-color: #D8DEE9; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #3B4252 } .highlight { background: #2E3440; color: #d8dee9 } .highlight .c { color: #616e87; font-style: italic } /* Comment */ .highlight .err { color: #bf616a } /* Error */ .highlight .esc { color: #d8dee9 } /* Escape */ .highlight .g { color: #d8dee9 } /* Generic */ .highlight .k { color: #81a1c1; font-weight: bold } /* Keyword */ .highlight .l { color: #d8dee9 } /* Literal */ .highlight .n { color: #d8dee9 } /* Name */ .highlight .o { color: #81a1c1; font-weight: bold } /* Operator */ .highlight .x { color: #d8dee9 } /* Other */ .highlight .p { color: #eceff4 } /* Punctuation */ .highlight .ch { color: #616e87; font-style: italic } /* Comment.Hashbang */ .highlight .cm { color: #616e87; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #5e81ac; font-style: italic } /* Comment.Preproc */ .highlight .cpf { color: #616e87; font-style: italic } /* Comment.PreprocFile */ .highlight .c1 { color: #616e87; font-style: italic } /* Comment.Single */ .highlight .cs { color: #616e87; font-style: italic } /* Comment.Special */ .highlight .gd { color: #bf616a } /* Generic.Deleted */ .highlight .ge { color: #d8dee9; font-style: italic } /* Generic.Emph */ .highlight .ges { color: #d8dee9; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #bf616a } /* Generic.Error */ .highlight .gh { color: #88c0d0; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #a3be8c } /* Generic.Inserted */ .highlight .go { color: #d8dee9 } /* Generic.Output */ .highlight .gp { color: #616e88; font-weight: bold } /* Generic.Prompt */ .highlight .gs { color: #d8dee9; font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #88c0d0; font-weight: bold } /* Generic.Subheading */ .highlight .gt { color: #bf616a } /* Generic.Traceback */ .highlight .kc { color: #81a1c1; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #81a1c1; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #81a1c1; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #81a1c1 } /* Keyword.Pseudo */ .highlight .kr { color: #81a1c1; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #81a1c1 } /* Keyword.Type */ .highlight .ld { color: #d8dee9 } /* Literal.Date */ .highlight .m { color: #b48ead } /* Literal.Number */ .highlight .s { color: #a3be8c } /* Literal.String */ .highlight .na { color: #8fbcbb } /* Name.Attribute */ .highlight .nb { color: #81a1c1 } /* Name.Builtin */ .highlight .nc { color: #8fbcbb } /* Name.Class */ .highlight .no { color: #8fbcbb } /* Name.Constant */ .highlight .nd { color: #d08770 } /* Name.Decorator */ .highlight .ni { color: #d08770 } /* Name.Entity */ .highlight .ne { color: #bf616a } /* Name.Exception */ .highlight .nf { color: #88c0d0 } /* Name.Function */ .highlight .nl { color: #d8dee9 } /* Name.Label */ .highlight .nn { color: #8fbcbb } /* Name.Namespace */ .highlight .nx { color: #d8dee9 } /* Name.Other */ .highlight .py { color: #d8dee9 } /* Name.Property */ .highlight .nt { color: #81a1c1 } /* Name.Tag */ .highlight .nv { color: #d8dee9 } /* Name.Variable */ .highlight .ow { color: #81a1c1; font-weight: bold } /* Operator.Word */ .highlight .pm { color: #eceff4 } /* Punctuation.Marker */ .highlight .w { color: #d8dee9 } /* Text.Whitespace */ .highlight .mb { color: #b48ead } /* Literal.Number.Bin */ .highlight .mf { color: #b48ead } /* Literal.Number.Float */ .highlight .mh { color: #b48ead } /* Literal.Number.Hex */ .highlight .mi { color: #b48ead } /* Literal.Number.Integer */ .highlight .mo { color: #b48ead } /* Literal.Number.Oct */ .highlight .sa { color: #a3be8c } /* Literal.String.Affix */ .highlight .sb { color: #a3be8c } /* Literal.String.Backtick */ .highlight .sc { color: #a3be8c } /* Literal.String.Char */ .highlight .dl { color: #a3be8c } /* Literal.String.Delimiter */ .highlight .sd { color: #616e87 } /* Literal.String.Doc */ .highlight .s2 { color: #a3be8c } /* Literal.String.Double */ .highlight .se { color: #ebcb8b } /* Literal.String.Escape */ .highlight .sh { color: #a3be8c } /* Literal.String.Heredoc */ .highlight .si { color: #a3be8c } /* Literal.String.Interpol */ .highlight .sx { color: #a3be8c } /* Literal.String.Other */ .highlight .sr { color: #ebcb8b } /* Literal.String.Regex */ .highlight .s1 { color: #a3be8c } /* Literal.String.Single */ .highlight .ss { color: #a3be8c } /* Literal.String.Symbol */ .highlight .bp { color: #81a1c1 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #88c0d0 } /* Name.Function.Magic */ .highlight .vc { color: #d8dee9 } /* Name.Variable.Class */ .highlight .vg { color: #d8dee9 } /* Name.Variable.Global */ .highlight .vi { color: #d8dee9 } /* Name.Variable.Instance */ .highlight .vm { color: #d8dee9 } /* Name.Variable.Magic */ .highlight .il { color: #b48ead } /* 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.3.1/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"> <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="How-do-I-pick-a-model?"><strong>How do I pick a model?</strong><a class="anchor-link" href="#How-do-I-pick-a-model?">¶</a></h1><p>Unlike other guides, this one is designed to help pick the right model for whatever task you're trying to do, by:</p> <ul> <li>teaching you how to always remain on the bleeding edge of published AI research</li> <li>broadening your perspective on current open options for any given task</li> <li>not be tied to a closed-source / closed-data large language model (ex OpenAI, Anthropic)</li> <li>creating a data-led system for always identifying and using the state-of-the-art (SOTA) model for any particular task.</li> </ul> <p>We're going to hone in on "text summarization" as our first task.</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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="So...-why-are-we-not-using-one-of-the-popular-large-language-models?">So... why are we not using one of the popular large language models?<a class="anchor-link" href="#So...-why-are-we-not-using-one-of-the-popular-large-language-models?">¶</a></h2><p>Great question. Most available LLMs worth their salt can do many tasks, including summarization, but not all of them may be good at what specifically you want them to do. We should figure out how to evaluate whether they actually can or not.</p> <p>Also, many of the current popular LLMs are not open, are trained on undisclosed data and exhibit biases. Responsible AI use requires careful choices, and we're here to help you make them.</p> <p>Finally, most large LLMs require powerful GPU compute to use. While there are many models that you can use as a service, most of them cost money per API call. Unnecessary when some of the more common tasks can be done at good quality with already available open models and off-the-shelf hardware.</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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="Why-does-using-open-models-matter?">Why does using open models matter?<a class="anchor-link" href="#Why-does-using-open-models-matter?">¶</a></h2><p>Over the last few decades, engineers have been blessed with being able to onboard by starting with open source projects, and eventually shipping open source to production. This default state is now at risk.</p> <p>Yes, there are many open models available that do a great job. However, most guides don't discuss how to get started with them using simple steps and instead bias towards existing closed APIs.</p> <p>Funding is flowing to commercial AI projects, who have larger budgets than open source contributors to market their work, which inevitably leads to engineers starting with closed source projects and shipping expensive closed projects to production.</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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="Our-First-Project---Summarization">Our First Project - Summarization<a class="anchor-link" href="#Our-First-Project---Summarization">¶</a></h1><p>We're going to:</p> <ul> <li>Find text to summarize.</li> <li>Figure out how to summarize them using the current state-of-the-art open source models.</li> <li>Write some code to do so.</li> <li>Evaluate quality of results using relevant metrics</li> </ul> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>For simplicity's sake, let's grab <strong>Mozilla's Trustworthy AI Guidelines</strong> in string form</p> <p>Note that in the real world, you will likely have use other libraries to extract content for any particular file type.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs"> <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-python"><pre><span></span><span class="kn">import</span> <span class="nn">textwrap</span> <span class="n">content</span> <span class="o">=</span> <span class="s2">"""Mozilla's "Trustworthy AI" Thinking Points:</span> <span class="s2">PRIVACY: How is data collected, stored, and shared? Our personal data powers everything from traffic maps to targeted advertising. Trustworthy AI should enable people to decide how their data is used and what decisions are made with it.</span> <span class="s2">FAIRNESS: We’ve seen time and again how bias shows up in computational models, data, and frameworks behind automated decision making. The values and goals of a system should be power aware and seek to minimize harm. Further, AI systems that depend on human workers should protect people from exploitation and overwork.</span> <span class="s2">TRUST: People should have agency and control over their data and algorithmic outputs, especially considering the high stakes for individuals and societies. For instance, when online recommendation systems push people towards extreme, misleading content, potentially misinforming or radicalizing them.</span> <span class="s2">SAFETY: AI systems can carry high risk for exploitation by bad actors. Developers need to implement strong measures to protect our data and personal security. Further, excessive energy consumption and extraction of natural resources for computing and machine learning accelerates the climate crisis.</span> <span class="s2">TRANSPARENCY: Automated decisions can have huge personal impacts, yet the reasons for decisions are often opaque. We need to mandate transparency so that we can fully understand these systems and their potential for harm."""</span> </pre></div> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>Great. Now we're ready to start summarizing.</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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="A-brief-pause-for-context.">A brief pause for context.<a class="anchor-link" href="#A-brief-pause-for-context.">¶</a></h3><p>The AI space is moving so fast that it requires a tremendous amount of catching up on scientific papers each week to understand the lay of the land and the state of the art.</p> <p>It's some effort for an engineer who is brand new to AI to:</p> <ul> <li>discover which open models are even out there</li> <li>which models are appropriate for any particular task</li> <li>which benchmarks are used to evaluate those models</li> <li>which models are performing well based on evaluations</li> <li>which models can actually run on available hardware</li> </ul> <p>For the working engineer on a deadline, this is problematic. There's not much centralized discourse on working with open source AI models. Instead there are fragmented X (formerly Twitter) threads, random private groups and lots of word-of-mouth transfer.</p> <p>However, once we have a workflow to address all of the above, you will have the means to forever be on the bleeding edge of published AI research.</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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="How-do-I-get-a-list-of-available-open-summarization-models?">How do I get a list of available open summarization models?<a class="anchor-link" href="#How-do-I-get-a-list-of-available-open-summarization-models?">¶</a></h3><p>For now, we recommend <a href="https://huggingface.co/models?pipeline_tag=summarization">Huggingface</a> and their large directory of open models broken down by task. This is a great starting point. Note that larger LLMs are also included in these lists, so we will have to filter.</p> <p>In this huge list of summarization models, which ones do we choose?</p> <p>We don't know what any of these models are trained on. For example, a summarizer trained on news articles vs Reddit posts will perform better on news articles.</p> <p>What we need is a set of metrics and benchmarks that we can use to do apples-to-apples comparisons of these models.</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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="How-do-I-evaluate-summarization-models?">How do I evaluate summarization models?<a class="anchor-link" href="#How-do-I-evaluate-summarization-models?">¶</a></h3><p>These steps below can be used to evaluate any available model for any task. It requires hopping between a few sources of data for now, but we will be making this a lot easier moving forward.</p> <p>Steps:</p> <ol> <li>Find the most common datasets used to train models for summarization.</li> <li>Find the most common metrics used to evaluate models for summarization across those datasets.</li> <li>Do a quick audit on training data provenance, quality and any exhibited biases, to keep in line with Responsible AI usage.</li> </ol> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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"> <h4 id="Finding-datasets">Finding datasets<a class="anchor-link" href="#Finding-datasets">¶</a></h4><p>The easiest way to do this is using <em><a href="https://paperswithcode.com/methods">Papers With Code</a></em>, an excellent resource for finding the latest scientific papers by task that also have code repositories attached.</p> <p>First, filter <em>Papers With Code</em>'s "Text Summarization" datasets <a href="https://paperswithcode.com/datasets?q=&v=lst&o=cited&lang=english&mod=texts&task=text-summarization&page=1">by most cited text-based English datasets</a>.</p> <p>Let's pick (as of this writing) the most cited dataset -- the "<a href="https://paperswithcode.com/dataset/cnn-daily-mail-1">CNN/DailyMail</a>" dataset. Usually most cited is one marker of popularity.</p> <p>Now, you don't need to download this dataset. But we're going to review the info <em>Papers With Code</em> have provided to learn more about it for the next step. This dataset is also available on <a href="https://huggingface.co/datasets/cnn_dailymail">Huggingface</a>.</p> <p>You want to check the following:</p> <ul> <li>license</li> <li>recent papers</li> <li>whether the data is traceable and the methods are transparent</li> </ul> <p>First, check the license. In this case, it's MIT licensed, which means it can be used for both commercial and personal projects.</p> <p>Next, see if the papers using this dataset are recent. You can do this by sorting Papers in descending order. This particular dataset has many papers from 2023 - great!</p> <p>Finally, let's check whether the data is from a credible source. In this case, the dataset was generated by IBM in partnership with the University of Montréal. Great.</p> <p>Now, let's dig into how we can evaluate models that use this dataset.</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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"> <h4 id="Evaluating-models">Evaluating models<a class="anchor-link" href="#Evaluating-models">¶</a></h4><p>Next, we look for measured metrics that are common across datasets for the summarization task. BUT, if you're not familiar with the literature on summarization, you have no idea what those are.</p> <p>To find out, pick a "Subtask" that's close to what you'd like to see. We'd like to summarize the CNN article we pulled down above, so let's choose "<a href="https://paperswithcode.com/sota/abstractive-text-summarization-on-cnn-daily">Abstractive Text Summarization</a>".</p> <p>Now we're in business! This page contains a significant amount of new information.</p> <p>There are mentions of three new terms: ROUGE-1, ROUGE-2 and ROUGE-L. These are the metrics that are used to <a href="https://en.wikipedia.org/wiki/ROUGE_%28metric%29">measure summarization performance</a>.</p> <p>There are also a list of models and their scores on these three metrics - this is exactly what we're looking for.</p> <p>Assuming we're looking at ROUGE-1 as our metric, we now have the top 3 models that we can evaluate in more detail. All 3 are close to 50, which is a promising ROUGE score (read up on ROUGE).</p> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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="Testing-out-a-model">Testing out a model<a class="anchor-link" href="#Testing-out-a-model">¶</a></h3><p>OK, we have a few candidates, so let's pick a model that will run on our local machines. Many models get their best performance when running on GPUs, but there are many that also generate summaries fast on CPUs. Let's pick one of those to start - <strong>Google's Pegasus</strong>.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs"> <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-python"><pre><span></span><span class="c1"># first we install huggingface's transformers library</span> <span class="o">%</span><span class="n">pip</span> <span class="n">install</span> <span class="n">transformers</span> <span class="n">sentencepiece</span> </pre></div> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>Then we <a href="https://huggingface.co/google/pegasus-cnn_dailymail">find Pegasus</a> on Huggingface. Note that part of the datasets Pegasus was trained on includes CNN/DailyMail which bodes well for our article summarization. Interestingly, there's a variant of Pegasus from google that's only trained on our dataset of choice, we should use that.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs"> <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-python"><pre><span></span><span class="kn">from</span> <span class="nn">transformers</span> <span class="kn">import</span> <span class="n">PegasusForConditionalGeneration</span><span class="p">,</span> <span class="n">PegasusTokenizer</span> <span class="kn">import</span> <span class="nn">torch</span> <span class="c1"># Set the seed, this will help reproduce results. Changing the seed will</span> <span class="c1"># generate new results</span> <span class="kn">from</span> <span class="nn">transformers</span> <span class="kn">import</span> <span class="n">set_seed</span> <span class="n">set_seed</span><span class="p">(</span><span class="mi">248602</span><span class="p">)</span> <span class="c1"># We're using the version of Pegasus specifically trained for summarization</span> <span class="c1"># using the CNN/DailyMail dataset</span> <span class="n">model_name</span> <span class="o">=</span> <span class="s2">"google/pegasus-cnn_dailymail"</span> <span class="c1"># If you're following along in Colab, switch your runtime to a</span> <span class="c1"># T4 GPU or other CUDA-compliant device for a speedup</span> <span class="n">device</span> <span class="o">=</span> <span class="s2">"cuda"</span> <span class="k">if</span> <span class="n">torch</span><span class="o">.</span><span class="n">cuda</span><span class="o">.</span><span class="n">is_available</span><span class="p">()</span> <span class="k">else</span> <span class="s2">"cpu"</span> <span class="c1"># Load the tokenizer</span> <span class="n">tokenizer</span> <span class="o">=</span> <span class="n">PegasusTokenizer</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="n">model_name</span><span class="p">)</span> <span class="c1"># Load the model</span> <span class="n">model</span> <span class="o">=</span> <span class="n">PegasusForConditionalGeneration</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="n">model_name</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span> </pre></div> </div> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell"> <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-python"><pre><span></span><span class="c1"># Tokenize the entire content</span> <span class="n">batch</span> <span class="o">=</span> <span class="n">tokenizer</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="s2">"longest"</span><span class="p">,</span> <span class="n">return_tensors</span><span class="o">=</span><span class="s2">"pt"</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span> <span class="c1"># Generate the summary as tokens</span> <span class="n">summarized</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="o">**</span><span class="n">batch</span><span class="p">)</span> <span class="c1"># Decode the tokens back into text</span> <span class="n">summarized_decoded</span> <span class="o">=</span> <span class="n">tokenizer</span><span class="o">.</span><span class="n">batch_decode</span><span class="p">(</span><span class="n">summarized</span><span class="p">,</span> <span class="n">skip_special_tokens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">summarized_text</span> <span class="o">=</span> <span class="n">summarized_decoded</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># Compare</span> <span class="k">def</span> <span class="nf">compare</span><span class="p">(</span><span class="n">original</span><span class="p">,</span> <span class="n">summarized_text</span><span class="p">):</span> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Article text length: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">original</span><span class="p">)</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="n">textwrap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">summarized_text</span><span class="p">,</span> <span class="mi">100</span><span class="p">))</span> <span class="nb">print</span><span class="p">()</span> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Summarized length: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">summarized_text</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> <span class="n">compare</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">summarized_text</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-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0"> <pre>Article text length: 1427 Trustworthy AI should enable people to decide how their data is used.<n>values and goals of a system should be power aware and seek to minimize harm.<n>People should have agency and control over their data and algorithmic outputs.<n>Developers need to implement strong measures to protect our data and personal security. Summarized length: 320 </pre> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>Alright, we got something! Kind of short though. Let's see if we can make the summary longer...</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell"> <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-python"><pre><span></span><span class="n">set_seed</span><span class="p">(</span><span class="mi">860912</span><span class="p">)</span> <span class="c1"># Generate the summary as tokens, with a max_new_tokens</span> <span class="n">summarized</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="o">**</span><span class="n">batch</span><span class="p">,</span> <span class="n">max_new_tokens</span><span class="o">=</span><span class="mi">800</span><span class="p">)</span> <span class="n">summarized_decoded</span> <span class="o">=</span> <span class="n">tokenizer</span><span class="o">.</span><span class="n">batch_decode</span><span class="p">(</span><span class="n">summarized</span><span class="p">,</span> <span class="n">skip_special_tokens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">summarized_text</span> <span class="o">=</span> <span class="n">summarized_decoded</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">compare</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">summarized_text</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-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0"> <pre>Article text length: 1427 Trustworthy AI should enable people to decide how their data is used.<n>values and goals of a system should be power aware and seek to minimize harm.<n>People should have agency and control over their data and algorithmic outputs.<n>Developers need to implement strong measures to protect our data and personal security. Summarized length: 320 </pre> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>Well, that didn't really work. Let's try a different approach called '<strong>sampling</strong>'. This allows the model to pick the next word according to its conditional probability distribution (specifically, the probability that said word follows the word before).</p> <p>We'll also be setting the '<strong>temperature</strong>'. This variable works to control the levels of randomness and creativity in the generated output.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell"> <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-python"><pre><span></span><span class="n">set_seed</span><span class="p">(</span><span class="mi">118511</span><span class="p">)</span> <span class="n">summarized</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="o">**</span><span class="n">batch</span><span class="p">,</span> <span class="n">do_sample</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">temperature</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">top_k</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="n">summarized_decoded</span> <span class="o">=</span> <span class="n">tokenizer</span><span class="o">.</span><span class="n">batch_decode</span><span class="p">(</span><span class="n">summarized</span><span class="p">,</span> <span class="n">skip_special_tokens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">summarized_text</span> <span class="o">=</span> <span class="n">summarized_decoded</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">compare</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">summarized_text</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-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0"> <pre>Article text length: 1427 Mozilla's "Trustworthy AI" Thinking Points:.<n>People should have agency and control over their data and algorithmic outputs.<n>Developers need to implement strong measures to protect our data. Summarized length: 193 </pre> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>Shorter, but the quality is higher. Adjusting the <strong>temperature</strong> up will likely help.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell"> <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-python"><pre><span></span><span class="n">set_seed</span><span class="p">(</span><span class="mi">108814</span><span class="p">)</span> <span class="n">summarized</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="o">**</span><span class="n">batch</span><span class="p">,</span> <span class="n">do_sample</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">temperature</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">top_k</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="n">summarized_decoded</span> <span class="o">=</span> <span class="n">tokenizer</span><span class="o">.</span><span class="n">batch_decode</span><span class="p">(</span><span class="n">summarized</span><span class="p">,</span> <span class="n">skip_special_tokens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">summarized_text</span> <span class="o">=</span> <span class="n">summarized_decoded</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">compare</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">summarized_text</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-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0"> <pre>Article text length: 1427 Mozilla's "Trustworthy AI" Thinking Points:.<n>People should have agency and control over their data and algorithmic outputs.<n>Developers need to implement strong measures to protect our data and personal security.<n>We need to mandate transparency so that we can fully understand these systems and their potential for harm. Summarized length: 325 </pre> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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 let's play with one other generation approach called <strong>top_k</strong> sampling -- instead of considering all possible next words in the vocabulary, the model only considers the top 'k' most probable next words.</p> <p>This technique helps to focus the model on likely continuations and reduces the chances of generating irrelevant or nonsensical text.</p> <p>It strikes a balance between creativity and coherence by limiting the pool of next word choices, but not so much that the output becomes deterministic.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell"> <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-python"><pre><span></span><span class="n">set_seed</span><span class="p">(</span><span class="mi">226012</span><span class="p">)</span> <span class="n">summarized</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="o">**</span><span class="n">batch</span><span class="p">,</span> <span class="n">do_sample</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top_k</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> <span class="n">summarized_decoded</span> <span class="o">=</span> <span class="n">tokenizer</span><span class="o">.</span><span class="n">batch_decode</span><span class="p">(</span><span class="n">summarized</span><span class="p">,</span> <span class="n">skip_special_tokens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">summarized_text</span> <span class="o">=</span> <span class="n">summarized_decoded</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">compare</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">summarized_text</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-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0"> <pre>Article text length: 1427 Mozilla's "Trustworthy AI" Thinking Points look at ethical issues surrounding automated decision making.<n>values and goals of a system should be power aware and seek to minimize harm.<n>People should have agency and control over their data and algorithmic outputs.<n>Developers need to implement strong measures to protect our data and personal security. Summarized length: 355 </pre> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>Finally, let's try <strong>top_p</strong> sampling -- also known as nucleus sampling, is a strategy where the model considers only the smallest set of top words whose cumulative probability exceeds a threshold 'p'.</p> <p>Unlike top-k which considers a fixed number of words, <strong>top-p</strong> adapts based on the distribution of probabilities for the next word. This makes it more dynamic and flexible. It helps create diverse and sensible text by allowing less probable words to be selected when the most probable ones don't add up to 'p'.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell"> <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-python"><pre><span></span><span class="n">set_seed</span><span class="p">(</span><span class="mi">21420041</span><span class="p">)</span> <span class="n">summarized</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="o">**</span><span class="n">batch</span><span class="p">,</span> <span class="n">do_sample</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top_p</span><span class="o">=</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">top_k</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> <span class="n">summarized_decoded</span> <span class="o">=</span> <span class="n">tokenizer</span><span class="o">.</span><span class="n">batch_decode</span><span class="p">(</span><span class="n">summarized</span><span class="p">,</span> <span class="n">skip_special_tokens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">summarized_text</span> <span class="o">=</span> <span class="n">summarized_decoded</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">compare</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">summarized_text</span><span class="p">)</span> <span class="c1"># saving this for later.</span> <span class="n">pegasus_summarized_text</span> <span class="o">=</span> <span class="n">summarized_text</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-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0"> <pre>Article text length: 1427 Mozilla's "Trustworthy AI" Thinking Points:.<n>People should have agency and control over their data and algorithmic outputs.<n>Developers need to implement strong measures to protect our data and personal security.<n>We need to mandate transparency so that we can fully understand these systems and their potential for harm. Summarized length: 325 </pre> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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, let's try out another model -- <a href="https://huggingface.co/docs/transformers/model_doc/bart">Meta's "BART"</a>.</p> <p>Looking at the <a href="https://paperswithcode.com/sota/abstractive-text-summarization-on-cnn-daily?tag_filter=4">PapersWithCode graph</a>, BART has solid results with ROUGE-1.</p> <p>Similar to Pegasus, BART has a <a href="http://huggingface.co">custom version</a> finetuned on CNN data.</p> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs"> <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-python"><pre><span></span><span class="kn">from</span> <span class="nn">transformers</span> <span class="kn">import</span> <span class="n">BartTokenizer</span><span class="p">,</span> <span class="n">BartForConditionalGeneration</span> <span class="n">set_seed</span><span class="p">(</span><span class="mi">120986</span><span class="p">)</span> <span class="n">bart_model_name</span> <span class="o">=</span> <span class="s2">"facebook/bart-large-cnn"</span> <span class="c1"># Load the tokenizer</span> <span class="n">bart_tokenizer</span> <span class="o">=</span> <span class="n">BartTokenizer</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="n">bart_model_name</span><span class="p">)</span> <span class="c1"># Load the model</span> <span class="n">bart_model</span> <span class="o">=</span> <span class="n">BartForConditionalGeneration</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="n">bart_model_name</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span> </pre></div> </div> </div> </div> </div> </div><div class="jp-Cell jp-CodeCell jp-Notebook-cell"> <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-python"><pre><span></span><span class="c1"># Using the same parameters as Pegasus, let's try running BART</span> <span class="n">batch</span> <span class="o">=</span> <span class="n">bart_tokenizer</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="s2">"longest"</span><span class="p">,</span> <span class="n">return_tensors</span><span class="o">=</span><span class="s2">"pt"</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span> <span class="n">summarized</span> <span class="o">=</span> <span class="n">bart_model</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="o">**</span><span class="n">batch</span><span class="p">,</span> <span class="n">do_sample</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">top_p</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">top_k</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">max_new_tokens</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span> <span class="n">summarized_decoded</span> <span class="o">=</span> <span class="n">bart_tokenizer</span><span class="o">.</span><span class="n">batch_decode</span><span class="p">(</span><span class="n">summarized</span><span class="p">,</span> <span class="n">skip_special_tokens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="n">summarized_text</span> <span class="o">=</span> <span class="n">summarized_decoded</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">compare</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">summarized_text</span><span class="p">)</span> <span class="n">bart_summarized_text</span> <span class="o">=</span> <span class="n">summarized_text</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-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0"> <pre>Article text length: 1427 Mozilla's "Trustworthy AI" Thinking Points: How is data collected, stored, and shared? Our personal data powers everything from traffic maps to targeted advertising. Trustworthy AI should enable people to decide how their data is used and what decisions are made with it. Summarized length: 271 </pre> </div> </div> </div> </div> </div> <div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> <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>Is this the best that BART can do? Unlikely. We can take this as a starting point to experiment.</p> <p>You should now have enough of a workflow mapped out to find, select and try these models out for not just summarization but any text-based use-case. Let's start learning and experimenting!</p> <p>There are <a href="https://huggingface.co/docs/transformers/main_classes/text_generation">many other variables</a> that control the output, but this is a great stopping point to switch over to how to evaluate the results of these and any other model quantitatively for your own use-cases.</p> </div> </div> </div> </div> </main> </body> </html> </code> <div> <a class='button-next-page' href='/content/choosing-ml-models/#evaluating-ml-model-results'>Evaluating LM Results</a> </div> <h4 id="why-this-guide">Why this guide?</h4> <p>Large language and image/video generation models are opening up new ways to create, plan and execute the things we do at work and home every day. </p> <p>So far, onboarding into the state-of-the-art within AI has been challenging for engineers of any level who are new to the AI space. Current onboarding options require piecing-together various solutions in disjointed ways. Most of these solutions are also not default open source, and there are vast amounts of new terminology, entities and libraries to learn.</p> <p>As of this moment, the historical pattern of engineers starting and ending projects with primarily open source components is at risk. Foundation models are very expensive to train from scratch, and open source versions have a hard time competing with well resourced for-profit companies. Mozilla is planting a flag in the ground in this space and creating a new hub for open-source AI projects, kickstarting a vibrant open-source community, with clear shared goals and improved open-source visibility for this important new sector.</p> <h4 id="why-mozilla">Why Mozilla?</h4> <p>Mozilla has been developing and shipping AI through its products and initiatives for many years. From Common Voice to Firefox Translate and beyond, we see in AI the potential to empower humans, make technology more accessible, and improve lives.</p> <p>But like many others, we also see the risk of real-world harm. We don’t have to cast our gazes to some far-flung science fiction future to envision it: people are already experiencing real-world impacts from this technology, right here and now.</p> <p>Much will depend on how this technology is developed and deployed, but it will also depend on who guides it. We believe that the open source community has a critical role to play in ensuring that AI develops in a way that is responsible, trustworthy, equitable, and safe. We hope that this guide contributes to mobilizing the open source community to join us in this important work.</p> <div> <a class="button-next-page" href="/content/ai-basics">AI Basics</a> </div> <div class="mt-3"> or <a class="edit-this-page" target="_" href="https://github.com/mozilla/ai-guide/edit/main/templates/content/introduction/index.md">contribute to this page on Github ></a> </div> </div> <!-- newsletter --> <section class="mzp-l-content c-innovation-newsletter content" id="newsletter-section" data-theme="moz_ai_guide_base_dark"> <div class="mzp-c-newsletter inner"> <div class="newsletter-cta"> <h4>Keep the door to AI open</h4> <p>Stay up to date on the AI Guide, innovation announcements, projects and news.</p> </div> <form id="newsletter-form" class="mzp-c-newsletter-form innovations-form" name="newsletter-form"> <fieldset class="mzp-c-newsletter-content"> <div class="mzp-c-form-errors hidden" id="newsletter-errors"> <ul class="mzp-u-list-styled"> <li class="error-email-invalid hidden">Please enter a valid email address with less than 120 characters</li> <li class="error-privacy-policy hidden">You must agree to the privacy notice</li> <li class="error-newsletter hidden">Please check at least one of the newsletter options.</li> <li class="error-try-again-later hidden">We are sorry, but there was a problem with our system. Please try again later!</li> </ul> </div> <div class="form-control w-full max-w-sm"> <label for="email" class="label"><span class="label-text">Your email address</span></label> <input type="email" class="mzp-js-email-field input input-bordered w-full" id="email" name="email" placeholder="Enter your email here" autocomplete="email" required aria-required="true"> </div> <div id="newsletter-details" class="mzp-c-newsletter-details"> <div class="form-control w-full max-w-sm mt-4"> <label for="name" class="label"><span class="label-text">Name</span></label> <input type="text" class="name input input-bordered w-full" id="name" name="name" placeholder="Enter your name here" autocomplete="name"> </div> <fieldset class="mzp-u-inline interests mt-8"> <label>What are you interested in learning more about?</label> <div class="flex items-center"> <input class="newsletter email-checkbox mr-2 inline-block" type="checkbox" name="interests" id="newsletter" value="newsletter"/> <label for="newsletter" class="mzp-u-inline"> AI Guide Updates </label> </div> <div class="flex items-center"> <input type="checkbox" class="email-checkbox mr-2 inline-block" name="interests" id="collaboration" value="collaboration"/> <label for="collaboration" class="mzp-u-inline"> Collaborate with us </label> </div> <div class="mzp-c-field collaboration-description description mt-4"> <label class="label" for="description"><span class="label-text">Description</span></label> <textarea class="textarea w-full textarea-bordered" placeholder="How would you like to collaborate with us?" rows="5" cols="38" name="description" id="description" maxlength="750"></textarea> <label for="website" class="label"><span class="label-text">Website</span></label> <input class="input input-bordered w-full" type="text" id="website" name="website" placeholder="ex: mozilla.org"> </div> </fieldset> <div class="flex items-center mt-8"> <input type="checkbox" class="email-checkbox mr-2 inline-block" id="privacy" name="privacy" required aria-required="true"> <label for="privacy" class="mzp-u-inline"> I’m okay with Mozilla handling my info as explained in <a href="https://www.mozilla.org/privacy/websites/">this Privacy Notice</a> </label> </div> </div> <div> <span class="mzp-c-form-submit"> <button type="submit" class="mzp-c-button btn btn-base whitespace-nowrap mt-4 email-submit" id="newsletter-submit">Sign up</button> </span> </div> </fieldset> </form> <div id="newsletter-thanks" class="mzp-c-newsletter-thanks"> <h2>Thank you</h2> <p>If you haven’t previously confirmed a subscription to a Mozilla-related newsletter, you may have to do so.</p> <p>Please check your inbox or your spam filter for an email from us.</p> </div> </div> </section> </main> <footer id='footer' class="mzp-c-footer"> <div class="mzp-l-content "> <nav class="mzp-c-footer-secondary "> <a href='/'><img alt="Mozilla logo" class="[filter:invert(1)]" id='footer-logo' src="/img/mozilla-only.c3f76b0f.png"/></a> <div class="container"> <ul class="mzp-c-footer-terms"> <li><a href="https://www.mozilla.org/privacy/websites/" data-link-type="footer" data-link-name="Privacy">Website Privacy Notice</a></li> <li><a href="https://www.mozilla.org/privacy/websites/#user-choices" data-link-type="footer" data-link-name="Cookies">Cookies</a></li> <li><a href="https://www.mozilla.org/about/legal/" data-link-type="footer" data-link-name="Legal">Legal</a></li> <li><a href="https://www.mozilla.org/about/governance/policies/participation/" data-link-type="footer" data-link-name="Community Participation Guidelines">Community Participation Guidelines</a></li> <li><a href="https://www.mozilla.org/about/this-site/" data-link-type="footer" data-link-name="About this site">About this site</a></li> </ul> </div> <div class="container"> <div class="mzp-c-footer-license leading-6" rel="license"> Visit <a href="https://www.mozilla.org/" class="underline">Mozilla Corporation’s</a> not-for-profit parent, the <a href="https://foundation.mozilla.org/?utm_source=www.mozilla.org&utm_medium=referral&utm_campaign=footer" class="underline" rel="external noopener">Mozilla Foundation</a>. Portions of this content are ©1998–2023 by individual mozilla.org contributors. Content available under a <a rel="license" href="https://www.mozilla.org/foundation/licensing/website-content/">Creative Commons license</a>. </div> </div> </nav> </div> </footer> </div> <div class="drawer-side"> <label for="my-drawer-2" class="drawer-overlay"></label> <!-- TODO: adding a div here is needed to provide a solid background color over underlying content, but this throws off alignment and layout of button --> <label id='hamburger-btn-2' class="hamburger-btn" for="my-drawer-2"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M6 6L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> <path d="M6 18L18 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> </svg> </label> <ul class="menu"> <li><a href="/"><img alt="Mozilla logo" class="" id='sidebar-logo' src="/img/mozilla-only.c3f76b0f.png"/></a></li> <li><a href="/"><h2 class="sidebar-title">AI Guide</h2></a></li> <li><details closed> <summary> <a href='/content/introduction/'>Introduction</a> </summary> <ul class='sub_menu'> <li><a href='/content/introduction/#if-youre-new-to-ai'>If you're new to AI</a></li> <li><a href='/content/introduction/#getting-started-with-code'>Getting started with code</a></li> <li><a href='/content/introduction/#why-this-guide'>Why this guide?</a></li> <li><a href='/content/introduction/#why-mozilla'>Why Mozilla?</a></li></ul></details></li> <li><details closed> <summary> <a href='/content/ai-basics/'>AI Basics</a> </summary> <ul class='sub_menu'> <li><a href='/content/ai-basics/#what-is-ai-in-2023'>What is AI in 2023?</a></li> <li><a href='/content/ai-basics/#why-are-people-excited-about-llms'>Why are people excited about LLMs?</a></li> <li><a href='/content/ai-basics/#why-are-people-concerned-about-llms'>Why are people concerned about LLMs?</a></li> <li><a href='/content/ai-basics/#what-exactly-is-an-llm'>What exactly is an LLM?</a></li> <li><a href='/content/ai-basics/#what-are-the-pros-cons-of-using-an-llm'>What are the pros & cons of using an LLM?</a></li> <li><a href='/content/ai-basics/#what-new-behaviors-do-llms-unlock'>What new behaviors do LLMs unlock?</a></li> <li><a href='/content/ai-basics/#when-i-send-a-transformer-based-llm-a-prompt-what-happens-internally-in-more-technical-terms'>When I send a Transformer-based LLM a “prompt”, what happens internally in more technical terms?</a></li></ul></details></li> <li><details closed> <summary> <a href='/content/llms-101/'>Language Models 101</a> </summary> <ul class='sub_menu'> <li><a href='/content/llms-101/#whats-the-difference-between-a-language-model-and-a-large-language-model'>What's the difference between a "language model" and a "large language model"?</a></li> <li><a href='/content/llms-101/#what-do-these-numbers-mean-in-the-names-of-models'>What do these numbers mean in the names of models?</a></li> <li><a href='/content/llms-101/#what-is-a-parameter'>What is a parameter?</a></li> <li><a href='/content/llms-101/#what-does-training-an-ml-model-mean'>What does “training” an ML model mean?</a></li> <li><a href='/content/llms-101/#how-does-a-typical-training-run-work'>How does a typical training run work?</a></li> <li><a href='/content/llms-101/#what-is-backpropagation'>What is backpropagation?</a></li> <li><a href='/content/llms-101/#what-does-fine-tuning-a-language-model-mean'>What does “fine-tuning” a language model mean?</a></li> <li><a href='/content/llms-101/#rlhf-approach'>“RLHF” approach</a></li> <li><a href='/content/llms-101/#what-does-inference-mean'>What does "inference" mean?</a></li> <li><a href='/content/llms-101/#is-inference-computationally-expensive'>Is inference computationally expensive?</a></li> <li><a href='/content/llms-101/#what-is-a-vector'>What is a vector?</a></li> <li><a href='/content/llms-101/#what-is-beam-search'>What is Beam search?</a></li> <li><a href='/content/llms-101/#what-is-frequency'>What is frequency?</a></li> <li><a href='/content/llms-101/#what-is-temperature'>What is temperature?</a></li> <li><a href='/content/llms-101/#what-is-sampling'>What is sampling?</a></li> <li><a href='/content/llms-101/#what-is-top_k-sampling'>What is 'top_k' sampling?</a></li> <li><a href='/content/llms-101/#what-is-top_p-sampling'>What is 'top_p' sampling?</a></li></ul></details></li> <li><details closed> <summary> <a href='/content/choosing-ml-models/'>Choosing ML Models</a> </summary> <ul class='sub_menu'> <li><a href='/content/choosing-ml-models/#first-steps-with-language-models'>First Steps With Language Models</a></li> <li><a href='/content/choosing-ml-models/#evaluating-ml-model-results'>Evaluating ML Model Results</a></li></ul></details></li> <li><details closed> <summary> <a href='/content/running-llms-locally/'>Running LLMs Locally</a> </summary> <ul class='sub_menu'> <li><a href='/content/running-llms-locally/#what-is-a-llamafile'>What is a llamafile?</a></li> <li><a href='/content/running-llms-locally/#installing-mistral_7b'>Installing Mistral_7B</a></li> <li><a href='/content/running-llms-locally/#other-models'>Other models</a></li></ul></details></li> <li><details closed> <summary> <a href='/content/comparing-open-llms/'>Comparing Open LLMs</a> </summary> <ul class='sub_menu'> <li><a href='/content/comparing-open-llms/#mistral-7b-beyond'>Mistral 7B & Beyond</a></li></ul></details></li> <li> <details closed> <summary> <a href='/content/image-models/'>Image Generation</a> </summary> <ul class="sub_menu"> <li> <a href='/content/image-models/#what-is-image-generation'>What is image generation?</a > </li> <li> <a href='/content/image-models/#what-are-diffusion-models'>What are diffusion models?</a > </li> <li> <a href='/content/image-models/#challenges'>Challenges</a> </li> <li> <a href='/content/image-models/#technical-foundations'>Technical Foundations</a > </li> <li> <a href='/content/image-models/#glossary'>Glossary</a> </li> <li> <a href='/content/image-models/#recommended-references'>Recommended References</a > </li> </ul> </details> </li> <li><details closed> <summary> <a href='/content/notable-projects/'>Notable Projects</a> </summary> <ul class='sub_menu'> <li><a href='/content/notable-projects/#complete-llm-solutions'>Complete LLM Solutions</a></li> <li><a href='/content/notable-projects/#inference-runtimes'>Inference runtimes</a></li> <li><a href='/content/notable-projects/#retrieval-augmented-generation'>Retrieval augmented generation</a></li> <li><a href='/content/notable-projects/#orchestration'>Orchestration</a></li> <li><a href='/content/notable-projects/#front-ends'>Front-ends</a></li> </ul></details></li> <li class="upcoming"><a href='/content/embeddings-and-rag/'> <span class='text-yellow-700 bg-yellow-100 pt-1 pr-2 pl-2 pb-1 rounded-md text-xs'>Contribute</span> Embeddings & RAG</a></li> <li class="upcoming"><a href='/content/fine-tuning-llms/'> <span class='text-yellow-700 bg-yellow-100 pt-1 pr-2 pl-2 pb-1 rounded-md text-xs'>Contribute</span> Fine-Tuning LLMs</a></li> <li class="upcoming"><a href='/content/models-from-scratch/'> <span class='text-yellow-700 bg-yellow-100 pt-1 pr-2 pl-2 pb-1 rounded-md text-xs'>Contribute</span> Models From Scratch</a></li> <li class="upcoming"><a href='/content/audio-video-models/'> <span class='text-yellow-700 bg-yellow-100 pt-1 pr-2 pl-2 pb-1 rounded-md text-xs'>Contribute</span> Audio & Video Models</a></li> <li class='mt-5 pt-2 border-t-[1px] border-t-primary ff-cabin uppercase'> <span>️❤️<a class='pl-0 text-base font-medium' href='/content/contributions/'>Contribution Guide</a></span> </li> <li class='mt-0 pt-2 ff-cabin uppercase'> <span>️💬 <a class="pl-0 text-base font-medium" href="https://discord.gg/3egbzTKhdk">Join our Discord</a></span> </li> </ul> </div> <script type='text/javascript'> var sidebarDrawer = document.getElementById('my-drawer-2'); document.querySelectorAll("ul.menu li a").forEach(function(item) { item.addEventListener('click', function() { sidebarDrawer.checked = false; return true; }); }); </script> </div> <script type="module" src="/scripts/email.ac999cec.js"></script> </body> </html>