From c620ce876bd4d6067800a262b0fe3704c906f882 Mon Sep 17 00:00:00 2001 From: Gerardo Tauriello <gerardo.tauriello@unibas.ch> Date: Tue, 16 Aug 2022 18:11:07 +0200 Subject: [PATCH] Add Niko project (SCHWED-5596) --- projects/CoFFE-sponge-proteins/.gitkeep | 0 projects/CoFFE-sponge-proteins/README.md | 26 + .../tests/Docker/Dockerfile_GT | 49 + .../tests/Docker/Dockerfile_work | 47 + .../tests/Docker/NOTES.txt | 24 + .../tests/Docker/pdbx.tar.gz | Bin 0 -> 16022 bytes .../tests/Docker/requirements.txt | 2 + .../CoFFE-sponge-proteins/tests/test.html | 17126 ++++++++++++++++ .../CoFFE-sponge-proteins/tests/test.ipynb | 1110 + .../tests/test_modelCIF_MA.py | 470 + .../translate2modelcif.py | 1017 + 11 files changed, 19871 insertions(+) delete mode 100644 projects/CoFFE-sponge-proteins/.gitkeep create mode 100644 projects/CoFFE-sponge-proteins/README.md create mode 100644 projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_GT create mode 100644 projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_work create mode 100644 projects/CoFFE-sponge-proteins/tests/Docker/NOTES.txt create mode 100644 projects/CoFFE-sponge-proteins/tests/Docker/pdbx.tar.gz create mode 100644 projects/CoFFE-sponge-proteins/tests/Docker/requirements.txt create mode 100644 projects/CoFFE-sponge-proteins/tests/test.html create mode 100644 projects/CoFFE-sponge-proteins/tests/test.ipynb create mode 100644 projects/CoFFE-sponge-proteins/tests/test_modelCIF_MA.py create mode 100644 projects/CoFFE-sponge-proteins/translate2modelcif.py diff --git a/projects/CoFFE-sponge-proteins/.gitkeep b/projects/CoFFE-sponge-proteins/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/projects/CoFFE-sponge-proteins/README.md b/projects/CoFFE-sponge-proteins/README.md new file mode 100644 index 0000000..9ce5788 --- /dev/null +++ b/projects/CoFFE-sponge-proteins/README.md @@ -0,0 +1,26 @@ +# Modelling of Spongilla lacustris proteome with functional annotations + +Main links: +- [Link Project in MA](https://modelarchive.org/doi/10.5452/ma-coffe-slac) (incl. background on project itself) +- [Jira-story](https://jira.biozentrum.unibas.ch/browse/SCHWED-5596) + +Setup: +- Using ColabFold for monomer predictions with AlphaFold without links to sequence databases +- Input from them: + - one tarball for the PDB files + - one tarball for the JSON files + - a CSV file with title and description for each protein + - FASTA file with all sequences (used for sanity checks) + +Special features here: +- Description is long multiline text which includes output from functional annotation +- First set of models converted by us to ModelCIF +- Includes generic code for handling of ColabFold setup based on config.json +- Includes test code for conversion of ModelCIF to content displayed in ModelArchive + +Content: +- translate2modelcif.py : script to do conversion; compatible with Docker setup from [ma-wilkins-import](https://git.scicore.unibas.ch/schwede/ma-wilkins-import/-/tree/6bbd6fa7ec53e1a0971fba40c96fa971d1022f74) (and script based on code there) +- tests folder with + - custom Docker setup used locally (Mac; with extra libraries for testing) and on work machine (managed CentOS with old docker version) + - test_modelCIF_MA.py to convert ModelCIF to content displayed in ModelArchive (needs gemmi library) + - test.ipynb and .html for tests performed during development diff --git a/projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_GT b/projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_GT new file mode 100644 index 0000000..e87a2e5 --- /dev/null +++ b/projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_GT @@ -0,0 +1,49 @@ +ARG VERSION_OST="2.3.0" +FROM registry.scicore.unibas.ch/schwede/openstructure:${VERSION_OST} +# We need to declare ARGs again which were declared before the build stage +# (FROM directive), otherwise they won't be available in this stage. +ARG VERSION_OST + +## Set up environment +ENV SRC_DIR="/tmp" \ + VERSION_OST=${VERSION_OST} \ + PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 + +## Install python-modelcif and python-ihm +COPY requirements.txt ${SRC_DIR} +COPY pdbx.tar.gz ${SRC_DIR} +WORKDIR ${SRC_DIR} +RUN set -e pipefail; \ + apt-get update -y; \ + # for development, install venv + apt-get install -y git pip python3.8-venv; \ + pip install -r requirements.txt; \ + # for development, install extra stuff + pip install black pylint ipython jupyter markdown gemmi; \ + tar zxf pdbx.tar.gz -C /usr/local/lib64/python3.8/site-packages; \ + # python-ihm and -modelcif + git clone https://github.com/ihmwg/python-ihm.git ihm.git; \ + cd ihm.git; \ + python3 setup.py build; \ + python3 setup.py install; \ + rm -rf ${SRC_DIR}/ihm.git; \ + cd ${SRC_DIR}; \ + git clone https://github.com/ihmwg/python-modelcif.git modelcif.git; \ + cd modelcif.git; \ + python3 setup.py build; \ + python3 setup.py install; \ + rm -rf ${SRC_DIR}/modelcif.git; \ + apt-get remove -y git pip; \ + rm ${SRC_DIR}/requirements.txt ${SRC_DIR}/pdbx.tar.gz + +# had issues with older docker version on managed centos box... + +# NOTEBOOK ENV +ENV DNG_ROOT=$OST_ROOT +ENV DNG_INITDIR=${DNG_ROOT}/lib64/python3.8/site-packages/ost + +# standard entry point ipython +RUN echo 'alias ost_ipython="ipython -i $DNG_INITDIR/ost_startup.py"' >> ~/.bashrc + +ENTRYPOINT bash diff --git a/projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_work b/projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_work new file mode 100644 index 0000000..e842682 --- /dev/null +++ b/projects/CoFFE-sponge-proteins/tests/Docker/Dockerfile_work @@ -0,0 +1,47 @@ +ARG VERSION_OST="2.3.0" +FROM registry.scicore.unibas.ch/schwede/openstructure:${VERSION_OST} +# We need to declare ARGs again which were declared before the build stage +# (FROM directive), otherwise they won't be available in this stage. +ARG VERSION_OST + +## Set up environment +ENV SRC_DIR="/tmp" \ + VERSION_OST=${VERSION_OST} \ + PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 + + +LABEL org.openstructure.base-image="${VERSION_OST}" +LABEL org.openstructure.translate2modelcif="2022-04-08.1" +LABEL maintainer="Stefan Bienert <stefan.bienert@unibas.ch>" +LABEL vendor1="Schwede Group (schwedelab.org)" +LABEL vendor2="SIB - Swiss Institute of Bioinformatics (sib.swiss)" +LABEL vendor3="Biozentrum - University of Basel (biozentrum.unibas.ch)" + + +## Install python-modelcif and python-ihm +COPY requirements.txt ${SRC_DIR} +WORKDIR ${SRC_DIR} +RUN set -e pipefail; \ + apt-get update -y; \ + # for development, install venv + apt-get install -y git pip python3.8-venv; \ + pip install -r requirements.txt; \ + # for development, install black & PyLint + pip install black pylint; \ + git clone https://github.com/ihmwg/python-ihm.git ihm.git; \ + cd ihm.git; \ + python3 setup.py build; \ + python3 setup.py install; \ + rm -rf ${SRC_DIR}/ihm.git; \ + cd ${SRC_DIR}; \ + git clone https://github.com/ihmwg/python-modelcif.git modelcif.git; \ + cd modelcif.git; \ + python3 setup.py build; \ + python3 setup.py install; \ + rm -rf ${SRC_DIR}/modelcif.git; \ + apt-get remove -y git pip + +# had issues with older docker version on managed centos box... + +ENTRYPOINT bash diff --git a/projects/CoFFE-sponge-proteins/tests/Docker/NOTES.txt b/projects/CoFFE-sponge-proteins/tests/Docker/NOTES.txt new file mode 100644 index 0000000..edc2292 --- /dev/null +++ b/projects/CoFFE-sponge-proteins/tests/Docker/NOTES.txt @@ -0,0 +1,24 @@ +Based on https://git.scicore.unibas.ch/schwede/ma-wilkins-import/-/tree/develop/ + +------------------------------------ +GT versions of Docker: +- Dockerfile_work: simplified stuff to make it work on old docker version on CentOS box +-> use Ctrl-P + Ctrl-Q to detach without closing bash and run in background... +-> "docker ps -a" and "docker attach <NAME>" to get back in and "docker logs [--tail N] <NAME>" to see output +- Dockerfile_GT: added extra libraries and ost_ipython alias for convenience +-> pdbx.tar.gz is PDBx Python Parser as in MA (original adapted for py3) +-> NOTE: pdbx.tar.gz outdated by now, but ok (not used in the end anyway) +------------------------------------ +docker build -f Dockerfile_GT -t modelcif_test . +(change Dockerfile_GT to Dockerfile_work on CentOS box) +docker run --rm -ti -v "$(pwd)":/tmp modelcif_test +-> can use "ost_ipython" in there +docker run --rm -ti -v "$(pwd)":/tmp -p 8888:8888 --entrypoint jupyter modelcif_test notebook --ip 0.0.0.0 --no-browser --allow-root + +------------------------------------ +Original instructions from Bienchen: +------------------------------------ +docker build -t matranslator:2022-07-18.1 . +docker run --rm -i -v /Users/stefan/.bash_profile:/home/mmcif/.bash_profile -v /Users/stefan/.bash_aliases:/home/mmcif/.bash_aliases -v /Users/stefan/.bashrc:/home/mmcif/.bashrc -v /Users/stefan/Projects/ma-wilkins-import.git:/data -v /Users/stefan/Projects/ma-wilkins-import.git/.docker-bash-history:/home/mmcif/.bash_history -t matranslator:2022-07-18.1 bash +ost translate2modelcif.py A0A1B0GTU1-O75152/ +------------------------------------ diff --git a/projects/CoFFE-sponge-proteins/tests/Docker/pdbx.tar.gz b/projects/CoFFE-sponge-proteins/tests/Docker/pdbx.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7f5eeb918722efc3321527fb9ed7decea13d7ec4 GIT binary patch literal 16022 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 literal 0 HcmV?d00001 diff --git a/projects/CoFFE-sponge-proteins/tests/Docker/requirements.txt b/projects/CoFFE-sponge-proteins/tests/Docker/requirements.txt new file mode 100644 index 0000000..2abd7d3 --- /dev/null +++ b/projects/CoFFE-sponge-proteins/tests/Docker/requirements.txt @@ -0,0 +1,2 @@ +requests +ujson diff --git a/projects/CoFFE-sponge-proteins/tests/test.html b/projects/CoFFE-sponge-proteins/tests/test.html new file mode 100644 index 0000000..853fd59 --- /dev/null +++ b/projects/CoFFE-sponge-proteins/tests/test.html @@ -0,0 +1,17126 @@ +<!DOCTYPE html> +<html> +<head><meta charset="utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> + +<title>test</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: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: var(--jp-cell-editor-active-background) } +.highlight { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } +.highlight .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ +.highlight .err { color: var(--jp-mirror-editor-error-color) } /* Error */ +.highlight .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ +.highlight .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ +.highlight .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ +.highlight .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ +.highlight .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ +.highlight .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ +.highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ +.highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ +.highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ +.highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ +.highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ +.highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ +.highlight .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ +.highlight .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ +.highlight .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ +.highlight .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ +.highlight .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ +.highlight .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ +.highlight .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ +.highlight .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ +.highlight .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ +.highlight .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ +.highlight .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ +.highlight .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ +.highlight .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ +.highlight .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ +.highlight .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ +.highlight .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ +.highlight .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ + </style> + + + +<style type="text/css"> +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* + * Mozilla scrollbar styling + */ + +/* use standard opaque scrollbars for most nodes */ +[data-jp-theme-scrollbars='true'] { + scrollbar-color: rgb(var(--jp-scrollbar-thumb-color)) + var(--jp-scrollbar-background-color); +} + +/* for code nodes, use a transparent style of scrollbar. These selectors + * will match lower in the tree, and so will override the above */ +[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar, +[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; +} + +/* tiny scrollbar */ + +.jp-scrollbar-tiny { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; + scrollbar-width: thin; +} + +/* + * Webkit scrollbar styling + */ + +/* use standard opaque scrollbars for most nodes */ + +[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar, +[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-corner { + background: var(--jp-scrollbar-background-color); +} + +[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-thumb { + background: rgb(var(--jp-scrollbar-thumb-color)); + border: var(--jp-scrollbar-thumb-margin) solid transparent; + background-clip: content-box; + border-radius: var(--jp-scrollbar-thumb-radius); +} + +[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-track:horizontal { + border-left: var(--jp-scrollbar-endpad) solid + var(--jp-scrollbar-background-color); + border-right: var(--jp-scrollbar-endpad) solid + var(--jp-scrollbar-background-color); +} + +[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-track:vertical { + border-top: var(--jp-scrollbar-endpad) solid + var(--jp-scrollbar-background-color); + border-bottom: var(--jp-scrollbar-endpad) solid + var(--jp-scrollbar-background-color); +} + +/* for code nodes, use a transparent style of scrollbar */ + +[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar::-webkit-scrollbar, +[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar::-webkit-scrollbar, +[data-jp-theme-scrollbars='true'] + .CodeMirror-hscrollbar::-webkit-scrollbar-corner, +[data-jp-theme-scrollbars='true'] + .CodeMirror-vscrollbar::-webkit-scrollbar-corner { + background-color: transparent; +} + +[data-jp-theme-scrollbars='true'] + .CodeMirror-hscrollbar::-webkit-scrollbar-thumb, +[data-jp-theme-scrollbars='true'] + .CodeMirror-vscrollbar::-webkit-scrollbar-thumb { + background: rgba(var(--jp-scrollbar-thumb-color), 0.5); + border: var(--jp-scrollbar-thumb-margin) solid transparent; + background-clip: content-box; + border-radius: var(--jp-scrollbar-thumb-radius); +} + +[data-jp-theme-scrollbars='true'] + .CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal { + border-left: var(--jp-scrollbar-endpad) solid transparent; + border-right: var(--jp-scrollbar-endpad) solid transparent; +} + +[data-jp-theme-scrollbars='true'] + .CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical { + border-top: var(--jp-scrollbar-endpad) solid transparent; + border-bottom: var(--jp-scrollbar-endpad) solid transparent; +} + +/* 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: 0px solid transparent; + border-right: 0px solid transparent; +} + +.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical { + border-top: 0px solid transparent; + border-bottom: 0px solid transparent; +} + +/* + * Phosphor + */ + +.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. +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-Widget, /* </DEPRECATED> */ +.lm-Widget { + box-sizing: border-box; + position: relative; + overflow: hidden; + cursor: default; +} + + +/* <DEPRECATED> */ .p-Widget.p-mod-hidden, /* </DEPRECATED> */ +.lm-Widget.lm-mod-hidden { + display: none !important; +} + +/*----------------------------------------------------------------------------- +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-CommandPalette, /* </DEPRECATED> */ +.lm-CommandPalette { + display: flex; + flex-direction: column; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + + +/* <DEPRECATED> */ .p-CommandPalette-search, /* </DEPRECATED> */ +.lm-CommandPalette-search { + flex: 0 0 auto; +} + + +/* <DEPRECATED> */ .p-CommandPalette-content, /* </DEPRECATED> */ +.lm-CommandPalette-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + min-height: 0; + overflow: auto; + list-style-type: none; +} + + +/* <DEPRECATED> */ .p-CommandPalette-header, /* </DEPRECATED> */ +.lm-CommandPalette-header { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + + +/* <DEPRECATED> */ .p-CommandPalette-item, /* </DEPRECATED> */ +.lm-CommandPalette-item { + display: flex; + flex-direction: row; +} + + +/* <DEPRECATED> */ .p-CommandPalette-itemIcon, /* </DEPRECATED> */ +.lm-CommandPalette-itemIcon { + flex: 0 0 auto; +} + + +/* <DEPRECATED> */ .p-CommandPalette-itemContent, /* </DEPRECATED> */ +.lm-CommandPalette-itemContent { + flex: 1 1 auto; + overflow: hidden; +} + + +/* <DEPRECATED> */ .p-CommandPalette-itemShortcut, /* </DEPRECATED> */ +.lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + + +/* <DEPRECATED> */ .p-CommandPalette-itemLabel, /* </DEPRECATED> */ +.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. +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-DockPanel, /* </DEPRECATED> */ +.lm-DockPanel { + z-index: 0; +} + + +/* <DEPRECATED> */ .p-DockPanel-widget, /* </DEPRECATED> */ +.lm-DockPanel-widget { + z-index: 0; +} + + +/* <DEPRECATED> */ .p-DockPanel-tabBar, /* </DEPRECATED> */ +.lm-DockPanel-tabBar { + z-index: 1; +} + + +/* <DEPRECATED> */ .p-DockPanel-handle, /* </DEPRECATED> */ +.lm-DockPanel-handle { + z-index: 2; +} + + +/* <DEPRECATED> */ .p-DockPanel-handle.p-mod-hidden, /* </DEPRECATED> */ +.lm-DockPanel-handle.lm-mod-hidden { + display: none !important; +} + + +/* <DEPRECATED> */ .p-DockPanel-handle:after, /* </DEPRECATED> */ +.lm-DockPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + + +/* <DEPRECATED> */ +.p-DockPanel-handle[data-orientation='horizontal'], +/* </DEPRECATED> */ +.lm-DockPanel-handle[data-orientation='horizontal'] { + cursor: ew-resize; +} + + +/* <DEPRECATED> */ +.p-DockPanel-handle[data-orientation='vertical'], +/* </DEPRECATED> */ +.lm-DockPanel-handle[data-orientation='vertical'] { + cursor: ns-resize; +} + + +/* <DEPRECATED> */ +.p-DockPanel-handle[data-orientation='horizontal']:after, +/* </DEPRECATED> */ +.lm-DockPanel-handle[data-orientation='horizontal']:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + + +/* <DEPRECATED> */ +.p-DockPanel-handle[data-orientation='vertical']:after, +/* </DEPRECATED> */ +.lm-DockPanel-handle[data-orientation='vertical']:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + + +/* <DEPRECATED> */ .p-DockPanel-overlay, /* </DEPRECATED> */ +.lm-DockPanel-overlay { + z-index: 3; + box-sizing: border-box; + pointer-events: none; +} + + +/* <DEPRECATED> */ .p-DockPanel-overlay.p-mod-hidden, /* </DEPRECATED> */ +.lm-DockPanel-overlay.lm-mod-hidden { + display: none !important; +} + +/*----------------------------------------------------------------------------- +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-Menu, /* </DEPRECATED> */ +.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; +} + + +/* <DEPRECATED> */ .p-Menu-content, /* </DEPRECATED> */ +.lm-Menu-content { + margin: 0; + padding: 0; + display: table; + list-style-type: none; +} + + +/* <DEPRECATED> */ .p-Menu-item, /* </DEPRECATED> */ +.lm-Menu-item { + display: table-row; +} + + +/* <DEPRECATED> */ +.p-Menu-item.p-mod-hidden, +.p-Menu-item.p-mod-collapsed, +/* </DEPRECATED> */ +.lm-Menu-item.lm-mod-hidden, +.lm-Menu-item.lm-mod-collapsed { + display: none !important; +} + + +/* <DEPRECATED> */ +.p-Menu-itemIcon, +.p-Menu-itemSubmenuIcon, +/* </DEPRECATED> */ +.lm-Menu-itemIcon, +.lm-Menu-itemSubmenuIcon { + display: table-cell; + text-align: center; +} + + +/* <DEPRECATED> */ .p-Menu-itemLabel, /* </DEPRECATED> */ +.lm-Menu-itemLabel { + display: table-cell; + text-align: left; +} + + +/* <DEPRECATED> */ .p-Menu-itemShortcut, /* </DEPRECATED> */ +.lm-Menu-itemShortcut { + display: table-cell; + text-align: right; +} + +/*----------------------------------------------------------------------------- +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-MenuBar, /* </DEPRECATED> */ +.lm-MenuBar { + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + + +/* <DEPRECATED> */ .p-MenuBar-content, /* </DEPRECATED> */ +.lm-MenuBar-content { + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + list-style-type: none; +} + + +/* <DEPRECATED> */ .p--MenuBar-item, /* </DEPRECATED> */ +.lm-MenuBar-item { + box-sizing: border-box; +} + + +/* <DEPRECATED> */ +.p-MenuBar-itemIcon, +.p-MenuBar-itemLabel, +/* </DEPRECATED> */ +.lm-MenuBar-itemIcon, +.lm-MenuBar-itemLabel { + display: inline-block; +} + +/*----------------------------------------------------------------------------- +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-ScrollBar, /* </DEPRECATED> */ +.lm-ScrollBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + + +/* <DEPRECATED> */ +.p-ScrollBar[data-orientation='horizontal'], +/* </DEPRECATED> */ +.lm-ScrollBar[data-orientation='horizontal'] { + flex-direction: row; +} + + +/* <DEPRECATED> */ +.p-ScrollBar[data-orientation='vertical'], +/* </DEPRECATED> */ +.lm-ScrollBar[data-orientation='vertical'] { + flex-direction: column; +} + + +/* <DEPRECATED> */ .p-ScrollBar-button, /* </DEPRECATED> */ +.lm-ScrollBar-button { + box-sizing: border-box; + flex: 0 0 auto; +} + + +/* <DEPRECATED> */ .p-ScrollBar-track, /* </DEPRECATED> */ +.lm-ScrollBar-track { + box-sizing: border-box; + position: relative; + overflow: hidden; + flex: 1 1 auto; +} + + +/* <DEPRECATED> */ .p-ScrollBar-thumb, /* </DEPRECATED> */ +.lm-ScrollBar-thumb { + box-sizing: border-box; + position: absolute; +} + +/*----------------------------------------------------------------------------- +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-SplitPanel-child, /* </DEPRECATED> */ +.lm-SplitPanel-child { + z-index: 0; +} + + +/* <DEPRECATED> */ .p-SplitPanel-handle, /* </DEPRECATED> */ +.lm-SplitPanel-handle { + z-index: 1; +} + + +/* <DEPRECATED> */ .p-SplitPanel-handle.p-mod-hidden, /* </DEPRECATED> */ +.lm-SplitPanel-handle.lm-mod-hidden { + display: none !important; +} + + +/* <DEPRECATED> */ .p-SplitPanel-handle:after, /* </DEPRECATED> */ +.lm-SplitPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + + +/* <DEPRECATED> */ +.p-SplitPanel[data-orientation='horizontal'] > .p-SplitPanel-handle, +/* </DEPRECATED> */ +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { + cursor: ew-resize; +} + + +/* <DEPRECATED> */ +.p-SplitPanel[data-orientation='vertical'] > .p-SplitPanel-handle, +/* </DEPRECATED> */ +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { + cursor: ns-resize; +} + + +/* <DEPRECATED> */ +.p-SplitPanel[data-orientation='horizontal'] > .p-SplitPanel-handle:after, +/* </DEPRECATED> */ +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + + +/* <DEPRECATED> */ +.p-SplitPanel[data-orientation='vertical'] > .p-SplitPanel-handle:after, +/* </DEPRECATED> */ +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +/*----------------------------------------------------------------------------- +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-TabBar, /* </DEPRECATED> */ +.lm-TabBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + + +/* <DEPRECATED> */ .p-TabBar[data-orientation='horizontal'], /* </DEPRECATED> */ +.lm-TabBar[data-orientation='horizontal'] { + flex-direction: row; + align-items: flex-end; +} + + +/* <DEPRECATED> */ .p-TabBar[data-orientation='vertical'], /* </DEPRECATED> */ +.lm-TabBar[data-orientation='vertical'] { + flex-direction: column; + align-items: flex-end; +} + + +/* <DEPRECATED> */ .p-TabBar-content, /* </DEPRECATED> */ +.lm-TabBar-content { + margin: 0; + padding: 0; + display: flex; + flex: 1 1 auto; + list-style-type: none; +} + + +/* <DEPRECATED> */ +.p-TabBar[data-orientation='horizontal'] > .p-TabBar-content, +/* </DEPRECATED> */ +.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { + flex-direction: row; +} + + +/* <DEPRECATED> */ +.p-TabBar[data-orientation='vertical'] > .p-TabBar-content, +/* </DEPRECATED> */ +.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { + flex-direction: column; +} + + +/* <DEPRECATED> */ .p-TabBar-tab, /* </DEPRECATED> */ +.lm-TabBar-tab { + display: flex; + flex-direction: row; + box-sizing: border-box; + overflow: hidden; +} + + +/* <DEPRECATED> */ +.p-TabBar-tabIcon, +.p-TabBar-tabCloseIcon, +/* </DEPRECATED> */ +.lm-TabBar-tabIcon, +.lm-TabBar-tabCloseIcon { + flex: 0 0 auto; +} + + +/* <DEPRECATED> */ .p-TabBar-tabLabel, /* </DEPRECATED> */ +.lm-TabBar-tabLabel { + flex: 1 1 auto; + overflow: hidden; + white-space: nowrap; +} + + +.lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing : border-box; +} + + +/* <DEPRECATED> */ .p-TabBar-tab.p-mod-hidden, /* </DEPRECATED> */ +.lm-TabBar-tab.lm-mod-hidden { + display: none !important; +} + + +.lm-TabBar-addButton.lm-mod-hidden { + display: none !important; +} + + +/* <DEPRECATED> */ .p-TabBar.p-mod-dragging .p-TabBar-tab, /* </DEPRECATED> */ +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { + position: relative; +} + + +/* <DEPRECATED> */ +.p-TabBar.p-mod-dragging[data-orientation='horizontal'] .p-TabBar-tab, +/* </DEPRECATED> */ +.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { + left: 0; + transition: left 150ms ease; +} + + +/* <DEPRECATED> */ +.p-TabBar.p-mod-dragging[data-orientation='vertical'] .p-TabBar-tab, +/* </DEPRECATED> */ +.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { + top: 0; + transition: top 150ms ease; +} + + +/* <DEPRECATED> */ +.p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging, +/* </DEPRECATED> */ +.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. +| 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ .p-TabPanel-tabBar, /* </DEPRECATED> */ +.lm-TabPanel-tabBar { + z-index: 1; +} + + +/* <DEPRECATED> */ .p-TabPanel-stackedPanel, /* </DEPRECATED> */ +.lm-TabPanel-stackedPanel { + z-index: 0; +} + +/*----------------------------------------------------------------------------- +| 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. +|----------------------------------------------------------------------------*/ + +@charset "UTF-8"; +html{ + -webkit-box-sizing:border-box; + box-sizing:border-box; } + +*, +*::before, +*::after{ + -webkit-box-sizing:inherit; + box-sizing:inherit; } + +body{ + font-size:14px; + font-weight:400; + letter-spacing:0; + line-height:1.28581; + text-transform:none; + color:#182026; + font-family:-apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Open Sans", "Helvetica Neue", "Icons16", sans-serif; } + +p{ + margin-bottom:10px; + margin-top:0; } + +small{ + font-size:12px; } + +strong{ + font-weight:600; } + +::-moz-selection{ + background:rgba(125, 188, 255, 0.6); } + +::selection{ + background:rgba(125, 188, 255, 0.6); } +.bp3-heading{ + color:#182026; + font-weight:600; + margin:0 0 10px; + padding:0; } + .bp3-dark .bp3-heading{ + color:#f5f8fa; } + +h1.bp3-heading, .bp3-running-text h1{ + font-size:36px; + line-height:40px; } + +h2.bp3-heading, .bp3-running-text h2{ + font-size:28px; + line-height:32px; } + +h3.bp3-heading, .bp3-running-text h3{ + font-size:22px; + line-height:25px; } + +h4.bp3-heading, .bp3-running-text h4{ + font-size:18px; + line-height:21px; } + +h5.bp3-heading, .bp3-running-text h5{ + font-size:16px; + line-height:19px; } + +h6.bp3-heading, .bp3-running-text h6{ + font-size:14px; + line-height:16px; } +.bp3-ui-text{ + font-size:14px; + font-weight:400; + letter-spacing:0; + line-height:1.28581; + text-transform:none; } + +.bp3-monospace-text{ + font-family:monospace; + text-transform:none; } + +.bp3-text-muted{ + color:#5c7080; } + .bp3-dark .bp3-text-muted{ + color:#a7b6c2; } + +.bp3-text-disabled{ + color:rgba(92, 112, 128, 0.6); } + .bp3-dark .bp3-text-disabled{ + color:rgba(167, 182, 194, 0.6); } + +.bp3-text-overflow-ellipsis{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; } +.bp3-running-text{ + font-size:14px; + line-height:1.5; } + .bp3-running-text h1{ + color:#182026; + font-weight:600; + margin-bottom:20px; + margin-top:40px; } + .bp3-dark .bp3-running-text h1{ + color:#f5f8fa; } + .bp3-running-text h2{ + color:#182026; + font-weight:600; + margin-bottom:20px; + margin-top:40px; } + .bp3-dark .bp3-running-text h2{ + color:#f5f8fa; } + .bp3-running-text h3{ + color:#182026; + font-weight:600; + margin-bottom:20px; + margin-top:40px; } + .bp3-dark .bp3-running-text h3{ + color:#f5f8fa; } + .bp3-running-text h4{ + color:#182026; + font-weight:600; + margin-bottom:20px; + margin-top:40px; } + .bp3-dark .bp3-running-text h4{ + color:#f5f8fa; } + .bp3-running-text h5{ + color:#182026; + font-weight:600; + margin-bottom:20px; + margin-top:40px; } + .bp3-dark .bp3-running-text h5{ + color:#f5f8fa; } + .bp3-running-text h6{ + color:#182026; + font-weight:600; + margin-bottom:20px; + margin-top:40px; } + .bp3-dark .bp3-running-text h6{ + color:#f5f8fa; } + .bp3-running-text hr{ + border:none; + border-bottom:1px solid rgba(16, 22, 26, 0.15); + margin:20px 0; } + .bp3-dark .bp3-running-text hr{ + border-color:rgba(255, 255, 255, 0.15); } + .bp3-running-text p{ + margin:0 0 10px; + padding:0; } + +.bp3-text-large{ + font-size:16px; } + +.bp3-text-small{ + font-size:12px; } +a{ + color:#106ba3; + text-decoration:none; } + a:hover{ + color:#106ba3; + cursor:pointer; + text-decoration:underline; } + a .bp3-icon, a .bp3-icon-standard, a .bp3-icon-large{ + color:inherit; } + a code, + .bp3-dark a code{ + color:inherit; } + .bp3-dark a, + .bp3-dark a:hover{ + color:#48aff0; } + .bp3-dark a .bp3-icon, .bp3-dark a .bp3-icon-standard, .bp3-dark a .bp3-icon-large, + .bp3-dark a:hover .bp3-icon, + .bp3-dark a:hover .bp3-icon-standard, + .bp3-dark a:hover .bp3-icon-large{ + color:inherit; } +.bp3-running-text code, .bp3-code{ + font-family:monospace; + text-transform:none; + background:rgba(255, 255, 255, 0.7); + border-radius:3px; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2); + color:#5c7080; + font-size:smaller; + padding:2px 5px; } + .bp3-dark .bp3-running-text code, .bp3-running-text .bp3-dark code, .bp3-dark .bp3-code{ + background:rgba(16, 22, 26, 0.3); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + color:#a7b6c2; } + .bp3-running-text a > code, a > .bp3-code{ + color:#137cbd; } + .bp3-dark .bp3-running-text a > code, .bp3-running-text .bp3-dark a > code, .bp3-dark a > .bp3-code{ + color:inherit; } + +.bp3-running-text pre, .bp3-code-block{ + font-family:monospace; + text-transform:none; + background:rgba(255, 255, 255, 0.7); + border-radius:3px; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); + color:#182026; + display:block; + font-size:13px; + line-height:1.4; + margin:10px 0; + padding:13px 15px 12px; + word-break:break-all; + word-wrap:break-word; } + .bp3-dark .bp3-running-text pre, .bp3-running-text .bp3-dark pre, .bp3-dark .bp3-code-block{ + background:rgba(16, 22, 26, 0.3); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + .bp3-running-text pre > code, .bp3-code-block > code{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:inherit; + font-size:inherit; + padding:0; } + +.bp3-running-text kbd, .bp3-key{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + background:#ffffff; + border-radius:3px; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); + color:#5c7080; + display:-webkit-inline-box; + display:-ms-inline-flexbox; + display:inline-flex; + font-family:inherit; + font-size:12px; + height:24px; + -webkit-box-pack:center; + -ms-flex-pack:center; + justify-content:center; + line-height:24px; + min-width:24px; + padding:3px 6px; + vertical-align:middle; } + .bp3-running-text kbd .bp3-icon, .bp3-key .bp3-icon, .bp3-running-text kbd .bp3-icon-standard, .bp3-key .bp3-icon-standard, .bp3-running-text kbd .bp3-icon-large, .bp3-key .bp3-icon-large{ + margin-right:5px; } + .bp3-dark .bp3-running-text kbd, .bp3-running-text .bp3-dark kbd, .bp3-dark .bp3-key{ + background:#394b59; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); + color:#a7b6c2; } +.bp3-running-text blockquote, .bp3-blockquote{ + border-left:solid 4px rgba(167, 182, 194, 0.5); + margin:0 0 10px; + padding:0 20px; } + .bp3-dark .bp3-running-text blockquote, .bp3-running-text .bp3-dark blockquote, .bp3-dark .bp3-blockquote{ + border-color:rgba(115, 134, 148, 0.5); } +.bp3-running-text ul, +.bp3-running-text ol, .bp3-list{ + margin:10px 0; + padding-left:30px; } + .bp3-running-text ul li:not(:last-child), .bp3-running-text ol li:not(:last-child), .bp3-list li:not(:last-child){ + margin-bottom:5px; } + .bp3-running-text ul ol, .bp3-running-text ol ol, .bp3-list ol, + .bp3-running-text ul ul, + .bp3-running-text ol ul, + .bp3-list ul{ + margin-top:5px; } + +.bp3-list-unstyled{ + list-style:none; + margin:0; + padding:0; } + .bp3-list-unstyled li{ + padding:0; } +.bp3-rtl{ + text-align:right; } + +.bp3-dark{ + color:#f5f8fa; } + +:focus{ + outline:rgba(19, 124, 189, 0.6) auto 2px; + outline-offset:2px; + -moz-outline-radius:6px; } + +.bp3-focus-disabled :focus{ + outline:none !important; } + .bp3-focus-disabled :focus ~ .bp3-control-indicator{ + outline:none !important; } + +.bp3-alert{ + max-width:400px; + padding:20px; } + +.bp3-alert-body{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; } + .bp3-alert-body .bp3-icon{ + font-size:40px; + margin-right:20px; + margin-top:0; } + +.bp3-alert-contents{ + word-break:break-word; } + +.bp3-alert-footer{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:reverse; + -ms-flex-direction:row-reverse; + flex-direction:row-reverse; + margin-top:10px; } + .bp3-alert-footer .bp3-button{ + margin-left:10px; } +.bp3-breadcrumbs{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + cursor:default; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -ms-flex-wrap:wrap; + flex-wrap:wrap; + height:30px; + list-style:none; + margin:0; + padding:0; } + .bp3-breadcrumbs > li{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box; + display:-ms-flexbox; + display:flex; } + .bp3-breadcrumbs > li::after{ + background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 00-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e"); + content:""; + display:block; + height:16px; + margin:0 5px; + width:16px; } + .bp3-breadcrumbs > li:last-of-type::after{ + display:none; } + +.bp3-breadcrumb, +.bp3-breadcrumb-current, +.bp3-breadcrumbs-collapsed{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-inline-box; + display:-ms-inline-flexbox; + display:inline-flex; + font-size:16px; } + +.bp3-breadcrumb, +.bp3-breadcrumbs-collapsed{ + color:#5c7080; } + +.bp3-breadcrumb:hover{ + text-decoration:none; } + +.bp3-breadcrumb.bp3-disabled{ + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + +.bp3-breadcrumb .bp3-icon{ + margin-right:5px; } + +.bp3-breadcrumb-current{ + color:inherit; + font-weight:600; } + .bp3-breadcrumb-current .bp3-input{ + font-size:inherit; + font-weight:inherit; + vertical-align:baseline; } + +.bp3-breadcrumbs-collapsed{ + background:#ced9e0; + border:none; + border-radius:3px; + cursor:pointer; + margin-right:2px; + padding:1px 5px; + vertical-align:text-bottom; } + .bp3-breadcrumbs-collapsed::before{ + background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e") center no-repeat; + content:""; + display:block; + height:16px; + width:16px; } + .bp3-breadcrumbs-collapsed:hover{ + background:#bfccd6; + color:#182026; + text-decoration:none; } + +.bp3-dark .bp3-breadcrumb, +.bp3-dark .bp3-breadcrumbs-collapsed{ + color:#a7b6c2; } + +.bp3-dark .bp3-breadcrumbs > li::after{ + color:#a7b6c2; } + +.bp3-dark .bp3-breadcrumb.bp3-disabled{ + color:rgba(167, 182, 194, 0.6); } + +.bp3-dark .bp3-breadcrumb-current{ + color:#f5f8fa; } + +.bp3-dark .bp3-breadcrumbs-collapsed{ + background:rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-breadcrumbs-collapsed:hover{ + background:rgba(16, 22, 26, 0.6); + color:#f5f8fa; } +.bp3-button{ + display:-webkit-inline-box; + display:-ms-inline-flexbox; + display:inline-flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + border:none; + border-radius:3px; + cursor:pointer; + font-size:14px; + -webkit-box-pack:center; + -ms-flex-pack:center; + justify-content:center; + padding:5px 10px; + text-align:left; + vertical-align:middle; + min-height:30px; + min-width:30px; } + .bp3-button > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-button > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-button::before, + .bp3-button > *{ + margin-right:7px; } + .bp3-button:empty::before, + .bp3-button > :last-child{ + margin-right:0; } + .bp3-button:empty{ + padding:0 !important; } + .bp3-button:disabled, .bp3-button.bp3-disabled{ + cursor:not-allowed; } + .bp3-button.bp3-fill{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + width:100%; } + .bp3-button.bp3-align-right, + .bp3-align-right .bp3-button{ + text-align:right; } + .bp3-button.bp3-align-left, + .bp3-align-left .bp3-button{ + text-align:left; } + .bp3-button:not([class*="bp3-intent-"]){ + background-color:#f5f8fa; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + color:#182026; } + .bp3-button:not([class*="bp3-intent-"]):hover{ + background-clip:padding-box; + background-color:#ebf1f5; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); } + .bp3-button:not([class*="bp3-intent-"]):active, .bp3-button:not([class*="bp3-intent-"]).bp3-active{ + background-color:#d8e1e8; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-button:not([class*="bp3-intent-"]):disabled, .bp3-button:not([class*="bp3-intent-"]).bp3-disabled{ + background-color:rgba(206, 217, 224, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + outline:none; } + .bp3-button:not([class*="bp3-intent-"]):disabled.bp3-active, .bp3-button:not([class*="bp3-intent-"]):disabled.bp3-active:hover, .bp3-button:not([class*="bp3-intent-"]).bp3-disabled.bp3-active, .bp3-button:not([class*="bp3-intent-"]).bp3-disabled.bp3-active:hover{ + background:rgba(206, 217, 224, 0.7); } + .bp3-button.bp3-intent-primary{ + background-color:#137cbd; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + color:#ffffff; } + .bp3-button.bp3-intent-primary:hover, .bp3-button.bp3-intent-primary:active, .bp3-button.bp3-intent-primary.bp3-active{ + color:#ffffff; } + .bp3-button.bp3-intent-primary:hover{ + background-color:#106ba3; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-primary:active, .bp3-button.bp3-intent-primary.bp3-active{ + background-color:#0e5a8a; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-primary:disabled, .bp3-button.bp3-intent-primary.bp3-disabled{ + background-color:rgba(19, 124, 189, 0.5); + background-image:none; + border-color:transparent; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(255, 255, 255, 0.6); } + .bp3-button.bp3-intent-success{ + background-color:#0f9960; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + color:#ffffff; } + .bp3-button.bp3-intent-success:hover, .bp3-button.bp3-intent-success:active, .bp3-button.bp3-intent-success.bp3-active{ + color:#ffffff; } + .bp3-button.bp3-intent-success:hover{ + background-color:#0d8050; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-success:active, .bp3-button.bp3-intent-success.bp3-active{ + background-color:#0a6640; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-success:disabled, .bp3-button.bp3-intent-success.bp3-disabled{ + background-color:rgba(15, 153, 96, 0.5); + background-image:none; + border-color:transparent; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(255, 255, 255, 0.6); } + .bp3-button.bp3-intent-warning{ + background-color:#d9822b; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + color:#ffffff; } + .bp3-button.bp3-intent-warning:hover, .bp3-button.bp3-intent-warning:active, .bp3-button.bp3-intent-warning.bp3-active{ + color:#ffffff; } + .bp3-button.bp3-intent-warning:hover{ + background-color:#bf7326; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-warning:active, .bp3-button.bp3-intent-warning.bp3-active{ + background-color:#a66321; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-warning:disabled, .bp3-button.bp3-intent-warning.bp3-disabled{ + background-color:rgba(217, 130, 43, 0.5); + background-image:none; + border-color:transparent; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(255, 255, 255, 0.6); } + .bp3-button.bp3-intent-danger{ + background-color:#db3737; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + color:#ffffff; } + .bp3-button.bp3-intent-danger:hover, .bp3-button.bp3-intent-danger:active, .bp3-button.bp3-intent-danger.bp3-active{ + color:#ffffff; } + .bp3-button.bp3-intent-danger:hover{ + background-color:#c23030; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-danger:active, .bp3-button.bp3-intent-danger.bp3-active{ + background-color:#a82a2a; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-button.bp3-intent-danger:disabled, .bp3-button.bp3-intent-danger.bp3-disabled{ + background-color:rgba(219, 55, 55, 0.5); + background-image:none; + border-color:transparent; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(255, 255, 255, 0.6); } + .bp3-button[class*="bp3-intent-"] .bp3-button-spinner .bp3-spinner-head{ + stroke:#ffffff; } + .bp3-button.bp3-large, + .bp3-large .bp3-button{ + min-height:40px; + min-width:40px; + font-size:16px; + padding:5px 15px; } + .bp3-button.bp3-large::before, + .bp3-button.bp3-large > *, + .bp3-large .bp3-button::before, + .bp3-large .bp3-button > *{ + margin-right:10px; } + .bp3-button.bp3-large:empty::before, + .bp3-button.bp3-large > :last-child, + .bp3-large .bp3-button:empty::before, + .bp3-large .bp3-button > :last-child{ + margin-right:0; } + .bp3-button.bp3-small, + .bp3-small .bp3-button{ + min-height:24px; + min-width:24px; + padding:0 7px; } + .bp3-button.bp3-loading{ + position:relative; } + .bp3-button.bp3-loading[class*="bp3-icon-"]::before{ + visibility:hidden; } + .bp3-button.bp3-loading .bp3-button-spinner{ + margin:0; + position:absolute; } + .bp3-button.bp3-loading > :not(.bp3-button-spinner){ + visibility:hidden; } + .bp3-button[class*="bp3-icon-"]::before{ + font-family:"Icons16", sans-serif; + font-size:16px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + color:#5c7080; } + .bp3-button .bp3-icon, .bp3-button .bp3-icon-standard, .bp3-button .bp3-icon-large{ + color:#5c7080; } + .bp3-button .bp3-icon.bp3-align-right, .bp3-button .bp3-icon-standard.bp3-align-right, .bp3-button .bp3-icon-large.bp3-align-right{ + margin-left:7px; } + .bp3-button .bp3-icon:first-child:last-child, + .bp3-button .bp3-spinner + .bp3-icon:last-child{ + margin:0 -7px; } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]){ + background-color:#394b59; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0)); + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]):hover, .bp3-dark .bp3-button:not([class*="bp3-intent-"]):active, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-active{ + color:#f5f8fa; } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]):hover{ + background-color:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]):active, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-active{ + background-color:#202b33; + background-image:none; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]):disabled, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-disabled{ + background-color:rgba(57, 75, 89, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]):disabled.bp3-active, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-disabled.bp3-active{ + background:rgba(57, 75, 89, 0.7); } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-button-spinner .bp3-spinner-head{ + background:rgba(16, 22, 26, 0.5); + stroke:#8a9ba8; } + .bp3-dark .bp3-button:not([class*="bp3-intent-"])[class*="bp3-icon-"]::before{ + color:#a7b6c2; } + .bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-icon, .bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-icon-standard, .bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-icon-large{ + color:#a7b6c2; } + .bp3-dark .bp3-button[class*="bp3-intent-"]{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-button[class*="bp3-intent-"]:hover{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-button[class*="bp3-intent-"]:active, .bp3-dark .bp3-button[class*="bp3-intent-"].bp3-active{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-button[class*="bp3-intent-"]:disabled, .bp3-dark .bp3-button[class*="bp3-intent-"].bp3-disabled{ + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(255, 255, 255, 0.3); } + .bp3-dark .bp3-button[class*="bp3-intent-"] .bp3-button-spinner .bp3-spinner-head{ + stroke:#8a9ba8; } + .bp3-button:disabled::before, + .bp3-button:disabled .bp3-icon, .bp3-button:disabled .bp3-icon-standard, .bp3-button:disabled .bp3-icon-large, .bp3-button.bp3-disabled::before, + .bp3-button.bp3-disabled .bp3-icon, .bp3-button.bp3-disabled .bp3-icon-standard, .bp3-button.bp3-disabled .bp3-icon-large, .bp3-button[class*="bp3-intent-"]::before, + .bp3-button[class*="bp3-intent-"] .bp3-icon, .bp3-button[class*="bp3-intent-"] .bp3-icon-standard, .bp3-button[class*="bp3-intent-"] .bp3-icon-large{ + color:inherit !important; } + .bp3-button.bp3-minimal{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-button.bp3-minimal:hover{ + background:rgba(167, 182, 194, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; + text-decoration:none; } + .bp3-button.bp3-minimal:active, .bp3-button.bp3-minimal.bp3-active{ + background:rgba(115, 134, 148, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; } + .bp3-button.bp3-minimal:disabled, .bp3-button.bp3-minimal:disabled:hover, .bp3-button.bp3-minimal.bp3-disabled, .bp3-button.bp3-minimal.bp3-disabled:hover{ + background:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + .bp3-button.bp3-minimal:disabled.bp3-active, .bp3-button.bp3-minimal:disabled:hover.bp3-active, .bp3-button.bp3-minimal.bp3-disabled.bp3-active, .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{ + background:rgba(115, 134, 148, 0.3); } + .bp3-dark .bp3-button.bp3-minimal{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:inherit; } + .bp3-dark .bp3-button.bp3-minimal:hover, .bp3-dark .bp3-button.bp3-minimal:active, .bp3-dark .bp3-button.bp3-minimal.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-button.bp3-minimal:hover{ + background:rgba(138, 155, 168, 0.15); } + .bp3-dark .bp3-button.bp3-minimal:active, .bp3-dark .bp3-button.bp3-minimal.bp3-active{ + background:rgba(138, 155, 168, 0.3); + color:#f5f8fa; } + .bp3-dark .bp3-button.bp3-minimal:disabled, .bp3-dark .bp3-button.bp3-minimal:disabled:hover, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{ + background:none; + color:rgba(167, 182, 194, 0.6); + cursor:not-allowed; } + .bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{ + background:rgba(138, 155, 168, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-primary{ + color:#106ba3; } + .bp3-button.bp3-minimal.bp3-intent-primary:hover, .bp3-button.bp3-minimal.bp3-intent-primary:active, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#106ba3; } + .bp3-button.bp3-minimal.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.15); + color:#106ba3; } + .bp3-button.bp3-minimal.bp3-intent-primary:active, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#106ba3; } + .bp3-button.bp3-minimal.bp3-intent-primary:disabled, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(16, 107, 163, 0.5); } + .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{ + stroke:#106ba3; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{ + color:#48aff0; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.2); + color:#48aff0; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#48aff0; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(72, 175, 240, 0.5); } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-success{ + color:#0d8050; } + .bp3-button.bp3-minimal.bp3-intent-success:hover, .bp3-button.bp3-minimal.bp3-intent-success:active, .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#0d8050; } + .bp3-button.bp3-minimal.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.15); + color:#0d8050; } + .bp3-button.bp3-minimal.bp3-intent-success:active, .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#0d8050; } + .bp3-button.bp3-minimal.bp3-intent-success:disabled, .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(13, 128, 80, 0.5); } + .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{ + stroke:#0d8050; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{ + color:#3dcc91; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.2); + color:#3dcc91; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#3dcc91; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(61, 204, 145, 0.5); } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-warning{ + color:#bf7326; } + .bp3-button.bp3-minimal.bp3-intent-warning:hover, .bp3-button.bp3-minimal.bp3-intent-warning:active, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#bf7326; } + .bp3-button.bp3-minimal.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.15); + color:#bf7326; } + .bp3-button.bp3-minimal.bp3-intent-warning:active, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#bf7326; } + .bp3-button.bp3-minimal.bp3-intent-warning:disabled, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(191, 115, 38, 0.5); } + .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{ + stroke:#bf7326; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{ + color:#ffb366; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.2); + color:#ffb366; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#ffb366; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(255, 179, 102, 0.5); } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-danger{ + color:#c23030; } + .bp3-button.bp3-minimal.bp3-intent-danger:hover, .bp3-button.bp3-minimal.bp3-intent-danger:active, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#c23030; } + .bp3-button.bp3-minimal.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.15); + color:#c23030; } + .bp3-button.bp3-minimal.bp3-intent-danger:active, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#c23030; } + .bp3-button.bp3-minimal.bp3-intent-danger:disabled, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(194, 48, 48, 0.5); } + .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + .bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{ + stroke:#c23030; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{ + color:#ff7373; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.2); + color:#ff7373; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#ff7373; } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(255, 115, 115, 0.5); } + .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + .bp3-button.bp3-outlined{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + border:1px solid rgba(24, 32, 38, 0.2); + -webkit-box-sizing:border-box; + box-sizing:border-box; } + .bp3-button.bp3-outlined:hover{ + background:rgba(167, 182, 194, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; + text-decoration:none; } + .bp3-button.bp3-outlined:active, .bp3-button.bp3-outlined.bp3-active{ + background:rgba(115, 134, 148, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; } + .bp3-button.bp3-outlined:disabled, .bp3-button.bp3-outlined:disabled:hover, .bp3-button.bp3-outlined.bp3-disabled, .bp3-button.bp3-outlined.bp3-disabled:hover{ + background:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + .bp3-button.bp3-outlined:disabled.bp3-active, .bp3-button.bp3-outlined:disabled:hover.bp3-active, .bp3-button.bp3-outlined.bp3-disabled.bp3-active, .bp3-button.bp3-outlined.bp3-disabled:hover.bp3-active{ + background:rgba(115, 134, 148, 0.3); } + .bp3-dark .bp3-button.bp3-outlined{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:inherit; } + .bp3-dark .bp3-button.bp3-outlined:hover, .bp3-dark .bp3-button.bp3-outlined:active, .bp3-dark .bp3-button.bp3-outlined.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-button.bp3-outlined:hover{ + background:rgba(138, 155, 168, 0.15); } + .bp3-dark .bp3-button.bp3-outlined:active, .bp3-dark .bp3-button.bp3-outlined.bp3-active{ + background:rgba(138, 155, 168, 0.3); + color:#f5f8fa; } + .bp3-dark .bp3-button.bp3-outlined:disabled, .bp3-dark .bp3-button.bp3-outlined:disabled:hover, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover{ + background:none; + color:rgba(167, 182, 194, 0.6); + cursor:not-allowed; } + .bp3-dark .bp3-button.bp3-outlined:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined:disabled:hover.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover.bp3-active{ + background:rgba(138, 155, 168, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-primary{ + color:#106ba3; } + .bp3-button.bp3-outlined.bp3-intent-primary:hover, .bp3-button.bp3-outlined.bp3-intent-primary:active, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#106ba3; } + .bp3-button.bp3-outlined.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.15); + color:#106ba3; } + .bp3-button.bp3-outlined.bp3-intent-primary:active, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#106ba3; } + .bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(16, 107, 163, 0.5); } + .bp3-button.bp3-outlined.bp3-intent-primary:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{ + stroke:#106ba3; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary{ + color:#48aff0; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.2); + color:#48aff0; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#48aff0; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(72, 175, 240, 0.5); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-success{ + color:#0d8050; } + .bp3-button.bp3-outlined.bp3-intent-success:hover, .bp3-button.bp3-outlined.bp3-intent-success:active, .bp3-button.bp3-outlined.bp3-intent-success.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#0d8050; } + .bp3-button.bp3-outlined.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.15); + color:#0d8050; } + .bp3-button.bp3-outlined.bp3-intent-success:active, .bp3-button.bp3-outlined.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#0d8050; } + .bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(13, 128, 80, 0.5); } + .bp3-button.bp3-outlined.bp3-intent-success:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{ + stroke:#0d8050; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success{ + color:#3dcc91; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.2); + color:#3dcc91; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#3dcc91; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(61, 204, 145, 0.5); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-warning{ + color:#bf7326; } + .bp3-button.bp3-outlined.bp3-intent-warning:hover, .bp3-button.bp3-outlined.bp3-intent-warning:active, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#bf7326; } + .bp3-button.bp3-outlined.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.15); + color:#bf7326; } + .bp3-button.bp3-outlined.bp3-intent-warning:active, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#bf7326; } + .bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(191, 115, 38, 0.5); } + .bp3-button.bp3-outlined.bp3-intent-warning:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{ + stroke:#bf7326; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning{ + color:#ffb366; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.2); + color:#ffb366; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#ffb366; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(255, 179, 102, 0.5); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-danger{ + color:#c23030; } + .bp3-button.bp3-outlined.bp3-intent-danger:hover, .bp3-button.bp3-outlined.bp3-intent-danger:active, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#c23030; } + .bp3-button.bp3-outlined.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.15); + color:#c23030; } + .bp3-button.bp3-outlined.bp3-intent-danger:active, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#c23030; } + .bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(194, 48, 48, 0.5); } + .bp3-button.bp3-outlined.bp3-intent-danger:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + .bp3-button.bp3-outlined.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{ + stroke:#c23030; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger{ + color:#ff7373; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.2); + color:#ff7373; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#ff7373; } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(255, 115, 115, 0.5); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + .bp3-button.bp3-outlined:disabled, .bp3-button.bp3-outlined.bp3-disabled, .bp3-button.bp3-outlined:disabled:hover, .bp3-button.bp3-outlined.bp3-disabled:hover{ + border-color:rgba(92, 112, 128, 0.1); } + .bp3-dark .bp3-button.bp3-outlined{ + border-color:rgba(255, 255, 255, 0.4); } + .bp3-dark .bp3-button.bp3-outlined:disabled, .bp3-dark .bp3-button.bp3-outlined:disabled:hover, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover{ + border-color:rgba(255, 255, 255, 0.2); } + .bp3-button.bp3-outlined.bp3-intent-primary{ + border-color:rgba(16, 107, 163, 0.6); } + .bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{ + border-color:rgba(16, 107, 163, 0.2); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary{ + border-color:rgba(72, 175, 240, 0.6); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{ + border-color:rgba(72, 175, 240, 0.2); } + .bp3-button.bp3-outlined.bp3-intent-success{ + border-color:rgba(13, 128, 80, 0.6); } + .bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{ + border-color:rgba(13, 128, 80, 0.2); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success{ + border-color:rgba(61, 204, 145, 0.6); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{ + border-color:rgba(61, 204, 145, 0.2); } + .bp3-button.bp3-outlined.bp3-intent-warning{ + border-color:rgba(191, 115, 38, 0.6); } + .bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{ + border-color:rgba(191, 115, 38, 0.2); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning{ + border-color:rgba(255, 179, 102, 0.6); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{ + border-color:rgba(255, 179, 102, 0.2); } + .bp3-button.bp3-outlined.bp3-intent-danger{ + border-color:rgba(194, 48, 48, 0.6); } + .bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{ + border-color:rgba(194, 48, 48, 0.2); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger{ + border-color:rgba(255, 115, 115, 0.6); } + .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{ + border-color:rgba(255, 115, 115, 0.2); } + +a.bp3-button{ + text-align:center; + text-decoration:none; + -webkit-transition:none; + transition:none; } + a.bp3-button, a.bp3-button:hover, a.bp3-button:active{ + color:#182026; } + a.bp3-button.bp3-disabled{ + color:rgba(92, 112, 128, 0.6); } + +.bp3-button-text{ + -webkit-box-flex:0; + -ms-flex:0 1 auto; + flex:0 1 auto; } + +.bp3-button.bp3-align-left .bp3-button-text, .bp3-button.bp3-align-right .bp3-button-text, +.bp3-button-group.bp3-align-left .bp3-button-text, +.bp3-button-group.bp3-align-right .bp3-button-text{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; } +.bp3-button-group{ + display:-webkit-inline-box; + display:-ms-inline-flexbox; + display:inline-flex; } + .bp3-button-group .bp3-button{ + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + position:relative; + z-index:4; } + .bp3-button-group .bp3-button:focus{ + z-index:5; } + .bp3-button-group .bp3-button:hover{ + z-index:6; } + .bp3-button-group .bp3-button:active, .bp3-button-group .bp3-button.bp3-active{ + z-index:7; } + .bp3-button-group .bp3-button:disabled, .bp3-button-group .bp3-button.bp3-disabled{ + z-index:3; } + .bp3-button-group .bp3-button[class*="bp3-intent-"]{ + z-index:9; } + .bp3-button-group .bp3-button[class*="bp3-intent-"]:focus{ + z-index:10; } + .bp3-button-group .bp3-button[class*="bp3-intent-"]:hover{ + z-index:11; } + .bp3-button-group .bp3-button[class*="bp3-intent-"]:active, .bp3-button-group .bp3-button[class*="bp3-intent-"].bp3-active{ + z-index:12; } + .bp3-button-group .bp3-button[class*="bp3-intent-"]:disabled, .bp3-button-group .bp3-button[class*="bp3-intent-"].bp3-disabled{ + z-index:8; } + .bp3-button-group:not(.bp3-minimal) > .bp3-popover-wrapper:not(:first-child) .bp3-button, + .bp3-button-group:not(.bp3-minimal) > .bp3-button:not(:first-child){ + border-bottom-left-radius:0; + border-top-left-radius:0; } + .bp3-button-group:not(.bp3-minimal) > .bp3-popover-wrapper:not(:last-child) .bp3-button, + .bp3-button-group:not(.bp3-minimal) > .bp3-button:not(:last-child){ + border-bottom-right-radius:0; + border-top-right-radius:0; + margin-right:-1px; } + .bp3-button-group.bp3-minimal .bp3-button{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-button-group.bp3-minimal .bp3-button:hover{ + background:rgba(167, 182, 194, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; + text-decoration:none; } + .bp3-button-group.bp3-minimal .bp3-button:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-active{ + background:rgba(115, 134, 148, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; } + .bp3-button-group.bp3-minimal .bp3-button:disabled, .bp3-button-group.bp3-minimal .bp3-button:disabled:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{ + background:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{ + background:rgba(115, 134, 148, 0.3); } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:inherit; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{ + background:rgba(138, 155, 168, 0.15); } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{ + background:rgba(138, 155, 168, 0.3); + color:#f5f8fa; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{ + background:none; + color:rgba(167, 182, 194, 0.6); + cursor:not-allowed; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{ + background:rgba(138, 155, 168, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{ + color:#106ba3; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#106ba3; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.15); + color:#106ba3; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#106ba3; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(16, 107, 163, 0.5); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{ + stroke:#106ba3; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{ + color:#48aff0; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.2); + color:#48aff0; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#48aff0; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(72, 175, 240, 0.5); } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{ + color:#0d8050; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#0d8050; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.15); + color:#0d8050; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#0d8050; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(13, 128, 80, 0.5); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{ + stroke:#0d8050; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{ + color:#3dcc91; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.2); + color:#3dcc91; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#3dcc91; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(61, 204, 145, 0.5); } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{ + color:#bf7326; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#bf7326; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.15); + color:#bf7326; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#bf7326; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(191, 115, 38, 0.5); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{ + stroke:#bf7326; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{ + color:#ffb366; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.2); + color:#ffb366; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#ffb366; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(255, 179, 102, 0.5); } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{ + color:#c23030; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#c23030; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.15); + color:#c23030; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#c23030; } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(194, 48, 48, 0.5); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{ + stroke:#c23030; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{ + color:#ff7373; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.2); + color:#ff7373; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#ff7373; } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(255, 115, 115, 0.5); } + .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + .bp3-button-group .bp3-popover-wrapper, + .bp3-button-group .bp3-popover-target{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; } + .bp3-button-group.bp3-fill{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + width:100%; } + .bp3-button-group .bp3-button.bp3-fill, + .bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; } + .bp3-button-group.bp3-vertical{ + -webkit-box-align:stretch; + -ms-flex-align:stretch; + align-items:stretch; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + vertical-align:top; } + .bp3-button-group.bp3-vertical.bp3-fill{ + height:100%; + width:unset; } + .bp3-button-group.bp3-vertical .bp3-button{ + margin-right:0 !important; + width:100%; } + .bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-popover-wrapper:first-child .bp3-button, + .bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-button:first-child{ + border-radius:3px 3px 0 0; } + .bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-popover-wrapper:last-child .bp3-button, + .bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-button:last-child{ + border-radius:0 0 3px 3px; } + .bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-popover-wrapper:not(:last-child) .bp3-button, + .bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-button:not(:last-child){ + margin-bottom:-1px; } + .bp3-button-group.bp3-align-left .bp3-button{ + text-align:left; } + .bp3-dark .bp3-button-group:not(.bp3-minimal) > .bp3-popover-wrapper:not(:last-child) .bp3-button, + .bp3-dark .bp3-button-group:not(.bp3-minimal) > .bp3-button:not(:last-child){ + margin-right:1px; } + .bp3-dark .bp3-button-group.bp3-vertical > .bp3-popover-wrapper:not(:last-child) .bp3-button, + .bp3-dark .bp3-button-group.bp3-vertical > .bp3-button:not(:last-child){ + margin-bottom:1px; } +.bp3-callout{ + font-size:14px; + line-height:1.5; + background-color:rgba(138, 155, 168, 0.15); + border-radius:3px; + padding:10px 12px 9px; + position:relative; + width:100%; } + .bp3-callout[class*="bp3-icon-"]{ + padding-left:40px; } + .bp3-callout[class*="bp3-icon-"]::before{ + font-family:"Icons20", sans-serif; + font-size:20px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + color:#5c7080; + left:10px; + position:absolute; + top:10px; } + .bp3-callout.bp3-callout-icon{ + padding-left:40px; } + .bp3-callout.bp3-callout-icon > .bp3-icon:first-child{ + color:#5c7080; + left:10px; + position:absolute; + top:10px; } + .bp3-callout .bp3-heading{ + line-height:20px; + margin-bottom:5px; + margin-top:0; } + .bp3-callout .bp3-heading:last-child{ + margin-bottom:0; } + .bp3-dark .bp3-callout{ + background-color:rgba(138, 155, 168, 0.2); } + .bp3-dark .bp3-callout[class*="bp3-icon-"]::before{ + color:#a7b6c2; } + .bp3-callout.bp3-intent-primary{ + background-color:rgba(19, 124, 189, 0.15); } + .bp3-callout.bp3-intent-primary[class*="bp3-icon-"]::before, + .bp3-callout.bp3-intent-primary > .bp3-icon:first-child, + .bp3-callout.bp3-intent-primary .bp3-heading{ + color:#106ba3; } + .bp3-dark .bp3-callout.bp3-intent-primary{ + background-color:rgba(19, 124, 189, 0.25); } + .bp3-dark .bp3-callout.bp3-intent-primary[class*="bp3-icon-"]::before, + .bp3-dark .bp3-callout.bp3-intent-primary > .bp3-icon:first-child, + .bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{ + color:#48aff0; } + .bp3-callout.bp3-intent-success{ + background-color:rgba(15, 153, 96, 0.15); } + .bp3-callout.bp3-intent-success[class*="bp3-icon-"]::before, + .bp3-callout.bp3-intent-success > .bp3-icon:first-child, + .bp3-callout.bp3-intent-success .bp3-heading{ + color:#0d8050; } + .bp3-dark .bp3-callout.bp3-intent-success{ + background-color:rgba(15, 153, 96, 0.25); } + .bp3-dark .bp3-callout.bp3-intent-success[class*="bp3-icon-"]::before, + .bp3-dark .bp3-callout.bp3-intent-success > .bp3-icon:first-child, + .bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{ + color:#3dcc91; } + .bp3-callout.bp3-intent-warning{ + background-color:rgba(217, 130, 43, 0.15); } + .bp3-callout.bp3-intent-warning[class*="bp3-icon-"]::before, + .bp3-callout.bp3-intent-warning > .bp3-icon:first-child, + .bp3-callout.bp3-intent-warning .bp3-heading{ + color:#bf7326; } + .bp3-dark .bp3-callout.bp3-intent-warning{ + background-color:rgba(217, 130, 43, 0.25); } + .bp3-dark .bp3-callout.bp3-intent-warning[class*="bp3-icon-"]::before, + .bp3-dark .bp3-callout.bp3-intent-warning > .bp3-icon:first-child, + .bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{ + color:#ffb366; } + .bp3-callout.bp3-intent-danger{ + background-color:rgba(219, 55, 55, 0.15); } + .bp3-callout.bp3-intent-danger[class*="bp3-icon-"]::before, + .bp3-callout.bp3-intent-danger > .bp3-icon:first-child, + .bp3-callout.bp3-intent-danger .bp3-heading{ + color:#c23030; } + .bp3-dark .bp3-callout.bp3-intent-danger{ + background-color:rgba(219, 55, 55, 0.25); } + .bp3-dark .bp3-callout.bp3-intent-danger[class*="bp3-icon-"]::before, + .bp3-dark .bp3-callout.bp3-intent-danger > .bp3-icon:first-child, + .bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{ + color:#ff7373; } + .bp3-running-text .bp3-callout{ + margin:20px 0; } +.bp3-card{ + background-color:#ffffff; + border-radius:3px; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); + padding:20px; + -webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-card.bp3-dark, + .bp3-dark .bp3-card{ + background-color:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); } + +.bp3-elevation-0{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); } + .bp3-elevation-0.bp3-dark, + .bp3-dark .bp3-elevation-0{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); } + +.bp3-elevation-1{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-elevation-1.bp3-dark, + .bp3-dark .bp3-elevation-1{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); } + +.bp3-elevation-2{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 1px 1px rgba(16, 22, 26, 0.2), 0 2px 6px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 1px 1px rgba(16, 22, 26, 0.2), 0 2px 6px rgba(16, 22, 26, 0.2); } + .bp3-elevation-2.bp3-dark, + .bp3-dark .bp3-elevation-2{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.4), 0 2px 6px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.4), 0 2px 6px rgba(16, 22, 26, 0.4); } + +.bp3-elevation-3{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); } + .bp3-elevation-3.bp3-dark, + .bp3-dark .bp3-elevation-3{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); } + +.bp3-elevation-4{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); } + .bp3-elevation-4.bp3-dark, + .bp3-dark .bp3-elevation-4{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); } + +.bp3-card.bp3-interactive:hover{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + cursor:pointer; } + .bp3-card.bp3-interactive:hover.bp3-dark, + .bp3-dark .bp3-card.bp3-interactive:hover{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); } + +.bp3-card.bp3-interactive:active{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); + opacity:0.9; + -webkit-transition-duration:0; + transition-duration:0; } + .bp3-card.bp3-interactive:active.bp3-dark, + .bp3-dark .bp3-card.bp3-interactive:active{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); } + +.bp3-collapse{ + height:0; + overflow-y:hidden; + -webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-collapse .bp3-collapse-body{ + -webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-collapse .bp3-collapse-body[aria-hidden="true"]{ + display:none; } + +.bp3-context-menu .bp3-popover-target{ + display:block; } + +.bp3-context-menu-popover-target{ + position:fixed; } + +.bp3-divider{ + border-bottom:1px solid rgba(16, 22, 26, 0.15); + border-right:1px solid rgba(16, 22, 26, 0.15); + margin:5px; } + .bp3-dark .bp3-divider{ + border-color:rgba(16, 22, 26, 0.4); } +.bp3-dialog-container{ + opacity:1; + -webkit-transform:scale(1); + transform:scale(1); + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-pack:center; + -ms-flex-pack:center; + justify-content:center; + min-height:100%; + pointer-events:none; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; + width:100%; } + .bp3-dialog-container.bp3-overlay-enter > .bp3-dialog, .bp3-dialog-container.bp3-overlay-appear > .bp3-dialog{ + opacity:0; + -webkit-transform:scale(0.5); + transform:scale(0.5); } + .bp3-dialog-container.bp3-overlay-enter-active > .bp3-dialog, .bp3-dialog-container.bp3-overlay-appear-active > .bp3-dialog{ + opacity:1; + -webkit-transform:scale(1); + transform:scale(1); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:300ms; + transition-duration:300ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:opacity, transform; + transition-property:opacity, transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); + transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); } + .bp3-dialog-container.bp3-overlay-exit > .bp3-dialog{ + opacity:1; + -webkit-transform:scale(1); + transform:scale(1); } + .bp3-dialog-container.bp3-overlay-exit-active > .bp3-dialog{ + opacity:0; + -webkit-transform:scale(0.5); + transform:scale(0.5); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:300ms; + transition-duration:300ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:opacity, transform; + transition-property:opacity, transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); + transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); } + +.bp3-dialog{ + background:#ebf1f5; + border-radius:6px; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + margin:30px 0; + padding-bottom:20px; + pointer-events:all; + -webkit-user-select:text; + -moz-user-select:text; + -ms-user-select:text; + user-select:text; + width:500px; } + .bp3-dialog:focus{ + outline:0; } + .bp3-dialog.bp3-dark, + .bp3-dark .bp3-dialog{ + background:#293742; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + +.bp3-dialog-header{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + background:#ffffff; + border-radius:6px 6px 0 0; + -webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.15); + box-shadow:0 1px 0 rgba(16, 22, 26, 0.15); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + min-height:40px; + padding-left:20px; + padding-right:5px; + z-index:30; } + .bp3-dialog-header .bp3-icon-large, + .bp3-dialog-header .bp3-icon{ + color:#5c7080; + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + margin-right:10px; } + .bp3-dialog-header .bp3-heading{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + line-height:inherit; + margin:0; } + .bp3-dialog-header .bp3-heading:last-child{ + margin-right:20px; } + .bp3-dark .bp3-dialog-header{ + background:#30404d; + -webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.4); + box-shadow:0 1px 0 rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-dialog-header .bp3-icon-large, + .bp3-dark .bp3-dialog-header .bp3-icon{ + color:#a7b6c2; } + +.bp3-dialog-body{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + line-height:18px; + margin:20px; } + +.bp3-dialog-footer{ + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + margin:0 20px; } + +.bp3-dialog-footer-actions{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-pack:end; + -ms-flex-pack:end; + justify-content:flex-end; } + .bp3-dialog-footer-actions .bp3-button{ + margin-left:10px; } +.bp3-multistep-dialog-panels{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; } + +.bp3-multistep-dialog-left-panel{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-flex:1; + -ms-flex:1; + flex:1; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; } + .bp3-dark .bp3-multistep-dialog-left-panel{ + background:#202b33; } + +.bp3-multistep-dialog-right-panel{ + background-color:#f5f8fa; + border-left:1px solid rgba(16, 22, 26, 0.15); + border-radius:0 0 6px 0; + -webkit-box-flex:3; + -ms-flex:3; + flex:3; + min-width:0; } + .bp3-dark .bp3-multistep-dialog-right-panel{ + background-color:#293742; + border-left:1px solid rgba(16, 22, 26, 0.4); } + +.bp3-multistep-dialog-footer{ + background-color:#ffffff; + border-radius:0 0 6px 0; + border-top:1px solid rgba(16, 22, 26, 0.15); + padding:10px; } + .bp3-dark .bp3-multistep-dialog-footer{ + background:#30404d; + border-top:1px solid rgba(16, 22, 26, 0.4); } + +.bp3-dialog-step-container{ + background-color:#f5f8fa; + border-bottom:1px solid rgba(16, 22, 26, 0.15); } + .bp3-dark .bp3-dialog-step-container{ + background:#293742; + border-bottom:1px solid rgba(16, 22, 26, 0.4); } + .bp3-dialog-step-container.bp3-dialog-step-viewed{ + background-color:#ffffff; } + .bp3-dark .bp3-dialog-step-container.bp3-dialog-step-viewed{ + background:#30404d; } + +.bp3-dialog-step{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + background-color:#f5f8fa; + border-radius:6px; + cursor:not-allowed; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + margin:4px; + padding:6px 14px; } + .bp3-dark .bp3-dialog-step{ + background:#293742; } + .bp3-dialog-step-viewed .bp3-dialog-step{ + background-color:#ffffff; + cursor:pointer; } + .bp3-dark .bp3-dialog-step-viewed .bp3-dialog-step{ + background:#30404d; } + .bp3-dialog-step:hover{ + background-color:#f5f8fa; } + .bp3-dark .bp3-dialog-step:hover{ + background:#293742; } + +.bp3-dialog-step-icon{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + background-color:rgba(92, 112, 128, 0.6); + border-radius:50%; + color:#ffffff; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + height:25px; + -webkit-box-pack:center; + -ms-flex-pack:center; + justify-content:center; + width:25px; } + .bp3-dark .bp3-dialog-step-icon{ + background-color:rgba(167, 182, 194, 0.6); } + .bp3-active.bp3-dialog-step-viewed .bp3-dialog-step-icon{ + background-color:#2b95d6; } + .bp3-dialog-step-viewed .bp3-dialog-step-icon{ + background-color:#8a9ba8; } + +.bp3-dialog-step-title{ + color:rgba(92, 112, 128, 0.6); + -webkit-box-flex:1; + -ms-flex:1; + flex:1; + padding-left:10px; } + .bp3-dark .bp3-dialog-step-title{ + color:rgba(167, 182, 194, 0.6); } + .bp3-active.bp3-dialog-step-viewed .bp3-dialog-step-title{ + color:#2b95d6; } + .bp3-dialog-step-viewed:not(.bp3-active) .bp3-dialog-step-title{ + color:#182026; } + .bp3-dark .bp3-dialog-step-viewed:not(.bp3-active) .bp3-dialog-step-title{ + color:#f5f8fa; } +.bp3-drawer{ + background:#ffffff; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + margin:0; + padding:0; } + .bp3-drawer:focus{ + outline:0; } + .bp3-drawer.bp3-position-top{ + height:50%; + left:0; + right:0; + top:0; } + .bp3-drawer.bp3-position-top.bp3-overlay-enter, .bp3-drawer.bp3-position-top.bp3-overlay-appear{ + -webkit-transform:translateY(-100%); + transform:translateY(-100%); } + .bp3-drawer.bp3-position-top.bp3-overlay-enter-active, .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{ + -webkit-transform:translateY(0); + transform:translateY(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-position-top.bp3-overlay-exit{ + -webkit-transform:translateY(0); + transform:translateY(0); } + .bp3-drawer.bp3-position-top.bp3-overlay-exit-active{ + -webkit-transform:translateY(-100%); + transform:translateY(-100%); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-position-bottom{ + bottom:0; + height:50%; + left:0; + right:0; } + .bp3-drawer.bp3-position-bottom.bp3-overlay-enter, .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{ + -webkit-transform:translateY(100%); + transform:translateY(100%); } + .bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active, .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{ + -webkit-transform:translateY(0); + transform:translateY(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-position-bottom.bp3-overlay-exit{ + -webkit-transform:translateY(0); + transform:translateY(0); } + .bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{ + -webkit-transform:translateY(100%); + transform:translateY(100%); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-position-left{ + bottom:0; + left:0; + top:0; + width:50%; } + .bp3-drawer.bp3-position-left.bp3-overlay-enter, .bp3-drawer.bp3-position-left.bp3-overlay-appear{ + -webkit-transform:translateX(-100%); + transform:translateX(-100%); } + .bp3-drawer.bp3-position-left.bp3-overlay-enter-active, .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{ + -webkit-transform:translateX(0); + transform:translateX(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-position-left.bp3-overlay-exit{ + -webkit-transform:translateX(0); + transform:translateX(0); } + .bp3-drawer.bp3-position-left.bp3-overlay-exit-active{ + -webkit-transform:translateX(-100%); + transform:translateX(-100%); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-position-right{ + bottom:0; + right:0; + top:0; + width:50%; } + .bp3-drawer.bp3-position-right.bp3-overlay-enter, .bp3-drawer.bp3-position-right.bp3-overlay-appear{ + -webkit-transform:translateX(100%); + transform:translateX(100%); } + .bp3-drawer.bp3-position-right.bp3-overlay-enter-active, .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{ + -webkit-transform:translateX(0); + transform:translateX(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-position-right.bp3-overlay-exit{ + -webkit-transform:translateX(0); + transform:translateX(0); } + .bp3-drawer.bp3-position-right.bp3-overlay-exit-active{ + -webkit-transform:translateX(100%); + transform:translateX(100%); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right):not(.bp3-vertical){ + bottom:0; + right:0; + top:0; + width:50%; } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right):not(.bp3-vertical).bp3-overlay-enter, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{ + -webkit-transform:translateX(100%); + transform:translateX(100%); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{ + -webkit-transform:translateX(0); + transform:translateX(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{ + -webkit-transform:translateX(0); + transform:translateX(0); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{ + -webkit-transform:translateX(100%); + transform:translateX(100%); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right).bp3-vertical{ + bottom:0; + height:50%; + left:0; + right:0; } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right).bp3-vertical.bp3-overlay-enter, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right).bp3-vertical.bp3-overlay-appear{ + -webkit-transform:translateY(100%); + transform:translateY(100%); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right).bp3-vertical.bp3-overlay-enter-active, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right).bp3-vertical.bp3-overlay-appear-active{ + -webkit-transform:translateY(0); + transform:translateY(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right).bp3-vertical.bp3-overlay-exit{ + -webkit-transform:translateY(0); + transform:translateY(0); } + .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not( + .bp3-position-right).bp3-vertical.bp3-overlay-exit-active{ + -webkit-transform:translateY(100%); + transform:translateY(100%); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-drawer.bp3-dark, + .bp3-dark .bp3-drawer{ + background:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + +.bp3-drawer-header{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + border-radius:0; + -webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.15); + box-shadow:0 1px 0 rgba(16, 22, 26, 0.15); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + min-height:40px; + padding:5px; + padding-left:20px; + position:relative; } + .bp3-drawer-header .bp3-icon-large, + .bp3-drawer-header .bp3-icon{ + color:#5c7080; + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + margin-right:10px; } + .bp3-drawer-header .bp3-heading{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + line-height:inherit; + margin:0; } + .bp3-drawer-header .bp3-heading:last-child{ + margin-right:20px; } + .bp3-dark .bp3-drawer-header{ + -webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.4); + box-shadow:0 1px 0 rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-drawer-header .bp3-icon-large, + .bp3-dark .bp3-drawer-header .bp3-icon{ + color:#a7b6c2; } + +.bp3-drawer-body{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + line-height:18px; + overflow:auto; } + +.bp3-drawer-footer{ + -webkit-box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15); + box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15); + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + padding:10px 20px; + position:relative; } + .bp3-dark .bp3-drawer-footer{ + -webkit-box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.4); + box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.4); } +.bp3-editable-text{ + cursor:text; + display:inline-block; + max-width:100%; + position:relative; + vertical-align:top; + white-space:nowrap; } + .bp3-editable-text::before{ + bottom:-3px; + left:-3px; + position:absolute; + right:-3px; + top:-3px; + border-radius:3px; + content:""; + -webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-editable-text:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15); } + .bp3-editable-text.bp3-editable-text-editing::before{ + background-color:#ffffff; + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-editable-text.bp3-disabled::before{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-editable-text.bp3-intent-primary .bp3-editable-text-input, + .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{ + color:#137cbd; } + .bp3-editable-text.bp3-intent-primary:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(19, 124, 189, 0.4); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(19, 124, 189, 0.4); } + .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-editable-text.bp3-intent-success .bp3-editable-text-input, + .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{ + color:#0f9960; } + .bp3-editable-text.bp3-intent-success:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px rgba(15, 153, 96, 0.4); + box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px rgba(15, 153, 96, 0.4); } + .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-editable-text.bp3-intent-warning .bp3-editable-text-input, + .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{ + color:#d9822b; } + .bp3-editable-text.bp3-intent-warning:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px rgba(217, 130, 43, 0.4); + box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px rgba(217, 130, 43, 0.4); } + .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-editable-text.bp3-intent-danger .bp3-editable-text-input, + .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{ + color:#db3737; } + .bp3-editable-text.bp3-intent-danger:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px rgba(219, 55, 55, 0.4); + box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px rgba(219, 55, 55, 0.4); } + .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-editable-text:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(255, 255, 255, 0.15); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(255, 255, 255, 0.15); } + .bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{ + background-color:rgba(16, 22, 26, 0.3); + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-editable-text.bp3-disabled::before{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{ + color:#48aff0; } + .bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(72, 175, 240, 0), 0 0 0 0 rgba(72, 175, 240, 0), inset 0 0 0 1px rgba(72, 175, 240, 0.4); + box-shadow:0 0 0 0 rgba(72, 175, 240, 0), 0 0 0 0 rgba(72, 175, 240, 0), inset 0 0 0 1px rgba(72, 175, 240, 0.4); } + .bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #48aff0, 0 0 0 3px rgba(72, 175, 240, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #48aff0, 0 0 0 3px rgba(72, 175, 240, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{ + color:#3dcc91; } + .bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(61, 204, 145, 0), 0 0 0 0 rgba(61, 204, 145, 0), inset 0 0 0 1px rgba(61, 204, 145, 0.4); + box-shadow:0 0 0 0 rgba(61, 204, 145, 0), 0 0 0 0 rgba(61, 204, 145, 0), inset 0 0 0 1px rgba(61, 204, 145, 0.4); } + .bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #3dcc91, 0 0 0 3px rgba(61, 204, 145, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #3dcc91, 0 0 0 3px rgba(61, 204, 145, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{ + color:#ffb366; } + .bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(255, 179, 102, 0), 0 0 0 0 rgba(255, 179, 102, 0), inset 0 0 0 1px rgba(255, 179, 102, 0.4); + box-shadow:0 0 0 0 rgba(255, 179, 102, 0), 0 0 0 0 rgba(255, 179, 102, 0), inset 0 0 0 1px rgba(255, 179, 102, 0.4); } + .bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #ffb366, 0 0 0 3px rgba(255, 179, 102, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #ffb366, 0 0 0 3px rgba(255, 179, 102, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{ + color:#ff7373; } + .bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{ + -webkit-box-shadow:0 0 0 0 rgba(255, 115, 115, 0), 0 0 0 0 rgba(255, 115, 115, 0), inset 0 0 0 1px rgba(255, 115, 115, 0.4); + box-shadow:0 0 0 0 rgba(255, 115, 115, 0), 0 0 0 0 rgba(255, 115, 115, 0), inset 0 0 0 1px rgba(255, 115, 115, 0.4); } + .bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{ + -webkit-box-shadow:0 0 0 1px #ff7373, 0 0 0 3px rgba(255, 115, 115, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #ff7373, 0 0 0 3px rgba(255, 115, 115, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + +.bp3-editable-text-input, +.bp3-editable-text-content{ + color:inherit; + display:inherit; + font:inherit; + letter-spacing:inherit; + max-width:inherit; + min-width:inherit; + position:relative; + resize:none; + text-transform:inherit; + vertical-align:top; } + +.bp3-editable-text-input{ + background:none; + border:none; + -webkit-box-shadow:none; + box-shadow:none; + padding:0; + white-space:pre-wrap; + width:100%; } + .bp3-editable-text-input::-webkit-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-editable-text-input::-moz-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-editable-text-input:-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-editable-text-input::-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-editable-text-input::placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-editable-text-input:focus{ + outline:none; } + .bp3-editable-text-input::-ms-clear{ + display:none; } + +.bp3-editable-text-content{ + overflow:hidden; + padding-right:2px; + text-overflow:ellipsis; + white-space:pre; } + .bp3-editable-text-editing > .bp3-editable-text-content{ + left:0; + position:absolute; + visibility:hidden; } + .bp3-editable-text-placeholder > .bp3-editable-text-content{ + color:rgba(92, 112, 128, 0.6); } + .bp3-dark .bp3-editable-text-placeholder > .bp3-editable-text-content{ + color:rgba(167, 182, 194, 0.6); } + +.bp3-editable-text.bp3-multiline{ + display:block; } + .bp3-editable-text.bp3-multiline .bp3-editable-text-content{ + overflow:auto; + white-space:pre-wrap; + word-wrap:break-word; } +.bp3-divider{ + border-bottom:1px solid rgba(16, 22, 26, 0.15); + border-right:1px solid rgba(16, 22, 26, 0.15); + margin:5px; } + .bp3-dark .bp3-divider{ + border-color:rgba(16, 22, 26, 0.4); } +.bp3-control-group{ + -webkit-transform:translateZ(0); + transform:translateZ(0); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:stretch; + -ms-flex-align:stretch; + align-items:stretch; } + .bp3-control-group > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-control-group > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-control-group .bp3-button, + .bp3-control-group .bp3-html-select, + .bp3-control-group .bp3-input, + .bp3-control-group .bp3-select{ + position:relative; } + .bp3-control-group .bp3-input{ + border-radius:inherit; + z-index:2; } + .bp3-control-group .bp3-input:focus{ + border-radius:3px; + z-index:14; } + .bp3-control-group .bp3-input[class*="bp3-intent"]{ + z-index:13; } + .bp3-control-group .bp3-input[class*="bp3-intent"]:focus{ + z-index:15; } + .bp3-control-group .bp3-input[readonly], .bp3-control-group .bp3-input:disabled, .bp3-control-group .bp3-input.bp3-disabled{ + z-index:1; } + .bp3-control-group .bp3-input-group[class*="bp3-intent"] .bp3-input{ + z-index:13; } + .bp3-control-group .bp3-input-group[class*="bp3-intent"] .bp3-input:focus{ + z-index:15; } + .bp3-control-group .bp3-button, + .bp3-control-group .bp3-html-select select, + .bp3-control-group .bp3-select select{ + -webkit-transform:translateZ(0); + transform:translateZ(0); + border-radius:inherit; + z-index:4; } + .bp3-control-group .bp3-button:focus, + .bp3-control-group .bp3-html-select select:focus, + .bp3-control-group .bp3-select select:focus{ + z-index:5; } + .bp3-control-group .bp3-button:hover, + .bp3-control-group .bp3-html-select select:hover, + .bp3-control-group .bp3-select select:hover{ + z-index:6; } + .bp3-control-group .bp3-button:active, + .bp3-control-group .bp3-html-select select:active, + .bp3-control-group .bp3-select select:active{ + z-index:7; } + .bp3-control-group .bp3-button[readonly], .bp3-control-group .bp3-button:disabled, .bp3-control-group .bp3-button.bp3-disabled, + .bp3-control-group .bp3-html-select select[readonly], + .bp3-control-group .bp3-html-select select:disabled, + .bp3-control-group .bp3-html-select select.bp3-disabled, + .bp3-control-group .bp3-select select[readonly], + .bp3-control-group .bp3-select select:disabled, + .bp3-control-group .bp3-select select.bp3-disabled{ + z-index:3; } + .bp3-control-group .bp3-button[class*="bp3-intent"], + .bp3-control-group .bp3-html-select select[class*="bp3-intent"], + .bp3-control-group .bp3-select select[class*="bp3-intent"]{ + z-index:9; } + .bp3-control-group .bp3-button[class*="bp3-intent"]:focus, + .bp3-control-group .bp3-html-select select[class*="bp3-intent"]:focus, + .bp3-control-group .bp3-select select[class*="bp3-intent"]:focus{ + z-index:10; } + .bp3-control-group .bp3-button[class*="bp3-intent"]:hover, + .bp3-control-group .bp3-html-select select[class*="bp3-intent"]:hover, + .bp3-control-group .bp3-select select[class*="bp3-intent"]:hover{ + z-index:11; } + .bp3-control-group .bp3-button[class*="bp3-intent"]:active, + .bp3-control-group .bp3-html-select select[class*="bp3-intent"]:active, + .bp3-control-group .bp3-select select[class*="bp3-intent"]:active{ + z-index:12; } + .bp3-control-group .bp3-button[class*="bp3-intent"][readonly], .bp3-control-group .bp3-button[class*="bp3-intent"]:disabled, .bp3-control-group .bp3-button[class*="bp3-intent"].bp3-disabled, + .bp3-control-group .bp3-html-select select[class*="bp3-intent"][readonly], + .bp3-control-group .bp3-html-select select[class*="bp3-intent"]:disabled, + .bp3-control-group .bp3-html-select select[class*="bp3-intent"].bp3-disabled, + .bp3-control-group .bp3-select select[class*="bp3-intent"][readonly], + .bp3-control-group .bp3-select select[class*="bp3-intent"]:disabled, + .bp3-control-group .bp3-select select[class*="bp3-intent"].bp3-disabled{ + z-index:8; } + .bp3-control-group .bp3-input-group > .bp3-icon, + .bp3-control-group .bp3-input-group > .bp3-button, + .bp3-control-group .bp3-input-group > .bp3-input-left-container, + .bp3-control-group .bp3-input-group > .bp3-input-action{ + z-index:16; } + .bp3-control-group .bp3-select::after, + .bp3-control-group .bp3-html-select::after, + .bp3-control-group .bp3-select > .bp3-icon, + .bp3-control-group .bp3-html-select > .bp3-icon{ + z-index:17; } + .bp3-control-group .bp3-select:focus-within{ + z-index:5; } + .bp3-control-group:not(.bp3-vertical) > *:not(.bp3-divider){ + margin-right:-1px; } + .bp3-control-group:not(.bp3-vertical) > .bp3-divider:not(:first-child){ + margin-left:6px; } + .bp3-dark .bp3-control-group:not(.bp3-vertical) > *:not(.bp3-divider){ + margin-right:0; } + .bp3-dark .bp3-control-group:not(.bp3-vertical) > .bp3-button + .bp3-button{ + margin-left:1px; } + .bp3-control-group .bp3-popover-wrapper, + .bp3-control-group .bp3-popover-target{ + border-radius:inherit; } + .bp3-control-group > :first-child{ + border-radius:3px 0 0 3px; } + .bp3-control-group > :last-child{ + border-radius:0 3px 3px 0; + margin-right:0; } + .bp3-control-group > :only-child{ + border-radius:3px; + margin-right:0; } + .bp3-control-group .bp3-input-group .bp3-button{ + border-radius:3px; } + .bp3-control-group .bp3-numeric-input:not(:first-child) .bp3-input-group{ + border-bottom-left-radius:0; + border-top-left-radius:0; } + .bp3-control-group.bp3-fill{ + width:100%; } + .bp3-control-group > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; } + .bp3-control-group.bp3-fill > *:not(.bp3-fixed){ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; } + .bp3-control-group.bp3-vertical{ + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; } + .bp3-control-group.bp3-vertical > *{ + margin-top:-1px; } + .bp3-control-group.bp3-vertical > :first-child{ + border-radius:3px 3px 0 0; + margin-top:0; } + .bp3-control-group.bp3-vertical > :last-child{ + border-radius:0 0 3px 3px; } +.bp3-control{ + cursor:pointer; + display:block; + margin-bottom:10px; + position:relative; + text-transform:none; } + .bp3-control input:checked ~ .bp3-control-indicator{ + background-color:#137cbd; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + color:#ffffff; } + .bp3-control:hover input:checked ~ .bp3-control-indicator{ + background-color:#106ba3; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); } + .bp3-control input:not(:disabled):active:checked ~ .bp3-control-indicator{ + background:#0e5a8a; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-control input:disabled:checked ~ .bp3-control-indicator{ + background:rgba(19, 124, 189, 0.5); + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-control input:checked ~ .bp3-control-indicator{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control:hover input:checked ~ .bp3-control-indicator{ + background-color:#106ba3; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control input:not(:disabled):active:checked ~ .bp3-control-indicator{ + background-color:#0e5a8a; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-control input:disabled:checked ~ .bp3-control-indicator{ + background:rgba(14, 90, 138, 0.5); + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-control:not(.bp3-align-right){ + padding-left:26px; } + .bp3-control:not(.bp3-align-right) .bp3-control-indicator{ + margin-left:-26px; } + .bp3-control.bp3-align-right{ + padding-right:26px; } + .bp3-control.bp3-align-right .bp3-control-indicator{ + margin-right:-26px; } + .bp3-control.bp3-disabled{ + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + .bp3-control.bp3-inline{ + display:inline-block; + margin-right:20px; } + .bp3-control input{ + left:0; + opacity:0; + position:absolute; + top:0; + z-index:-1; } + .bp3-control .bp3-control-indicator{ + background-clip:padding-box; + background-color:#f5f8fa; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0)); + border:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + cursor:pointer; + display:inline-block; + font-size:16px; + height:1em; + margin-right:10px; + margin-top:-3px; + position:relative; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; + vertical-align:middle; + width:1em; } + .bp3-control .bp3-control-indicator::before{ + content:""; + display:block; + height:1em; + width:1em; } + .bp3-control:hover .bp3-control-indicator{ + background-color:#ebf1f5; } + .bp3-control input:not(:disabled):active ~ .bp3-control-indicator{ + background:#d8e1e8; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-control input:disabled ~ .bp3-control-indicator{ + background:rgba(206, 217, 224, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + cursor:not-allowed; } + .bp3-control input:focus ~ .bp3-control-indicator{ + outline:rgba(19, 124, 189, 0.6) auto 2px; + outline-offset:2px; + -moz-outline-radius:6px; } + .bp3-control.bp3-align-right .bp3-control-indicator{ + float:right; + margin-left:10px; + margin-top:1px; } + .bp3-control.bp3-large{ + font-size:16px; } + .bp3-control.bp3-large:not(.bp3-align-right){ + padding-left:30px; } + .bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{ + margin-left:-30px; } + .bp3-control.bp3-large.bp3-align-right{ + padding-right:30px; } + .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{ + margin-right:-30px; } + .bp3-control.bp3-large .bp3-control-indicator{ + font-size:20px; } + .bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{ + margin-top:0; } + .bp3-control.bp3-checkbox input:indeterminate ~ .bp3-control-indicator{ + background-color:#137cbd; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + color:#ffffff; } + .bp3-control.bp3-checkbox:hover input:indeterminate ~ .bp3-control-indicator{ + background-color:#106ba3; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); } + .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate ~ .bp3-control-indicator{ + background:#0e5a8a; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-control.bp3-checkbox input:disabled:indeterminate ~ .bp3-control-indicator{ + background:rgba(19, 124, 189, 0.5); + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-control.bp3-checkbox input:indeterminate ~ .bp3-control-indicator{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate ~ .bp3-control-indicator{ + background-color:#106ba3; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate ~ .bp3-control-indicator{ + background-color:#0e5a8a; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate ~ .bp3-control-indicator{ + background:rgba(14, 90, 138, 0.5); + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-control.bp3-checkbox .bp3-control-indicator{ + border-radius:3px; } + .bp3-control.bp3-checkbox input:checked ~ .bp3-control-indicator::before{ + background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='white'/%3e%3c/svg%3e"); } + .bp3-control.bp3-checkbox input:indeterminate ~ .bp3-control-indicator::before{ + background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e"); } + .bp3-control.bp3-radio .bp3-control-indicator{ + border-radius:50%; } + .bp3-control.bp3-radio input:checked ~ .bp3-control-indicator::before{ + background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%); } + .bp3-control.bp3-radio input:checked:disabled ~ .bp3-control-indicator::before{ + opacity:0.5; } + .bp3-control.bp3-radio input:focus ~ .bp3-control-indicator{ + -moz-outline-radius:16px; } + .bp3-control.bp3-switch input ~ .bp3-control-indicator{ + background:rgba(167, 182, 194, 0.5); } + .bp3-control.bp3-switch:hover input ~ .bp3-control-indicator{ + background:rgba(115, 134, 148, 0.5); } + .bp3-control.bp3-switch input:not(:disabled):active ~ .bp3-control-indicator{ + background:rgba(92, 112, 128, 0.5); } + .bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator{ + background:rgba(206, 217, 224, 0.5); } + .bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator::before{ + background:rgba(255, 255, 255, 0.8); } + .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator{ + background:#137cbd; } + .bp3-control.bp3-switch:hover input:checked ~ .bp3-control-indicator{ + background:#106ba3; } + .bp3-control.bp3-switch input:checked:not(:disabled):active ~ .bp3-control-indicator{ + background:#0e5a8a; } + .bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator{ + background:rgba(19, 124, 189, 0.5); } + .bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator::before{ + background:rgba(255, 255, 255, 0.8); } + .bp3-control.bp3-switch:not(.bp3-align-right){ + padding-left:38px; } + .bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{ + margin-left:-38px; } + .bp3-control.bp3-switch.bp3-align-right{ + padding-right:38px; } + .bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{ + margin-right:-38px; } + .bp3-control.bp3-switch .bp3-control-indicator{ + border:none; + border-radius:1.75em; + -webkit-box-shadow:none !important; + box-shadow:none !important; + min-width:1.75em; + -webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + width:auto; } + .bp3-control.bp3-switch .bp3-control-indicator::before{ + background:#ffffff; + border-radius:50%; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2); + height:calc(1em - 4px); + left:0; + margin:2px; + position:absolute; + -webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + width:calc(1em - 4px); } + .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator::before{ + left:calc(100% - 1em); } + .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){ + padding-left:45px; } + .bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{ + margin-left:-45px; } + .bp3-control.bp3-switch.bp3-large.bp3-align-right{ + padding-right:45px; } + .bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{ + margin-right:-45px; } + .bp3-dark .bp3-control.bp3-switch input ~ .bp3-control-indicator{ + background:rgba(16, 22, 26, 0.5); } + .bp3-dark .bp3-control.bp3-switch:hover input ~ .bp3-control-indicator{ + background:rgba(16, 22, 26, 0.7); } + .bp3-dark .bp3-control.bp3-switch input:not(:disabled):active ~ .bp3-control-indicator{ + background:rgba(16, 22, 26, 0.9); } + .bp3-dark .bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator{ + background:rgba(57, 75, 89, 0.5); } + .bp3-dark .bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator::before{ + background:rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator{ + background:#137cbd; } + .bp3-dark .bp3-control.bp3-switch:hover input:checked ~ .bp3-control-indicator{ + background:#106ba3; } + .bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active ~ .bp3-control-indicator{ + background:#0e5a8a; } + .bp3-dark .bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator{ + background:rgba(14, 90, 138, 0.5); } + .bp3-dark .bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator::before{ + background:rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{ + background:#394b59; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator::before{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-control.bp3-switch .bp3-switch-inner-text{ + font-size:0.7em; + text-align:center; } + .bp3-control.bp3-switch .bp3-control-indicator-child:first-child{ + line-height:0; + margin-left:0.5em; + margin-right:1.2em; + visibility:hidden; } + .bp3-control.bp3-switch .bp3-control-indicator-child:last-child{ + line-height:1em; + margin-left:1.2em; + margin-right:0.5em; + visibility:visible; } + .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator .bp3-control-indicator-child:first-child{ + line-height:1em; + visibility:visible; } + .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator .bp3-control-indicator-child:last-child{ + line-height:0; + visibility:hidden; } + .bp3-dark .bp3-control{ + color:#f5f8fa; } + .bp3-dark .bp3-control.bp3-disabled{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-control .bp3-control-indicator{ + background-color:#394b59; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0)); + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-control:hover .bp3-control-indicator{ + background-color:#30404d; } + .bp3-dark .bp3-control input:not(:disabled):active ~ .bp3-control-indicator{ + background:#202b33; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-control input:disabled ~ .bp3-control-indicator{ + background:rgba(57, 75, 89, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + cursor:not-allowed; } + .bp3-dark .bp3-control.bp3-checkbox input:disabled:checked ~ .bp3-control-indicator, .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate ~ .bp3-control-indicator{ + color:rgba(167, 182, 194, 0.6); } +.bp3-file-input{ + cursor:pointer; + display:inline-block; + height:30px; + position:relative; } + .bp3-file-input input{ + margin:0; + min-width:200px; + opacity:0; } + .bp3-file-input input:disabled + .bp3-file-upload-input, + .bp3-file-input input.bp3-disabled + .bp3-file-upload-input{ + background:rgba(206, 217, 224, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + resize:none; } + .bp3-file-input input:disabled + .bp3-file-upload-input::after, + .bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after{ + background-color:rgba(206, 217, 224, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + outline:none; } + .bp3-file-input input:disabled + .bp3-file-upload-input::after.bp3-active, .bp3-file-input input:disabled + .bp3-file-upload-input::after.bp3-active:hover, + .bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after.bp3-active, + .bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after.bp3-active:hover{ + background:rgba(206, 217, 224, 0.7); } + .bp3-dark .bp3-file-input input:disabled + .bp3-file-upload-input, .bp3-dark + .bp3-file-input input.bp3-disabled + .bp3-file-upload-input{ + background:rgba(57, 75, 89, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-input input:disabled + .bp3-file-upload-input::after, .bp3-dark + .bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after{ + background-color:rgba(57, 75, 89, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-input input:disabled + .bp3-file-upload-input::after.bp3-active, .bp3-dark + .bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after.bp3-active{ + background:rgba(57, 75, 89, 0.7); } + .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{ + color:#182026; } + .bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{ + color:#f5f8fa; } + .bp3-file-input.bp3-fill{ + width:100%; } + .bp3-file-input.bp3-large, + .bp3-large .bp3-file-input{ + height:40px; } + .bp3-file-input .bp3-file-upload-input-custom-text::after{ + content:attr(bp3-button-text); } + +.bp3-file-upload-input{ + -webkit-appearance:none; + -moz-appearance:none; + appearance:none; + background:#ffffff; + border:none; + border-radius:3px; + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + color:#182026; + font-size:14px; + font-weight:400; + height:30px; + line-height:30px; + outline:none; + padding:0 10px; + -webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + vertical-align:middle; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + color:rgba(92, 112, 128, 0.6); + left:0; + padding-right:80px; + position:absolute; + right:0; + top:0; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; } + .bp3-file-upload-input::-webkit-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-file-upload-input::-moz-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-file-upload-input:-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-file-upload-input::-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-file-upload-input::placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-file-upload-input:focus, .bp3-file-upload-input.bp3-active{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-file-upload-input[type="search"], .bp3-file-upload-input.bp3-round{ + border-radius:30px; + -webkit-box-sizing:border-box; + box-sizing:border-box; + padding-left:10px; } + .bp3-file-upload-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); } + .bp3-file-upload-input:disabled, .bp3-file-upload-input.bp3-disabled{ + background:rgba(206, 217, 224, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + resize:none; } + .bp3-file-upload-input::after{ + background-color:#f5f8fa; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + color:#182026; + min-height:24px; + min-width:24px; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + border-radius:3px; + content:"Browse"; + line-height:24px; + margin:3px; + position:absolute; + right:0; + text-align:center; + top:0; + width:70px; } + .bp3-file-upload-input::after:hover{ + background-clip:padding-box; + background-color:#ebf1f5; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); } + .bp3-file-upload-input::after:active, .bp3-file-upload-input::after.bp3-active{ + background-color:#d8e1e8; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-file-upload-input::after:disabled, .bp3-file-upload-input::after.bp3-disabled{ + background-color:rgba(206, 217, 224, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + outline:none; } + .bp3-file-upload-input::after:disabled.bp3-active, .bp3-file-upload-input::after:disabled.bp3-active:hover, .bp3-file-upload-input::after.bp3-disabled.bp3-active, .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{ + background:rgba(206, 217, 224, 0.7); } + .bp3-file-upload-input:hover::after{ + background-clip:padding-box; + background-color:#ebf1f5; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); } + .bp3-file-upload-input:active::after{ + background-color:#d8e1e8; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-large .bp3-file-upload-input{ + font-size:16px; + height:40px; + line-height:40px; + padding-right:95px; } + .bp3-large .bp3-file-upload-input[type="search"], .bp3-large .bp3-file-upload-input.bp3-round{ + padding:0 15px; } + .bp3-large .bp3-file-upload-input::after{ + min-height:30px; + min-width:30px; + line-height:30px; + margin:5px; + width:85px; } + .bp3-dark .bp3-file-upload-input{ + background:rgba(16, 22, 26, 0.3); + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input::-moz-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input:-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input::-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input::placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input:focus{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-file-upload-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-file-upload-input:disabled, .bp3-dark .bp3-file-upload-input.bp3-disabled{ + background:rgba(57, 75, 89, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input::after{ + background-color:#394b59; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0)); + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + .bp3-dark .bp3-file-upload-input::after:hover, .bp3-dark .bp3-file-upload-input::after:active, .bp3-dark .bp3-file-upload-input::after.bp3-active{ + color:#f5f8fa; } + .bp3-dark .bp3-file-upload-input::after:hover{ + background-color:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-file-upload-input::after:active, .bp3-dark .bp3-file-upload-input::after.bp3-active{ + background-color:#202b33; + background-image:none; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-file-upload-input::after:disabled, .bp3-dark .bp3-file-upload-input::after.bp3-disabled{ + background-color:rgba(57, 75, 89, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-file-upload-input::after:disabled.bp3-active, .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{ + background:rgba(57, 75, 89, 0.7); } + .bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{ + background:rgba(16, 22, 26, 0.5); + stroke:#8a9ba8; } + .bp3-dark .bp3-file-upload-input:hover::after{ + background-color:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-file-upload-input:active::after{ + background-color:#202b33; + background-image:none; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); } +.bp3-file-upload-input::after{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); } +.bp3-form-group{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + margin:0 0 15px; } + .bp3-form-group label.bp3-label{ + margin-bottom:5px; } + .bp3-form-group .bp3-control{ + margin-top:7px; } + .bp3-form-group .bp3-form-helper-text{ + color:#5c7080; + font-size:12px; + margin-top:5px; } + .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{ + color:#106ba3; } + .bp3-form-group.bp3-intent-success .bp3-form-helper-text{ + color:#0d8050; } + .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{ + color:#bf7326; } + .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{ + color:#c23030; } + .bp3-form-group.bp3-inline{ + -webkit-box-align:start; + -ms-flex-align:start; + align-items:flex-start; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; } + .bp3-form-group.bp3-inline.bp3-large label.bp3-label{ + line-height:40px; + margin:0 10px 0 0; } + .bp3-form-group.bp3-inline label.bp3-label{ + line-height:30px; + margin:0 10px 0 0; } + .bp3-form-group.bp3-disabled .bp3-label, + .bp3-form-group.bp3-disabled .bp3-text-muted, + .bp3-form-group.bp3-disabled .bp3-form-helper-text{ + color:rgba(92, 112, 128, 0.6) !important; } + .bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{ + color:#48aff0; } + .bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{ + color:#3dcc91; } + .bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{ + color:#ffb366; } + .bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{ + color:#ff7373; } + .bp3-dark .bp3-form-group .bp3-form-helper-text{ + color:#a7b6c2; } + .bp3-dark .bp3-form-group.bp3-disabled .bp3-label, + .bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted, + .bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{ + color:rgba(167, 182, 194, 0.6) !important; } +.bp3-input-group{ + display:block; + position:relative; } + .bp3-input-group .bp3-input{ + position:relative; + width:100%; } + .bp3-input-group .bp3-input:not(:first-child){ + padding-left:30px; } + .bp3-input-group .bp3-input:not(:last-child){ + padding-right:30px; } + .bp3-input-group .bp3-input-action, + .bp3-input-group > .bp3-input-left-container, + .bp3-input-group > .bp3-button, + .bp3-input-group > .bp3-icon{ + position:absolute; + top:0; } + .bp3-input-group .bp3-input-action:first-child, + .bp3-input-group > .bp3-input-left-container:first-child, + .bp3-input-group > .bp3-button:first-child, + .bp3-input-group > .bp3-icon:first-child{ + left:0; } + .bp3-input-group .bp3-input-action:last-child, + .bp3-input-group > .bp3-input-left-container:last-child, + .bp3-input-group > .bp3-button:last-child, + .bp3-input-group > .bp3-icon:last-child{ + right:0; } + .bp3-input-group .bp3-button{ + min-height:24px; + min-width:24px; + margin:3px; + padding:0 7px; } + .bp3-input-group .bp3-button:empty{ + padding:0; } + .bp3-input-group > .bp3-input-left-container, + .bp3-input-group > .bp3-icon{ + z-index:1; } + .bp3-input-group > .bp3-input-left-container > .bp3-icon, + .bp3-input-group > .bp3-icon{ + color:#5c7080; } + .bp3-input-group > .bp3-input-left-container > .bp3-icon:empty, + .bp3-input-group > .bp3-icon:empty{ + font-family:"Icons16", sans-serif; + font-size:16px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; } + .bp3-input-group > .bp3-input-left-container > .bp3-icon, + .bp3-input-group > .bp3-icon, + .bp3-input-group .bp3-input-action > .bp3-spinner{ + margin:7px; } + .bp3-input-group .bp3-tag{ + margin:5px; } + .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus), + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){ + color:#5c7080; } + .bp3-dark .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus), .bp3-dark + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){ + color:#a7b6c2; } + .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large, + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon, + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard, + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{ + color:#5c7080; } + .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled, + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled{ + color:rgba(92, 112, 128, 0.6) !important; } + .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled .bp3-icon, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled .bp3-icon-standard, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled .bp3-icon-large, + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon, + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard, + .bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{ + color:rgba(92, 112, 128, 0.6) !important; } + .bp3-input-group.bp3-disabled{ + cursor:not-allowed; } + .bp3-input-group.bp3-disabled .bp3-icon{ + color:rgba(92, 112, 128, 0.6); } + .bp3-input-group.bp3-large .bp3-button{ + min-height:30px; + min-width:30px; + margin:5px; } + .bp3-input-group.bp3-large > .bp3-input-left-container > .bp3-icon, + .bp3-input-group.bp3-large > .bp3-icon, + .bp3-input-group.bp3-large .bp3-input-action > .bp3-spinner{ + margin:12px; } + .bp3-input-group.bp3-large .bp3-input{ + font-size:16px; + height:40px; + line-height:40px; } + .bp3-input-group.bp3-large .bp3-input[type="search"], .bp3-input-group.bp3-large .bp3-input.bp3-round{ + padding:0 15px; } + .bp3-input-group.bp3-large .bp3-input:not(:first-child){ + padding-left:40px; } + .bp3-input-group.bp3-large .bp3-input:not(:last-child){ + padding-right:40px; } + .bp3-input-group.bp3-small .bp3-button{ + min-height:20px; + min-width:20px; + margin:2px; } + .bp3-input-group.bp3-small .bp3-tag{ + min-height:20px; + min-width:20px; + margin:2px; } + .bp3-input-group.bp3-small > .bp3-input-left-container > .bp3-icon, + .bp3-input-group.bp3-small > .bp3-icon, + .bp3-input-group.bp3-small .bp3-input-action > .bp3-spinner{ + margin:4px; } + .bp3-input-group.bp3-small .bp3-input{ + font-size:12px; + height:24px; + line-height:24px; + padding-left:8px; + padding-right:8px; } + .bp3-input-group.bp3-small .bp3-input[type="search"], .bp3-input-group.bp3-small .bp3-input.bp3-round{ + padding:0 12px; } + .bp3-input-group.bp3-small .bp3-input:not(:first-child){ + padding-left:24px; } + .bp3-input-group.bp3-small .bp3-input:not(:last-child){ + padding-right:24px; } + .bp3-input-group.bp3-fill{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + width:100%; } + .bp3-input-group.bp3-round .bp3-button, + .bp3-input-group.bp3-round .bp3-input, + .bp3-input-group.bp3-round .bp3-tag{ + border-radius:30px; } + .bp3-dark .bp3-input-group .bp3-icon{ + color:#a7b6c2; } + .bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{ + color:rgba(167, 182, 194, 0.6); } + .bp3-input-group.bp3-intent-primary .bp3-input{ + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-primary .bp3-input:focus{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-primary .bp3-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #137cbd; + box-shadow:inset 0 0 0 1px #137cbd; } + .bp3-input-group.bp3-intent-primary .bp3-input:disabled, .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input-group.bp3-intent-primary > .bp3-icon{ + color:#106ba3; } + .bp3-dark .bp3-input-group.bp3-intent-primary > .bp3-icon{ + color:#48aff0; } + .bp3-input-group.bp3-intent-success .bp3-input{ + -webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-success .bp3-input:focus{ + -webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-success .bp3-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #0f9960; + box-shadow:inset 0 0 0 1px #0f9960; } + .bp3-input-group.bp3-intent-success .bp3-input:disabled, .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input-group.bp3-intent-success > .bp3-icon{ + color:#0d8050; } + .bp3-dark .bp3-input-group.bp3-intent-success > .bp3-icon{ + color:#3dcc91; } + .bp3-input-group.bp3-intent-warning .bp3-input{ + -webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-warning .bp3-input:focus{ + -webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-warning .bp3-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #d9822b; + box-shadow:inset 0 0 0 1px #d9822b; } + .bp3-input-group.bp3-intent-warning .bp3-input:disabled, .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input-group.bp3-intent-warning > .bp3-icon{ + color:#bf7326; } + .bp3-dark .bp3-input-group.bp3-intent-warning > .bp3-icon{ + color:#ffb366; } + .bp3-input-group.bp3-intent-danger .bp3-input{ + -webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-danger .bp3-input:focus{ + -webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input-group.bp3-intent-danger .bp3-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #db3737; + box-shadow:inset 0 0 0 1px #db3737; } + .bp3-input-group.bp3-intent-danger .bp3-input:disabled, .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input-group.bp3-intent-danger > .bp3-icon{ + color:#c23030; } + .bp3-dark .bp3-input-group.bp3-intent-danger > .bp3-icon{ + color:#ff7373; } +.bp3-input{ + -webkit-appearance:none; + -moz-appearance:none; + appearance:none; + background:#ffffff; + border:none; + border-radius:3px; + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + color:#182026; + font-size:14px; + font-weight:400; + height:30px; + line-height:30px; + outline:none; + padding:0 10px; + -webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); + vertical-align:middle; } + .bp3-input::-webkit-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input::-moz-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input:-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input::-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input::placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input:focus, .bp3-input.bp3-active{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input[type="search"], .bp3-input.bp3-round{ + border-radius:30px; + -webkit-box-sizing:border-box; + box-sizing:border-box; + padding-left:10px; } + .bp3-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); } + .bp3-input:disabled, .bp3-input.bp3-disabled{ + background:rgba(206, 217, 224, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + resize:none; } + .bp3-input.bp3-large{ + font-size:16px; + height:40px; + line-height:40px; } + .bp3-input.bp3-large[type="search"], .bp3-input.bp3-large.bp3-round{ + padding:0 15px; } + .bp3-input.bp3-small{ + font-size:12px; + height:24px; + line-height:24px; + padding-left:8px; + padding-right:8px; } + .bp3-input.bp3-small[type="search"], .bp3-input.bp3-small.bp3-round{ + padding:0 12px; } + .bp3-input.bp3-fill{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + width:100%; } + .bp3-dark .bp3-input{ + background:rgba(16, 22, 26, 0.3); + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + .bp3-dark .bp3-input::-webkit-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-input::-moz-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-input:-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-input::-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-input::placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-input:focus{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input:disabled, .bp3-dark .bp3-input.bp3-disabled{ + background:rgba(57, 75, 89, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-input.bp3-intent-primary{ + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-primary:focus{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-primary[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #137cbd; + box-shadow:inset 0 0 0 1px #137cbd; } + .bp3-input.bp3-intent-primary:disabled, .bp3-input.bp3-intent-primary.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-input.bp3-intent-primary{ + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-primary:focus{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-primary[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #137cbd; + box-shadow:inset 0 0 0 1px #137cbd; } + .bp3-dark .bp3-input.bp3-intent-primary:disabled, .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input.bp3-intent-success{ + -webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-success:focus{ + -webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-success[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #0f9960; + box-shadow:inset 0 0 0 1px #0f9960; } + .bp3-input.bp3-intent-success:disabled, .bp3-input.bp3-intent-success.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-input.bp3-intent-success{ + -webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-success:focus{ + -webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #0f9960, 0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-success[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #0f9960; + box-shadow:inset 0 0 0 1px #0f9960; } + .bp3-dark .bp3-input.bp3-intent-success:disabled, .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input.bp3-intent-warning{ + -webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-warning:focus{ + -webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-warning[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #d9822b; + box-shadow:inset 0 0 0 1px #d9822b; } + .bp3-input.bp3-intent-warning:disabled, .bp3-input.bp3-intent-warning.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-input.bp3-intent-warning{ + -webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-warning:focus{ + -webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #d9822b, 0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-warning[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #d9822b; + box-shadow:inset 0 0 0 1px #d9822b; } + .bp3-dark .bp3-input.bp3-intent-warning:disabled, .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input.bp3-intent-danger{ + -webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-danger:focus{ + -webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-input.bp3-intent-danger[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #db3737; + box-shadow:inset 0 0 0 1px #db3737; } + .bp3-input.bp3-intent-danger:disabled, .bp3-input.bp3-intent-danger.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-input.bp3-intent-danger{ + -webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-danger:focus{ + -webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #db3737, 0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-input.bp3-intent-danger[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px #db3737; + box-shadow:inset 0 0 0 1px #db3737; } + .bp3-dark .bp3-input.bp3-intent-danger:disabled, .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-input::-ms-clear{ + display:none; } +textarea.bp3-input{ + max-width:100%; + padding:10px; } + textarea.bp3-input, textarea.bp3-input.bp3-large, textarea.bp3-input.bp3-small{ + height:auto; + line-height:inherit; } + textarea.bp3-input.bp3-small{ + padding:8px; } + .bp3-dark textarea.bp3-input{ + background:rgba(16, 22, 26, 0.3); + -webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + .bp3-dark textarea.bp3-input::-webkit-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark textarea.bp3-input::-moz-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark textarea.bp3-input:-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark textarea.bp3-input::-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark textarea.bp3-input::placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark textarea.bp3-input:focus{ + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark textarea.bp3-input[readonly]{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark textarea.bp3-input:disabled, .bp3-dark textarea.bp3-input.bp3-disabled{ + background:rgba(57, 75, 89, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } +label.bp3-label{ + display:block; + margin-bottom:15px; + margin-top:0; } + label.bp3-label .bp3-html-select, + label.bp3-label .bp3-input, + label.bp3-label .bp3-select, + label.bp3-label .bp3-slider, + label.bp3-label .bp3-popover-wrapper{ + display:block; + margin-top:5px; + text-transform:none; } + label.bp3-label .bp3-button-group{ + margin-top:5px; } + label.bp3-label .bp3-select select, + label.bp3-label .bp3-html-select select{ + font-weight:400; + vertical-align:top; + width:100%; } + label.bp3-label.bp3-disabled, + label.bp3-label.bp3-disabled .bp3-text-muted{ + color:rgba(92, 112, 128, 0.6); } + label.bp3-label.bp3-inline{ + line-height:30px; } + label.bp3-label.bp3-inline .bp3-html-select, + label.bp3-label.bp3-inline .bp3-input, + label.bp3-label.bp3-inline .bp3-input-group, + label.bp3-label.bp3-inline .bp3-select, + label.bp3-label.bp3-inline .bp3-popover-wrapper{ + display:inline-block; + margin:0 0 0 5px; + vertical-align:top; } + label.bp3-label.bp3-inline .bp3-button-group{ + margin:0 0 0 5px; } + label.bp3-label.bp3-inline .bp3-input-group .bp3-input{ + margin-left:0; } + label.bp3-label.bp3-inline.bp3-large{ + line-height:40px; } + label.bp3-label:not(.bp3-inline) .bp3-popover-target{ + display:block; } + .bp3-dark label.bp3-label{ + color:#f5f8fa; } + .bp3-dark label.bp3-label.bp3-disabled, + .bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{ + color:rgba(167, 182, 194, 0.6); } +.bp3-numeric-input .bp3-button-group.bp3-vertical > .bp3-button{ + -webkit-box-flex:1; + -ms-flex:1 1 14px; + flex:1 1 14px; + min-height:0; + padding:0; + width:30px; } + .bp3-numeric-input .bp3-button-group.bp3-vertical > .bp3-button:first-child{ + border-radius:0 3px 0 0; } + .bp3-numeric-input .bp3-button-group.bp3-vertical > .bp3-button:last-child{ + border-radius:0 0 3px 0; } + +.bp3-numeric-input .bp3-button-group.bp3-vertical:first-child > .bp3-button:first-child{ + border-radius:3px 0 0 0; } + +.bp3-numeric-input .bp3-button-group.bp3-vertical:first-child > .bp3-button:last-child{ + border-radius:0 0 0 3px; } + +.bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical > .bp3-button{ + width:40px; } + +form{ + display:block; } +.bp3-html-select select, +.bp3-select select{ + display:-webkit-inline-box; + display:-ms-inline-flexbox; + display:inline-flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + border:none; + border-radius:3px; + cursor:pointer; + font-size:14px; + -webkit-box-pack:center; + -ms-flex-pack:center; + justify-content:center; + padding:5px 10px; + text-align:left; + vertical-align:middle; + background-color:#f5f8fa; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + color:#182026; + -moz-appearance:none; + -webkit-appearance:none; + border-radius:3px; + height:30px; + padding:0 25px 0 10px; + width:100%; } + .bp3-html-select select > *, .bp3-select select > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-html-select select > .bp3-fill, .bp3-select select > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-html-select select::before, + .bp3-select select::before, .bp3-html-select select > *, .bp3-select select > *{ + margin-right:7px; } + .bp3-html-select select:empty::before, + .bp3-select select:empty::before, + .bp3-html-select select > :last-child, + .bp3-select select > :last-child{ + margin-right:0; } + .bp3-html-select select:hover, + .bp3-select select:hover{ + background-clip:padding-box; + background-color:#ebf1f5; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); } + .bp3-html-select select:active, + .bp3-select select:active, .bp3-html-select select.bp3-active, + .bp3-select select.bp3-active{ + background-color:#d8e1e8; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-html-select select:disabled, + .bp3-select select:disabled, .bp3-html-select select.bp3-disabled, + .bp3-select select.bp3-disabled{ + background-color:rgba(206, 217, 224, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + outline:none; } + .bp3-html-select select:disabled.bp3-active, + .bp3-select select:disabled.bp3-active, .bp3-html-select select:disabled.bp3-active:hover, + .bp3-select select:disabled.bp3-active:hover, .bp3-html-select select.bp3-disabled.bp3-active, + .bp3-select select.bp3-disabled.bp3-active, .bp3-html-select select.bp3-disabled.bp3-active:hover, + .bp3-select select.bp3-disabled.bp3-active:hover{ + background:rgba(206, 217, 224, 0.7); } + +.bp3-html-select.bp3-minimal select, +.bp3-select.bp3-minimal select{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-html-select.bp3-minimal select:hover, + .bp3-select.bp3-minimal select:hover{ + background:rgba(167, 182, 194, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; + text-decoration:none; } + .bp3-html-select.bp3-minimal select:active, + .bp3-select.bp3-minimal select:active, .bp3-html-select.bp3-minimal select.bp3-active, + .bp3-select.bp3-minimal select.bp3-active{ + background:rgba(115, 134, 148, 0.3); + -webkit-box-shadow:none; + box-shadow:none; + color:#182026; } + .bp3-html-select.bp3-minimal select:disabled, + .bp3-select.bp3-minimal select:disabled, .bp3-html-select.bp3-minimal select:disabled:hover, + .bp3-select.bp3-minimal select:disabled:hover, .bp3-html-select.bp3-minimal select.bp3-disabled, + .bp3-select.bp3-minimal select.bp3-disabled, .bp3-html-select.bp3-minimal select.bp3-disabled:hover, + .bp3-select.bp3-minimal select.bp3-disabled:hover{ + background:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + .bp3-html-select.bp3-minimal select:disabled.bp3-active, + .bp3-select.bp3-minimal select:disabled.bp3-active, .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active, + .bp3-select.bp3-minimal select:disabled:hover.bp3-active, .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active, + .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{ + background:rgba(115, 134, 148, 0.3); } + .bp3-dark .bp3-html-select.bp3-minimal select, .bp3-html-select.bp3-minimal .bp3-dark select, + .bp3-dark .bp3-select.bp3-minimal select, .bp3-select.bp3-minimal .bp3-dark select{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:inherit; } + .bp3-dark .bp3-html-select.bp3-minimal select:hover, .bp3-html-select.bp3-minimal .bp3-dark select:hover, + .bp3-dark .bp3-select.bp3-minimal select:hover, .bp3-select.bp3-minimal .bp3-dark select:hover, .bp3-dark .bp3-html-select.bp3-minimal select:active, .bp3-html-select.bp3-minimal .bp3-dark select:active, + .bp3-dark .bp3-select.bp3-minimal select:active, .bp3-select.bp3-minimal .bp3-dark select:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-html-select.bp3-minimal select:hover, .bp3-html-select.bp3-minimal .bp3-dark select:hover, + .bp3-dark .bp3-select.bp3-minimal select:hover, .bp3-select.bp3-minimal .bp3-dark select:hover{ + background:rgba(138, 155, 168, 0.15); } + .bp3-dark .bp3-html-select.bp3-minimal select:active, .bp3-html-select.bp3-minimal .bp3-dark select:active, + .bp3-dark .bp3-select.bp3-minimal select:active, .bp3-select.bp3-minimal .bp3-dark select:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-active{ + background:rgba(138, 155, 168, 0.3); + color:#f5f8fa; } + .bp3-dark .bp3-html-select.bp3-minimal select:disabled, .bp3-html-select.bp3-minimal .bp3-dark select:disabled, + .bp3-dark .bp3-select.bp3-minimal select:disabled, .bp3-select.bp3-minimal .bp3-dark select:disabled, .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover, .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover, + .bp3-dark .bp3-select.bp3-minimal select:disabled:hover, .bp3-select.bp3-minimal .bp3-dark select:disabled:hover, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover, + .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{ + background:none; + color:rgba(167, 182, 194, 0.6); + cursor:not-allowed; } + .bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active, .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{ + background:rgba(138, 155, 168, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-primary, + .bp3-select.bp3-minimal select.bp3-intent-primary{ + color:#106ba3; } + .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover, + .bp3-select.bp3-minimal select.bp3-intent-primary:hover, .bp3-html-select.bp3-minimal select.bp3-intent-primary:active, + .bp3-select.bp3-minimal select.bp3-intent-primary:active, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#106ba3; } + .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover, + .bp3-select.bp3-minimal select.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.15); + color:#106ba3; } + .bp3-html-select.bp3-minimal select.bp3-intent-primary:active, + .bp3-select.bp3-minimal select.bp3-intent-primary:active, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#106ba3; } + .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled, + .bp3-select.bp3-minimal select.bp3-intent-primary:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled, + .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(16, 107, 163, 0.5); } + .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{ + stroke:#106ba3; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{ + color:#48aff0; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{ + background:rgba(19, 124, 189, 0.2); + color:#48aff0; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{ + background:rgba(19, 124, 189, 0.3); + color:#48aff0; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{ + background:none; + color:rgba(72, 175, 240, 0.5); } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{ + background:rgba(19, 124, 189, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-success, + .bp3-select.bp3-minimal select.bp3-intent-success{ + color:#0d8050; } + .bp3-html-select.bp3-minimal select.bp3-intent-success:hover, + .bp3-select.bp3-minimal select.bp3-intent-success:hover, .bp3-html-select.bp3-minimal select.bp3-intent-success:active, + .bp3-select.bp3-minimal select.bp3-intent-success:active, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#0d8050; } + .bp3-html-select.bp3-minimal select.bp3-intent-success:hover, + .bp3-select.bp3-minimal select.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.15); + color:#0d8050; } + .bp3-html-select.bp3-minimal select.bp3-intent-success:active, + .bp3-select.bp3-minimal select.bp3-intent-success:active, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#0d8050; } + .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled, + .bp3-select.bp3-minimal select.bp3-intent-success:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled, + .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(13, 128, 80, 0.5); } + .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{ + stroke:#0d8050; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{ + color:#3dcc91; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{ + background:rgba(15, 153, 96, 0.2); + color:#3dcc91; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{ + background:rgba(15, 153, 96, 0.3); + color:#3dcc91; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{ + background:none; + color:rgba(61, 204, 145, 0.5); } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{ + background:rgba(15, 153, 96, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-warning, + .bp3-select.bp3-minimal select.bp3-intent-warning{ + color:#bf7326; } + .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover, + .bp3-select.bp3-minimal select.bp3-intent-warning:hover, .bp3-html-select.bp3-minimal select.bp3-intent-warning:active, + .bp3-select.bp3-minimal select.bp3-intent-warning:active, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#bf7326; } + .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover, + .bp3-select.bp3-minimal select.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.15); + color:#bf7326; } + .bp3-html-select.bp3-minimal select.bp3-intent-warning:active, + .bp3-select.bp3-minimal select.bp3-intent-warning:active, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#bf7326; } + .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled, + .bp3-select.bp3-minimal select.bp3-intent-warning:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled, + .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(191, 115, 38, 0.5); } + .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{ + stroke:#bf7326; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{ + color:#ffb366; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{ + background:rgba(217, 130, 43, 0.2); + color:#ffb366; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{ + background:rgba(217, 130, 43, 0.3); + color:#ffb366; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{ + background:none; + color:rgba(255, 179, 102, 0.5); } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{ + background:rgba(217, 130, 43, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-danger, + .bp3-select.bp3-minimal select.bp3-intent-danger{ + color:#c23030; } + .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover, + .bp3-select.bp3-minimal select.bp3-intent-danger:hover, .bp3-html-select.bp3-minimal select.bp3-intent-danger:active, + .bp3-select.bp3-minimal select.bp3-intent-danger:active, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{ + background:none; + -webkit-box-shadow:none; + box-shadow:none; + color:#c23030; } + .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover, + .bp3-select.bp3-minimal select.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.15); + color:#c23030; } + .bp3-html-select.bp3-minimal select.bp3-intent-danger:active, + .bp3-select.bp3-minimal select.bp3-intent-danger:active, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#c23030; } + .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled, + .bp3-select.bp3-minimal select.bp3-intent-danger:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled, + .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(194, 48, 48, 0.5); } + .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active, + .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + .bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{ + stroke:#c23030; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{ + color:#ff7373; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{ + background:rgba(219, 55, 55, 0.2); + color:#ff7373; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{ + background:rgba(219, 55, 55, 0.3); + color:#ff7373; } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{ + background:none; + color:rgba(255, 115, 115, 0.5); } + .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active, + .bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{ + background:rgba(219, 55, 55, 0.3); } + +.bp3-html-select.bp3-large select, +.bp3-select.bp3-large select{ + font-size:16px; + height:40px; + padding-right:35px; } + +.bp3-dark .bp3-html-select select, .bp3-dark .bp3-select select{ + background-color:#394b59; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0)); + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + .bp3-dark .bp3-html-select select:hover, .bp3-dark .bp3-select select:hover, .bp3-dark .bp3-html-select select:active, .bp3-dark .bp3-select select:active, .bp3-dark .bp3-html-select select.bp3-active, .bp3-dark .bp3-select select.bp3-active{ + color:#f5f8fa; } + .bp3-dark .bp3-html-select select:hover, .bp3-dark .bp3-select select:hover{ + background-color:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-html-select select:active, .bp3-dark .bp3-select select:active, .bp3-dark .bp3-html-select select.bp3-active, .bp3-dark .bp3-select select.bp3-active{ + background-color:#202b33; + background-image:none; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-html-select select:disabled, .bp3-dark .bp3-select select:disabled, .bp3-dark .bp3-html-select select.bp3-disabled, .bp3-dark .bp3-select select.bp3-disabled{ + background-color:rgba(57, 75, 89, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-html-select select:disabled.bp3-active, .bp3-dark .bp3-select select:disabled.bp3-active, .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active, .bp3-dark .bp3-select select.bp3-disabled.bp3-active{ + background:rgba(57, 75, 89, 0.7); } + .bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head, .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{ + background:rgba(16, 22, 26, 0.5); + stroke:#8a9ba8; } + +.bp3-html-select select:disabled, +.bp3-select select:disabled{ + background-color:rgba(206, 217, 224, 0.5); + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + +.bp3-html-select .bp3-icon, +.bp3-select .bp3-icon, .bp3-select::after{ + color:#5c7080; + pointer-events:none; + position:absolute; + right:7px; + top:7px; } + .bp3-html-select .bp3-disabled.bp3-icon, + .bp3-select .bp3-disabled.bp3-icon, .bp3-disabled.bp3-select::after{ + color:rgba(92, 112, 128, 0.6); } +.bp3-html-select, +.bp3-select{ + display:inline-block; + letter-spacing:normal; + position:relative; + vertical-align:middle; } + .bp3-html-select select::-ms-expand, + .bp3-select select::-ms-expand{ + display:none; } + .bp3-html-select .bp3-icon, + .bp3-select .bp3-icon{ + color:#5c7080; } + .bp3-html-select .bp3-icon:hover, + .bp3-select .bp3-icon:hover{ + color:#182026; } + .bp3-dark .bp3-html-select .bp3-icon, .bp3-dark + .bp3-select .bp3-icon{ + color:#a7b6c2; } + .bp3-dark .bp3-html-select .bp3-icon:hover, .bp3-dark + .bp3-select .bp3-icon:hover{ + color:#f5f8fa; } + .bp3-html-select.bp3-large::after, + .bp3-html-select.bp3-large .bp3-icon, + .bp3-select.bp3-large::after, + .bp3-select.bp3-large .bp3-icon{ + right:12px; + top:12px; } + .bp3-html-select.bp3-fill, + .bp3-html-select.bp3-fill select, + .bp3-select.bp3-fill, + .bp3-select.bp3-fill select{ + width:100%; } + .bp3-dark .bp3-html-select option, .bp3-dark + .bp3-select option{ + background-color:#30404d; + color:#f5f8fa; } + .bp3-dark .bp3-html-select option:disabled, .bp3-dark + .bp3-select option:disabled{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-html-select::after, .bp3-dark + .bp3-select::after{ + color:#a7b6c2; } + +.bp3-select::after{ + font-family:"Icons16", sans-serif; + font-size:16px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + content:""; } +.bp3-running-text table, table.bp3-html-table{ + border-spacing:0; + font-size:14px; } + .bp3-running-text table th, table.bp3-html-table th, + .bp3-running-text table td, + table.bp3-html-table td{ + padding:11px; + text-align:left; + vertical-align:top; } + .bp3-running-text table th, table.bp3-html-table th{ + color:#182026; + font-weight:600; } + + .bp3-running-text table td, + table.bp3-html-table td{ + color:#182026; } + .bp3-running-text table tbody tr:first-child th, table.bp3-html-table tbody tr:first-child th, + .bp3-running-text table tbody tr:first-child td, + table.bp3-html-table tbody tr:first-child td, + .bp3-running-text table tfoot tr:first-child th, + table.bp3-html-table tfoot tr:first-child th, + .bp3-running-text table tfoot tr:first-child td, + table.bp3-html-table tfoot tr:first-child td{ + -webkit-box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15); + box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15); } + .bp3-dark .bp3-running-text table th, .bp3-running-text .bp3-dark table th, .bp3-dark table.bp3-html-table th{ + color:#f5f8fa; } + .bp3-dark .bp3-running-text table td, .bp3-running-text .bp3-dark table td, .bp3-dark table.bp3-html-table td{ + color:#f5f8fa; } + .bp3-dark .bp3-running-text table tbody tr:first-child th, .bp3-running-text .bp3-dark table tbody tr:first-child th, .bp3-dark table.bp3-html-table tbody tr:first-child th, + .bp3-dark .bp3-running-text table tbody tr:first-child td, + .bp3-running-text .bp3-dark table tbody tr:first-child td, + .bp3-dark table.bp3-html-table tbody tr:first-child td, + .bp3-dark .bp3-running-text table tfoot tr:first-child th, + .bp3-running-text .bp3-dark table tfoot tr:first-child th, + .bp3-dark table.bp3-html-table tfoot tr:first-child th, + .bp3-dark .bp3-running-text table tfoot tr:first-child td, + .bp3-running-text .bp3-dark table tfoot tr:first-child td, + .bp3-dark table.bp3-html-table tfoot tr:first-child td{ + -webkit-box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15); + box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15); } + +table.bp3-html-table.bp3-html-table-condensed th, +table.bp3-html-table.bp3-html-table-condensed td, table.bp3-html-table.bp3-small th, +table.bp3-html-table.bp3-small td{ + padding-bottom:6px; + padding-top:6px; } + +table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{ + background:rgba(191, 204, 214, 0.15); } + +table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){ + -webkit-box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15); + box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15); } + +table.bp3-html-table.bp3-html-table-bordered tbody tr td, +table.bp3-html-table.bp3-html-table-bordered tfoot tr td{ + -webkit-box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15); + box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15); } + table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child), + table.bp3-html-table.bp3-html-table-bordered tfoot tr td:not(:first-child){ + -webkit-box-shadow:inset 1px 1px 0 0 rgba(16, 22, 26, 0.15); + box-shadow:inset 1px 1px 0 0 rgba(16, 22, 26, 0.15); } + +table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{ + -webkit-box-shadow:none; + box-shadow:none; } + table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){ + -webkit-box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15); + box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15); } + +table.bp3-html-table.bp3-interactive tbody tr:hover td{ + background-color:rgba(191, 204, 214, 0.3); + cursor:pointer; } + +table.bp3-html-table.bp3-interactive tbody tr:active td{ + background-color:rgba(191, 204, 214, 0.4); } + +.bp3-dark table.bp3-html-table{ } + .bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{ + background:rgba(92, 112, 128, 0.15); } + .bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){ + -webkit-box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15); + box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15); } + .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td, + .bp3-dark table.bp3-html-table.bp3-html-table-bordered tfoot tr td{ + -webkit-box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15); + box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15); } + .bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child), + .bp3-dark table.bp3-html-table.bp3-html-table-bordered tfoot tr td:not(:first-child){ + -webkit-box-shadow:inset 1px 1px 0 0 rgba(255, 255, 255, 0.15); + box-shadow:inset 1px 1px 0 0 rgba(255, 255, 255, 0.15); } + .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{ + -webkit-box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15); + box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15); } + .bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{ + background-color:rgba(92, 112, 128, 0.3); + cursor:pointer; } + .bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{ + background-color:rgba(92, 112, 128, 0.4); } + +.bp3-key-combo{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; } + .bp3-key-combo > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-key-combo > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-key-combo::before, + .bp3-key-combo > *{ + margin-right:5px; } + .bp3-key-combo:empty::before, + .bp3-key-combo > :last-child{ + margin-right:0; } + +.bp3-hotkey-dialog{ + padding-bottom:0; + top:40px; } + .bp3-hotkey-dialog .bp3-dialog-body{ + margin:0; + padding:0; } + .bp3-hotkey-dialog .bp3-hotkey-label{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; } + +.bp3-hotkey-column{ + margin:auto; + max-height:80vh; + overflow-y:auto; + padding:30px; } + .bp3-hotkey-column .bp3-heading{ + margin-bottom:20px; } + .bp3-hotkey-column .bp3-heading:not(:first-child){ + margin-top:40px; } + +.bp3-hotkey{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-pack:justify; + -ms-flex-pack:justify; + justify-content:space-between; + margin-left:0; + margin-right:0; } + .bp3-hotkey:not(:last-child){ + margin-bottom:10px; } +.bp3-icon{ + display:inline-block; + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + vertical-align:text-bottom; } + .bp3-icon:not(:empty)::before{ + content:"" !important; + content:unset !important; } + .bp3-icon > svg{ + display:block; } + .bp3-icon > svg:not([fill]){ + fill:currentColor; } + +.bp3-icon.bp3-intent-primary, .bp3-icon-standard.bp3-intent-primary, .bp3-icon-large.bp3-intent-primary{ + color:#106ba3; } + .bp3-dark .bp3-icon.bp3-intent-primary, .bp3-dark .bp3-icon-standard.bp3-intent-primary, .bp3-dark .bp3-icon-large.bp3-intent-primary{ + color:#48aff0; } + +.bp3-icon.bp3-intent-success, .bp3-icon-standard.bp3-intent-success, .bp3-icon-large.bp3-intent-success{ + color:#0d8050; } + .bp3-dark .bp3-icon.bp3-intent-success, .bp3-dark .bp3-icon-standard.bp3-intent-success, .bp3-dark .bp3-icon-large.bp3-intent-success{ + color:#3dcc91; } + +.bp3-icon.bp3-intent-warning, .bp3-icon-standard.bp3-intent-warning, .bp3-icon-large.bp3-intent-warning{ + color:#bf7326; } + .bp3-dark .bp3-icon.bp3-intent-warning, .bp3-dark .bp3-icon-standard.bp3-intent-warning, .bp3-dark .bp3-icon-large.bp3-intent-warning{ + color:#ffb366; } + +.bp3-icon.bp3-intent-danger, .bp3-icon-standard.bp3-intent-danger, .bp3-icon-large.bp3-intent-danger{ + color:#c23030; } + .bp3-dark .bp3-icon.bp3-intent-danger, .bp3-dark .bp3-icon-standard.bp3-intent-danger, .bp3-dark .bp3-icon-large.bp3-intent-danger{ + color:#ff7373; } + +span.bp3-icon-standard{ + font-family:"Icons16", sans-serif; + font-size:16px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + display:inline-block; } + +span.bp3-icon-large{ + font-family:"Icons20", sans-serif; + font-size:20px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + display:inline-block; } + +span.bp3-icon:empty{ + font-family:"Icons20"; + font-size:inherit; + font-style:normal; + font-weight:400; + line-height:1; } + span.bp3-icon:empty::before{ + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; } + +.bp3-icon-add::before{ + content:""; } + +.bp3-icon-add-column-left::before{ + content:""; } + +.bp3-icon-add-column-right::before{ + content:""; } + +.bp3-icon-add-row-bottom::before{ + content:""; } + +.bp3-icon-add-row-top::before{ + content:"î›·"; } + +.bp3-icon-add-to-artifact::before{ + content:""; } + +.bp3-icon-add-to-folder::before{ + content:"î›’"; } + +.bp3-icon-airplane::before{ + content:"î‹"; } + +.bp3-icon-align-center::before{ + content:""; } + +.bp3-icon-align-justify::before{ + content:""; } + +.bp3-icon-align-left::before{ + content:""; } + +.bp3-icon-align-right::before{ + content:""; } + +.bp3-icon-alignment-bottom::before{ + content:""; } + +.bp3-icon-alignment-horizontal-center::before{ + content:""; } + +.bp3-icon-alignment-left::before{ + content:""; } + +.bp3-icon-alignment-right::before{ + content:""; } + +.bp3-icon-alignment-top::before{ + content:""; } + +.bp3-icon-alignment-vertical-center::before{ + content:""; } + +.bp3-icon-annotation::before{ + content:"î›°"; } + +.bp3-icon-application::before{ + content:""; } + +.bp3-icon-applications::before{ + content:""; } + +.bp3-icon-archive::before{ + content:""; } + +.bp3-icon-arrow-bottom-left::before{ + content:"↙"; } + +.bp3-icon-arrow-bottom-right::before{ + content:"↘"; } + +.bp3-icon-arrow-down::before{ + content:"↓"; } + +.bp3-icon-arrow-left::before{ + content:"â†"; } + +.bp3-icon-arrow-right::before{ + content:"→"; } + +.bp3-icon-arrow-top-left::before{ + content:"↖"; } + +.bp3-icon-arrow-top-right::before{ + content:"↗"; } + +.bp3-icon-arrow-up::before{ + content:"↑"; } + +.bp3-icon-arrows-horizontal::before{ + content:"↔"; } + +.bp3-icon-arrows-vertical::before{ + content:"↕"; } + +.bp3-icon-asterisk::before{ + content:"*"; } + +.bp3-icon-automatic-updates::before{ + content:""; } + +.bp3-icon-badge::before{ + content:""; } + +.bp3-icon-ban-circle::before{ + content:"îš"; } + +.bp3-icon-bank-account::before{ + content:"î¯"; } + +.bp3-icon-barcode::before{ + content:""; } + +.bp3-icon-blank::before{ + content:""; } + +.bp3-icon-blocked-person::before{ + content:"î¨"; } + +.bp3-icon-bold::before{ + content:""; } + +.bp3-icon-book::before{ + content:""; } + +.bp3-icon-bookmark::before{ + content:""; } + +.bp3-icon-box::before{ + content:"îš¿"; } + +.bp3-icon-briefcase::before{ + content:"î™´"; } + +.bp3-icon-bring-data::before{ + content:""; } + +.bp3-icon-build::before{ + content:"îœ"; } + +.bp3-icon-calculator::before{ + content:""; } + +.bp3-icon-calendar::before{ + content:""; } + +.bp3-icon-camera::before{ + content:"îšž"; } + +.bp3-icon-caret-down::before{ + content:"⌄"; } + +.bp3-icon-caret-left::before{ + content:"〈"; } + +.bp3-icon-caret-right::before{ + content:"〉"; } + +.bp3-icon-caret-up::before{ + content:"⌃"; } + +.bp3-icon-cell-tower::before{ + content:"î°"; } + +.bp3-icon-changes::before{ + content:""; } + +.bp3-icon-chart::before{ + content:""; } + +.bp3-icon-chat::before{ + content:""; } + +.bp3-icon-chevron-backward::before{ + content:""; } + +.bp3-icon-chevron-down::before{ + content:"îš—"; } + +.bp3-icon-chevron-forward::before{ + content:"î› "; } + +.bp3-icon-chevron-left::before{ + content:"îš”"; } + +.bp3-icon-chevron-right::before{ + content:"îš•"; } + +.bp3-icon-chevron-up::before{ + content:"îš–"; } + +.bp3-icon-circle::before{ + content:""; } + +.bp3-icon-circle-arrow-down::before{ + content:""; } + +.bp3-icon-circle-arrow-left::before{ + content:""; } + +.bp3-icon-circle-arrow-right::before{ + content:"îš‹"; } + +.bp3-icon-circle-arrow-up::before{ + content:"îš"; } + +.bp3-icon-citation::before{ + content:""; } + +.bp3-icon-clean::before{ + content:""; } + +.bp3-icon-clipboard::before{ + content:"î˜"; } + +.bp3-icon-cloud::before{ + content:"â˜"; } + +.bp3-icon-cloud-download::before{ + content:"îš"; } + +.bp3-icon-cloud-upload::before{ + content:"îš‘"; } + +.bp3-icon-code::before{ + content:""; } + +.bp3-icon-code-block::before{ + content:"î›…"; } + +.bp3-icon-cog::before{ + content:"î™…"; } + +.bp3-icon-collapse-all::before{ + content:"î£"; } + +.bp3-icon-column-layout::before{ + content:""; } + +.bp3-icon-comment::before{ + content:""; } + +.bp3-icon-comparison::before{ + content:""; } + +.bp3-icon-compass::before{ + content:"îžœ"; } + +.bp3-icon-compressed::before{ + content:""; } + +.bp3-icon-confirm::before{ + content:""; } + +.bp3-icon-console::before{ + content:"îž›"; } + +.bp3-icon-contrast::before{ + content:""; } + +.bp3-icon-control::before{ + content:""; } + +.bp3-icon-credit-card::before{ + content:""; } + +.bp3-icon-cross::before{ + content:"✗"; } + +.bp3-icon-crown::before{ + content:"îž´"; } + +.bp3-icon-cube::before{ + content:""; } + +.bp3-icon-cube-add::before{ + content:""; } + +.bp3-icon-cube-remove::before{ + content:"îŸ"; } + +.bp3-icon-curved-range-chart::before{ + content:""; } + +.bp3-icon-cut::before{ + content:""; } + +.bp3-icon-dashboard::before{ + content:"î‘"; } + +.bp3-icon-data-lineage::before{ + content:""; } + +.bp3-icon-database::before{ + content:""; } + +.bp3-icon-delete::before{ + content:""; } + +.bp3-icon-delta::before{ + content:"Δ"; } + +.bp3-icon-derive-column::before{ + content:""; } + +.bp3-icon-desktop::before{ + content:""; } + +.bp3-icon-diagnosis::before{ + content:"î¤"; } + +.bp3-icon-diagram-tree::before{ + content:"îž³"; } + +.bp3-icon-direction-left::before{ + content:"îš"; } + +.bp3-icon-direction-right::before{ + content:"îš‚"; } + +.bp3-icon-disable::before{ + content:""; } + +.bp3-icon-document::before{ + content:""; } + +.bp3-icon-document-open::before{ + content:""; } + +.bp3-icon-document-share::before{ + content:""; } + +.bp3-icon-dollar::before{ + content:"$"; } + +.bp3-icon-dot::before{ + content:"•"; } + +.bp3-icon-double-caret-horizontal::before{ + content:""; } + +.bp3-icon-double-caret-vertical::before{ + content:""; } + +.bp3-icon-double-chevron-down::before{ + content:""; } + +.bp3-icon-double-chevron-left::before{ + content:""; } + +.bp3-icon-double-chevron-right::before{ + content:"îœ"; } + +.bp3-icon-double-chevron-up::before{ + content:""; } + +.bp3-icon-doughnut-chart::before{ + content:""; } + +.bp3-icon-download::before{ + content:""; } + +.bp3-icon-drag-handle-horizontal::before{ + content:""; } + +.bp3-icon-drag-handle-vertical::before{ + content:""; } + +.bp3-icon-draw::before{ + content:""; } + +.bp3-icon-drive-time::before{ + content:""; } + +.bp3-icon-duplicate::before{ + content:"îšœ"; } + +.bp3-icon-edit::before{ + content:"✎"; } + +.bp3-icon-eject::before{ + content:"â"; } + +.bp3-icon-endorsed::before{ + content:"îŸ"; } + +.bp3-icon-envelope::before{ + content:"✉"; } + +.bp3-icon-equals::before{ + content:""; } + +.bp3-icon-eraser::before{ + content:"î³"; } + +.bp3-icon-error::before{ + content:""; } + +.bp3-icon-euro::before{ + content:"€"; } + +.bp3-icon-exchange::before{ + content:""; } + +.bp3-icon-exclude-row::before{ + content:""; } + +.bp3-icon-expand-all::before{ + content:"î¤"; } + +.bp3-icon-export::before{ + content:""; } + +.bp3-icon-eye-off::before{ + content:""; } + +.bp3-icon-eye-on::before{ + content:"îš"; } + +.bp3-icon-eye-open::before{ + content:""; } + +.bp3-icon-fast-backward::before{ + content:""; } + +.bp3-icon-fast-forward::before{ + content:""; } + +.bp3-icon-feed::before{ + content:"î™–"; } + +.bp3-icon-feed-subscribed::before{ + content:"îž"; } + +.bp3-icon-film::before{ + content:"îš¡"; } + +.bp3-icon-filter::before{ + content:""; } + +.bp3-icon-filter-keep::before{ + content:""; } + +.bp3-icon-filter-list::before{ + content:"î›®"; } + +.bp3-icon-filter-open::before{ + content:""; } + +.bp3-icon-filter-remove::before{ + content:"îž"; } + +.bp3-icon-flag::before{ + content:"âš‘"; } + +.bp3-icon-flame::before{ + content:"îž©"; } + +.bp3-icon-flash::before{ + content:"îš³"; } + +.bp3-icon-floppy-disk::before{ + content:"îš·"; } + +.bp3-icon-flow-branch::before{ + content:"îŸ"; } + +.bp3-icon-flow-end::before{ + content:""; } + +.bp3-icon-flow-linear::before{ + content:""; } + +.bp3-icon-flow-review::before{ + content:""; } + +.bp3-icon-flow-review-branch::before{ + content:""; } + +.bp3-icon-flows::before{ + content:"î™™"; } + +.bp3-icon-folder-close::before{ + content:"î™’"; } + +.bp3-icon-folder-new::before{ + content:"îž°"; } + +.bp3-icon-folder-open::before{ + content:""; } + +.bp3-icon-folder-shared::before{ + content:""; } + +.bp3-icon-folder-shared-open::before{ + content:"î™°"; } + +.bp3-icon-follower::before{ + content:"î "; } + +.bp3-icon-following::before{ + content:"î¡"; } + +.bp3-icon-font::before{ + content:"îš´"; } + +.bp3-icon-fork::before{ + content:""; } + +.bp3-icon-form::before{ + content:"îž•"; } + +.bp3-icon-full-circle::before{ + content:"îš…"; } + +.bp3-icon-full-stacked-chart::before{ + content:"îž"; } + +.bp3-icon-fullscreen::before{ + content:"îš™"; } + +.bp3-icon-function::before{ + content:""; } + +.bp3-icon-gantt-chart::before{ + content:"î›´"; } + +.bp3-icon-geolocation::before{ + content:""; } + +.bp3-icon-geosearch::before{ + content:""; } + +.bp3-icon-git-branch::before{ + content:""; } + +.bp3-icon-git-commit::before{ + content:""; } + +.bp3-icon-git-merge::before{ + content:""; } + +.bp3-icon-git-new-branch::before{ + content:"î‰"; } + +.bp3-icon-git-pull::before{ + content:""; } + +.bp3-icon-git-push::before{ + content:""; } + +.bp3-icon-git-repo::before{ + content:"îˆ"; } + +.bp3-icon-glass::before{ + content:"îš±"; } + +.bp3-icon-globe::before{ + content:""; } + +.bp3-icon-globe-network::before{ + content:"îžµ"; } + +.bp3-icon-graph::before{ + content:""; } + +.bp3-icon-graph-remove::before{ + content:""; } + +.bp3-icon-greater-than::before{ + content:""; } + +.bp3-icon-greater-than-or-equal-to::before{ + content:""; } + +.bp3-icon-grid::before{ + content:"î›"; } + +.bp3-icon-grid-view::before{ + content:""; } + +.bp3-icon-group-objects::before{ + content:""; } + +.bp3-icon-grouped-bar-chart::before{ + content:"î"; } + +.bp3-icon-hand::before{ + content:""; } + +.bp3-icon-hand-down::before{ + content:"îš»"; } + +.bp3-icon-hand-left::before{ + content:"îš¼"; } + +.bp3-icon-hand-right::before{ + content:"îš¹"; } + +.bp3-icon-hand-up::before{ + content:""; } + +.bp3-icon-header::before{ + content:"îšµ"; } + +.bp3-icon-header-one::before{ + content:"îž“"; } + +.bp3-icon-header-two::before{ + content:"îž”"; } + +.bp3-icon-headset::before{ + content:""; } + +.bp3-icon-heart::before{ + content:"♥"; } + +.bp3-icon-heart-broken::before{ + content:""; } + +.bp3-icon-heat-grid::before{ + content:""; } + +.bp3-icon-heatmap::before{ + content:""; } + +.bp3-icon-help::before{ + content:"?"; } + +.bp3-icon-helper-management::before{ + content:"î™"; } + +.bp3-icon-highlight::before{ + content:"î›"; } + +.bp3-icon-history::before{ + content:""; } + +.bp3-icon-home::before{ + content:"⌂"; } + +.bp3-icon-horizontal-bar-chart::before{ + content:""; } + +.bp3-icon-horizontal-bar-chart-asc::before{ + content:"îœ"; } + +.bp3-icon-horizontal-bar-chart-desc::before{ + content:"îœ"; } + +.bp3-icon-horizontal-distribution::before{ + content:"îœ "; } + +.bp3-icon-id-number::before{ + content:"î±"; } + +.bp3-icon-image-rotate-left::before{ + content:""; } + +.bp3-icon-image-rotate-right::before{ + content:""; } + +.bp3-icon-import::before{ + content:""; } + +.bp3-icon-inbox::before{ + content:""; } + +.bp3-icon-inbox-filtered::before{ + content:""; } + +.bp3-icon-inbox-geo::before{ + content:""; } + +.bp3-icon-inbox-search::before{ + content:""; } + +.bp3-icon-inbox-update::before{ + content:""; } + +.bp3-icon-info-sign::before{ + content:"ℹ"; } + +.bp3-icon-inheritance::before{ + content:""; } + +.bp3-icon-inner-join::before{ + content:""; } + +.bp3-icon-insert::before{ + content:""; } + +.bp3-icon-intersection::before{ + content:"î¥"; } + +.bp3-icon-ip-address::before{ + content:"î²"; } + +.bp3-icon-issue::before{ + content:"î´"; } + +.bp3-icon-issue-closed::before{ + content:"î¶"; } + +.bp3-icon-issue-new::before{ + content:"îµ"; } + +.bp3-icon-italic::before{ + content:""; } + +.bp3-icon-join-table::before{ + content:""; } + +.bp3-icon-key::before{ + content:""; } + +.bp3-icon-key-backspace::before{ + content:""; } + +.bp3-icon-key-command::before{ + content:""; } + +.bp3-icon-key-control::before{ + content:""; } + +.bp3-icon-key-delete::before{ + content:""; } + +.bp3-icon-key-enter::before{ + content:""; } + +.bp3-icon-key-escape::before{ + content:""; } + +.bp3-icon-key-option::before{ + content:"î‚"; } + +.bp3-icon-key-shift::before{ + content:""; } + +.bp3-icon-key-tab::before{ + content:"î—"; } + +.bp3-icon-known-vehicle::before{ + content:""; } + +.bp3-icon-lab-test::before{ + content:""; } + +.bp3-icon-label::before{ + content:""; } + +.bp3-icon-layer::before{ + content:"î›"; } + +.bp3-icon-layers::before{ + content:""; } + +.bp3-icon-layout::before{ + content:""; } + +.bp3-icon-layout-auto::before{ + content:"î˜"; } + +.bp3-icon-layout-balloon::before{ + content:""; } + +.bp3-icon-layout-circle::before{ + content:""; } + +.bp3-icon-layout-grid::before{ + content:"î˜"; } + +.bp3-icon-layout-group-by::before{ + content:""; } + +.bp3-icon-layout-hierarchy::before{ + content:"î˜"; } + +.bp3-icon-layout-linear::before{ + content:""; } + +.bp3-icon-layout-skew-grid::before{ + content:""; } + +.bp3-icon-layout-sorted-clusters::before{ + content:"î›”"; } + +.bp3-icon-learning::before{ + content:""; } + +.bp3-icon-left-join::before{ + content:""; } + +.bp3-icon-less-than::before{ + content:""; } + +.bp3-icon-less-than-or-equal-to::before{ + content:""; } + +.bp3-icon-lifesaver::before{ + content:""; } + +.bp3-icon-lightbulb::before{ + content:"îš°"; } + +.bp3-icon-link::before{ + content:"î˜"; } + +.bp3-icon-list::before{ + content:"☰"; } + +.bp3-icon-list-columns::before{ + content:"îž¹"; } + +.bp3-icon-list-detail-view::before{ + content:"îƒ"; } + +.bp3-icon-locate::before{ + content:""; } + +.bp3-icon-lock::before{ + content:""; } + +.bp3-icon-log-in::before{ + content:"îšš"; } + +.bp3-icon-log-out::before{ + content:""; } + +.bp3-icon-manual::before{ + content:""; } + +.bp3-icon-manually-entered-data::before{ + content:"îŠ"; } + +.bp3-icon-map::before{ + content:""; } + +.bp3-icon-map-create::before{ + content:"î"; } + +.bp3-icon-map-marker::before{ + content:""; } + +.bp3-icon-maximize::before{ + content:""; } + +.bp3-icon-media::before{ + content:""; } + +.bp3-icon-menu::before{ + content:"î¢"; } + +.bp3-icon-menu-closed::before{ + content:""; } + +.bp3-icon-menu-open::before{ + content:"î™”"; } + +.bp3-icon-merge-columns::before{ + content:"î"; } + +.bp3-icon-merge-links::before{ + content:""; } + +.bp3-icon-minimize::before{ + content:""; } + +.bp3-icon-minus::before{ + content:"−"; } + +.bp3-icon-mobile-phone::before{ + content:""; } + +.bp3-icon-mobile-video::before{ + content:""; } + +.bp3-icon-moon::before{ + content:"î”"; } + +.bp3-icon-more::before{ + content:""; } + +.bp3-icon-mountain::before{ + content:"îž±"; } + +.bp3-icon-move::before{ + content:"îš“"; } + +.bp3-icon-mugshot::before{ + content:"î››"; } + +.bp3-icon-multi-select::before{ + content:""; } + +.bp3-icon-music::before{ + content:""; } + +.bp3-icon-new-drawing::before{ + content:""; } + +.bp3-icon-new-grid-item::before{ + content:"î‡"; } + +.bp3-icon-new-layer::before{ + content:""; } + +.bp3-icon-new-layers::before{ + content:""; } + +.bp3-icon-new-link::before{ + content:""; } + +.bp3-icon-new-object::before{ + content:"î™"; } + +.bp3-icon-new-person::before{ + content:""; } + +.bp3-icon-new-prescription::before{ + content:"îž‹"; } + +.bp3-icon-new-text-box::before{ + content:"î™›"; } + +.bp3-icon-ninja::before{ + content:""; } + +.bp3-icon-not-equal-to::before{ + content:"îŸ "; } + +.bp3-icon-notifications::before{ + content:""; } + +.bp3-icon-notifications-updated::before{ + content:""; } + +.bp3-icon-numbered-list::before{ + content:"î†"; } + +.bp3-icon-numerical::before{ + content:"î–"; } + +.bp3-icon-office::before{ + content:"îš›"; } + +.bp3-icon-offline::before{ + content:""; } + +.bp3-icon-oil-field::before{ + content:""; } + +.bp3-icon-one-column::before{ + content:""; } + +.bp3-icon-outdated::before{ + content:""; } + +.bp3-icon-page-layout::before{ + content:"î™ "; } + +.bp3-icon-panel-stats::before{ + content:"î·"; } + +.bp3-icon-panel-table::before{ + content:"î¸"; } + +.bp3-icon-paperclip::before{ + content:""; } + +.bp3-icon-paragraph::before{ + content:"î¬"; } + +.bp3-icon-path::before{ + content:"î“"; } + +.bp3-icon-path-search::before{ + content:""; } + +.bp3-icon-pause::before{ + content:"îš©"; } + +.bp3-icon-people::before{ + content:""; } + +.bp3-icon-percentage::before{ + content:"îª"; } + +.bp3-icon-person::before{ + content:""; } + +.bp3-icon-phone::before{ + content:"☎"; } + +.bp3-icon-pie-chart::before{ + content:"îš„"; } + +.bp3-icon-pin::before{ + content:""; } + +.bp3-icon-pivot::before{ + content:"î›±"; } + +.bp3-icon-pivot-table::before{ + content:""; } + +.bp3-icon-play::before{ + content:"îš«"; } + +.bp3-icon-plus::before{ + content:"+"; } + +.bp3-icon-polygon-filter::before{ + content:""; } + +.bp3-icon-power::before{ + content:"î›™"; } + +.bp3-icon-predictive-analysis::before{ + content:""; } + +.bp3-icon-prescription::before{ + content:""; } + +.bp3-icon-presentation::before{ + content:""; } + +.bp3-icon-print::before{ + content:"⎙"; } + +.bp3-icon-projects::before{ + content:""; } + +.bp3-icon-properties::before{ + content:""; } + +.bp3-icon-property::before{ + content:""; } + +.bp3-icon-publish-function::before{ + content:"î’"; } + +.bp3-icon-pulse::before{ + content:""; } + +.bp3-icon-random::before{ + content:""; } + +.bp3-icon-record::before{ + content:"îš®"; } + +.bp3-icon-redo::before{ + content:""; } + +.bp3-icon-refresh::before{ + content:""; } + +.bp3-icon-regression-chart::before{ + content:"î˜"; } + +.bp3-icon-remove::before{ + content:""; } + +.bp3-icon-remove-column::before{ + content:"î•"; } + +.bp3-icon-remove-column-left::before{ + content:""; } + +.bp3-icon-remove-column-right::before{ + content:""; } + +.bp3-icon-remove-row-bottom::before{ + content:""; } + +.bp3-icon-remove-row-top::before{ + content:"î›»"; } + +.bp3-icon-repeat::before{ + content:"îš’"; } + +.bp3-icon-reset::before{ + content:""; } + +.bp3-icon-resolve::before{ + content:""; } + +.bp3-icon-rig::before{ + content:"î€"; } + +.bp3-icon-right-join::before{ + content:""; } + +.bp3-icon-ring::before{ + content:""; } + +.bp3-icon-rotate-document::before{ + content:""; } + +.bp3-icon-rotate-page::before{ + content:""; } + +.bp3-icon-satellite::before{ + content:"î«"; } + +.bp3-icon-saved::before{ + content:""; } + +.bp3-icon-scatter-plot::before{ + content:""; } + +.bp3-icon-search::before{ + content:""; } + +.bp3-icon-search-around::before{ + content:""; } + +.bp3-icon-search-template::before{ + content:""; } + +.bp3-icon-search-text::before{ + content:""; } + +.bp3-icon-segmented-control::before{ + content:""; } + +.bp3-icon-select::before{ + content:""; } + +.bp3-icon-selection::before{ + content:"⦿"; } + +.bp3-icon-send-to::before{ + content:"î™®"; } + +.bp3-icon-send-to-graph::before{ + content:""; } + +.bp3-icon-send-to-map::before{ + content:""; } + +.bp3-icon-series-add::before{ + content:"îž–"; } + +.bp3-icon-series-configuration::before{ + content:"îžš"; } + +.bp3-icon-series-derived::before{ + content:"îž™"; } + +.bp3-icon-series-filtered::before{ + content:""; } + +.bp3-icon-series-search::before{ + content:"îž—"; } + +.bp3-icon-settings::before{ + content:""; } + +.bp3-icon-share::before{ + content:""; } + +.bp3-icon-shield::before{ + content:"îž²"; } + +.bp3-icon-shop::before{ + content:""; } + +.bp3-icon-shopping-cart::before{ + content:"î›"; } + +.bp3-icon-signal-search::before{ + content:""; } + +.bp3-icon-sim-card::before{ + content:""; } + +.bp3-icon-slash::before{ + content:"î©"; } + +.bp3-icon-small-cross::before{ + content:"î›—"; } + +.bp3-icon-small-minus::before{ + content:""; } + +.bp3-icon-small-plus::before{ + content:"îœ"; } + +.bp3-icon-small-tick::before{ + content:""; } + +.bp3-icon-snowflake::before{ + content:""; } + +.bp3-icon-social-media::before{ + content:"î™±"; } + +.bp3-icon-sort::before{ + content:"î™"; } + +.bp3-icon-sort-alphabetical::before{ + content:"î™"; } + +.bp3-icon-sort-alphabetical-desc::before{ + content:""; } + +.bp3-icon-sort-asc::before{ + content:""; } + +.bp3-icon-sort-desc::before{ + content:"î›–"; } + +.bp3-icon-sort-numerical::before{ + content:""; } + +.bp3-icon-sort-numerical-desc::before{ + content:""; } + +.bp3-icon-split-columns::before{ + content:"î"; } + +.bp3-icon-square::before{ + content:""; } + +.bp3-icon-stacked-chart::before{ + content:""; } + +.bp3-icon-star::before{ + content:"★"; } + +.bp3-icon-star-empty::before{ + content:"☆"; } + +.bp3-icon-step-backward::before{ + content:""; } + +.bp3-icon-step-chart::before{ + content:"îœ"; } + +.bp3-icon-step-forward::before{ + content:"îš"; } + +.bp3-icon-stop::before{ + content:""; } + +.bp3-icon-stopwatch::before{ + content:"î¤"; } + +.bp3-icon-strikethrough::before{ + content:""; } + +.bp3-icon-style::before{ + content:"î˜"; } + +.bp3-icon-swap-horizontal::before{ + content:"î…"; } + +.bp3-icon-swap-vertical::before{ + content:"î„"; } + +.bp3-icon-symbol-circle::before{ + content:""; } + +.bp3-icon-symbol-cross::before{ + content:""; } + +.bp3-icon-symbol-diamond::before{ + content:""; } + +.bp3-icon-symbol-square::before{ + content:""; } + +.bp3-icon-symbol-triangle-down::before{ + content:""; } + +.bp3-icon-symbol-triangle-up::before{ + content:""; } + +.bp3-icon-tag::before{ + content:""; } + +.bp3-icon-take-action::before{ + content:""; } + +.bp3-icon-taxi::before{ + content:"îžž"; } + +.bp3-icon-text-highlight::before{ + content:"î›"; } + +.bp3-icon-th::before{ + content:""; } + +.bp3-icon-th-derived::before{ + content:""; } + +.bp3-icon-th-disconnect::before{ + content:""; } + +.bp3-icon-th-filtered::before{ + content:""; } + +.bp3-icon-th-list::before{ + content:""; } + +.bp3-icon-thumbs-down::before{ + content:"îš¾"; } + +.bp3-icon-thumbs-up::before{ + content:"îš½"; } + +.bp3-icon-tick::before{ + content:"✓"; } + +.bp3-icon-tick-circle::before{ + content:"î¹"; } + +.bp3-icon-time::before{ + content:"â²"; } + +.bp3-icon-timeline-area-chart::before{ + content:"î›"; } + +.bp3-icon-timeline-bar-chart::before{ + content:"î˜ "; } + +.bp3-icon-timeline-events::before{ + content:""; } + +.bp3-icon-timeline-line-chart::before{ + content:""; } + +.bp3-icon-tint::before{ + content:"îš²"; } + +.bp3-icon-torch::before{ + content:"î™·"; } + +.bp3-icon-tractor::before{ + content:""; } + +.bp3-icon-train::before{ + content:""; } + +.bp3-icon-translate::before{ + content:"î™"; } + +.bp3-icon-trash::before{ + content:""; } + +.bp3-icon-tree::before{ + content:"îž·"; } + +.bp3-icon-trending-down::before{ + content:""; } + +.bp3-icon-trending-up::before{ + content:""; } + +.bp3-icon-truck::before{ + content:""; } + +.bp3-icon-two-columns::before{ + content:"î™—"; } + +.bp3-icon-unarchive::before{ + content:""; } + +.bp3-icon-underline::before{ + content:"âŽ"; } + +.bp3-icon-undo::before{ + content:"⎌"; } + +.bp3-icon-ungroup-objects::before{ + content:""; } + +.bp3-icon-unknown-vehicle::before{ + content:""; } + +.bp3-icon-unlock::before{ + content:""; } + +.bp3-icon-unpin::before{ + content:"î™"; } + +.bp3-icon-unresolve::before{ + content:""; } + +.bp3-icon-updated::before{ + content:""; } + +.bp3-icon-upload::before{ + content:"îš"; } + +.bp3-icon-user::before{ + content:""; } + +.bp3-icon-variable::before{ + content:""; } + +.bp3-icon-vertical-bar-chart-asc::before{ + content:"î›"; } + +.bp3-icon-vertical-bar-chart-desc::before{ + content:""; } + +.bp3-icon-vertical-distribution::before{ + content:""; } + +.bp3-icon-video::before{ + content:"îš "; } + +.bp3-icon-volume-down::before{ + content:""; } + +.bp3-icon-volume-off::before{ + content:""; } + +.bp3-icon-volume-up::before{ + content:""; } + +.bp3-icon-walk::before{ + content:"îž"; } + +.bp3-icon-warning-sign::before{ + content:""; } + +.bp3-icon-waterfall-chart::before{ + content:""; } + +.bp3-icon-widget::before{ + content:""; } + +.bp3-icon-widget-button::before{ + content:"îž"; } + +.bp3-icon-widget-footer::before{ + content:"îž’"; } + +.bp3-icon-widget-header::before{ + content:"îž‘"; } + +.bp3-icon-wrench::before{ + content:""; } + +.bp3-icon-zoom-in::before{ + content:"î™"; } + +.bp3-icon-zoom-out::before{ + content:""; } + +.bp3-icon-zoom-to-fit::before{ + content:"î™»"; } +.bp3-submenu > .bp3-popover-wrapper{ + display:block; } + +.bp3-submenu .bp3-popover-target{ + display:block; } + .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item{ } + +.bp3-submenu.bp3-popover{ + -webkit-box-shadow:none; + box-shadow:none; + padding:0 5px; } + .bp3-submenu.bp3-popover > .bp3-popover-content{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-submenu.bp3-popover, .bp3-submenu.bp3-popover.bp3-dark{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-dark .bp3-submenu.bp3-popover > .bp3-popover-content, .bp3-submenu.bp3-popover.bp3-dark > .bp3-popover-content{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); } +.bp3-menu{ + background:#ffffff; + border-radius:3px; + color:#182026; + list-style:none; + margin:0; + min-width:180px; + padding:5px; + text-align:left; } + +.bp3-menu-divider{ + border-top:1px solid rgba(16, 22, 26, 0.15); + display:block; + margin:5px; } + .bp3-dark .bp3-menu-divider{ + border-top-color:rgba(255, 255, 255, 0.15); } + +.bp3-menu-item{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:start; + -ms-flex-align:start; + align-items:flex-start; + border-radius:2px; + color:inherit; + line-height:20px; + padding:5px 7px; + text-decoration:none; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; } + .bp3-menu-item > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-menu-item > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-menu-item::before, + .bp3-menu-item > *{ + margin-right:7px; } + .bp3-menu-item:empty::before, + .bp3-menu-item > :last-child{ + margin-right:0; } + .bp3-menu-item > .bp3-fill{ + word-break:break-word; } + .bp3-menu-item:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item{ + background-color:rgba(167, 182, 194, 0.3); + cursor:pointer; + text-decoration:none; } + .bp3-menu-item.bp3-disabled{ + background-color:inherit; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + .bp3-dark .bp3-menu-item{ + color:inherit; } + .bp3-dark .bp3-menu-item:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-menu-item{ + background-color:rgba(138, 155, 168, 0.15); + color:inherit; } + .bp3-dark .bp3-menu-item.bp3-disabled{ + background-color:inherit; + color:rgba(167, 182, 194, 0.6); } + .bp3-menu-item.bp3-intent-primary{ + color:#106ba3; } + .bp3-menu-item.bp3-intent-primary .bp3-icon{ + color:inherit; } + .bp3-menu-item.bp3-intent-primary::before, .bp3-menu-item.bp3-intent-primary::after, + .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{ + color:#106ba3; } + .bp3-menu-item.bp3-intent-primary:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-menu-item.bp3-intent-primary.bp3-active{ + background-color:#137cbd; } + .bp3-menu-item.bp3-intent-primary:active{ + background-color:#106ba3; } + .bp3-menu-item.bp3-intent-primary:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-menu-item.bp3-intent-primary:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::before, .bp3-menu-item.bp3-intent-primary:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::after, + .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label, + .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-primary:active, .bp3-menu-item.bp3-intent-primary:active::before, .bp3-menu-item.bp3-intent-primary:active::after, + .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-primary.bp3-active, .bp3-menu-item.bp3-intent-primary.bp3-active::before, .bp3-menu-item.bp3-intent-primary.bp3-active::after, + .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-menu-item.bp3-intent-success{ + color:#0d8050; } + .bp3-menu-item.bp3-intent-success .bp3-icon{ + color:inherit; } + .bp3-menu-item.bp3-intent-success::before, .bp3-menu-item.bp3-intent-success::after, + .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{ + color:#0d8050; } + .bp3-menu-item.bp3-intent-success:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-menu-item.bp3-intent-success.bp3-active{ + background-color:#0f9960; } + .bp3-menu-item.bp3-intent-success:active{ + background-color:#0d8050; } + .bp3-menu-item.bp3-intent-success:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-menu-item.bp3-intent-success:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::before, .bp3-menu-item.bp3-intent-success:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::after, + .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label, + .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-success:active, .bp3-menu-item.bp3-intent-success:active::before, .bp3-menu-item.bp3-intent-success:active::after, + .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-success.bp3-active, .bp3-menu-item.bp3-intent-success.bp3-active::before, .bp3-menu-item.bp3-intent-success.bp3-active::after, + .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-menu-item.bp3-intent-warning{ + color:#bf7326; } + .bp3-menu-item.bp3-intent-warning .bp3-icon{ + color:inherit; } + .bp3-menu-item.bp3-intent-warning::before, .bp3-menu-item.bp3-intent-warning::after, + .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{ + color:#bf7326; } + .bp3-menu-item.bp3-intent-warning:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-menu-item.bp3-intent-warning.bp3-active{ + background-color:#d9822b; } + .bp3-menu-item.bp3-intent-warning:active{ + background-color:#bf7326; } + .bp3-menu-item.bp3-intent-warning:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-menu-item.bp3-intent-warning:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::before, .bp3-menu-item.bp3-intent-warning:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::after, + .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label, + .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-warning:active, .bp3-menu-item.bp3-intent-warning:active::before, .bp3-menu-item.bp3-intent-warning:active::after, + .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-warning.bp3-active, .bp3-menu-item.bp3-intent-warning.bp3-active::before, .bp3-menu-item.bp3-intent-warning.bp3-active::after, + .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-menu-item.bp3-intent-danger{ + color:#c23030; } + .bp3-menu-item.bp3-intent-danger .bp3-icon{ + color:inherit; } + .bp3-menu-item.bp3-intent-danger::before, .bp3-menu-item.bp3-intent-danger::after, + .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{ + color:#c23030; } + .bp3-menu-item.bp3-intent-danger:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-menu-item.bp3-intent-danger.bp3-active{ + background-color:#db3737; } + .bp3-menu-item.bp3-intent-danger:active{ + background-color:#c23030; } + .bp3-menu-item.bp3-intent-danger:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-menu-item.bp3-intent-danger:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::before, .bp3-menu-item.bp3-intent-danger:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::after, + .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label, + .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-danger:active, .bp3-menu-item.bp3-intent-danger:active::before, .bp3-menu-item.bp3-intent-danger:active::after, + .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-danger.bp3-active, .bp3-menu-item.bp3-intent-danger.bp3-active::before, .bp3-menu-item.bp3-intent-danger.bp3-active::after, + .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-menu-item::before{ + font-family:"Icons16", sans-serif; + font-size:16px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + margin-right:7px; } + .bp3-menu-item::before, + .bp3-menu-item > .bp3-icon{ + color:#5c7080; + margin-top:2px; } + .bp3-menu-item .bp3-menu-item-label{ + color:#5c7080; } + .bp3-menu-item:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item{ + color:inherit; } + .bp3-menu-item.bp3-active, .bp3-menu-item:active{ + background-color:rgba(115, 134, 148, 0.3); } + .bp3-menu-item.bp3-disabled{ + background-color:inherit !important; + color:rgba(92, 112, 128, 0.6) !important; + cursor:not-allowed !important; + outline:none !important; } + .bp3-menu-item.bp3-disabled::before, + .bp3-menu-item.bp3-disabled > .bp3-icon, + .bp3-menu-item.bp3-disabled .bp3-menu-item-label{ + color:rgba(92, 112, 128, 0.6) !important; } + .bp3-large .bp3-menu-item{ + font-size:16px; + line-height:22px; + padding:9px 7px; } + .bp3-large .bp3-menu-item .bp3-icon{ + margin-top:3px; } + .bp3-large .bp3-menu-item::before{ + font-family:"Icons20", sans-serif; + font-size:20px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + margin-right:10px; + margin-top:1px; } + +button.bp3-menu-item{ + background:none; + border:none; + text-align:left; + width:100%; } +.bp3-menu-header{ + border-top:1px solid rgba(16, 22, 26, 0.15); + display:block; + margin:5px; + cursor:default; + padding-left:2px; } + .bp3-dark .bp3-menu-header{ + border-top-color:rgba(255, 255, 255, 0.15); } + .bp3-menu-header:first-of-type{ + border-top:none; } + .bp3-menu-header > h6{ + color:#182026; + font-weight:600; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + line-height:17px; + margin:0; + padding:10px 7px 0 1px; } + .bp3-dark .bp3-menu-header > h6{ + color:#f5f8fa; } + .bp3-menu-header:first-of-type > h6{ + padding-top:0; } + .bp3-large .bp3-menu-header > h6{ + font-size:18px; + padding-bottom:5px; + padding-top:15px; } + .bp3-large .bp3-menu-header:first-of-type > h6{ + padding-top:0; } + +.bp3-dark .bp3-menu{ + background:#30404d; + color:#f5f8fa; } + +.bp3-dark .bp3-menu-item{ } + .bp3-dark .bp3-menu-item.bp3-intent-primary{ + color:#48aff0; } + .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{ + color:inherit; } + .bp3-dark .bp3-menu-item.bp3-intent-primary::before, .bp3-dark .bp3-menu-item.bp3-intent-primary::after, + .bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{ + color:#48aff0; } + .bp3-dark .bp3-menu-item.bp3-intent-primary:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{ + background-color:#137cbd; } + .bp3-dark .bp3-menu-item.bp3-intent-primary:active{ + background-color:#106ba3; } + .bp3-dark .bp3-menu-item.bp3-intent-primary:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::after, + .bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label, + .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item .bp3-menu-item-label, + .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-primary:active, .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before, .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after, + .bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after, + .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-dark .bp3-menu-item.bp3-intent-success{ + color:#3dcc91; } + .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{ + color:inherit; } + .bp3-dark .bp3-menu-item.bp3-intent-success::before, .bp3-dark .bp3-menu-item.bp3-intent-success::after, + .bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{ + color:#3dcc91; } + .bp3-dark .bp3-menu-item.bp3-intent-success:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{ + background-color:#0f9960; } + .bp3-dark .bp3-menu-item.bp3-intent-success:active{ + background-color:#0d8050; } + .bp3-dark .bp3-menu-item.bp3-intent-success:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::after, + .bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label, + .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item .bp3-menu-item-label, + .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-success:active, .bp3-dark .bp3-menu-item.bp3-intent-success:active::before, .bp3-dark .bp3-menu-item.bp3-intent-success:active::after, + .bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after, + .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-dark .bp3-menu-item.bp3-intent-warning{ + color:#ffb366; } + .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{ + color:inherit; } + .bp3-dark .bp3-menu-item.bp3-intent-warning::before, .bp3-dark .bp3-menu-item.bp3-intent-warning::after, + .bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{ + color:#ffb366; } + .bp3-dark .bp3-menu-item.bp3-intent-warning:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{ + background-color:#d9822b; } + .bp3-dark .bp3-menu-item.bp3-intent-warning:active{ + background-color:#bf7326; } + .bp3-dark .bp3-menu-item.bp3-intent-warning:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::after, + .bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label, + .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item .bp3-menu-item-label, + .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-warning:active, .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before, .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after, + .bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after, + .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-dark .bp3-menu-item.bp3-intent-danger{ + color:#ff7373; } + .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{ + color:inherit; } + .bp3-dark .bp3-menu-item.bp3-intent-danger::before, .bp3-dark .bp3-menu-item.bp3-intent-danger::after, + .bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{ + color:#ff7373; } + .bp3-dark .bp3-menu-item.bp3-intent-danger:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{ + background-color:#db3737; } + .bp3-dark .bp3-menu-item.bp3-intent-danger:active{ + background-color:#c23030; } + .bp3-dark .bp3-menu-item.bp3-intent-danger:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::after, + .bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label, + .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item .bp3-menu-item-label, + .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-danger:active, .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before, .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after, + .bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after, + .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{ + color:#ffffff; } + .bp3-dark .bp3-menu-item::before, + .bp3-dark .bp3-menu-item > .bp3-icon{ + color:#a7b6c2; } + .bp3-dark .bp3-menu-item .bp3-menu-item-label{ + color:#a7b6c2; } + .bp3-dark .bp3-menu-item.bp3-active, .bp3-dark .bp3-menu-item:active{ + background-color:rgba(138, 155, 168, 0.3); } + .bp3-dark .bp3-menu-item.bp3-disabled{ + color:rgba(167, 182, 194, 0.6) !important; } + .bp3-dark .bp3-menu-item.bp3-disabled::before, + .bp3-dark .bp3-menu-item.bp3-disabled > .bp3-icon, + .bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{ + color:rgba(167, 182, 194, 0.6) !important; } + +.bp3-dark .bp3-menu-divider, +.bp3-dark .bp3-menu-header{ + border-color:rgba(255, 255, 255, 0.15); } + +.bp3-dark .bp3-menu-header > h6{ + color:#f5f8fa; } + +.bp3-label .bp3-menu{ + margin-top:5px; } +.bp3-navbar{ + background-color:#ffffff; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); + height:50px; + padding:0 15px; + position:relative; + width:100%; + z-index:10; } + .bp3-navbar.bp3-dark, + .bp3-dark .bp3-navbar{ + background-color:#394b59; } + .bp3-navbar.bp3-dark{ + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-navbar{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-navbar.bp3-fixed-top{ + left:0; + position:fixed; + right:0; + top:0; } + +.bp3-navbar-heading{ + font-size:16px; + margin-right:15px; } + +.bp3-navbar-group{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + height:50px; } + .bp3-navbar-group.bp3-align-left{ + float:left; } + .bp3-navbar-group.bp3-align-right{ + float:right; } + +.bp3-navbar-divider{ + border-left:1px solid rgba(16, 22, 26, 0.15); + height:20px; + margin:0 10px; } + .bp3-dark .bp3-navbar-divider{ + border-left-color:rgba(255, 255, 255, 0.15); } +.bp3-non-ideal-state{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + height:100%; + -webkit-box-pack:center; + -ms-flex-pack:center; + justify-content:center; + text-align:center; + width:100%; } + .bp3-non-ideal-state > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-non-ideal-state > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-non-ideal-state::before, + .bp3-non-ideal-state > *{ + margin-bottom:20px; } + .bp3-non-ideal-state:empty::before, + .bp3-non-ideal-state > :last-child{ + margin-bottom:0; } + .bp3-non-ideal-state > *{ + max-width:400px; } + +.bp3-non-ideal-state-visual{ + color:rgba(92, 112, 128, 0.6); + font-size:60px; } + .bp3-dark .bp3-non-ideal-state-visual{ + color:rgba(167, 182, 194, 0.6); } + +.bp3-overflow-list{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -ms-flex-wrap:nowrap; + flex-wrap:nowrap; + min-width:0; } + +.bp3-overflow-list-spacer{ + -ms-flex-negative:1; + flex-shrink:1; + width:1px; } + +body.bp3-overlay-open{ + overflow:hidden; } + +.bp3-overlay{ + bottom:0; + left:0; + position:static; + right:0; + top:0; + z-index:20; } + .bp3-overlay:not(.bp3-overlay-open){ + pointer-events:none; } + .bp3-overlay.bp3-overlay-container{ + overflow:hidden; + position:fixed; } + .bp3-overlay.bp3-overlay-container.bp3-overlay-inline{ + position:absolute; } + .bp3-overlay.bp3-overlay-scroll-container{ + overflow:auto; + position:fixed; } + .bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{ + position:absolute; } + .bp3-overlay.bp3-overlay-inline{ + display:inline; + overflow:visible; } + +.bp3-overlay-content{ + position:fixed; + z-index:20; } + .bp3-overlay-inline .bp3-overlay-content, + .bp3-overlay-scroll-container .bp3-overlay-content{ + position:absolute; } + +.bp3-overlay-backdrop{ + bottom:0; + left:0; + position:fixed; + right:0; + top:0; + opacity:1; + background-color:rgba(16, 22, 26, 0.7); + overflow:auto; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; + z-index:20; } + .bp3-overlay-backdrop.bp3-overlay-enter, .bp3-overlay-backdrop.bp3-overlay-appear{ + opacity:0; } + .bp3-overlay-backdrop.bp3-overlay-enter-active, .bp3-overlay-backdrop.bp3-overlay-appear-active{ + opacity:1; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:opacity; + transition-property:opacity; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-overlay-backdrop.bp3-overlay-exit{ + opacity:1; } + .bp3-overlay-backdrop.bp3-overlay-exit-active{ + opacity:0; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:opacity; + transition-property:opacity; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-overlay-backdrop:focus{ + outline:none; } + .bp3-overlay-inline .bp3-overlay-backdrop{ + position:absolute; } +.bp3-panel-stack{ + overflow:hidden; + position:relative; } + +.bp3-panel-stack-header{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + -webkit-box-shadow:0 1px rgba(16, 22, 26, 0.15); + box-shadow:0 1px rgba(16, 22, 26, 0.15); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -ms-flex-negative:0; + flex-shrink:0; + height:30px; + z-index:1; } + .bp3-dark .bp3-panel-stack-header{ + -webkit-box-shadow:0 1px rgba(255, 255, 255, 0.15); + box-shadow:0 1px rgba(255, 255, 255, 0.15); } + .bp3-panel-stack-header > span{ + -webkit-box-align:stretch; + -ms-flex-align:stretch; + align-items:stretch; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-flex:1; + -ms-flex:1; + flex:1; } + .bp3-panel-stack-header .bp3-heading{ + margin:0 5px; } + +.bp3-button.bp3-panel-stack-header-back{ + margin-left:5px; + padding-left:0; + white-space:nowrap; } + .bp3-button.bp3-panel-stack-header-back .bp3-icon{ + margin:0 2px; } + +.bp3-panel-stack-view{ + bottom:0; + left:0; + position:absolute; + right:0; + top:0; + background-color:#ffffff; + border-right:1px solid rgba(16, 22, 26, 0.15); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + margin-right:-1px; + overflow-y:auto; + z-index:1; } + .bp3-dark .bp3-panel-stack-view{ + background-color:#30404d; } + .bp3-panel-stack-view:nth-last-child(n + 4){ + display:none; } + +.bp3-panel-stack-push .bp3-panel-stack-enter, .bp3-panel-stack-push .bp3-panel-stack-appear{ + -webkit-transform:translateX(100%); + transform:translateX(100%); + opacity:0; } + +.bp3-panel-stack-push .bp3-panel-stack-enter-active, .bp3-panel-stack-push .bp3-panel-stack-appear-active{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } + +.bp3-panel-stack-push .bp3-panel-stack-exit{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; } + +.bp3-panel-stack-push .bp3-panel-stack-exit-active{ + -webkit-transform:translateX(-50%); + transform:translateX(-50%); + opacity:0; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } + +.bp3-panel-stack-pop .bp3-panel-stack-enter, .bp3-panel-stack-pop .bp3-panel-stack-appear{ + -webkit-transform:translateX(-50%); + transform:translateX(-50%); + opacity:0; } + +.bp3-panel-stack-pop .bp3-panel-stack-enter-active, .bp3-panel-stack-pop .bp3-panel-stack-appear-active{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } + +.bp3-panel-stack-pop .bp3-panel-stack-exit{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; } + +.bp3-panel-stack-pop .bp3-panel-stack-exit-active{ + -webkit-transform:translateX(100%); + transform:translateX(100%); + opacity:0; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } +.bp3-panel-stack2{ + overflow:hidden; + position:relative; } + +.bp3-panel-stack2-header{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + -webkit-box-shadow:0 1px rgba(16, 22, 26, 0.15); + box-shadow:0 1px rgba(16, 22, 26, 0.15); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -ms-flex-negative:0; + flex-shrink:0; + height:30px; + z-index:1; } + .bp3-dark .bp3-panel-stack2-header{ + -webkit-box-shadow:0 1px rgba(255, 255, 255, 0.15); + box-shadow:0 1px rgba(255, 255, 255, 0.15); } + .bp3-panel-stack2-header > span{ + -webkit-box-align:stretch; + -ms-flex-align:stretch; + align-items:stretch; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-flex:1; + -ms-flex:1; + flex:1; } + .bp3-panel-stack2-header .bp3-heading{ + margin:0 5px; } + +.bp3-button.bp3-panel-stack2-header-back{ + margin-left:5px; + padding-left:0; + white-space:nowrap; } + .bp3-button.bp3-panel-stack2-header-back .bp3-icon{ + margin:0 2px; } + +.bp3-panel-stack2-view{ + bottom:0; + left:0; + position:absolute; + right:0; + top:0; + background-color:#ffffff; + border-right:1px solid rgba(16, 22, 26, 0.15); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + margin-right:-1px; + overflow-y:auto; + z-index:1; } + .bp3-dark .bp3-panel-stack2-view{ + background-color:#30404d; } + .bp3-panel-stack2-view:nth-last-child(n + 4){ + display:none; } + +.bp3-panel-stack2-push .bp3-panel-stack2-enter, .bp3-panel-stack2-push .bp3-panel-stack2-appear{ + -webkit-transform:translateX(100%); + transform:translateX(100%); + opacity:0; } + +.bp3-panel-stack2-push .bp3-panel-stack2-enter-active, .bp3-panel-stack2-push .bp3-panel-stack2-appear-active{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } + +.bp3-panel-stack2-push .bp3-panel-stack2-exit{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; } + +.bp3-panel-stack2-push .bp3-panel-stack2-exit-active{ + -webkit-transform:translateX(-50%); + transform:translateX(-50%); + opacity:0; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } + +.bp3-panel-stack2-pop .bp3-panel-stack2-enter, .bp3-panel-stack2-pop .bp3-panel-stack2-appear{ + -webkit-transform:translateX(-50%); + transform:translateX(-50%); + opacity:0; } + +.bp3-panel-stack2-pop .bp3-panel-stack2-enter-active, .bp3-panel-stack2-pop .bp3-panel-stack2-appear-active{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } + +.bp3-panel-stack2-pop .bp3-panel-stack2-exit{ + -webkit-transform:translate(0%); + transform:translate(0%); + opacity:1; } + +.bp3-panel-stack2-pop .bp3-panel-stack2-exit-active{ + -webkit-transform:translateX(100%); + transform:translateX(100%); + opacity:0; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:400ms; + transition-duration:400ms; + -webkit-transition-property:opacity, -webkit-transform; + transition-property:opacity, -webkit-transform; + transition-property:transform, opacity; + transition-property:transform, opacity, -webkit-transform; + -webkit-transition-timing-function:ease; + transition-timing-function:ease; } +.bp3-popover{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + -webkit-transform:scale(1); + transform:scale(1); + border-radius:3px; + display:inline-block; + z-index:20; } + .bp3-popover .bp3-popover-arrow{ + height:30px; + position:absolute; + width:30px; } + .bp3-popover .bp3-popover-arrow::before{ + height:20px; + margin:5px; + width:20px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-popover{ + margin-bottom:17px; + margin-top:-17px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-popover > .bp3-popover-arrow{ + bottom:-11px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-popover > .bp3-popover-arrow svg{ + -webkit-transform:rotate(-90deg); + transform:rotate(-90deg); } + .bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-popover{ + margin-left:17px; } + .bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-popover > .bp3-popover-arrow{ + left:-11px; } + .bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-popover > .bp3-popover-arrow svg{ + -webkit-transform:rotate(0); + transform:rotate(0); } + .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-popover{ + margin-top:17px; } + .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-popover > .bp3-popover-arrow{ + top:-11px; } + .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-popover > .bp3-popover-arrow svg{ + -webkit-transform:rotate(90deg); + transform:rotate(90deg); } + .bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-popover{ + margin-left:-17px; + margin-right:17px; } + .bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-popover > .bp3-popover-arrow{ + right:-11px; } + .bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-popover > .bp3-popover-arrow svg{ + -webkit-transform:rotate(180deg); + transform:rotate(180deg); } + .bp3-tether-element-attached-middle > .bp3-popover > .bp3-popover-arrow{ + top:50%; + -webkit-transform:translateY(-50%); + transform:translateY(-50%); } + .bp3-tether-element-attached-center > .bp3-popover > .bp3-popover-arrow{ + right:50%; + -webkit-transform:translateX(50%); + transform:translateX(50%); } + .bp3-tether-element-attached-top.bp3-tether-target-attached-top > .bp3-popover > .bp3-popover-arrow{ + top:-0.3934px; } + .bp3-tether-element-attached-right.bp3-tether-target-attached-right > .bp3-popover > .bp3-popover-arrow{ + right:-0.3934px; } + .bp3-tether-element-attached-left.bp3-tether-target-attached-left > .bp3-popover > .bp3-popover-arrow{ + left:-0.3934px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom > .bp3-popover > .bp3-popover-arrow{ + bottom:-0.3934px; } + .bp3-tether-element-attached-top.bp3-tether-element-attached-left > .bp3-popover{ + -webkit-transform-origin:top left; + transform-origin:top left; } + .bp3-tether-element-attached-top.bp3-tether-element-attached-center > .bp3-popover{ + -webkit-transform-origin:top center; + transform-origin:top center; } + .bp3-tether-element-attached-top.bp3-tether-element-attached-right > .bp3-popover{ + -webkit-transform-origin:top right; + transform-origin:top right; } + .bp3-tether-element-attached-middle.bp3-tether-element-attached-left > .bp3-popover{ + -webkit-transform-origin:center left; + transform-origin:center left; } + .bp3-tether-element-attached-middle.bp3-tether-element-attached-center > .bp3-popover{ + -webkit-transform-origin:center center; + transform-origin:center center; } + .bp3-tether-element-attached-middle.bp3-tether-element-attached-right > .bp3-popover{ + -webkit-transform-origin:center right; + transform-origin:center right; } + .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left > .bp3-popover{ + -webkit-transform-origin:bottom left; + transform-origin:bottom left; } + .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center > .bp3-popover{ + -webkit-transform-origin:bottom center; + transform-origin:bottom center; } + .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right > .bp3-popover{ + -webkit-transform-origin:bottom right; + transform-origin:bottom right; } + .bp3-popover .bp3-popover-content{ + background:#ffffff; + color:inherit; } + .bp3-popover .bp3-popover-arrow::before{ + -webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2); + box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2); } + .bp3-popover .bp3-popover-arrow-border{ + fill:#10161a; + fill-opacity:0.1; } + .bp3-popover .bp3-popover-arrow-fill{ + fill:#ffffff; } + .bp3-popover-enter > .bp3-popover, .bp3-popover-appear > .bp3-popover{ + -webkit-transform:scale(0.3); + transform:scale(0.3); } + .bp3-popover-enter-active > .bp3-popover, .bp3-popover-appear-active > .bp3-popover{ + -webkit-transform:scale(1); + transform:scale(1); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:300ms; + transition-duration:300ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); + transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); } + .bp3-popover-exit > .bp3-popover{ + -webkit-transform:scale(1); + transform:scale(1); } + .bp3-popover-exit-active > .bp3-popover{ + -webkit-transform:scale(0.3); + transform:scale(0.3); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:300ms; + transition-duration:300ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); + transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); } + .bp3-popover .bp3-popover-content{ + border-radius:3px; + position:relative; } + .bp3-popover.bp3-popover-content-sizing .bp3-popover-content{ + max-width:350px; + padding:20px; } + .bp3-popover-target + .bp3-overlay .bp3-popover.bp3-popover-content-sizing{ + width:350px; } + .bp3-popover.bp3-minimal{ + margin:0 !important; } + .bp3-popover.bp3-minimal .bp3-popover-arrow{ + display:none; } + .bp3-popover.bp3-minimal.bp3-popover{ + -webkit-transform:scale(1); + transform:scale(1); } + .bp3-popover-enter > .bp3-popover.bp3-minimal.bp3-popover, .bp3-popover-appear > .bp3-popover.bp3-minimal.bp3-popover{ + -webkit-transform:scale(1); + transform:scale(1); } + .bp3-popover-enter-active > .bp3-popover.bp3-minimal.bp3-popover, .bp3-popover-appear-active > .bp3-popover.bp3-minimal.bp3-popover{ + -webkit-transform:scale(1); + transform:scale(1); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-popover-exit > .bp3-popover.bp3-minimal.bp3-popover{ + -webkit-transform:scale(1); + transform:scale(1); } + .bp3-popover-exit-active > .bp3-popover.bp3-minimal.bp3-popover{ + -webkit-transform:scale(1); + transform:scale(1); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-popover.bp3-dark, + .bp3-dark .bp3-popover{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); } + .bp3-popover.bp3-dark .bp3-popover-content, + .bp3-dark .bp3-popover .bp3-popover-content{ + background:#30404d; + color:inherit; } + .bp3-popover.bp3-dark .bp3-popover-arrow::before, + .bp3-dark .bp3-popover .bp3-popover-arrow::before{ + -webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4); + box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4); } + .bp3-popover.bp3-dark .bp3-popover-arrow-border, + .bp3-dark .bp3-popover .bp3-popover-arrow-border{ + fill:#10161a; + fill-opacity:0.2; } + .bp3-popover.bp3-dark .bp3-popover-arrow-fill, + .bp3-dark .bp3-popover .bp3-popover-arrow-fill{ + fill:#30404d; } + +.bp3-popover-arrow::before{ + border-radius:2px; + content:""; + display:block; + position:absolute; + -webkit-transform:rotate(45deg); + transform:rotate(45deg); } + +.bp3-tether-pinned .bp3-popover-arrow{ + display:none; } + +.bp3-popover-backdrop{ + background:rgba(255, 255, 255, 0); } + +.bp3-transition-container{ + opacity:1; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + z-index:20; } + .bp3-transition-container.bp3-popover-enter, .bp3-transition-container.bp3-popover-appear{ + opacity:0; } + .bp3-transition-container.bp3-popover-enter-active, .bp3-transition-container.bp3-popover-appear-active{ + opacity:1; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:opacity; + transition-property:opacity; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-transition-container.bp3-popover-exit{ + opacity:1; } + .bp3-transition-container.bp3-popover-exit-active{ + opacity:0; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:opacity; + transition-property:opacity; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-transition-container:focus{ + outline:none; } + .bp3-transition-container.bp3-popover-leave .bp3-popover-content{ + pointer-events:none; } + .bp3-transition-container[data-x-out-of-boundaries]{ + display:none; } + +span.bp3-popover-target{ + display:inline-block; } + +.bp3-popover-wrapper.bp3-fill{ + width:100%; } + +.bp3-portal{ + left:0; + position:absolute; + right:0; + top:0; } +@-webkit-keyframes linear-progress-bar-stripes{ + from{ + background-position:0 0; } + to{ + background-position:30px 0; } } +@keyframes linear-progress-bar-stripes{ + from{ + background-position:0 0; } + to{ + background-position:30px 0; } } + +.bp3-progress-bar{ + background:rgba(92, 112, 128, 0.2); + border-radius:40px; + display:block; + height:8px; + overflow:hidden; + position:relative; + width:100%; } + .bp3-progress-bar .bp3-progress-meter{ + background: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%); + background-color:rgba(92, 112, 128, 0.8); + background-size:30px 30px; + border-radius:40px; + height:100%; + position:absolute; + -webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + width:100%; } + .bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{ + animation:linear-progress-bar-stripes 300ms linear infinite reverse; } + .bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{ + background-image:none; } + +.bp3-dark .bp3-progress-bar{ + background:rgba(16, 22, 26, 0.5); } + .bp3-dark .bp3-progress-bar .bp3-progress-meter{ + background-color:#8a9ba8; } + +.bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{ + background-color:#137cbd; } + +.bp3-progress-bar.bp3-intent-success .bp3-progress-meter{ + background-color:#0f9960; } + +.bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{ + background-color:#d9822b; } + +.bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{ + background-color:#db3737; } +@-webkit-keyframes skeleton-glow{ + from{ + background:rgba(206, 217, 224, 0.2); + border-color:rgba(206, 217, 224, 0.2); } + to{ + background:rgba(92, 112, 128, 0.2); + border-color:rgba(92, 112, 128, 0.2); } } +@keyframes skeleton-glow{ + from{ + background:rgba(206, 217, 224, 0.2); + border-color:rgba(206, 217, 224, 0.2); } + to{ + background:rgba(92, 112, 128, 0.2); + border-color:rgba(92, 112, 128, 0.2); } } +.bp3-skeleton{ + -webkit-animation:1000ms linear infinite alternate skeleton-glow; + animation:1000ms linear infinite alternate skeleton-glow; + background:rgba(206, 217, 224, 0.2); + background-clip:padding-box !important; + border-color:rgba(206, 217, 224, 0.2) !important; + border-radius:2px; + -webkit-box-shadow:none !important; + box-shadow:none !important; + color:transparent !important; + cursor:default; + pointer-events:none; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; } + .bp3-skeleton::before, .bp3-skeleton::after, + .bp3-skeleton *{ + visibility:hidden !important; } +.bp3-slider{ + height:40px; + min-width:150px; + width:100%; + cursor:default; + outline:none; + position:relative; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; } + .bp3-slider:hover{ + cursor:pointer; } + .bp3-slider:active{ + cursor:-webkit-grabbing; + cursor:grabbing; } + .bp3-slider.bp3-disabled{ + cursor:not-allowed; + opacity:0.5; } + .bp3-slider.bp3-slider-unlabeled{ + height:16px; } + +.bp3-slider-track, +.bp3-slider-progress{ + height:6px; + left:0; + right:0; + top:5px; + position:absolute; } + +.bp3-slider-track{ + border-radius:3px; + overflow:hidden; } + +.bp3-slider-progress{ + background:rgba(92, 112, 128, 0.2); } + .bp3-dark .bp3-slider-progress{ + background:rgba(16, 22, 26, 0.5); } + .bp3-slider-progress.bp3-intent-primary{ + background-color:#137cbd; } + .bp3-slider-progress.bp3-intent-success{ + background-color:#0f9960; } + .bp3-slider-progress.bp3-intent-warning{ + background-color:#d9822b; } + .bp3-slider-progress.bp3-intent-danger{ + background-color:#db3737; } + +.bp3-slider-handle{ + background-color:#f5f8fa; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0)); + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + color:#182026; + border-radius:3px; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2); + cursor:pointer; + height:16px; + left:0; + position:absolute; + top:0; + width:16px; } + .bp3-slider-handle:hover{ + background-clip:padding-box; + background-color:#ebf1f5; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); } + .bp3-slider-handle:active, .bp3-slider-handle.bp3-active{ + background-color:#d8e1e8; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-slider-handle:disabled, .bp3-slider-handle.bp3-disabled{ + background-color:rgba(206, 217, 224, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; + outline:none; } + .bp3-slider-handle:disabled.bp3-active, .bp3-slider-handle:disabled.bp3-active:hover, .bp3-slider-handle.bp3-disabled.bp3-active, .bp3-slider-handle.bp3-disabled.bp3-active:hover{ + background:rgba(206, 217, 224, 0.7); } + .bp3-slider-handle:focus{ + z-index:1; } + .bp3-slider-handle:hover{ + background-clip:padding-box; + background-color:#ebf1f5; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2); + cursor:-webkit-grab; + cursor:grab; + z-index:2; } + .bp3-slider-handle.bp3-active{ + background-color:#d8e1e8; + background-image:none; + -webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 1px rgba(16, 22, 26, 0.1); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 1px rgba(16, 22, 26, 0.1); + cursor:-webkit-grabbing; + cursor:grabbing; } + .bp3-disabled .bp3-slider-handle{ + background:#bfccd6; + -webkit-box-shadow:none; + box-shadow:none; + pointer-events:none; } + .bp3-dark .bp3-slider-handle{ + background-color:#394b59; + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0))); + background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0)); + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + color:#f5f8fa; } + .bp3-dark .bp3-slider-handle:hover, .bp3-dark .bp3-slider-handle:active, .bp3-dark .bp3-slider-handle.bp3-active{ + color:#f5f8fa; } + .bp3-dark .bp3-slider-handle:hover{ + background-color:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-slider-handle:active, .bp3-dark .bp3-slider-handle.bp3-active{ + background-color:#202b33; + background-image:none; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-slider-handle:disabled, .bp3-dark .bp3-slider-handle.bp3-disabled{ + background-color:rgba(57, 75, 89, 0.5); + background-image:none; + -webkit-box-shadow:none; + box-shadow:none; + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-slider-handle:disabled.bp3-active, .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{ + background:rgba(57, 75, 89, 0.7); } + .bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{ + background:rgba(16, 22, 26, 0.5); + stroke:#8a9ba8; } + .bp3-dark .bp3-slider-handle, .bp3-dark .bp3-slider-handle:hover{ + background-color:#394b59; } + .bp3-dark .bp3-slider-handle.bp3-active{ + background-color:#293742; } + .bp3-dark .bp3-disabled .bp3-slider-handle{ + background:#5c7080; + border-color:#5c7080; + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-slider-handle .bp3-slider-label{ + background:#394b59; + border-radius:3px; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + color:#f5f8fa; + margin-left:8px; } + .bp3-dark .bp3-slider-handle .bp3-slider-label{ + background:#e1e8ed; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + color:#394b59; } + .bp3-disabled .bp3-slider-handle .bp3-slider-label{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-slider-handle.bp3-start, .bp3-slider-handle.bp3-end{ + width:8px; } + .bp3-slider-handle.bp3-start{ + border-bottom-right-radius:0; + border-top-right-radius:0; } + .bp3-slider-handle.bp3-end{ + border-bottom-left-radius:0; + border-top-left-radius:0; + margin-left:8px; } + .bp3-slider-handle.bp3-end .bp3-slider-label{ + margin-left:0; } + +.bp3-slider-label{ + -webkit-transform:translate(-50%, 20px); + transform:translate(-50%, 20px); + display:inline-block; + font-size:12px; + line-height:1; + padding:2px 5px; + position:absolute; + vertical-align:top; } + +.bp3-slider.bp3-vertical{ + height:150px; + min-width:40px; + width:40px; } + .bp3-slider.bp3-vertical .bp3-slider-track, + .bp3-slider.bp3-vertical .bp3-slider-progress{ + bottom:0; + height:auto; + left:5px; + top:0; + width:6px; } + .bp3-slider.bp3-vertical .bp3-slider-progress{ + top:auto; } + .bp3-slider.bp3-vertical .bp3-slider-label{ + -webkit-transform:translate(20px, 50%); + transform:translate(20px, 50%); } + .bp3-slider.bp3-vertical .bp3-slider-handle{ + top:auto; } + .bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{ + margin-left:0; + margin-top:-8px; } + .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end, .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{ + height:8px; + margin-left:0; + width:16px; } + .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{ + border-bottom-right-radius:3px; + border-top-left-radius:0; } + .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{ + -webkit-transform:translate(20px); + transform:translate(20px); } + .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{ + border-bottom-left-radius:0; + border-bottom-right-radius:0; + border-top-left-radius:3px; + margin-bottom:8px; } + +@-webkit-keyframes pt-spinner-animation{ + from{ + -webkit-transform:rotate(0deg); + transform:rotate(0deg); } + to{ + -webkit-transform:rotate(360deg); + transform:rotate(360deg); } } + +@keyframes pt-spinner-animation{ + from{ + -webkit-transform:rotate(0deg); + transform:rotate(0deg); } + to{ + -webkit-transform:rotate(360deg); + transform:rotate(360deg); } } + +.bp3-spinner{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-pack:center; + -ms-flex-pack:center; + justify-content:center; + overflow:visible; + vertical-align:middle; } + .bp3-spinner svg{ + display:block; } + .bp3-spinner path{ + fill-opacity:0; } + .bp3-spinner .bp3-spinner-head{ + stroke:rgba(92, 112, 128, 0.8); + stroke-linecap:round; + -webkit-transform-origin:center; + transform-origin:center; + -webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-spinner .bp3-spinner-track{ + stroke:rgba(92, 112, 128, 0.2); } + +.bp3-spinner-animation{ + -webkit-animation:pt-spinner-animation 500ms linear infinite; + animation:pt-spinner-animation 500ms linear infinite; } + .bp3-no-spin > .bp3-spinner-animation{ + -webkit-animation:none; + animation:none; } + +.bp3-dark .bp3-spinner .bp3-spinner-head{ + stroke:#8a9ba8; } + +.bp3-dark .bp3-spinner .bp3-spinner-track{ + stroke:rgba(16, 22, 26, 0.5); } + +.bp3-spinner.bp3-intent-primary .bp3-spinner-head{ + stroke:#137cbd; } + +.bp3-spinner.bp3-intent-success .bp3-spinner-head{ + stroke:#0f9960; } + +.bp3-spinner.bp3-intent-warning .bp3-spinner-head{ + stroke:#d9822b; } + +.bp3-spinner.bp3-intent-danger .bp3-spinner-head{ + stroke:#db3737; } +.bp3-tabs.bp3-vertical{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; } + .bp3-tabs.bp3-vertical > .bp3-tab-list{ + -webkit-box-align:start; + -ms-flex-align:start; + align-items:flex-start; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; } + .bp3-tabs.bp3-vertical > .bp3-tab-list .bp3-tab{ + border-radius:3px; + padding:0 10px; + width:100%; } + .bp3-tabs.bp3-vertical > .bp3-tab-list .bp3-tab[aria-selected="true"]{ + background-color:rgba(19, 124, 189, 0.2); + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-tabs.bp3-vertical > .bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{ + background-color:rgba(19, 124, 189, 0.2); + border-radius:3px; + bottom:0; + height:auto; + left:0; + right:0; + top:0; } + .bp3-tabs.bp3-vertical > .bp3-tab-panel{ + margin-top:0; + padding-left:20px; } + +.bp3-tab-list{ + -webkit-box-align:end; + -ms-flex-align:end; + align-items:flex-end; + border:none; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + list-style:none; + margin:0; + padding:0; + position:relative; } + .bp3-tab-list > *:not(:last-child){ + margin-right:20px; } + +.bp3-tab{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + color:#182026; + cursor:pointer; + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + font-size:14px; + line-height:30px; + max-width:100%; + position:relative; + vertical-align:top; } + .bp3-tab a{ + color:inherit; + display:block; + text-decoration:none; } + .bp3-tab-indicator-wrapper ~ .bp3-tab{ + background-color:transparent !important; + -webkit-box-shadow:none !important; + box-shadow:none !important; } + .bp3-tab[aria-disabled="true"]{ + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + .bp3-tab[aria-selected="true"]{ + border-radius:0; + -webkit-box-shadow:inset 0 -3px 0 #106ba3; + box-shadow:inset 0 -3px 0 #106ba3; } + .bp3-tab[aria-selected="true"], .bp3-tab:not([aria-disabled="true"]):hover{ + color:#106ba3; } + .bp3-tab:focus{ + -moz-outline-radius:0; } + .bp3-large > .bp3-tab{ + font-size:16px; + line-height:40px; } + +.bp3-tab-panel{ + margin-top:20px; } + .bp3-tab-panel[aria-hidden="true"]{ + display:none; } + +.bp3-tab-indicator-wrapper{ + left:0; + pointer-events:none; + position:absolute; + top:0; + -webkit-transform:translateX(0), translateY(0); + transform:translateX(0), translateY(0); + -webkit-transition:height, width, -webkit-transform; + transition:height, width, -webkit-transform; + transition:height, transform, width; + transition:height, transform, width, -webkit-transform; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-tab-indicator-wrapper .bp3-tab-indicator{ + background-color:#106ba3; + bottom:0; + height:3px; + left:0; + position:absolute; + right:0; } + .bp3-tab-indicator-wrapper.bp3-no-animation{ + -webkit-transition:none; + transition:none; } + +.bp3-dark .bp3-tab{ + color:#f5f8fa; } + .bp3-dark .bp3-tab[aria-disabled="true"]{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-tab[aria-selected="true"]{ + -webkit-box-shadow:inset 0 -3px 0 #48aff0; + box-shadow:inset 0 -3px 0 #48aff0; } + .bp3-dark .bp3-tab[aria-selected="true"], .bp3-dark .bp3-tab:not([aria-disabled="true"]):hover{ + color:#48aff0; } + +.bp3-dark .bp3-tab-indicator{ + background-color:#48aff0; } + +.bp3-flex-expander{ + -webkit-box-flex:1; + -ms-flex:1 1; + flex:1 1; } +.bp3-tag{ + display:-webkit-inline-box; + display:-ms-inline-flexbox; + display:inline-flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + background-color:#5c7080; + border:none; + border-radius:3px; + -webkit-box-shadow:none; + box-shadow:none; + color:#f5f8fa; + font-size:12px; + line-height:16px; + max-width:100%; + min-height:20px; + min-width:20px; + padding:2px 6px; + position:relative; } + .bp3-tag.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-interactive:hover{ + background-color:rgba(92, 112, 128, 0.85); } + .bp3-tag.bp3-interactive.bp3-active, .bp3-tag.bp3-interactive:active{ + background-color:rgba(92, 112, 128, 0.7); } + .bp3-tag > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-tag > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-tag::before, + .bp3-tag > *{ + margin-right:4px; } + .bp3-tag:empty::before, + .bp3-tag > :last-child{ + margin-right:0; } + .bp3-tag:focus{ + outline:rgba(19, 124, 189, 0.6) auto 2px; + outline-offset:0; + -moz-outline-radius:6px; } + .bp3-tag.bp3-round{ + border-radius:30px; + padding-left:8px; + padding-right:8px; } + .bp3-dark .bp3-tag{ + background-color:#bfccd6; + color:#182026; } + .bp3-dark .bp3-tag.bp3-interactive{ + cursor:pointer; } + .bp3-dark .bp3-tag.bp3-interactive:hover{ + background-color:rgba(191, 204, 214, 0.85); } + .bp3-dark .bp3-tag.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-interactive:active{ + background-color:rgba(191, 204, 214, 0.7); } + .bp3-dark .bp3-tag > .bp3-icon, .bp3-dark .bp3-tag .bp3-icon-standard, .bp3-dark .bp3-tag .bp3-icon-large{ + fill:currentColor; } + .bp3-tag > .bp3-icon, .bp3-tag .bp3-icon-standard, .bp3-tag .bp3-icon-large{ + fill:#ffffff; } + .bp3-tag.bp3-large, + .bp3-large .bp3-tag{ + font-size:14px; + line-height:20px; + min-height:30px; + min-width:30px; + padding:5px 10px; } + .bp3-tag.bp3-large::before, + .bp3-tag.bp3-large > *, + .bp3-large .bp3-tag::before, + .bp3-large .bp3-tag > *{ + margin-right:7px; } + .bp3-tag.bp3-large:empty::before, + .bp3-tag.bp3-large > :last-child, + .bp3-large .bp3-tag:empty::before, + .bp3-large .bp3-tag > :last-child{ + margin-right:0; } + .bp3-tag.bp3-large.bp3-round, + .bp3-large .bp3-tag.bp3-round{ + padding-left:12px; + padding-right:12px; } + .bp3-tag.bp3-intent-primary{ + background:#137cbd; + color:#ffffff; } + .bp3-tag.bp3-intent-primary.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-intent-primary.bp3-interactive:hover{ + background-color:rgba(19, 124, 189, 0.85); } + .bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-primary.bp3-interactive:active{ + background-color:rgba(19, 124, 189, 0.7); } + .bp3-tag.bp3-intent-success{ + background:#0f9960; + color:#ffffff; } + .bp3-tag.bp3-intent-success.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-intent-success.bp3-interactive:hover{ + background-color:rgba(15, 153, 96, 0.85); } + .bp3-tag.bp3-intent-success.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-success.bp3-interactive:active{ + background-color:rgba(15, 153, 96, 0.7); } + .bp3-tag.bp3-intent-warning{ + background:#d9822b; + color:#ffffff; } + .bp3-tag.bp3-intent-warning.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-intent-warning.bp3-interactive:hover{ + background-color:rgba(217, 130, 43, 0.85); } + .bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-warning.bp3-interactive:active{ + background-color:rgba(217, 130, 43, 0.7); } + .bp3-tag.bp3-intent-danger{ + background:#db3737; + color:#ffffff; } + .bp3-tag.bp3-intent-danger.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-intent-danger.bp3-interactive:hover{ + background-color:rgba(219, 55, 55, 0.85); } + .bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-danger.bp3-interactive:active{ + background-color:rgba(219, 55, 55, 0.7); } + .bp3-tag.bp3-fill{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + width:100%; } + .bp3-tag.bp3-minimal > .bp3-icon, .bp3-tag.bp3-minimal .bp3-icon-standard, .bp3-tag.bp3-minimal .bp3-icon-large{ + fill:#5c7080; } + .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]){ + background-color:rgba(138, 155, 168, 0.2); + color:#182026; } + .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:hover{ + background-color:rgba(92, 112, 128, 0.3); } + .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive.bp3-active, .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:active{ + background-color:rgba(92, 112, 128, 0.4); } + .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]){ + color:#f5f8fa; } + .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive{ + cursor:pointer; } + .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:hover{ + background-color:rgba(191, 204, 214, 0.3); } + .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:active{ + background-color:rgba(191, 204, 214, 0.4); } + .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]) > .bp3-icon, .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]) .bp3-icon-standard, .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]) .bp3-icon-large{ + fill:#a7b6c2; } + .bp3-tag.bp3-minimal.bp3-intent-primary{ + background-color:rgba(19, 124, 189, 0.15); + color:#106ba3; } + .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{ + background-color:rgba(19, 124, 189, 0.25); } + .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{ + background-color:rgba(19, 124, 189, 0.35); } + .bp3-tag.bp3-minimal.bp3-intent-primary > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{ + fill:#137cbd; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{ + background-color:rgba(19, 124, 189, 0.25); + color:#48aff0; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{ + cursor:pointer; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{ + background-color:rgba(19, 124, 189, 0.35); } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{ + background-color:rgba(19, 124, 189, 0.45); } + .bp3-tag.bp3-minimal.bp3-intent-success{ + background-color:rgba(15, 153, 96, 0.15); + color:#0d8050; } + .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{ + background-color:rgba(15, 153, 96, 0.25); } + .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{ + background-color:rgba(15, 153, 96, 0.35); } + .bp3-tag.bp3-minimal.bp3-intent-success > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{ + fill:#0f9960; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{ + background-color:rgba(15, 153, 96, 0.25); + color:#3dcc91; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{ + cursor:pointer; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{ + background-color:rgba(15, 153, 96, 0.35); } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{ + background-color:rgba(15, 153, 96, 0.45); } + .bp3-tag.bp3-minimal.bp3-intent-warning{ + background-color:rgba(217, 130, 43, 0.15); + color:#bf7326; } + .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{ + background-color:rgba(217, 130, 43, 0.25); } + .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{ + background-color:rgba(217, 130, 43, 0.35); } + .bp3-tag.bp3-minimal.bp3-intent-warning > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{ + fill:#d9822b; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{ + background-color:rgba(217, 130, 43, 0.25); + color:#ffb366; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{ + cursor:pointer; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{ + background-color:rgba(217, 130, 43, 0.35); } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{ + background-color:rgba(217, 130, 43, 0.45); } + .bp3-tag.bp3-minimal.bp3-intent-danger{ + background-color:rgba(219, 55, 55, 0.15); + color:#c23030; } + .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{ + cursor:pointer; } + .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{ + background-color:rgba(219, 55, 55, 0.25); } + .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{ + background-color:rgba(219, 55, 55, 0.35); } + .bp3-tag.bp3-minimal.bp3-intent-danger > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{ + fill:#db3737; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{ + background-color:rgba(219, 55, 55, 0.25); + color:#ff7373; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{ + cursor:pointer; } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{ + background-color:rgba(219, 55, 55, 0.35); } + .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{ + background-color:rgba(219, 55, 55, 0.45); } + +.bp3-tag-remove{ + background:none; + border:none; + color:inherit; + cursor:pointer; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + margin-bottom:-2px; + margin-right:-6px !important; + margin-top:-2px; + opacity:0.5; + padding:2px; + padding-left:0; } + .bp3-tag-remove:hover{ + background:none; + opacity:0.8; + text-decoration:none; } + .bp3-tag-remove:active{ + opacity:1; } + .bp3-tag-remove:empty::before{ + font-family:"Icons16", sans-serif; + font-size:16px; + font-style:normal; + font-weight:400; + line-height:1; + -moz-osx-font-smoothing:grayscale; + -webkit-font-smoothing:antialiased; + content:"î›—"; } + .bp3-large .bp3-tag-remove{ + margin-right:-10px !important; + padding:0 5px 0 0; } + .bp3-large .bp3-tag-remove:empty::before{ + font-family:"Icons20", sans-serif; + font-size:20px; + font-style:normal; + font-weight:400; + line-height:1; } +.bp3-tag-input{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:start; + -ms-flex-align:start; + align-items:flex-start; + cursor:text; + height:auto; + line-height:inherit; + min-height:30px; + padding-left:5px; + padding-right:0; } + .bp3-tag-input > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-tag-input > .bp3-tag-input-values{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-tag-input .bp3-tag-input-icon{ + color:#5c7080; + margin-left:2px; + margin-right:7px; + margin-top:7px; } + .bp3-tag-input .bp3-tag-input-values{ + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:horizontal; + -webkit-box-direction:normal; + -ms-flex-direction:row; + flex-direction:row; + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + -ms-flex-item-align:stretch; + align-self:stretch; + -ms-flex-wrap:wrap; + flex-wrap:wrap; + margin-right:7px; + margin-top:5px; + min-width:0; } + .bp3-tag-input .bp3-tag-input-values > *{ + -webkit-box-flex:0; + -ms-flex-positive:0; + flex-grow:0; + -ms-flex-negative:0; + flex-shrink:0; } + .bp3-tag-input .bp3-tag-input-values > .bp3-fill{ + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + -ms-flex-negative:1; + flex-shrink:1; } + .bp3-tag-input .bp3-tag-input-values::before, + .bp3-tag-input .bp3-tag-input-values > *{ + margin-right:5px; } + .bp3-tag-input .bp3-tag-input-values:empty::before, + .bp3-tag-input .bp3-tag-input-values > :last-child{ + margin-right:0; } + .bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{ + padding-left:5px; } + .bp3-tag-input .bp3-tag-input-values > *{ + margin-bottom:5px; } + .bp3-tag-input .bp3-tag{ + overflow-wrap:break-word; } + .bp3-tag-input .bp3-tag.bp3-active{ + outline:rgba(19, 124, 189, 0.6) auto 2px; + outline-offset:0; + -moz-outline-radius:6px; } + .bp3-tag-input .bp3-input-ghost{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + line-height:20px; + width:80px; } + .bp3-tag-input .bp3-input-ghost:disabled, .bp3-tag-input .bp3-input-ghost.bp3-disabled{ + cursor:not-allowed; } + .bp3-tag-input .bp3-button, + .bp3-tag-input .bp3-spinner{ + margin:3px; + margin-left:0; } + .bp3-tag-input .bp3-button{ + min-height:24px; + min-width:24px; + padding:0 7px; } + .bp3-tag-input.bp3-large{ + height:auto; + min-height:40px; } + .bp3-tag-input.bp3-large::before, + .bp3-tag-input.bp3-large > *{ + margin-right:10px; } + .bp3-tag-input.bp3-large:empty::before, + .bp3-tag-input.bp3-large > :last-child{ + margin-right:0; } + .bp3-tag-input.bp3-large .bp3-tag-input-icon{ + margin-left:5px; + margin-top:10px; } + .bp3-tag-input.bp3-large .bp3-input-ghost{ + line-height:30px; } + .bp3-tag-input.bp3-large .bp3-button{ + min-height:30px; + min-width:30px; + padding:5px 10px; + margin:5px; + margin-left:0; } + .bp3-tag-input.bp3-large .bp3-spinner{ + margin:8px; + margin-left:0; } + .bp3-tag-input.bp3-active{ + background-color:#ffffff; + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-tag-input.bp3-active.bp3-intent-primary{ + -webkit-box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-tag-input.bp3-active.bp3-intent-success{ + -webkit-box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-tag-input.bp3-active.bp3-intent-warning{ + -webkit-box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-tag-input.bp3-active.bp3-intent-danger{ + -webkit-box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); } + .bp3-dark .bp3-tag-input .bp3-tag-input-icon, .bp3-tag-input.bp3-dark .bp3-tag-input-icon{ + color:#a7b6c2; } + .bp3-dark .bp3-tag-input .bp3-input-ghost, .bp3-tag-input.bp3-dark .bp3-input-ghost{ + color:#f5f8fa; } + .bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{ + color:rgba(167, 182, 194, 0.6); } + .bp3-dark .bp3-tag-input.bp3-active, .bp3-tag-input.bp3-dark.bp3-active{ + background-color:rgba(16, 22, 26, 0.3); + -webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{ + -webkit-box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{ + -webkit-box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{ + -webkit-box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + .bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{ + -webkit-box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); } + +.bp3-input-ghost{ + background:none; + border:none; + -webkit-box-shadow:none; + box-shadow:none; + padding:0; } + .bp3-input-ghost::-webkit-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input-ghost::-moz-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input-ghost:-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input-ghost::-ms-input-placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input-ghost::placeholder{ + color:rgba(92, 112, 128, 0.6); + opacity:1; } + .bp3-input-ghost:focus{ + outline:none !important; } +.bp3-toast{ + -webkit-box-align:start; + -ms-flex-align:start; + align-items:flex-start; + background-color:#ffffff; + border-radius:3px; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + display:-webkit-box; + display:-ms-flexbox; + display:flex; + margin:20px 0 0; + max-width:500px; + min-width:300px; + pointer-events:all; + position:relative !important; } + .bp3-toast.bp3-toast-enter, .bp3-toast.bp3-toast-appear{ + -webkit-transform:translateY(-40px); + transform:translateY(-40px); } + .bp3-toast.bp3-toast-enter-active, .bp3-toast.bp3-toast-appear-active{ + -webkit-transform:translateY(0); + transform:translateY(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:300ms; + transition-duration:300ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); + transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); } + .bp3-toast.bp3-toast-enter ~ .bp3-toast, .bp3-toast.bp3-toast-appear ~ .bp3-toast{ + -webkit-transform:translateY(-40px); + transform:translateY(-40px); } + .bp3-toast.bp3-toast-enter-active ~ .bp3-toast, .bp3-toast.bp3-toast-appear-active ~ .bp3-toast{ + -webkit-transform:translateY(0); + transform:translateY(0); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:300ms; + transition-duration:300ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); + transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); } + .bp3-toast.bp3-toast-exit{ + opacity:1; + -webkit-filter:blur(0); + filter:blur(0); } + .bp3-toast.bp3-toast-exit-active{ + opacity:0; + -webkit-filter:blur(10px); + filter:blur(10px); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:300ms; + transition-duration:300ms; + -webkit-transition-property:opacity, -webkit-filter; + transition-property:opacity, -webkit-filter; + transition-property:opacity, filter; + transition-property:opacity, filter, -webkit-filter; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-toast.bp3-toast-exit ~ .bp3-toast{ + -webkit-transform:translateY(0); + transform:translateY(0); } + .bp3-toast.bp3-toast-exit-active ~ .bp3-toast{ + -webkit-transform:translateY(-40px); + transform:translateY(-40px); + -webkit-transition-delay:50ms; + transition-delay:50ms; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-toast .bp3-button-group{ + -webkit-box-flex:0; + -ms-flex:0 0 auto; + flex:0 0 auto; + padding:5px; + padding-left:0; } + .bp3-toast > .bp3-icon{ + color:#5c7080; + margin:12px; + margin-right:0; } + .bp3-toast.bp3-dark, + .bp3-dark .bp3-toast{ + background-color:#394b59; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); } + .bp3-toast.bp3-dark > .bp3-icon, + .bp3-dark .bp3-toast > .bp3-icon{ + color:#a7b6c2; } + .bp3-toast[class*="bp3-intent-"] a{ + color:rgba(255, 255, 255, 0.7); } + .bp3-toast[class*="bp3-intent-"] a:hover{ + color:#ffffff; } + .bp3-toast[class*="bp3-intent-"] > .bp3-icon{ + color:#ffffff; } + .bp3-toast[class*="bp3-intent-"] .bp3-button, .bp3-toast[class*="bp3-intent-"] .bp3-button::before, + .bp3-toast[class*="bp3-intent-"] .bp3-button .bp3-icon, .bp3-toast[class*="bp3-intent-"] .bp3-button:active{ + color:rgba(255, 255, 255, 0.7) !important; } + .bp3-toast[class*="bp3-intent-"] .bp3-button:focus{ + outline-color:rgba(255, 255, 255, 0.5); } + .bp3-toast[class*="bp3-intent-"] .bp3-button:hover{ + background-color:rgba(255, 255, 255, 0.15) !important; + color:#ffffff !important; } + .bp3-toast[class*="bp3-intent-"] .bp3-button:active{ + background-color:rgba(255, 255, 255, 0.3) !important; + color:#ffffff !important; } + .bp3-toast[class*="bp3-intent-"] .bp3-button::after{ + background:rgba(255, 255, 255, 0.3) !important; } + .bp3-toast.bp3-intent-primary{ + background-color:#137cbd; + color:#ffffff; } + .bp3-toast.bp3-intent-success{ + background-color:#0f9960; + color:#ffffff; } + .bp3-toast.bp3-intent-warning{ + background-color:#d9822b; + color:#ffffff; } + .bp3-toast.bp3-intent-danger{ + background-color:#db3737; + color:#ffffff; } + +.bp3-toast-message{ + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + padding:11px; + word-break:break-word; } + +.bp3-toast-container{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box !important; + display:-ms-flexbox !important; + display:flex !important; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + left:0; + overflow:hidden; + padding:0 20px 20px; + pointer-events:none; + right:0; + z-index:40; } + .bp3-toast-container.bp3-toast-container-in-portal{ + position:fixed; } + .bp3-toast-container.bp3-toast-container-inline{ + position:absolute; } + .bp3-toast-container.bp3-toast-container-top{ + top:0; } + .bp3-toast-container.bp3-toast-container-bottom{ + bottom:0; + -webkit-box-orient:vertical; + -webkit-box-direction:reverse; + -ms-flex-direction:column-reverse; + flex-direction:column-reverse; + top:auto; } + .bp3-toast-container.bp3-toast-container-left{ + -webkit-box-align:start; + -ms-flex-align:start; + align-items:flex-start; } + .bp3-toast-container.bp3-toast-container-right{ + -webkit-box-align:end; + -ms-flex-align:end; + align-items:flex-end; } + +.bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active), +.bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active) ~ .bp3-toast, .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active), +.bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active) ~ .bp3-toast, +.bp3-toast-container-bottom .bp3-toast.bp3-toast-exit-active ~ .bp3-toast, +.bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active ~ .bp3-toast{ + -webkit-transform:translateY(60px); + transform:translateY(60px); } +.bp3-tooltip{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); + -webkit-transform:scale(1); + transform:scale(1); } + .bp3-tooltip .bp3-popover-arrow{ + height:22px; + position:absolute; + width:22px; } + .bp3-tooltip .bp3-popover-arrow::before{ + height:14px; + margin:4px; + width:14px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-tooltip{ + margin-bottom:11px; + margin-top:-11px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-tooltip > .bp3-popover-arrow{ + bottom:-8px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-tooltip > .bp3-popover-arrow svg{ + -webkit-transform:rotate(-90deg); + transform:rotate(-90deg); } + .bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-tooltip{ + margin-left:11px; } + .bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-tooltip > .bp3-popover-arrow{ + left:-8px; } + .bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-tooltip > .bp3-popover-arrow svg{ + -webkit-transform:rotate(0); + transform:rotate(0); } + .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-tooltip{ + margin-top:11px; } + .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-tooltip > .bp3-popover-arrow{ + top:-8px; } + .bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-tooltip > .bp3-popover-arrow svg{ + -webkit-transform:rotate(90deg); + transform:rotate(90deg); } + .bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-tooltip{ + margin-left:-11px; + margin-right:11px; } + .bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-tooltip > .bp3-popover-arrow{ + right:-8px; } + .bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-tooltip > .bp3-popover-arrow svg{ + -webkit-transform:rotate(180deg); + transform:rotate(180deg); } + .bp3-tether-element-attached-middle > .bp3-tooltip > .bp3-popover-arrow{ + top:50%; + -webkit-transform:translateY(-50%); + transform:translateY(-50%); } + .bp3-tether-element-attached-center > .bp3-tooltip > .bp3-popover-arrow{ + right:50%; + -webkit-transform:translateX(50%); + transform:translateX(50%); } + .bp3-tether-element-attached-top.bp3-tether-target-attached-top > .bp3-tooltip > .bp3-popover-arrow{ + top:-0.22183px; } + .bp3-tether-element-attached-right.bp3-tether-target-attached-right > .bp3-tooltip > .bp3-popover-arrow{ + right:-0.22183px; } + .bp3-tether-element-attached-left.bp3-tether-target-attached-left > .bp3-tooltip > .bp3-popover-arrow{ + left:-0.22183px; } + .bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom > .bp3-tooltip > .bp3-popover-arrow{ + bottom:-0.22183px; } + .bp3-tether-element-attached-top.bp3-tether-element-attached-left > .bp3-tooltip{ + -webkit-transform-origin:top left; + transform-origin:top left; } + .bp3-tether-element-attached-top.bp3-tether-element-attached-center > .bp3-tooltip{ + -webkit-transform-origin:top center; + transform-origin:top center; } + .bp3-tether-element-attached-top.bp3-tether-element-attached-right > .bp3-tooltip{ + -webkit-transform-origin:top right; + transform-origin:top right; } + .bp3-tether-element-attached-middle.bp3-tether-element-attached-left > .bp3-tooltip{ + -webkit-transform-origin:center left; + transform-origin:center left; } + .bp3-tether-element-attached-middle.bp3-tether-element-attached-center > .bp3-tooltip{ + -webkit-transform-origin:center center; + transform-origin:center center; } + .bp3-tether-element-attached-middle.bp3-tether-element-attached-right > .bp3-tooltip{ + -webkit-transform-origin:center right; + transform-origin:center right; } + .bp3-tether-element-attached-bottom.bp3-tether-element-attached-left > .bp3-tooltip{ + -webkit-transform-origin:bottom left; + transform-origin:bottom left; } + .bp3-tether-element-attached-bottom.bp3-tether-element-attached-center > .bp3-tooltip{ + -webkit-transform-origin:bottom center; + transform-origin:bottom center; } + .bp3-tether-element-attached-bottom.bp3-tether-element-attached-right > .bp3-tooltip{ + -webkit-transform-origin:bottom right; + transform-origin:bottom right; } + .bp3-tooltip .bp3-popover-content{ + background:#394b59; + color:#f5f8fa; } + .bp3-tooltip .bp3-popover-arrow::before{ + -webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2); + box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2); } + .bp3-tooltip .bp3-popover-arrow-border{ + fill:#10161a; + fill-opacity:0.1; } + .bp3-tooltip .bp3-popover-arrow-fill{ + fill:#394b59; } + .bp3-popover-enter > .bp3-tooltip, .bp3-popover-appear > .bp3-tooltip{ + -webkit-transform:scale(0.8); + transform:scale(0.8); } + .bp3-popover-enter-active > .bp3-tooltip, .bp3-popover-appear-active > .bp3-tooltip{ + -webkit-transform:scale(1); + transform:scale(1); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-popover-exit > .bp3-tooltip{ + -webkit-transform:scale(1); + transform:scale(1); } + .bp3-popover-exit-active > .bp3-tooltip{ + -webkit-transform:scale(0.8); + transform:scale(0.8); + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:100ms; + transition-duration:100ms; + -webkit-transition-property:-webkit-transform; + transition-property:-webkit-transform; + transition-property:transform; + transition-property:transform, -webkit-transform; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-tooltip .bp3-popover-content{ + padding:10px 12px; } + .bp3-tooltip.bp3-dark, + .bp3-dark .bp3-tooltip{ + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); } + .bp3-tooltip.bp3-dark .bp3-popover-content, + .bp3-dark .bp3-tooltip .bp3-popover-content{ + background:#e1e8ed; + color:#394b59; } + .bp3-tooltip.bp3-dark .bp3-popover-arrow::before, + .bp3-dark .bp3-tooltip .bp3-popover-arrow::before{ + -webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4); + box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4); } + .bp3-tooltip.bp3-dark .bp3-popover-arrow-border, + .bp3-dark .bp3-tooltip .bp3-popover-arrow-border{ + fill:#10161a; + fill-opacity:0.2; } + .bp3-tooltip.bp3-dark .bp3-popover-arrow-fill, + .bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{ + fill:#e1e8ed; } + .bp3-tooltip.bp3-intent-primary .bp3-popover-content{ + background:#137cbd; + color:#ffffff; } + .bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{ + fill:#137cbd; } + .bp3-tooltip.bp3-intent-success .bp3-popover-content{ + background:#0f9960; + color:#ffffff; } + .bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{ + fill:#0f9960; } + .bp3-tooltip.bp3-intent-warning .bp3-popover-content{ + background:#d9822b; + color:#ffffff; } + .bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{ + fill:#d9822b; } + .bp3-tooltip.bp3-intent-danger .bp3-popover-content{ + background:#db3737; + color:#ffffff; } + .bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{ + fill:#db3737; } + +.bp3-tooltip-indicator{ + border-bottom:dotted 1px; + cursor:help; } +.bp3-tree .bp3-icon, .bp3-tree .bp3-icon-standard, .bp3-tree .bp3-icon-large{ + color:#5c7080; } + .bp3-tree .bp3-icon.bp3-intent-primary, .bp3-tree .bp3-icon-standard.bp3-intent-primary, .bp3-tree .bp3-icon-large.bp3-intent-primary{ + color:#137cbd; } + .bp3-tree .bp3-icon.bp3-intent-success, .bp3-tree .bp3-icon-standard.bp3-intent-success, .bp3-tree .bp3-icon-large.bp3-intent-success{ + color:#0f9960; } + .bp3-tree .bp3-icon.bp3-intent-warning, .bp3-tree .bp3-icon-standard.bp3-intent-warning, .bp3-tree .bp3-icon-large.bp3-intent-warning{ + color:#d9822b; } + .bp3-tree .bp3-icon.bp3-intent-danger, .bp3-tree .bp3-icon-standard.bp3-intent-danger, .bp3-tree .bp3-icon-large.bp3-intent-danger{ + color:#db3737; } + +.bp3-tree-node-list{ + list-style:none; + margin:0; + padding-left:0; } + +.bp3-tree-root{ + background-color:transparent; + cursor:default; + padding-left:0; + position:relative; } + +.bp3-tree-node-content-0{ + padding-left:0px; } + +.bp3-tree-node-content-1{ + padding-left:23px; } + +.bp3-tree-node-content-2{ + padding-left:46px; } + +.bp3-tree-node-content-3{ + padding-left:69px; } + +.bp3-tree-node-content-4{ + padding-left:92px; } + +.bp3-tree-node-content-5{ + padding-left:115px; } + +.bp3-tree-node-content-6{ + padding-left:138px; } + +.bp3-tree-node-content-7{ + padding-left:161px; } + +.bp3-tree-node-content-8{ + padding-left:184px; } + +.bp3-tree-node-content-9{ + padding-left:207px; } + +.bp3-tree-node-content-10{ + padding-left:230px; } + +.bp3-tree-node-content-11{ + padding-left:253px; } + +.bp3-tree-node-content-12{ + padding-left:276px; } + +.bp3-tree-node-content-13{ + padding-left:299px; } + +.bp3-tree-node-content-14{ + padding-left:322px; } + +.bp3-tree-node-content-15{ + padding-left:345px; } + +.bp3-tree-node-content-16{ + padding-left:368px; } + +.bp3-tree-node-content-17{ + padding-left:391px; } + +.bp3-tree-node-content-18{ + padding-left:414px; } + +.bp3-tree-node-content-19{ + padding-left:437px; } + +.bp3-tree-node-content-20{ + padding-left:460px; } + +.bp3-tree-node-content{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + height:30px; + padding-right:5px; + width:100%; } + .bp3-tree-node-content:hover{ + background-color:rgba(191, 204, 214, 0.4); } + +.bp3-tree-node-caret, +.bp3-tree-node-caret-none{ + min-width:30px; } + +.bp3-tree-node-caret{ + color:#5c7080; + cursor:pointer; + padding:7px; + -webkit-transform:rotate(0deg); + transform:rotate(0deg); + -webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); + transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-tree-node-caret:hover{ + color:#182026; } + .bp3-dark .bp3-tree-node-caret{ + color:#a7b6c2; } + .bp3-dark .bp3-tree-node-caret:hover{ + color:#f5f8fa; } + .bp3-tree-node-caret.bp3-tree-node-caret-open{ + -webkit-transform:rotate(90deg); + transform:rotate(90deg); } + .bp3-tree-node-caret.bp3-icon-standard::before{ + content:"îš•"; } + +.bp3-tree-node-icon{ + margin-right:7px; + position:relative; } + +.bp3-tree-node-label{ + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + -webkit-box-flex:1; + -ms-flex:1 1 auto; + flex:1 1 auto; + position:relative; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; } + .bp3-tree-node-label span{ + display:inline; } + +.bp3-tree-node-secondary-label{ + padding:0 5px; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; } + .bp3-tree-node-secondary-label .bp3-popover-wrapper, + .bp3-tree-node-secondary-label .bp3-popover-target{ + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + display:-webkit-box; + display:-ms-flexbox; + display:flex; } + +.bp3-tree-node.bp3-disabled .bp3-tree-node-content{ + background-color:inherit; + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + +.bp3-tree-node.bp3-disabled .bp3-tree-node-caret, +.bp3-tree-node.bp3-disabled .bp3-tree-node-icon{ + color:rgba(92, 112, 128, 0.6); + cursor:not-allowed; } + +.bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content{ + background-color:#137cbd; } + .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content, + .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-icon, .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-icon-standard, .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-icon-large{ + color:#ffffff; } + .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-tree-node-caret::before{ + color:rgba(255, 255, 255, 0.7); } + .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-tree-node-caret:hover::before{ + color:#ffffff; } + +.bp3-dark .bp3-tree-node-content:hover{ + background-color:rgba(92, 112, 128, 0.3); } + +.bp3-dark .bp3-tree .bp3-icon, .bp3-dark .bp3-tree .bp3-icon-standard, .bp3-dark .bp3-tree .bp3-icon-large{ + color:#a7b6c2; } + .bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{ + color:#137cbd; } + .bp3-dark .bp3-tree .bp3-icon.bp3-intent-success, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{ + color:#0f9960; } + .bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{ + color:#d9822b; } + .bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{ + color:#db3737; } + +.bp3-dark .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content{ + background-color:#137cbd; } +.bp3-omnibar{ + -webkit-filter:blur(0); + filter:blur(0); + opacity:1; + background-color:#ffffff; + border-radius:3px; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); + left:calc(50% - 250px); + top:20vh; + width:500px; + z-index:21; } + .bp3-omnibar.bp3-overlay-enter, .bp3-omnibar.bp3-overlay-appear{ + -webkit-filter:blur(20px); + filter:blur(20px); + opacity:0.2; } + .bp3-omnibar.bp3-overlay-enter-active, .bp3-omnibar.bp3-overlay-appear-active{ + -webkit-filter:blur(0); + filter:blur(0); + opacity:1; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:opacity, -webkit-filter; + transition-property:opacity, -webkit-filter; + transition-property:filter, opacity; + transition-property:filter, opacity, -webkit-filter; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-omnibar.bp3-overlay-exit{ + -webkit-filter:blur(0); + filter:blur(0); + opacity:1; } + .bp3-omnibar.bp3-overlay-exit-active{ + -webkit-filter:blur(20px); + filter:blur(20px); + opacity:0.2; + -webkit-transition-delay:0; + transition-delay:0; + -webkit-transition-duration:200ms; + transition-duration:200ms; + -webkit-transition-property:opacity, -webkit-filter; + transition-property:opacity, -webkit-filter; + transition-property:filter, opacity; + transition-property:filter, opacity, -webkit-filter; + -webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); + transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); } + .bp3-omnibar .bp3-input{ + background-color:transparent; + border-radius:0; } + .bp3-omnibar .bp3-input, .bp3-omnibar .bp3-input:focus{ + -webkit-box-shadow:none; + box-shadow:none; } + .bp3-omnibar .bp3-menu{ + background-color:transparent; + border-radius:0; + -webkit-box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15); + box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15); + max-height:calc(60vh - 40px); + overflow:auto; } + .bp3-omnibar .bp3-menu:empty{ + display:none; } + .bp3-dark .bp3-omnibar, .bp3-omnibar.bp3-dark{ + background-color:#30404d; + -webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); + box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); } + +.bp3-omnibar-overlay .bp3-overlay-backdrop{ + background-color:rgba(16, 22, 26, 0.2); } + +.bp3-select-popover .bp3-popover-content{ + padding:5px; } + +.bp3-select-popover .bp3-input-group{ + margin-bottom:0; } + +.bp3-select-popover .bp3-menu{ + max-height:300px; + max-width:400px; + overflow:auto; + padding:0; } + .bp3-select-popover .bp3-menu:not(:first-child){ + padding-top:5px; } + +.bp3-multi-select{ + min-width:150px; } + +.bp3-multi-select-popover .bp3-menu{ + max-height:300px; + max-width:400px; + overflow:auto; } + +.bp3-select-popover .bp3-popover-content{ + padding:5px; } + +.bp3-select-popover .bp3-input-group{ + margin-bottom:0; } + +.bp3-select-popover .bp3-menu{ + max-height:300px; + max-width:400px; + overflow:auto; + padding:0; } + .bp3-select-popover .bp3-menu:not(:first-child){ + padding-top:5px; } +/*----------------------------------------------------------------------------- +| 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: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+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: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==); + --jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --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-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+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-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-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+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-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K); + --jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+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-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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=); + --jp-icon-listings-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MC45NzggNTAuOTc4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MC45NzggNTAuOTc4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cgk8Zz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojMDEwMDAyOyIgZD0iTTQzLjUyLDcuNDU4QzM4LjcxMSwyLjY0OCwzMi4zMDcsMCwyNS40ODksMEMxOC42NywwLDEyLjI2NiwyLjY0OCw3LjQ1OCw3LjQ1OAoJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDAKCQkJYzYuODE2LDAsMTMuMjIxLTIuNjQ4LDE4LjAyOS03LjQ1OGM0LjgwOS00LjgwOSw3LjQ1Ny0xMS4yMTIsNy40NTctMTguMDNDNTAuOTc3LDE4LjY3LDQ4LjMyOCwxMi4yNjYsNDMuNTIsNy40NTh6CgkJCSBNNDIuMTA2LDQyLjEwNWMtNC40MzIsNC40MzEtMTAuMzMyLDYuODcyLTE2LjYxNSw2Ljg3MmgtMC4wMDJjLTYuMjg1LTAuMDAxLTEyLjE4Ny0yLjQ0MS0xNi42MTctNi44NzIKCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzIKCQkJYzQuNDMxLDQuNDMxLDYuODcxLDEwLjMzMiw2Ljg3MSwxNi42MTdDNDguOTc3LDMxLjc3Miw0Ni41MzYsMzcuNjc1LDQyLjEwNiw0Mi4xMDV6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik0yMy41NzgsMzIuMjE4Yy0wLjAyMy0xLjczNCwwLjE0My0zLjA1OSwwLjQ5Ni0zLjk3MmMwLjM1My0wLjkxMywxLjExLTEuOTk3LDIuMjcyLTMuMjUzCgkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUKCQkJYzAtMS4wOTYtMC4yNi0yLjA4OC0wLjc3OS0yLjk3OWMtMC41NjUtMC44NzktMS41MDEtMS4zMzYtMi44MDYtMS4zNjljLTEuODAyLDAuMDU3LTIuOTg1LDAuNjY3LTMuNTUsMS44MzIKCQkJYy0wLjMwMSwwLjUzNS0wLjUwMywxLjE0MS0wLjYwNywxLjgxNGMtMC4xMzksMC43MDctMC4yMDcsMS40MzItMC4yMDcsMi4xNzRoLTIuOTM3Yy0wLjA5MS0yLjIwOCwwLjQwNy00LjExNCwxLjQ5My01LjcxOQoJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQoJCQljMCwxLjE0Mi0wLjEzNywyLjExMS0wLjQxLDIuOTExYy0wLjMwOSwwLjg0NS0wLjczMSwxLjU5My0xLjI2OCwyLjI0M2MtMC40OTIsMC42NS0xLjA2OCwxLjMxOC0xLjczLDIuMDAyCgkJCWMtMC42NSwwLjY5Ny0xLjMxMywxLjQ3OS0xLjk4NywyLjM0NmMtMC4yMzksMC4zNzctMC40MjksMC43NzctMC41NjUsMS4xOTljLTAuMTYsMC45NTktMC4yMTcsMS45NTEtMC4xNzEsMi45NzkKCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+Cgk8L2c+Cjwvc3ZnPgo=); + --jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --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-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+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4=); + --jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K); + --jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=); + --jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4=); + --jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K); + --jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K); +} + +/* Icon CSS class declarations */ + +.jp-AddIcon { + background-image: var(--jp-icon-add); +} +.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-CodeIcon { + background-image: var(--jp-icon-code); +} +.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-DownloadIcon { + background-image: var(--jp-icon-download); +} +.jp-EditIcon { + background-image: var(--jp-icon-edit); +} +.jp-EllipsesIcon { + background-image: var(--jp-icon-ellipses); +} +.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-FilterListIcon { + background-image: var(--jp-icon-filter-list); +} +.jp-FolderIcon { + background-image: var(--jp-icon-folder); +} +.jp-Html5Icon { + background-image: var(--jp-icon-html5); +} +.jp-ImageIcon { + background-image: var(--jp-icon-image); +} +.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-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-ListingsInfoIcon { + background-image: var(--jp-icon-listings-info); +} +.jp-MarkdownIcon { + background-image: var(--jp-icon-markdown); +} +.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-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-VegaIcon { + background-image: var(--jp-icon-vega); +} +.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. +|----------------------------------------------------------------------------*/ + +/** + * 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); +} + +/* CSS for icons in selected items in the settings editor */ +#setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill] { + fill: #fff; +} +#setting-editor + .jp-PluginList + .jp-mod-selected + .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* 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); +} + +/* CSS for icons in selected tabs in the sidebar tab manager */ +#tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill] { + fill: #fff; +} + +#tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} +#tab-manager + .lm-TabBar-tab.jp-mod-active + .jp-icon-hover + :hover + .jp-icon-selectable[fill] { + fill: var(--jp-brand-color1); +} + +#tab-manager + .lm-TabBar-tab.jp-mod-active + .jp-icon-hover + :hover + .jp-icon-selectable-inverse[fill] { + fill: #fff; +} + +/** + * 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 sidebar tab manager + */ +#tab-manager + .lm-TabBar-tab.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon3[fill] { + fill: none; +} +#tab-manager + .lm-TabBar-tab.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon-busy[fill] { + fill: var(--jp-inverse-layout-color3); +} + +#tab-manager + .lm-TabBar-tab.jp-mod-dirty.jp-mod-active + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon-busy[fill] { + fill: #fff; +} + +/** +* 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); +} + +/* 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) svg { + 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-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; +} + +.jp-switch-track { + cursor: pointer; + background-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: 0px; + 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-warn-color0); +} + +.jp-switch[aria-checked='true'] .jp-switch-track::before { + /* track width (35) - margins (3 + 3) - thumb width (10) */ + left: 19px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* Sibling imports */ + +/* Override Blueprint's _reset.scss styles */ +html { + box-sizing: unset; +} + +*, +*::before, +*::after { + box-sizing: unset; +} + +body { + color: unset; + font-family: var(--jp-ui-font-family); +} + +p { + margin-top: unset; + margin-bottom: unset; +} + +small { + font-size: unset; +} + +strong { + font-weight: unset; +} + +/* Override Blueprint's _typography.scss styles */ +a { + text-decoration: unset; + color: unset; +} +a:hover { + text-decoration: unset; + color: unset; +} + +/* Override Blueprint's _accessibility.scss styles */ +:focus { + outline: unset; + outline-offset: unset; + -moz-outline-radius: unset; +} + +/* Styles for ui-components */ +.jp-Button { + border-radius: var(--jp-border-radius); + padding: 0px 12px; + font-size: var(--jp-ui-font-size1); +} + +/* Use our own theme for hover styles */ +button.jp-Button.bp3-button.bp3-minimal:hover { + background-color: var(--jp-layout-color2); +} +.jp-Button.minimal { + color: unset !important; +} + +.jp-Button.jp-ToolbarButtonComponent { + text-transform: none; +} + +.jp-InputGroup input { + box-sizing: border-box; + 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); +} + +.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::placeholder, +input::placeholder { + color: var(--jp-ui-font-color3); +} + +.jp-BPIcon { + display: inline-block; + vertical-align: middle; + margin: auto; +} + +/* Stop blueprint futzing with our icon fills */ +.bp3-icon.jp-BPIcon > svg:not([fill]) { + fill: var(--jp-inverse-layout-color3); +} + +.jp-InputGroupAction { + 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); + height: 24px; + line-height: 14px; + padding: 0 25px 0 10px; + text-align: left; + -moz-appearance: none; + -webkit-appearance: none; +} + +/* Use our own theme for hover and option styles */ +.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. +|----------------------------------------------------------------------------*/ + +.jp-Collapse { + display: flex; + flex-direction: column; + align-items: stretch; + border-top: 1px solid var(--jp-border-color2); + border-bottom: 1px solid var(--jp-border-color2); +} + +.jp-Collapse-header { + padding: 1px 12px; + color: var(--jp-ui-font-color1); + background-color: var(--jp-layout-color1); + font-size: var(--jp-ui-font-size2); +} + +.jp-Collapse-header:hover { + background-color: var(--jp-layout-color2); +} + +.jp-Collapse-contents { + padding: 0px 12px 0px 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. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-commandpalette-search-height: 28px; +} + +/*----------------------------------------------------------------------------- +| Overall styles +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + padding-bottom: 0px; + 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: 0px 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 5px; +} + +.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: 0px; +} + +.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 .lm-CommandPalette-itemLabel > mark { + color: var(--jp-ui-inverse-font-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: 0px 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: 0px; + left: 0px; + 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; + padding-bottom: 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-button { + overflow: visible; +} + +button.jp-Dialog-button:focus { + outline: 1px solid var(--jp-brand-color1); + outline-offset: 4px; + -moz-outline-radius: 0px; +} + +button.jp-Dialog-button:focus::-moz-focus-inner { + border: 0; +} + +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-color0); +} + +.jp-Dialog-body { + display: flex; + flex-direction: column; + flex: 1 1 auto; + font-size: var(--jp-ui-font-size1); + background: var(--jp-layout-color1); + overflow: auto; +} + +.jp-Dialog-footer { + display: flex; + flex-direction: row; + justify-content: flex-end; + flex: 0 0 auto; + margin-left: -12px; + margin-right: -12px; + padding: 12px; +} + +.jp-Dialog-title { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.jp-Dialog-body > .jp-select-wrapper { + width: 100%; +} + +.jp-Dialog-body > button { + padding: 0px 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) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-HoverBox { + position: fixed; +} + +.jp-HoverBox.jp-mod-outofview { + display: none; +} + +/*----------------------------------------------------------------------------- +| 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, `p-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; +} + +.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; +} + +/** + * 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: #aa00ff; + + --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: #ffff00; + --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: #eeeeee; + --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) 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 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: 0px 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-FileDialog-Checkbox { + margin-top: 35px; + display: flex; + flex-direction: row; + align-items: end; + width: 100%; +} + +.jp-FileDialog-Checkbox > label { + flex: 1 1 auto; +} + +.jp-select-wrapper { + display: flex; + position: relative; + flex-direction: column; + padding: 1px; + background-color: var(--jp-layout-color1); + height: 28px; + box-sizing: border-box; + margin-bottom: 12px; +} + +.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 { + background-color: var(--jp-layout-color1); + cursor: pointer; + color: var(--jp-ui-font-color0); + background-color: var(--jp-input-hover-background); + box-shadow: inset 0 0px 1px rgba(0, 0, 0, 0.5); +} + +select.jp-mod-styled { + flex: 1 1 auto; + height: 32px; + 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: 0px; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +/*----------------------------------------------------------------------------- +| 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: 1; + overflow-x: auto; +} + +/* 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: 0px; + margin: 0px; +} + +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: 0px 6px; + margin: 0px; + 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: 0px; + 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); +} + +#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) 2014-2017, 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. +|----------------------------------------------------------------------------*/ + + +/* <DEPRECATED> */ body.p-mod-override-cursor *, /* </DEPRECATED> */ +body.lm-mod-override-cursor * { + cursor: inherit !important; +} + +/*----------------------------------------------------------------------------- +| 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: 0px; + 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); +} + +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; + direction: ltr; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} +.cm-fat-cursor-mark { + background-color: rgba(20, 255, 20, 0.5); + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; +} +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background-color: #7e7; +} +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: 0; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 50px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -50px; margin-right: -50px; + padding-bottom: 50px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; + border-right: 50px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; + outline: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -50px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre.CodeMirror-line, +.CodeMirror-wrap pre.CodeMirror-line-like { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + padding: 0.1px; /* Force widget margins to stay inside of the container */ +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } + +.CodeMirror-dialog { + position: absolute; + left: 0; right: 0; + background: inherit; + z-index: 15; + padding: .1em .8em; + overflow: hidden; + color: inherit; +} + +.CodeMirror-dialog-top { + border-bottom: 1px solid #eee; + top: 0; +} + +.CodeMirror-dialog-bottom { + border-top: 1px solid #eee; + bottom: 0; +} + +.CodeMirror-dialog input { + border: none; + outline: none; + background: transparent; + width: 20em; + color: inherit; + font-family: monospace; +} + +.CodeMirror-dialog button { + font-size: 70%; +} + +.CodeMirror-foldmarker { + color: blue; + text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; + font-family: arial; + line-height: .3; + cursor: pointer; +} +.CodeMirror-foldgutter { + width: .7em; +} +.CodeMirror-foldgutter-open, +.CodeMirror-foldgutter-folded { + cursor: pointer; +} +.CodeMirror-foldgutter-open:after { + content: "\25BE"; +} +.CodeMirror-foldgutter-folded:after { + content: "\25B8"; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.CodeMirror { + 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 */ +} + +.CodeMirror pre { + padding: 0 var(--jp-code-padding); +} + +.jp-CodeMirrorEditor[data-type='inline'] .CodeMirror-dialog { + background-color: var(--jp-layout-color0); + color: var(--jp-content-font-color1); +} + +/* This causes https://github.com/jupyter/jupyterlab/issues/522 */ +/* May not cause it not because we changed it! */ +.CodeMirror-lines { + padding: var(--jp-code-padding) 0; +} + +.CodeMirror-linenumber { + padding: 0 8px; +} + +.jp-CodeMirrorEditor { + cursor: text; +} + +.jp-CodeMirrorEditor[data-type='inline'] .CodeMirror-cursor { + border-left: var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color); +} + +/* 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'] .CodeMirror-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'] .CodeMirror-cursor { + border-left: var(--jp-code-cursor-width2) solid + var(--jp-editor-cursor-color); + } +} + +.CodeMirror.jp-mod-readOnly .CodeMirror-cursor { + display: none; +} + +.CodeMirror-gutters { + border-right: 1px solid var(--jp-border-color2); + background-color: var(--jp-layout-color0); +} + +.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; +} + +.CodeMirror-selectedtext.cm-searching { + background-color: var(--jp-search-selected-match-background-color) !important; + color: var(--jp-search-selected-match-color) !important; +} + +.cm-searching { + background-color: var( + --jp-search-unselected-match-background-color + ) !important; + color: var(--jp-search-unselected-match-color) !important; +} + +.CodeMirror-focused .CodeMirror-selected { + background-color: var(--jp-editor-selected-focused-background); +} + +.CodeMirror-selected { + background-color: var(--jp-editor-selected-background); +} + +.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); +} + +/** + * Here is our jupyter theme for CodeMirror syntax highlighting + * This is used in our marked.js syntax highlighting and CodeMirror itself + * The string "jupyter" is set in ../codemirror/widget.DEFAULT_CODEMIRROR_THEME + * This came from the classic notebook, which came form highlight.js/GitHub + */ + +/** + * CodeMirror themes are handling the background/color in this way. This works + * fine for CodeMirror editors outside the notebook, but the notebook styles + * these things differently. + */ +.CodeMirror.cm-s-jupyter { + background: var(--jp-layout-color0); + color: var(--jp-content-font-color1); +} + +/* In the notebook, we want this styling to be handled by its container */ +.jp-CodeConsole .CodeMirror.cm-s-jupyter, +.jp-Notebook .CodeMirror.cm-s-jupyter { + background: transparent; +} + +.cm-s-jupyter .CodeMirror-cursor { + border-left: var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color); +} +.cm-s-jupyter span.cm-keyword { + color: var(--jp-mirror-editor-keyword-color); + font-weight: bold; +} +.cm-s-jupyter span.cm-atom { + color: var(--jp-mirror-editor-atom-color); +} +.cm-s-jupyter span.cm-number { + color: var(--jp-mirror-editor-number-color); +} +.cm-s-jupyter span.cm-def { + color: var(--jp-mirror-editor-def-color); +} +.cm-s-jupyter span.cm-variable { + color: var(--jp-mirror-editor-variable-color); +} +.cm-s-jupyter span.cm-variable-2 { + color: var(--jp-mirror-editor-variable-2-color); +} +.cm-s-jupyter span.cm-variable-3 { + color: var(--jp-mirror-editor-variable-3-color); +} +.cm-s-jupyter span.cm-punctuation { + color: var(--jp-mirror-editor-punctuation-color); +} +.cm-s-jupyter span.cm-property { + color: var(--jp-mirror-editor-property-color); +} +.cm-s-jupyter span.cm-operator { + color: var(--jp-mirror-editor-operator-color); + font-weight: bold; +} +.cm-s-jupyter span.cm-comment { + color: var(--jp-mirror-editor-comment-color); + font-style: italic; +} +.cm-s-jupyter span.cm-string { + color: var(--jp-mirror-editor-string-color); +} +.cm-s-jupyter span.cm-string-2 { + color: var(--jp-mirror-editor-string-2-color); +} +.cm-s-jupyter span.cm-meta { + color: var(--jp-mirror-editor-meta-color); +} +.cm-s-jupyter span.cm-qualifier { + color: var(--jp-mirror-editor-qualifier-color); +} +.cm-s-jupyter span.cm-builtin { + color: var(--jp-mirror-editor-builtin-color); +} +.cm-s-jupyter span.cm-bracket { + color: var(--jp-mirror-editor-bracket-color); +} +.cm-s-jupyter span.cm-tag { + color: var(--jp-mirror-editor-tag-color); +} +.cm-s-jupyter span.cm-attribute { + color: var(--jp-mirror-editor-attribute-color); +} +.cm-s-jupyter span.cm-header { + color: var(--jp-mirror-editor-header-color); +} +.cm-s-jupyter span.cm-quote { + color: var(--jp-mirror-editor-quote-color); +} +.cm-s-jupyter span.cm-link { + color: var(--jp-mirror-editor-link-color); +} +.cm-s-jupyter span.cm-error { + color: var(--jp-mirror-editor-error-color); +} +.cm-s-jupyter span.cm-hr { + color: #999; +} + +.cm-s-jupyter span.cm-tab { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=); + background-position: right; + background-repeat: no-repeat; +} + +.cm-s-jupyter .CodeMirror-activeline-background, +.cm-s-jupyter .CodeMirror-gutter { + background-color: var(--jp-layout-color2); +} + +/* Styles for shared cursors (remote cursor locations and selected ranges) */ +.jp-CodeMirrorEditor .remote-caret { + position: relative; + border-left: 2px solid black; + margin-left: -1px; + margin-right: -1px; + box-sizing: border-box; +} + +.jp-CodeMirrorEditor .remote-caret > div { + white-space: nowrap; + position: absolute; + top: -1.15em; + padding-bottom: 0.05em; + left: -2px; + font-size: 0.95em; + background-color: rgb(250, 129, 0); + 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: 3; + transition: opacity 0.3s ease-in-out; +} + +.jp-CodeMirrorEditor .remote-caret.hide-name > div { + transition-delay: 0.7s; + opacity: 0; +} + +.jp-CodeMirrorEditor .remote-caret:hover > div { + opacity: 1; + transition-delay: 0s; +} + +/*----------------------------------------------------------------------------- +| 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: 0px; + padding: 0px; +} + +.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 */ + +.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: 0em; +} + +.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: 12px; + table-layout: fixed; + margin-left: auto; + 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 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 table { + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon p { + text-align: left; + margin: 0px; +} + +.jp-RenderedHTMLCommon p { + 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); +} +/* ...or leave it untouched if they don't */ +[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-dark-background { +} +[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-light-background { +} + +.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: 0.8em; + 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. +|----------------------------------------------------------------------------*/ + +.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 { + display: flex; + flex-direction: column; + 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); +} + +.jp-FileBrowser-toolbar.jp-Toolbar { + border-bottom: none; + height: auto; + margin: var(--jp-toolbar-header-margin); + box-shadow: none; +} + +.jp-BreadCrumbs { + flex: 0 0 auto; + margin: 8px 12px 8px 12px; +} + +.jp-BreadCrumbs-item { + margin: 0px 2px; + padding: 0px 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: 0px; +} + +.jp-BreadCrumbs-item.jp-mod-dropTarget { + background-color: var(--jp-brand-color2); + opacity: 0.7; +} + +/*----------------------------------------------------------------------------- +| Buttons +|----------------------------------------------------------------------------*/ + +.jp-FileBrowser-toolbar.jp-Toolbar { + padding: 0px; + margin: 8px 12px 0px 12px; +} + +.jp-FileBrowser-toolbar.jp-Toolbar { + justify-content: flex-start; +} + +.jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item { + flex: 0 0 auto; + padding-left: 0px; + padding-right: 2px; +} + +.jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent { + width: 40px; +} + +.jp-FileBrowser-toolbar.jp-Toolbar + .jp-Toolbar-item:first-child + .jp-ToolbarButtonComponent { + width: 72px; + background: var(--jp-brand-color1); +} + +.jp-FileBrowser-toolbar.jp-Toolbar + .jp-Toolbar-item:first-child + .jp-ToolbarButtonComponent:focus-visible { + background-color: var(--jp-brand-color0); +} + +.jp-FileBrowser-toolbar.jp-Toolbar + .jp-Toolbar-item:first-child + .jp-ToolbarButtonComponent + .jp-icon3 { + fill: white; +} + +/*----------------------------------------------------------------------------- +| 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-FileBrowser-filterBox { + padding: 0px; + flex: 0 0 auto; + margin: 8px 12px 0px 12px; +} + +/*----------------------------------------------------------------------------- +| DirListing +|----------------------------------------------------------------------------*/ + +.jp-DirListing { + flex: 1 1 auto; + display: flex; + flex-direction: column; + outline: 0; +} + +.jp-DirListing:focus-visible { + border: 1px solid var(--jp-brand-color1); +} + +.jp-DirListing-header { + flex: 0 0 auto; + display: flex; + flex-direction: row; + 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 12px; + 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-id-narrow { + display: none; + flex: 0 0 5px; + padding: 4px 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; + padding: 4px 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.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-itemModified { + flex: 0 0 125px; + text-align: right; +} + +.jp-DirListing-editor { + flex: 1 0 64px; + outline: none; + border: none; +} + +.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: 0px; + color: var(--jp-ui-font-color1); + transform: translateX(-40%) translateY(-58%); +} + +.jp-DirListing-deadSpace { + flex: 1 1 auto; + margin: 0; + padding: 0; + list-style-type: none; + overflow: auto; + background-color: var(--jp-layout-color1); +} + +.jp-Document { + min-width: 120px; + min-height: 120px; + outline: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Private CSS variables +|----------------------------------------------------------------------------*/ + +:root { +} + +/*----------------------------------------------------------------------------- +| Main OutputArea +| OutputArea has a list of Outputs +|----------------------------------------------------------------------------*/ + +.jp-OutputArea { + overflow-y: auto; +} + +.jp-OutputArea-child { + display: flex; + flex-direction: row; +} + +body[data-format='mobile'] .jp-OutputArea-child { + flex-direction: column; +} + +.jp-OutputPrompt { + flex: 0 0 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; +} + +body[data-format='mobile'] .jp-OutputPrompt { + flex: 0 0 auto; + text-align: left; +} + +.jp-OutputArea-output { + height: auto; + overflow: auto; + user-select: text; + -moz-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; +} + +.jp-OutputArea-child .jp-OutputArea-output { + flex-grow: 1; + flex-shrink: 1; +} + +body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output { + margin-left: var(--jp-notebook-padding); +} + +/** + * Isolated output. + */ +.jp-OutputArea-output.jp-mod-isolated { + width: 100%; + display: block; +} + +/* +When drag events occur, `p-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: 0px; + padding: 0px; + 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; +} + +/* 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; +} + +/*----------------------------------------------------------------------------- +| 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: 0px; + flex: 1 1 auto; +} + +/* 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-OutputArea-stdin { + line-height: var(--jp-code-line-height); + padding-top: var(--jp-code-padding); + display: flex; +} + +.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: 0em 0.25em; + margin: 0em 0.25em; + flex: 0 0 70%; +} + +.jp-Stdin-input:focus { + box-shadow: none; +} + +/*----------------------------------------------------------------------------- +| Output Area View +|----------------------------------------------------------------------------*/ + +.jp-LinkedOutputView .jp-OutputArea { + height: 100%; + display: block; +} + +.jp-LinkedOutputView .jp-OutputArea-output:only-child { + height: 100%; +} + +/*----------------------------------------------------------------------------- +| 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: 0px; + margin: 0px; + 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: 0px; + bottom: 0px; +} + +/*----------------------------------------------------------------------------- +| 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: 0px; + width: 100%; + padding: 0px; + margin: 0px; + 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: flex; + flex-direction: row; + overflow: hidden; +} + +body[data-format='mobile'] .jp-InputArea { + flex-direction: column; +} + +.jp-InputArea-editor { + flex: 1 1 auto; + overflow: hidden; +} + +.jp-InputArea-editor { + /* This is the non-active, default styling */ + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + border-radius: 0px; + background: var(--jp-cell-editor-background); +} + +body[data-format='mobile'] .jp-InputArea-editor { + margin-left: var(--jp-notebook-padding); +} + +.jp-InputPrompt { + flex: 0 0 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; + 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; +} + +body[data-format='mobile'] .jp-InputPrompt { + flex: 0 0 auto; + text-align: left; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Placeholder +|----------------------------------------------------------------------------*/ + +.jp-Placeholder { + display: flex; + flex-direction: row; + flex: 1 1 auto; +} + +.jp-Placeholder-prompt { + box-sizing: border-box; +} + +.jp-Placeholder-content { + flex: 1 1 auto; + border: none; + background: transparent; + height: 20px; + box-sizing: border-box; +} + +.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: 0px 0px 2px 0px rgba(0, 0, 0, 0.25); + background-color: var(--jp-layout-color0); +} + +/*----------------------------------------------------------------------------- +| 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: 0px; + border: none; + outline: none; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Common input/output +|----------------------------------------------------------------------------*/ + +.jp-Cell-inputWrapper, +.jp-Cell-outputWrapper { + display: flex; + flex-direction: row; + padding: 0px; + margin: 0px; + /* 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: 200px; + box-shadow: inset 0 0 6px 2px rgba(0, 0, 0, 0.3); + margin-left: var(--jp-private-cell-scrolling-output-offset); +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt { + flex: 0 0 + calc( + var(--jp-cell-prompt-width) - + var(--jp-private-cell-scrolling-output-offset) + ); +} + +/*----------------------------------------------------------------------------- +| CodeCell +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| MarkdownCell +|----------------------------------------------------------------------------*/ + +.jp-MarkdownOutput { + flex: 1 1 auto; + margin-top: 0; + margin-bottom: 0; + padding-left: var(--jp-code-padding); +} + +.jp-MarkdownOutput.jp-RenderedHTMLCommon { + overflow: auto; +} + +.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; +} + +.jp-showHiddenCellsButton:hover { + background-color: var(--jp-border-color2) !important; +} + +.jp-collapseHeadingButton { + display: none; +} + +.jp-MarkdownCell:hover .jp-collapseHeadingButton { + display: flex; + min-height: var(--jp-cell-collapser-min-height); + position: absolute; + right: 0; + top: 0; + bottom: 0; +} + +/*----------------------------------------------------------------------------- +| 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 +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-NotebookPanel-toolbar { + padding: 2px; +} + +.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; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Private CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --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); +} + +/*----------------------------------------------------------------------------- +| Imports +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Notebook +|----------------------------------------------------------------------------*/ + +.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-render * { + contain: none !important; +} + +.jp-Notebook .jp-Cell { + overflow: visible; +} + +.jp-Notebook .jp-Cell .jp-InputPrompt { + cursor: move; + float: left; +} + +/*----------------------------------------------------------------------------- +| 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 0px 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 0px; +} + +.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 0px 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-NotebookTools-tool { + padding: 0px 12px 0 12px; +} + +.jp-ActiveCellTool { + padding: 12px; + background-color: var(--jp-layout-color1); + border-top: none !important; +} + +.jp-ActiveCellTool .jp-InputArea-prompt { + flex: 0 0 auto; + padding-left: 0px; +} + +.jp-ActiveCellTool .jp-InputArea-editor { + flex: 1 1 auto; + background: var(--jp-cell-editor-background); + border-color: var(--jp-cell-editor-border-color); +} + +.jp-ActiveCellTool .jp-InputArea-editor .CodeMirror { + background: transparent; +} + +.jp-MetadataEditorTool { + flex-direction: column; + padding: 12px 0px 12px 0px; +} + +.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 { + line-height: 1.4; +} + +.jp-NotebookTools .jp-select-wrapper { + margin-top: 4px; + margin-bottom: 0px; +} + +.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; +} + +/*----------------------------------------------------------------------------- +| 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: relative; +} + +.jp-Cell-Placeholder-wrapper-body div { + 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: 0px 2px 1px -1px var(--jp-shadow-umbra-color), + 0px 1px 1px 0px var(--jp-shadow-penumbra-color), + 0px 1px 3px 0px var(--jp-shadow-ambient-color); + --jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color), + 0px 2px 2px 0px var(--jp-shadow-penumbra-color), + 0px 1px 5px 0px var(--jp-shadow-ambient-color); + --jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color), + 0px 4px 5px 0px var(--jp-shadow-penumbra-color), + 0px 1px 10px 0px var(--jp-shadow-ambient-color); + --jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color), + 0px 6px 10px 0px var(--jp-shadow-penumbra-color), + 0px 1px 18px 0px var(--jp-shadow-ambient-color); + --jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color), + 0px 8px 10px 1px var(--jp-shadow-penumbra-color), + 0px 3px 14px 2px var(--jp-shadow-ambient-color); + --jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color), + 0px 12px 17px 2px var(--jp-shadow-penumbra-color), + 0px 5px 22px 4px var(--jp-shadow-ambient-color); + --jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color), + 0px 16px 24px 2px var(--jp-shadow-penumbra-color), + 0px 6px 30px 5px var(--jp-shadow-ambient-color); + --jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color), + 0px 20px 31px 3px var(--jp-shadow-penumbra-color), + 0px 8px 38px 7px var(--jp-shadow-ambient-color); + --jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color), + 0px 24px 38px 3px var(--jp-shadow-penumbra-color), + 0px 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-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: -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-700); + + --jp-content-font-family: -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: #111111; + --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: 0px; + --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: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); + --jp-toolbar-header-margin: 4px 4px 0px 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-border-color1); + --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: #05a; + --jp-mirror-editor-variable-3-color: #085; + --jp-mirror-editor-punctuation-color: #05a; + --jp-mirror-editor-property-color: #05a; + --jp-mirror-editor-operator-color: #aa22ff; + --jp-mirror-editor-comment-color: #408080; + --jp-mirror-editor-string-color: #ba2121; + --jp-mirror-editor-string-2-color: #708; + --jp-mirror-editor-meta-color: #aa22ff; + --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; + + /* 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); +} +</style> + +<style type="text/css"> +/* Force rendering true colors when outputing to pdf */ +* { + -webkit-print-color-adjust: exact; +} + +/* Misc */ +a.anchor-link { + display: none; +} + +.highlight { + margin: 0.4em; +} + +/* Input area styling */ +.jp-InputArea { + overflow: hidden; +} + +.jp-InputArea-editor { + overflow: hidden; +} + +.CodeMirror pre { + margin: 0; + padding: 0; +} + +/* Using table instead of flexbox so that we can use break-inside property */ +/* CSS rules under this comment should not be required anymore after we move to the JupyterLab 4.0 CSS */ + + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt { + min-width: calc( + var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset) + ); +} + +.jp-OutputArea-child { + display: table; + width: 100%; +} + +.jp-OutputPrompt { + display: table-cell; + vertical-align: top; + min-width: var(--jp-cell-prompt-width); +} + +body[data-format='mobile'] .jp-OutputPrompt { + display: table-row; +} + +.jp-OutputArea-output { + display: table-cell; + width: 100%; +} + +body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output { + display: table-row; +} + +.jp-OutputArea-output.jp-OutputArea-executeResult { + width: 100%; +} + +/* Hiding the collapser by default */ +.jp-Collapser { + display: none; +} + +@media print { + .jp-Cell-inputWrapper, + .jp-Cell-outputWrapper { + display: block; + } + + .jp-OutputArea-child { + break-inside: avoid-page; + } +} +</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 --></head> +<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light"> +<div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [63]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># fetch all functions from there for testing (__name__ hack to avoid executing main)</span> +<span class="vm">__name__</span> <span class="o">=</span> <span class="s2">"test"</span> +<span class="n">execfile</span><span class="p">(</span><span class="s2">"./scripts/translate2modelcif.py"</span><span class="p">)</span> +<span class="n">_main</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"> +<pre>PROTEINS ONLY in fasta_file: ['c104827_g1_i1', 'c104894_g1_i2'] +Working on ./PKG Cut... + translating c103531_g3_i1_unrelaxed_rank_1_model_3... + preparing data... (0.02s) + generating ModelCIF objects... (0.00s) + processing QA scores... (0.20s) + write to disk... (1.15s) + ... done with c103531_g3_i1_unrelaxed_rank_1_model_3 (1.37s). + translating c103545_g3_i2_unrelaxed_rank_1_model_3... + preparing data... (0.08s) + generating ModelCIF objects... (0.00s) + processing QA scores... (5.47s) + write to disk... (19.48s) + ... done with c103545_g3_i2_unrelaxed_rank_1_model_3 (25.13s). +... done with ./PKG Cut. +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span> <span class="c1"># HC filepaths</span> + <span class="n">cnfg_file</span> <span class="o">=</span> <span class="s2">"./PKG/config.json"</span> + <span class="n">metadata_file</span> <span class="o">=</span> <span class="s2">"./PKG/model_archive_metadata.csv"</span> + <span class="n">fasta_file</span> <span class="o">=</span> <span class="s2">"./PKG/Spongilla_lacustris_translated_proteome_fixed.fasta"</span> + <span class="n">model_dir</span> <span class="o">=</span> <span class="s2">"./PKG Cut"</span> + <span class="c1"># model_dir = "./PKG-all"</span> + <span class="n">out_dir</span> <span class="o">=</span> <span class="s2">"./modelcif"</span> + <span class="n">compress</span> <span class="o">=</span> <span class="kc">False</span> + <span class="c1">#</span> + + <span class="c1"># parse/fetch global data</span> + <span class="n">config_data</span> <span class="o">=</span> <span class="n">_parse_colabfold_config</span><span class="p">(</span><span class="n">cnfg_file</span><span class="p">)</span> + <span class="n">metadata</span> <span class="o">=</span> <span class="n">_get_metadata</span><span class="p">(</span><span class="n">metadata_file</span><span class="p">)</span> + <span class="n">seq_dict</span> <span class="o">=</span> <span class="n">_get_sequences</span><span class="p">(</span><span class="n">fasta_file</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span> + <span class="k">if</span> <span class="n">compress</span><span class="p">:</span> + <span class="n">cifext</span> <span class="o">=</span> <span class="s2">"cif.gz"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">cifext</span> <span class="o">=</span> <span class="s2">"cif"</span> + <span class="c1"># fetch a single randomly chosen UniProt entry for tax info</span> + <span class="n">upkb_data</span> <span class="o">=</span> <span class="n">_fetch_upkb_entry</span><span class="p">(</span><span class="s2">"P42690"</span><span class="p">)</span> + <span class="n">tax_info</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">upkb_data</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> \ + <span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"up_organism"</span><span class="p">,</span> <span class="s2">"up_ncbi_taxid"</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"> +<pre>PROTEINS ONLY in fasta_file: ['c104827_g1_i1', 'c104894_g1_i2'] +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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 [4]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="n">fle</span> <span class="o">=</span> <span class="s2">"c103531_g3_i1_unrelaxed_rank_1_model_3.pdb"</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [5]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span> <span class="n">file_prfx</span><span class="p">,</span> <span class="n">mdl_name</span> <span class="o">=</span> <span class="n">_check_model_extra_files_present</span><span class="p">(</span><span class="n">model_dir</span><span class="p">,</span> + <span class="n">fle</span><span class="p">)</span> + <span class="n">fle</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">model_dir</span><span class="p">,</span> <span class="n">fle</span><span class="p">)</span> + <span class="n">mdlcf_json</span> <span class="o">=</span> <span class="n">_create_json</span><span class="p">(</span><span class="n">config_data</span><span class="p">)</span> + <span class="n">mdlcf_json</span><span class="p">[</span><span class="s2">"tax_info"</span><span class="p">]</span> <span class="o">=</span> <span class="n">tax_info</span> + <span class="c1"># mdl_name = [TITLE]_unrelaxed_rank_X_model_Y.pdb</span> + <span class="n">mdl_name_parts</span> <span class="o">=</span> <span class="n">mdl_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'_'</span><span class="p">)</span> + <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">mdl_name_parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">8</span> + <span class="k">assert</span> <span class="nb">int</span><span class="p">(</span><span class="n">mdl_name_parts</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span> <span class="c1"># rank 1 only</span> + <span class="n">mdlcf_json</span><span class="p">[</span><span class="s2">"mdl_num"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">mdl_name_parts</span><span class="p">[</span><span class="mi">7</span><span class="p">])</span> + <span class="n">mdlcf_json</span><span class="p">[</span><span class="s2">"mdl_title"</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'_'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mdl_name_parts</span><span class="p">[:</span><span class="mi">3</span><span class="p">])</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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 [6]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span> <span class="n">ost_ent</span> <span class="o">=</span> <span class="n">_create_model_json</span><span class="p">(</span><span class="n">mdlcf_json</span><span class="p">,</span> <span class="n">fle</span><span class="p">,</span> <span class="n">seq_dict</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span> + + <span class="c1"># read quality scores from JSON file</span> + <span class="n">_get_scores</span><span class="p">(</span><span class="n">mdlcf_json</span><span class="p">,</span> <span class="n">file_prfx</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"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [7]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span> <span class="n">_store_as_modelcif</span><span class="p">(</span><span class="n">mdlcf_json</span><span class="p">,</span> <span class="n">ost_ent</span><span class="p">,</span> <span class="n">out_dir</span><span class="p">,</span> <span class="n">mdl_name</span><span class="p">,</span> <span class="n">compress</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"> +<pre> generating ModelCIF objects... (0.00s) + processing QA scores... (0.34s) + write to disk... (1.04s) +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [8]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="n">scores</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s2">"./PKG Cut/c103545_g3_i2_unrelaxed_rank_1_model_3_scores.json"</span><span class="p">))</span> +<span class="nb">print</span><span class="p">(</span><span class="n">scores</span><span class="o">.</span><span class="n">keys</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"> +<pre>dict_keys(['max_pae', 'pae', 'plddt', 'ptm']) +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [9]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># check files</span> +<span class="n">pdb_files</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"./PKG/files_PDB.txt"</span><span class="p">)</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span> +<span class="n">json_files</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"./PKG/files_JSON.txt"</span><span class="p">)</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span> +<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">pdb_files</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">json_files</span><span class="p">)</span> + +<span class="n">mdl_titles</span> <span class="o">=</span> <span class="p">[]</span> +<span class="k">for</span> <span class="n">pdb_file</span><span class="p">,</span> <span class="n">json_file</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">pdb_files</span><span class="p">),</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">json_files</span><span class="p">)):</span> + <span class="n">splitfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">pdb_file</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> + <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">splitfile</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> + <span class="k">if</span> <span class="n">splitfile</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span> + <span class="n">mdl_name</span><span class="p">,</span> <span class="n">mdl_ext</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">splitfile</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="k">assert</span> <span class="n">mdl_ext</span> <span class="o">==</span> <span class="s2">".pdb"</span> + <span class="n">splitfile_j</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">json_file</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> + <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">splitfile_j</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> + <span class="k">assert</span> <span class="n">splitfile_j</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">mdl_name</span><span class="si">}</span><span class="s2">_scores.json"</span> + <span class="n">mdl_name_parts</span> <span class="o">=</span> <span class="n">mdl_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'_'</span><span class="p">)</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">mdl_name_parts</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">8</span> <span class="ow">or</span> <span class="n">mdl_name_parts</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'1'</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"WEIRD NAME"</span><span class="p">,</span> <span class="n">mdl_name</span><span class="p">)</span> + <span class="n">mdl_title</span> <span class="o">=</span> <span class="s1">'_'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mdl_name_parts</span><span class="p">[:</span><span class="mi">3</span><span class="p">])</span> + <span class="n">mdl_titles</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mdl_title</span><span class="p">)</span> + +<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">mdl_titles</span><span class="p">))</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">mdl_titles</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"> +<pre>WEIRD NAME c100000_g1_i2_unrelaxed_rank_c100000_g1_i2_model_3 +WEIRD NAME c100001_g1_i1_unrelaxed_rank_1_model_c100001_g1_i1 +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [10]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># all in metadata?</span> +<span class="n">only_in_metadata</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">metadata</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">mdl_titles</span><span class="p">)</span> +<span class="k">if</span> <span class="n">only_in_metadata</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="s2">"PROTEINS ONLY in metadata:"</span><span class="p">,</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">only_in_metadata</span><span class="p">))</span> +<span class="n">only_in_seqs</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">mdl_titles</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">metadata</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> +<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">only_in_seqs</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> +<span class="nb">len</span><span class="p">(</span><span class="n">mdl_titles</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">metadata</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">only_in_metadata</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"> +<pre>PROTEINS ONLY in metadata: ['c104658_g3_i5', 'c104704_g1_i1', 'c104839_g1_i1', 'c104839_g1_i3', 'c104872_g1_i1', 'c104894_g1_i3', 'c104922_g1_i2', 'c104954_g1_i2', 'c104956_g1_i1', 'c104958_g1_i1', 'c104973_g1_i2'] +</pre> +</div> +</div> + +<div class="jp-OutputArea-child"> + + + <div class="jp-OutputPrompt jp-OutputArea-prompt">Out[10]:</div> + + + + +<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain"> +<pre>(41932, 41943, 11)</pre> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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 [11]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># check files that were converted (input is std out from run cut to only include "translating...")</span> +<span class="n">log_lines</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"./FromWork/docker_out_clean.txt"</span><span class="p">)</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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 [12]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># plenty of assertions in here should also catch any errors...</span> +<span class="n">idx</span> <span class="o">=</span> <span class="mi">0</span> +<span class="n">timings</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> +<span class="k">while</span> <span class="n">idx</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">log_lines</span><span class="p">):</span> + <span class="n">l</span> <span class="o">=</span> <span class="n">log_lines</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">if</span> <span class="s2">"already done..."</span> <span class="ow">in</span> <span class="n">l</span><span class="p">:</span> + <span class="n">idx</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">continue</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"translating"</span><span class="p">)</span> + <span class="n">mdl_title</span> <span class="o">=</span> <span class="s2">"_"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'_'</span><span class="p">)[:</span><span class="mi">3</span><span class="p">])</span> + <span class="n">l</span> <span class="o">=</span> <span class="n">log_lines</span><span class="p">[</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"preparing data"</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"s)"</span><span class="p">)</span> + <span class="n">t_prep</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> + <span class="n">l</span> <span class="o">=</span> <span class="n">log_lines</span><span class="p">[</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"generating ModelCIF objects"</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"s)"</span><span class="p">)</span> + <span class="n">t_cif</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> + <span class="n">l</span> <span class="o">=</span> <span class="n">log_lines</span><span class="p">[</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"processing QA scores"</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"s)"</span><span class="p">)</span> + <span class="n">t_qa</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> + <span class="n">l</span> <span class="o">=</span> <span class="n">log_lines</span><span class="p">[</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">4</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"write to disk"</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"s)"</span><span class="p">)</span> + <span class="n">t_write</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> + <span class="n">l</span> <span class="o">=</span> <span class="n">log_lines</span><span class="p">[</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">5</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"... done with"</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">l</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"s)."</span><span class="p">)</span> + <span class="n">t_all</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">3</span><span class="p">])</span> + <span class="n">timings</span><span class="p">[</span><span class="n">mdl_title</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"seq_len"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">seq_dict</span><span class="p">[</span><span class="n">mdl_title</span><span class="p">]),</span> + <span class="s2">"t_prep"</span><span class="p">:</span> <span class="n">t_prep</span><span class="p">,</span> + <span class="s2">"t_cif"</span><span class="p">:</span> <span class="n">t_cif</span><span class="p">,</span> + <span class="s2">"t_qa"</span><span class="p">:</span> <span class="n">t_qa</span><span class="p">,</span> + <span class="s2">"t_write"</span><span class="p">:</span> <span class="n">t_write</span><span class="p">,</span> + <span class="s2">"t_all"</span><span class="p">:</span> <span class="n">t_all</span> + <span class="p">}</span> + <span class="n">idx</span> <span class="o">+=</span> <span class="mi">6</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [13]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"DONE </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">timings</span><span class="p">)</span><span class="si">}</span><span class="s2"> models"</span><span class="p">)</span> +<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">timings</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">mdl_titles</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span> +<span class="n">missing_ones</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">mdl_titles</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">timings</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"MISSING </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">missing_ones</span><span class="p">)</span><span class="si">}</span><span class="s2"> models"</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"> +<pre>DONE 37738 models +MISSING 4194 models +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline +<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> +<span class="n">x</span> <span class="o">=</span> <span class="p">[]</span> +<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span> +<span class="n">y2</span> <span class="o">=</span> <span class="p">[]</span> +<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">timings</span><span class="o">.</span><span class="n">values</span><span class="p">():</span> + <span class="n">x</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="s2">"seq_len"</span><span class="p">])</span> + <span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="s2">"t_all"</span><span class="p">])</span> + <span class="n">y2</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="s2">"t_write"</span><span class="p">])</span> +<span class="c1"># fit quadratic function (for fun)</span> +<span class="n">model</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">poly1d</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">polyfit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> +<span class="nb">print</span><span class="p">(</span><span class="n">model</span><span class="p">)</span> +<span class="c1"># plot it</span> +<span class="n">plt</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y2</span><span class="p">)</span> +<span class="n">polyline</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="mi">50</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">polyline</span><span class="p">,</span> <span class="n">model</span><span class="p">(</span><span class="n">polyline</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"seq. length"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"conversion time"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">([</span><span class="s2">"quadratic fit"</span><span class="p">,</span> <span class="s2">"total time"</span><span class="p">,</span> <span class="s2">"write time"</span><span class="p">])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">gcf</span><span class="p">()</span><span class="o">.</span><span class="n">patch</span><span class="o">.</span><span class="n">set_facecolor</span><span class="p">(</span><span class="s1">'white'</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Average time per model (s):"</span><span class="p">,</span> <span class="nb">sum</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">y</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"> +<pre> 2 +2.106e-05 x - 4.487e-05 x + 0.05244 +Average time per model (s): 2.1000026498489452 +</pre> +</div> +</div> + +<div class="jp-OutputArea-child"> + + + <div class="jp-OutputPrompt jp-OutputArea-prompt"></div> + + + + +<div class="jp-RenderedImage jp-OutputArea-output "> +<img src="data:image/png;base64,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 +" +class=" +" +> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [16]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># check results (self-contained version)</span> +<span class="kn">from</span> <span class="nn">ost</span> <span class="kn">import</span> <span class="n">io</span> +<span class="n">fasta_file</span> <span class="o">=</span> <span class="s2">"./PKG/Spongilla_lacustris_translated_proteome_fixed.fasta"</span> +<span class="n">out_dir</span> <span class="o">=</span> <span class="s2">"./modelcif"</span> +<span class="n">cifext</span> <span class="o">=</span> <span class="s2">"cif"</span> +<span class="n">seqs</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">LoadSequenceList</span><span class="p">(</span><span class="n">fasta_file</span><span class="p">)</span> +<span class="n">seq_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'_'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'_'</span><span class="p">)[:</span><span class="mi">3</span><span class="p">]):</span> <span class="n">s</span><span class="o">.</span><span class="n">string</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">seqs</span><span class="p">}</span> +<span class="k">for</span> <span class="n">out_fle</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">out_dir</span><span class="p">)):</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">out_fle</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">cifext</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"_local_pairwise_qa"</span> <span class="ow">in</span> <span class="n">out_fle</span><span class="p">:</span> + <span class="k">continue</span> + <span class="n">mdl_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">out_fle</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">mdl_title</span> <span class="o">=</span> <span class="s1">'_'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mdl_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'_'</span><span class="p">)[:</span><span class="mi">3</span><span class="p">])</span> + <span class="c1"># check if result can be read and has expected seq.</span> + <span class="n">ent</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">LoadMMCIF</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">out_dir</span><span class="p">,</span> <span class="n">out_fle</span><span class="p">))</span> + <span class="k">assert</span> <span class="n">ent</span><span class="o">.</span><span class="n">chain_count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"Bad chain count </span><span class="si">{</span><span class="n">mdl_title</span><span class="si">}</span><span class="s2">"</span> + <span class="n">ent_seq</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">one_letter_code</span> <span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="n">ent</span><span class="o">.</span><span class="n">residues</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">ent_seq</span> <span class="o">==</span> <span class="n">seq_dict</span><span class="p">[</span><span class="n">mdl_title</span><span class="p">],</span> <span class="sa">f</span><span class="s2">"Bad seq. </span><span class="si">{</span><span class="n">mdl_title</span><span class="si">}</span><span class="s2">"</span> + <span class="c1"># NOTE: can use only this bit in main loop with os.path.join(out_dir, f"{mdl_name}.{cifext}")</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [17]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># check ,-separation in metadata</span> +<span class="k">for</span> <span class="n">title</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">metadata</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span> + <span class="n">desc</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">description</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">desc</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span> + <span class="k">if</span> <span class="s2">","</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span> + <span class="k">assert</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"CoFFE orthogroups"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"CoFFE GO terms"</span><span class="p">),</span> <span class="n">title</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="application/vnd.jupyter.stderr"> +<pre> +<span class="ansi-red-fg">---------------------------------------------------------------------------</span> +<span class="ansi-red-fg">AssertionError</span> Traceback (most recent call last) +Input <span class="ansi-green-fg">In [17]</span>, in <span class="ansi-cyan-fg"><cell line: 2></span><span class="ansi-blue-fg">()</span> +<span class="ansi-green-intense-fg ansi-bold"> 4</span> <span class="ansi-bold" style="color: rgb(0,135,0)">for</span> line <span class="ansi-bold" style="color: rgb(175,0,255)">in</span> desc<span style="color: rgb(98,98,98)">.</span>splitlines(): +<span class="ansi-green-intense-fg ansi-bold"> 5</span> <span class="ansi-bold" style="color: rgb(0,135,0)">if</span> <span style="color: rgb(175,0,0)">"</span><span style="color: rgb(175,0,0)">,</span><span style="color: rgb(175,0,0)">"</span> <span class="ansi-bold" style="color: rgb(175,0,255)">in</span> line: +<span class="ansi-green-fg">----> 6</span> <span class="ansi-bold" style="color: rgb(0,135,0)">assert</span> line<span style="color: rgb(98,98,98)">.</span>startswith(<span style="color: rgb(175,0,0)">"</span><span style="color: rgb(175,0,0)">CoFFE orthogroups</span><span style="color: rgb(175,0,0)">"</span>) <span class="ansi-bold" style="color: rgb(175,0,255)">or</span> line<span style="color: rgb(98,98,98)">.</span>startswith(<span style="color: rgb(175,0,0)">"</span><span style="color: rgb(175,0,0)">CoFFE GO terms</span><span style="color: rgb(175,0,0)">"</span>), title + +<span class="ansi-red-fg">AssertionError</span>: c103545_g3_i2</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [18]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="n">line</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">Out[18]:</div> + + + + +<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain"> +<pre>'CoFFE UniProt function: FUNCTION: Involved in hearing and vision as member of the USH2 complex. Necessary for elongation and maintenance of inner and outer hair cell stereocilia in the organ of Corti in the inner ear. Involved in the maintenance of the hair bundle ankle region, which connects stereocilia in cochlear hair cells of the inner ear. In retina photoreceptors, required for the maintenance of periciliary membrane complex that seems to play a role in regulating intracellular protein transport. {ECO:0000250|UniProtKB:Q80VW5}.'</pre> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [19]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># ok so we cannot blindly assume that commas are bad...</span> + +<span class="c1"># check longest tokens in metadata</span> +<span class="n">new_desc</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> +<span class="k">for</span> <span class="n">title</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">metadata</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span> + <span class="n">desc</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">description</span> + <span class="n">new_lines</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">desc</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span> + <span class="n">is_loi</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"CoFFE orthogroups"</span><span class="p">)</span> \ + <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"CoFFE GO terms"</span><span class="p">)</span> \ + <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"Emapper orthogroups"</span><span class="p">)</span> \ + <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"Emapper GO terms"</span><span class="p">)</span> \ + <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"CoFFE PFAM domains"</span><span class="p">)</span> \ + <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"Emapper PFAM domains"</span><span class="p">)</span> + <span class="k">if</span> <span class="s2">","</span> <span class="ow">in</span> <span class="n">line</span> <span class="ow">and</span> <span class="n">is_loi</span><span class="p">:</span> + <span class="n">new_line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">","</span><span class="p">,</span> <span class="s2">", "</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">new_line</span> <span class="o">=</span> <span class="n">line</span> + <span class="n">token_lengths</span> <span class="o">=</span> <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">token</span><span class="p">)</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="n">new_line</span><span class="o">.</span><span class="n">split</span><span class="p">()]</span> + <span class="k">if</span> <span class="n">token_lengths</span> <span class="ow">and</span> <span class="nb">max</span><span class="p">(</span><span class="n">token_lengths</span><span class="p">)</span> <span class="o">></span> <span class="mi">80</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">new_line</span><span class="p">)</span> + <span class="n">new_lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">new_line</span><span class="p">)</span> + <span class="n">new_desc</span><span class="p">[</span><span class="n">title</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">new_lines</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"> +<pre>c2495_g1_i1 CoFFE UniProt function: FUNCTION: Protein O-mannose kinase that specifically mediates phosphorylation at the 6-position of an O-mannose of the trisaccharide (N-acetylgalactosamine (GalNAc)-beta-1,3-N-acetylglucosamine (GlcNAc)-beta-1,4-mannose) to generate phosphorylated O-mannosyl trisaccharide (N-acetylgalactosamine-beta-1,3-N-acetylglucosamine-beta-1,4-(phosphate-6-)mannose). Phosphorylated O-mannosyl trisaccharide is a carbohydrate structure present in alpha-dystroglycan (DAG1), which is required for binding laminin G-like domain-containing extracellular proteins with high affinity. Only shows kinase activity when the GalNAc-beta-3-GlcNAc-beta-terminus is linked to the 4-position of O-mannose, suggesting that this disaccharide serves as the substrate recognition motif (By similarity). {ECO:0000250}. +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [20]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># c2495_g1_i1 tested in MA and ok...let's check largest ones</span> +<span class="nb">sorted</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">desc</span><span class="p">),</span> <span class="n">title</span><span class="p">]</span> <span class="k">for</span> <span class="n">title</span><span class="p">,</span> <span class="n">desc</span> <span class="ow">in</span> <span class="n">new_desc</span><span class="o">.</span><span class="n">items</span><span class="p">())[</span><span class="o">-</span><span class="mi">5</span><span class="p">:]</span> +<span class="c1"># looks ok too...</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">Out[20]:</div> + + + + +<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain"> +<pre>[[19286, 'c90048_g1_i1'], + [20561, 'c104513_g1_i1'], + [22685, 'c91485_g1_i1'], + [27674, 'c95514_g1_i1'], + [27687, 'c95514_g1_i3']]</pre> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [35]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># checking multiline details and markdown</span> +<span class="kn">from</span> <span class="nn">ost</span> <span class="kn">import</span> <span class="n">io</span> +<span class="kn">import</span> <span class="nn">modelcif.reader</span> +<span class="n">file_path</span> <span class="o">=</span> <span class="s2">"./modelcif/c103531_g3_i1_unrelaxed_rank_1_model_3.cif"</span> +<span class="n">ent</span><span class="p">,</span> <span class="n">info</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">LoadMMCIF</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">info</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">fh</span><span class="p">:</span> + <span class="n">s</span><span class="p">,</span> <span class="o">=</span> <span class="n">modelcif</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">fh</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="n">info</span><span class="o">.</span><span class="n">GetStructDetails</span><span class="p">()</span><span class="o">.</span><span class="n">model_details</span><span class="p">[:</span><span class="mi">300</span><span class="p">])</span> +<span class="nb">print</span><span class="p">(</span><span class="s1">'-'</span> <span class="o">*</span> <span class="mi">80</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">model_details</span><span class="p">[:</span><span class="mi">300</span><span class="p">])</span> +<span class="c1"># NOTE: there may be a bug in OST's multiline parsing in terms of keeping line breaks intact...</span> +<span class="c1"># ...and lines are stripped so that we lose the trailing 2 spaces...</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"> +<pre>Model generated using ColabFold v1.2.0 with AlphaFold producing 5 models with 3 recycles each without model relaxation without templates ranked by pLDDT starting from an MSA from MMseqs2 (UniRef+Environmental) +Emapper preferred name [EggNOG]: - +Emapper description [EggNOG]: - +CoFFE preferred name [E +-------------------------------------------------------------------------------- +Model generated using ColabFold v1.2.0 with AlphaFold producing 5 models with 3 recycles each without model relaxation without templates ranked by pLDDT starting from an MSA from MMseqs2 (UniRef+Environmental) + +Emapper preferred name [EggNOG]: - +Emapper description [EggNOG]: - +CoFFE preferred name [ +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [36]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">markdown</span> +<span class="n">markdown_test</span> <span class="o">=</span> <span class="s2">"""isoform ID: c103531_g3_i1</span> + +<span class="s2">And **fat** and *emphasized* markdown with lists:</span> + +<span class="s2">- item1</span> +<span class="s2">- item2</span> + +<span class="s2">and [links](https://github.com).</span> + +<span class="s2">Note that markdown ignores linebreaks</span> +<span class="s2">unless two spaces at end </span> +<span class="s2"><- as in line above"""</span> +<span class="nb">print</span><span class="p">(</span><span class="n">markdown_test</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="s1">'-'</span> <span class="o">*</span> <span class="mi">80</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="n">markdown</span><span class="o">.</span><span class="n">markdown</span><span class="p">(</span><span class="n">markdown_test</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"> +<pre>isoform ID: c103531_g3_i1 + +And **fat** and *emphasized* markdown with lists: + +- item1 +- item2 + +and [links](https://github.com). + +Note that markdown ignores linebreaks +unless two spaces at end +<- as in line above +-------------------------------------------------------------------------------- +<p>isoform ID: c103531_g3_i1</p> +<p>And <strong>fat</strong> and <em>emphasized</em> markdown with lists:</p> +<ul> +<li>item1</li> +<li>item2</li> +</ul> +<p>and <a href="https://github.com">links</a>.</p> +<p>Note that markdown ignores linebreaks +unless two spaces at end<br /> +&lt;- as in line above</p> +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># test zip file speed and size</span> +<span class="kn">from</span> <span class="nn">timeit</span> <span class="kn">import</span> <span class="n">default_timer</span> <span class="k">as</span> <span class="n">timer</span> +<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">zipfile</span><span class="o">,</span> <span class="nn">gzip</span><span class="o">,</span> <span class="nn">shutil</span> + +<span class="k">def</span> <span class="nf">zip_test</span><span class="p">(</span><span class="n">compression</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="n">zip_file</span> <span class="o">=</span> <span class="s2">"test.zip"</span> + <span class="n">files</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"modelcif/c103531_g3_i1_unrelaxed_rank_1_model_3_local_pairwise_qa.cif"</span><span class="p">]</span> + <span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"modelcif/c103545_g3_i2_unrelaxed_rank_1_model_3_local_pairwise_qa.cif"</span><span class="p">)</span> + <span class="n">pstart</span> <span class="o">=</span> <span class="n">timer</span><span class="p">()</span> + <span class="k">if</span> <span class="n">compression</span> <span class="o">==</span> <span class="s2">"gzip"</span><span class="p">:</span> + <span class="n">file_size</span> <span class="o">=</span> <span class="mi">0</span> + <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f_in</span><span class="p">:</span> + <span class="k">with</span> <span class="n">gzip</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">zip_file</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f_out</span><span class="p">:</span> + <span class="n">shutil</span><span class="o">.</span><span class="n">copyfileobj</span><span class="p">(</span><span class="n">f_in</span><span class="p">,</span> <span class="n">f_out</span><span class="p">)</span> + <span class="n">file_size</span> <span class="o">+=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">zip_file</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">zip_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">,</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compresslevel</span><span class="o">=</span><span class="n">level</span><span class="p">)</span> <span class="k">as</span> <span class="n">myzip</span><span class="p">:</span> + <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span> + <span class="n">myzip</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">file</span><span class="p">)</span> + <span class="n">file_size</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">zip_file</span><span class="p">)</span> + <span class="c1"># for comparison full translation time for the files (i.e. from running _main)</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">files</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">ref_time</span> <span class="o">=</span> <span class="s2">"1.38s"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">ref_time</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="mf">1.38</span><span class="o">+</span><span class="mf">24.21</span><span class="si">}</span><span class="s2">s"</span> + <span class="k">if</span> <span class="n">compression</span> <span class="o">==</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_STORED</span><span class="p">:</span> + <span class="n">label</span> <span class="o">=</span> <span class="s2">"none "</span> + <span class="k">elif</span> <span class="n">compression</span> <span class="o">==</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_DEFLATED</span><span class="p">:</span> + <span class="k">if</span> <span class="n">level</span><span class="p">:</span> + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"gz(</span><span class="si">{</span><span class="n">level</span><span class="si">}</span><span class="s2">)"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">label</span> <span class="o">=</span> <span class="s2">"gz "</span> + <span class="k">elif</span> <span class="n">compression</span> <span class="o">==</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_BZIP2</span><span class="p">:</span> + <span class="k">if</span> <span class="n">level</span><span class="p">:</span> + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"bz(</span><span class="si">{</span><span class="n">level</span><span class="si">}</span><span class="s2">)"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">label</span> <span class="o">=</span> <span class="s2">"bz "</span> + <span class="k">elif</span> <span class="n">compression</span> <span class="o">==</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_LZMA</span><span class="p">:</span> + <span class="n">label</span> <span class="o">=</span> <span class="s2">"lzma "</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">label</span> <span class="o">=</span> <span class="s2">"gzip "</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"- </span><span class="si">{</span><span class="n">label</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">timer</span><span class="p">()</span><span class="o">-</span><span class="n">pstart</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">s vs </span><span class="si">{</span><span class="n">ref_time</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">file_size</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">zip_file</span><span class="p">)</span> + +<span class="n">zip_test</span><span class="p">(</span><span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_STORED</span><span class="p">)</span> +<span class="n">zip_test</span><span class="p">(</span><span class="s2">"gzip"</span><span class="p">)</span> +<span class="n">zip_test</span><span class="p">(</span><span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_DEFLATED</span><span class="p">)</span> +<span class="n">zip_test</span><span class="p">(</span><span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_DEFLATED</span><span class="p">,</span> <span class="mi">9</span><span class="p">)</span> +<span class="n">zip_test</span><span class="p">(</span><span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_BZIP2</span><span class="p">)</span> +<span class="n">zip_test</span><span class="p">(</span><span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_BZIP2</span><span class="p">,</span> <span class="mi">9</span><span class="p">)</span> +<span class="n">zip_test</span><span class="p">(</span><span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_LZMA</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"> +<pre>- none : 3.84s vs 25.59s, 27824253 +- gzip : 2.70s vs 25.59s, 5417406 +- gz : 0.87s vs 25.59s, 5389143 +- gz(9): 2.74s vs 25.59s, 5417802 +- bz : 1.61s vs 25.59s, 3802066 +- bz(9): 1.56s vs 25.59s, 3802066 +- lzma : 22.27s vs 25.59s, 2083062 +</pre> +</div> +</div> + +</div> + +</div> + +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> +<div class="jp-Cell-inputWrapper"> +<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>FAZIT: lzma is too slow but bzip2 has good compromise of size vs speed</p> + +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [1]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># check out pdbx</span> +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">from</span> <span class="nn">timeit</span> <span class="kn">import</span> <span class="n">default_timer</span> <span class="k">as</span> <span class="n">timer</span> +<span class="kn">from</span> <span class="nn">pdbx.reader.PdbxReader</span> <span class="kn">import</span> <span class="n">PdbxReader</span> +<span class="kn">from</span> <span class="nn">pdbx.writer.PdbxWriter</span> <span class="kn">import</span> <span class="n">PdbxWriter</span> +<span class="n">test_file</span> <span class="o">=</span> <span class="s2">"modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif"</span> +<span class="c1"># test_file = "modelcif_MA_test/AF-P38129-F1-model_v3.cif"</span> +<span class="c1"># test_file = "modelcif_MA_test/ma-bak-cepc-0001.cif"</span> +<span class="c1"># test_file = "modelcif_MA_test/1crn.cif"</span> +<span class="n">test_file_out</span> <span class="o">=</span> <span class="s2">"modelcif_MA_test/test.cif"</span> +<span class="n">pstart</span> <span class="o">=</span> <span class="n">timer</span><span class="p">()</span> +<span class="n">pdbx_data</span> <span class="o">=</span> <span class="p">[]</span> +<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">test_file</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f_in</span><span class="p">:</span> + <span class="n">pdbxR</span> <span class="o">=</span> <span class="n">PdbxReader</span><span class="p">(</span><span class="n">f_in</span><span class="p">)</span> + <span class="n">pdbxR</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">pdbx_data</span><span class="p">)</span> +<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">test_file_out</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f_out</span><span class="p">:</span> + <span class="n">pdbxW</span> <span class="o">=</span> <span class="n">PdbxWriter</span><span class="p">(</span><span class="n">f_out</span><span class="p">)</span> + <span class="n">pdbxW</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pdbx_data</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span><span class="si">}</span><span class="s2"> vs </span><span class="si">{</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">test_file_out</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> \ + <span class="sa">f</span><span class="s2">" in </span><span class="si">{</span><span class="n">timer</span><span class="p">()</span><span class="o">-</span><span class="n">pstart</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">s"</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"> +<pre>137179 vs 184836 in 0.25s +</pre> +</div> +</div> + +</div> + +</div> + +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> +<div class="jp-Cell-inputWrapper"> +<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>FAZIT: adds lots of spaces but doesn't remove anything<br> +ISSUE: quotes around "stop_..." removed...</p> + +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># check out gemmi</span> +<span class="kn">import</span> <span class="nn">gemmi</span> +<span class="n">pstart</span> <span class="o">=</span> <span class="n">timer</span><span class="p">()</span> +<span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> +<span class="n">doc</span><span class="o">.</span><span class="n">write_file</span><span class="p">(</span><span class="n">test_file_out</span><span class="p">)</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span><span class="si">}</span><span class="s2"> vs </span><span class="si">{</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">test_file_out</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> \ + <span class="sa">f</span><span class="s2">" in </span><span class="si">{</span><span class="n">timer</span><span class="p">()</span><span class="o">-</span><span class="n">pstart</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">s"</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"> +<pre>137179 vs 137099 in 0.03s +</pre> +</div> +</div> + +</div> + +</div> + +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> +<div class="jp-Cell-inputWrapper"> +<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>FAZIT: much faster than pdbx, space handling similar to python-modelcif and also not removing anything and handling "stop_..." properly</p> +<p>Also note that neither of the two messes up the order of tables and so files are easily comparable!</p> +<p><strong>FAZIT</strong>: gemmi is good!</p> + +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># quick test changing data_ block name</span> +<span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> +<span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s1">'test'</span> +<span class="n">doc</span><span class="o">.</span><span class="n">write_file</span><span class="p">(</span><span class="n">test_file_out</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"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># parsing pdbx</span> +<span class="c1"># see https://mmcif.wwpdb.org/docs/sw-examples/python/html/</span> +<span class="c1"># -> all very low level</span> +<span class="n">block</span> <span class="o">=</span> <span class="n">pdbx_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> +<span class="k">if</span> <span class="n">block</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"ma_qa_metric"</span><span class="p">):</span> + <span class="n">dc</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">getObj</span><span class="p">(</span><span class="s2">"ma_qa_metric"</span><span class="p">)</span> + <span class="n">categoryName</span><span class="p">,</span> <span class="n">attributeNameList</span><span class="p">,</span> <span class="n">rowList</span> <span class="o">=</span> <span class="n">dc</span><span class="o">.</span><span class="n">get</span><span class="p">()</span> + <span class="nb">print</span><span class="p">(</span><span class="n">categoryName</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">attributeNameList</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">rowList</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"> +<pre>ma_qa_metric +['id', 'name', 'description', 'type', 'mode', 'type_other_details', 'software_group_id'] +[['1', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'global', '.', '.'], ['2', 'pTM', 'Predicted accuracy according to the TM-score score in [0,1]', 'pTM', 'global', '.', '.'], ['3', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'local', '.', '.'], ['4', 'PAE', 'Predicted aligned error (in Angstroms)', 'PAE', 'local-pairwise', '.', '.']] +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [4]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># parsing gemmi</span> +<span class="c1"># see https://gemmi.readthedocs.io/en/latest/cif.html#block</span> +<span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span> +<span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find_mmcif_category</span><span class="p">(</span><span class="s2">"_ma_qa_metric."</span><span class="p">)</span> +<span class="k">if</span> <span class="n">table</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">get_prefix</span><span class="p">())</span> + <span class="nb">print</span><span class="p">([</span><span class="n">tag</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">table</span><span class="o">.</span><span class="n">tags</span><span class="p">])</span> + <span class="nb">print</span><span class="p">([[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">row</span><span class="p">]</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</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"> +<pre>_ma_qa_metric. +['_ma_qa_metric.id', '_ma_qa_metric.name', '_ma_qa_metric.description', '_ma_qa_metric.type', '_ma_qa_metric.mode', '_ma_qa_metric.type_other_details', '_ma_qa_metric.software_group_id'] +[['1', 'pLDDT', "'Predicted accuracy according to the CA-only lDDT in [0,100]'", 'pLDDT', 'global', '.', '.'], ['2', 'pTM', "'Predicted accuracy according to the TM-score score in [0,1]'", 'pTM', 'global', '.', '.'], ['3', 'pLDDT', "'Predicted accuracy according to the CA-only lDDT in [0,100]'", 'pLDDT', 'local', '.', '.'], ['4', 'PAE', "'Predicted aligned error (in Angstroms)'", 'PAE', 'local-pairwise', '.', '.']] +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [15]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># note: "row.str(#) or "gemmi.cif.as_string" map "." or "?" to "" and remove quotes from strings</span> +<span class="k">if</span> <span class="n">table</span><span class="p">:</span> + <span class="nb">print</span><span class="p">([[</span><span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span><span class="n">col</span><span class="p">)</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">row</span><span class="p">]</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">])</span> +<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'"</span><span class="si">{</span><span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span><span class="s2">"?"</span><span class="p">)</span><span class="si">}</span><span class="s1">"'</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"> +<pre>[['1', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'global', '', ''], ['2', 'pTM', 'Predicted accuracy according to the TM-score score in [0,1]', 'pTM', 'global', '', ''], ['3', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'local', '', ''], ['4', 'PAE', 'Predicted aligned error (in Angstroms)', 'PAE', 'local-pairwise', '', '']] +"" +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [8]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># use find with desired columns (incl. optional ones)</span> +<span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_qa_metric."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"id"</span><span class="p">,</span> <span class="s2">"mode"</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">,</span> <span class="s2">"?meh"</span><span class="p">])</span> +<span class="nb">print</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">has_column</span><span class="p">(</span><span class="mi">4</span><span class="p">))</span> +<span class="c1"># and look for rows according to first column</span> +<span class="nb">print</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">find_row</span><span class="p">(</span><span class="s2">"3"</span><span class="p">))</span> +<span class="c1"># and get dictionary (as is)</span> +<span class="nb">print</span><span class="p">(</span><span class="n">block</span><span class="o">.</span><span class="n">get_mmcif_category</span><span class="p">(</span><span class="s2">"_ma_qa_metric."</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span> +<span class="c1"># or nicely processed (? and . becoming None)</span> +<span class="n">block</span><span class="o">.</span><span class="n">get_mmcif_category</span><span class="p">(</span><span class="s2">"_ma_qa_metric."</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"> +<pre>False +<gemmi.cif.Table.Row: 3 local pLDDT pLDDT None> +{'id': ['1', '2', '3', '4'], 'name': ['pLDDT', 'pTM', 'pLDDT', 'PAE'], 'description': ["'Predicted accuracy according to the CA-only lDDT in [0,100]'", "'Predicted accuracy according to the TM-score score in [0,1]'", "'Predicted accuracy according to the CA-only lDDT in [0,100]'", "'Predicted aligned error (in Angstroms)'"], 'type': ['pLDDT', 'pTM', 'pLDDT', 'PAE'], 'mode': ['global', 'global', 'local', 'local-pairwise'], 'type_other_details': ['.', '.', '.', '.'], 'software_group_id': ['.', '.', '.', '.']} +</pre> +</div> +</div> + +<div class="jp-OutputArea-child"> + + + <div class="jp-OutputPrompt jp-OutputArea-prompt">Out[8]:</div> + + + + +<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain"> +<pre>{'id': ['1', '2', '3', '4'], + 'name': ['pLDDT', 'pTM', 'pLDDT', 'PAE'], + 'description': ['Predicted accuracy according to the CA-only lDDT in [0,100]', + 'Predicted accuracy according to the TM-score score in [0,1]', + 'Predicted accuracy according to the CA-only lDDT in [0,100]', + 'Predicted aligned error (in Angstroms)'], + 'type': ['pLDDT', 'pTM', 'pLDDT', 'PAE'], + 'mode': ['global', 'global', 'local', 'local-pairwise'], + 'type_other_details': [False, False, False, False], + 'software_group_id': [False, False, False, False]}</pre> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [206]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># some ways to deal with optional and missing (? or .) data</span> +<span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_software."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"?location"</span><span class="p">,</span> <span class="s2">"?version"</span><span class="p">,</span> <span class="s2">"?citation_id"</span><span class="p">,</span> <span class="s2">"?meh"</span><span class="p">])</span> +<span class="n">display</span><span class="p">([[(</span><span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">bool</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">idx</span><span class="p">)))</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">))]</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">])</span> +<span class="n">display</span><span class="p">([[(</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span> <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span><span class="p">)</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">))]</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</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"> +<pre>[[True, True, True, True, False], + [True, True, False, True, False], + [True, True, False, True, False]]</pre> +</div> + +</div> + +<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"> +<pre>[['ColabFold', 'https://github.com/sokrypton/ColabFold', '1.2.0', '1', ''], + ['MMseqs2', 'https://github.com/soedinglab/mmseqs2', '', '2', ''], + ['AlphaFold', 'https://github.com/deepmind/alphafold', '', '3', '']]</pre> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [17]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># note that the above also works for completely missing tables</span> +<span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_meh."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"?location"</span><span class="p">,</span> <span class="s2">"?version"</span><span class="p">,</span> <span class="s2">"?citation_id"</span><span class="p">,</span> <span class="s2">"?meh"</span><span class="p">])</span> +<span class="n">display</span><span class="p">([[(</span><span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">bool</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">idx</span><span class="p">)))</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">))]</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</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"> +<pre>[]</pre> +</div> + +</div> + +</div> + +</div> + +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell"> +<div class="jp-Cell-inputWrapper"> +<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="ModelCIF--%3E-MA">ModelCIF -> MA<a class="anchor-link" href="#ModelCIF--%3E-MA">¶</a></h1> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">gemmi</span> + +<span class="c1"># define converters for printing or for html (here markdown used for display)</span> +<span class="k">def</span> <span class="nf">_make_url</span><span class="p">(</span><span class="n">link_text</span><span class="p">,</span> <span class="n">link_url</span><span class="p">):</span> + <span class="k">return</span> <span class="sa">f</span><span class="s2">"[</span><span class="si">{</span><span class="n">link_text</span><span class="si">}</span><span class="s2">](</span><span class="si">{</span><span class="n">link_url</span><span class="si">}</span><span class="s2">)"</span> +<span class="k">def</span> <span class="nf">_make_list</span><span class="p">(</span><span class="n">list_top</span><span class="p">,</span> <span class="n">list_items</span><span class="p">):</span> + <span class="n">list_texts</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">"- </span><span class="si">{</span><span class="n">item</span><span class="si">}</span><span class="s2">"</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">list_items</span><span class="p">]</span> + <span class="n">list_text</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">list_texts</span><span class="p">)</span> + <span class="k">if</span> <span class="n">list_texts</span><span class="p">:</span> + <span class="k">return</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">list_top</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">list_text</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> +<span class="k">def</span> <span class="nf">_make_multiline_text</span><span class="p">(</span><span class="n">lines</span><span class="p">):</span> + <span class="k">return</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> +<span class="k">def</span> <span class="nf">_make_paragraph</span><span class="p">(</span><span class="n">text</span><span class="p">):</span> + <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">"</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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 [24]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># define test files for translations below</span> +<span class="n">test_files</span> <span class="o">=</span> <span class="p">[</span> + <span class="s2">"modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/AF-P38129-F1-model_v3.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/ma-bak-cepc-0001.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/1crn.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/Tara_A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/Var3D_I6XD65_1046.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/Var3D_L7N665_1046.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/Var3D_P9WIE5_3767.cif"</span><span class="p">,</span> + <span class="s2">"modelcif_MA_test/ORNL_F0JBU9_9DELT.cif"</span><span class="p">,</span> +<span class="p">]</span> + +<span class="c1"># open one for quick testing</span> +<span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_files</span><span class="p">[</span><span class="o">-</span><span class="mi">4</span><span class="p">])</span> +<span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</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"> +<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 [18]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># easy: look for unique model details (same for title; already in ParseCIF)</span> +<span class="n">abstract</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find_value</span><span class="p">(</span><span class="s2">"_struct.pdbx_model_details"</span><span class="p">)</span> +<span class="k">if</span> <span class="n">abstract</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span><span class="n">abstract</span><span class="p">)[:</span><span class="mi">400</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"> +<pre>Model generated using ColabFold v1.2.0 with AlphaFold producing 5 models with 3 recycles each without model relaxation without templates ranked by pLDDT starting from an MSA from MMseqs2 (UniRef+Environmental) + +Emapper preferred name [EggNOG]: - +Emapper description [EggNOG]: - +CoFFE preferred name [EggNOG]: PLA2G15 +CoFFE description [EggNOG]: Lecithin:cholesterol acyltransferase +CoFFE UniProt func +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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 [10]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># check out entity parsing from ParseCIF</span> +<span class="c1"># -> CHANGES: asym_ids as list of chains (wasn't used anyways), make align and </span> +<span class="k">def</span> <span class="nf">_get_chain_entity</span><span class="p">(</span><span class="n">block</span><span class="p">):</span> + <span class="n">chain_entity</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="n">ma_target_entity</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span> + <span class="s2">"_ma_target_entity_instance."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"asym_id"</span><span class="p">,</span> <span class="s2">"entity_id"</span><span class="p">]</span> + <span class="p">)</span> + <span class="k">if</span> <span class="n">ma_target_entity</span><span class="p">:</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">ma_target_entity</span><span class="p">:</span> + <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="s2">"entity_id"</span><span class="p">]</span> <span class="ow">in</span> <span class="n">chain_entity</span><span class="p">:</span> + <span class="n">chain_entity</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s2">"entity_id"</span><span class="p">]][</span><span class="s2">"asym_ids"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> + <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s2">"asym_id"</span><span class="p">])</span> + <span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">chain_entity</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s2">"entity_id"</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"asym_ids"</span><span class="p">:</span> <span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s2">"asym_id"</span><span class="p">]],</span> + <span class="s2">"ma_target_ref_db_details"</span><span class="p">:</span> <span class="p">[],</span> + <span class="p">}</span> + + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_entity."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"id"</span><span class="p">,</span> <span class="s2">"pdbx_description"</span><span class="p">]):</span> + <span class="n">chain_entity</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s2">"id"</span><span class="p">]]</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> + <span class="p">{</span><span class="s2">"pdbx_description"</span><span class="p">:</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s2">"pdbx_description"</span><span class="p">])}</span> + <span class="p">)</span> + + <span class="n">cols</span> <span class="o">=</span> <span class="p">[</span> + <span class="s2">"target_entity_id"</span><span class="p">,</span> + <span class="s2">"db_accession"</span><span class="p">,</span> + <span class="s2">"db_name"</span><span class="p">,</span> + <span class="s2">"?db_name_other_details"</span><span class="p">,</span> + <span class="s2">"?organism_scientific"</span><span class="p">,</span> + <span class="s2">"?seq_db_align_begin"</span><span class="p">,</span> + <span class="s2">"?seq_db_align_end"</span><span class="p">,</span> + <span class="p">]</span> + <span class="c1"># NOTE: row[col] doesn't work with '?' in find! Bad crashed happen if you try...</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_target_ref_db_details."</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> + <span class="n">json_obj</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">target_entity_id</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># make sure this stays at idx 0 in cols!</span> + <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">cq</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">cols</span><span class="p">):</span> + <span class="k">if</span> <span class="n">cq</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'?'</span><span class="p">):</span> + <span class="n">col</span> <span class="o">=</span> <span class="n">cq</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">idx</span><span class="p">):</span> + <span class="n">json_obj</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">continue</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">col</span> <span class="o">=</span> <span class="n">cq</span> + <span class="k">if</span> <span class="n">col</span> <span class="o">!=</span> <span class="s2">"target_entity_id"</span><span class="p">:</span> + <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"seq_db_align"</span><span class="p">)</span> <span class="o">></span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> + <span class="n">json_obj</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_int</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">idx</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">json_obj</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">idx</span><span class="p">])</span> + <span class="n">chain_entity</span><span class="p">[</span><span class="n">target_entity_id</span><span class="p">][</span> + <span class="s2">"ma_target_ref_db_details"</span> + <span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">json_obj</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span> + <span class="s2">"_entity_poly."</span><span class="p">,</span> + <span class="p">[</span><span class="s2">"entity_id"</span><span class="p">,</span> <span class="s2">"pdbx_strand_id"</span><span class="p">,</span> <span class="s2">"pdbx_seq_one_letter_code"</span><span class="p">],</span> + <span class="p">):</span> + <span class="n">chain_entity</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s2">"entity_id"</span><span class="p">]][</span><span class="s2">"olc"</span><span class="p">]</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span> + <span class="n">row</span><span class="p">[</span><span class="s2">"pdbx_seq_one_letter_code"</span><span class="p">]</span> + <span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">chain_entity</span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># do entity parsing</span> +<span class="k">def</span> <span class="nf">_test_entity_parsing</span><span class="p">(</span><span class="n">test_file</span><span class="p">):</span> + <span class="c1"># get file for testing</span> + <span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> + <span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span> + <span class="c1"># reuse (updated!) code from ParseCIF</span> + <span class="n">chain_entity</span> <span class="o">=</span> <span class="n">_get_chain_entity</span><span class="p">(</span><span class="n">block</span><span class="p">)</span> + <span class="c1"># do it</span> + <span class="n">item_strings</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">ent</span> <span class="ow">in</span> <span class="n">chain_entity</span><span class="p">:</span> + <span class="n">item_title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">chain_entity</span><span class="p">[</span><span class="n">ent</span><span class="p">][</span><span class="s1">'pdbx_description'</span><span class="p">]</span><span class="si">}</span><span class="s2"> "</span> \ + <span class="sa">f</span><span class="s2">"(chains: </span><span class="si">{</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chain_entity</span><span class="p">[</span><span class="n">ent</span><span class="p">][</span><span class="s1">'asym_ids'</span><span class="p">])</span><span class="si">}</span><span class="s2">)"</span> + <span class="n">db_links</span> <span class="o">=</span> <span class="p">[</span><span class="n">item_title</span><span class="p">]</span> + <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">ref</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">chain_entity</span><span class="p">[</span><span class="n">ent</span><span class="p">][</span><span class="s2">"ma_target_ref_db_details"</span><span class="p">]):</span> + <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="s2">"db_name"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"UNP"</span><span class="p">:</span> + <span class="n">link_text</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="s1">'db_accession'</span><span class="p">]</span> + <span class="n">link_url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"https://www.uniprot.org/uniprot/</span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'db_accession'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="n">db_link</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"UniProt: </span><span class="si">{</span><span class="n">_make_url</span><span class="p">(</span><span class="n">link_text</span><span class="p">,</span> <span class="n">link_url</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="k">elif</span> <span class="n">ref</span><span class="p">[</span><span class="s2">"db_name"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"OrthoDB"</span><span class="p">:</span> + <span class="n">link_text</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="s1">'db_accession'</span><span class="p">]</span> + <span class="n">link_url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"https://www.orthodb.org/?query=</span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'db_accession'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="n">db_link</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"OrthoDB: </span><span class="si">{</span><span class="n">_make_url</span><span class="p">(</span><span class="n">link_text</span><span class="p">,</span> <span class="n">link_url</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="k">elif</span> <span class="n">ref</span><span class="p">[</span><span class="s2">"db_name"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"Other"</span> <span class="ow">and</span> <span class="n">ref</span><span class="p">[</span><span class="s2">"db_name_other_details"</span><span class="p">]:</span> + <span class="n">db_link</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'db_name_other_details'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'db_accession'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">db_link</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'db_name'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'db_accession'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="s1">'seq_db_align_begin'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">ref</span><span class="p">[</span><span class="s1">'seq_db_align_end'</span><span class="p">]:</span> + <span class="n">db_link</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'seq_db_align_begin'</span><span class="p">]</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'seq_db_align_end'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="s1">'organism_scientific'</span><span class="p">]:</span> + <span class="n">db_link</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"; </span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="s1">'organism_scientific'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="n">db_links</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">db_link</span><span class="p">)</span> + <span class="n">item_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_make_multiline_text</span><span class="p">(</span><span class="n">db_links</span><span class="p">))</span> + <span class="c1"># and show me...</span> + <span class="k">if</span> <span class="n">item_strings</span><span class="p">:</span> + <span class="n">list_top</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"The following molecular entities are in the model: (</span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">)"</span> + <span class="nb">print</span><span class="p">(</span><span class="n">_make_list</span><span class="p">(</span><span class="n">list_top</span><span class="p">,</span> <span class="n">item_strings</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No molecular entities listed in </span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">()</span> + +<span class="k">for</span> <span class="n">test_file</span> <span class="ow">in</span> <span class="n">test_files</span><span class="p">:</span> + <span class="n">_test_entity_parsing</span><span class="p">(</span><span class="n">test_file</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"> +<pre>The following molecular entities are in the model: (modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif) +- Spongilla lacustris c103531_g3_i1 protein (chains: A) + +The following molecular entities are in the model: (modelcif_MA_test/AF-P38129-F1-model_v3.cif) +- Transcription initiation factor TFIID subunit 5 (chains: A) +UniProt: [P38129](https://www.uniprot.org/uniprot/P38129) 1-798; Saccharomyces cerevisiae (strain ATCC 204508 / S288c) + +The following molecular entities are in the model: (modelcif_MA_test/ma-bak-cepc-0001.cif) +- TAF4 (chains: A) +OrthoDB: [1294385_1:000f0d](https://www.orthodb.org/?query=1294385_1:000f0d) 1-388; Saccharomyces cerevisiae YJM1573 +UniProt: [A6ZM67](https://www.uniprot.org/uniprot/A6ZM67) 1-388; Saccharomyces cerevisiae (strain YJM789) (Baker's yeast) +- TAF5 (chains: B) +OrthoDB: [1294385_1:000051](https://www.orthodb.org/?query=1294385_1:000051) 1-798; Saccharomyces cerevisiae YJM1573 +UniProt: [P38129](https://www.uniprot.org/uniprot/P38129) 1-798; Saccharomyces cerevisiae (strain ATCC 204508 / S288c) (Baker's yeast) + +No molecular entities listed in modelcif_MA_test/1crn.cif + +The following molecular entities are in the model: (modelcif_MA_test/Tara_A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1.cif) +- Model of ZC3H11B (A0A1B0GTU1) (chains: A) +UniProt: [A0A1B0GTU1](https://www.uniprot.org/uniprot/A0A1B0GTU1) 1-805; Homo sapiens (Human) +- Model of ZC3H11A (O75152) (chains: B) +UniProt: [O75152](https://www.uniprot.org/uniprot/O75152) 1-810; Homo sapiens (Human) + +The following molecular entities are in the model: (modelcif_MA_test/Var3D_I6XD65_1046.cif) +- Model subunit of I6XD65 (chains: A) +UniProt: [I6XD65](https://www.uniprot.org/uniprot/I6XD65) 1-185; Mycobacterium tuberculosis (strain ATCC 25618 / H37Rv) +- FE (II) ION (chains: B) +- Pyrazinamide (chains: C) + +The following molecular entities are in the model: (modelcif_MA_test/Var3D_L7N665_1046.cif) +- Model subunit of L7N665 (chains: A, B) +UniProt: [L7N665](https://www.uniprot.org/uniprot/L7N665) 1-385; Mycobacterium tuberculosis (strain ATCC 25618 / H37Rv) + +The following molecular entities are in the model: (modelcif_MA_test/Var3D_P9WIE5_3767.cif) +- Model subunit of P9WIE5 (chains: A, B) +UniProt: [P9WIE5](https://www.uniprot.org/uniprot/P9WIE5) 24-740; Mycobacterium tuberculosis (strain ATCC 25618 / H37Rv) +- Isoniazid (chains: C, D) +- SODIUM ION (chains: E, F) +- CHLORIDE ION (chains: G, H) +- PROTOPORPHYRIN IX CONTAINING FE (chains: I, J) +- GLYCEROL (chains: K, L, M, N, O, P) + +The following molecular entities are in the model: (modelcif_MA_test/ORNL_F0JBU9_9DELT.cif) +- DND132RS05775 (chains: A) +UniProt: [F0JBU9](https://www.uniprot.org/uniprot/F0JBU9) 1-123 +RefSeq: NC_016803 1-123 + +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># do SW parsing</span> +<span class="k">def</span> <span class="nf">_test_sw_parsing</span><span class="p">(</span><span class="n">test_file</span><span class="p">):</span> + <span class="c1"># get file for testing</span> + <span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> + <span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span> + <span class="c1"># get author names for each citation</span> + <span class="n">tmp</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_citation_author."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"citation_id"</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">]):</span> + <span class="n">cid</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="n">name</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="k">if</span> <span class="n">cid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">tmp</span><span class="p">:</span> + <span class="n">tmp</span><span class="p">[</span><span class="n">cid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">"etal"</span><span class="p">:</span> <span class="s2">""</span><span class="p">}</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">tmp</span><span class="p">[</span><span class="n">cid</span><span class="p">][</span><span class="s2">"etal"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">" et al."</span> + <span class="n">cit_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">cid</span><span class="p">:</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="o">+</span> <span class="n">d</span><span class="p">[</span><span class="s2">"etal"</span><span class="p">])</span> <span class="k">for</span> <span class="n">cid</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">tmp</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span> + <span class="c1"># add year if available</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_citation."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"id"</span><span class="p">,</span> <span class="s2">"?year"</span><span class="p">])</span> + <span class="k">if</span> <span class="n">table</span><span class="o">.</span><span class="n">has_column</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">cid</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="n">year</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="k">if</span> <span class="n">cid</span> <span class="ow">in</span> <span class="n">cit_names</span> <span class="ow">and</span> <span class="n">year</span><span class="p">:</span> + <span class="n">cit_names</span><span class="p">[</span><span class="n">cid</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">year</span> + <span class="c1"># add URL if available</span> + <span class="n">cit_urls</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_citation."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"id"</span><span class="p">,</span> <span class="s2">"?pdbx_database_id_DOI"</span><span class="p">,</span> <span class="s2">"?pdbx_database_id_PubMed"</span><span class="p">])</span> + <span class="n">formatters</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"https://doi.org/</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="s2">"https://www.ncbi.nlm.nih.gov/pubmed/</span><span class="si">%s</span><span class="s2">"</span><span class="p">]</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">cid</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="c1"># add whichever URL we find first</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">table</span><span class="o">.</span><span class="n">width</span><span class="p">()):</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">i</span><span class="p">):</span> + <span class="n">cit_urls</span><span class="p">[</span><span class="n">cid</span><span class="p">]</span> <span class="o">=</span> <span class="n">formatters</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">%</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> + <span class="k">break</span> + <span class="c1"># now map this to software</span> + <span class="n">item_strings</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_software."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"?location"</span><span class="p">,</span> <span class="s2">"?version"</span><span class="p">,</span> <span class="s2">"?citation_id"</span><span class="p">])</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">sw_name</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span> + <span class="n">item</span> <span class="o">=</span> <span class="n">_make_url</span><span class="p">(</span><span class="n">sw_name</span><span class="p">,</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="n">sw_name</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" (</span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="ow">in</span> <span class="n">cit_names</span><span class="p">:</span> + <span class="n">cid</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> + <span class="k">if</span> <span class="n">cid</span> <span class="ow">in</span> <span class="n">cit_urls</span><span class="p">:</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" (</span><span class="si">{</span><span class="n">_make_url</span><span class="p">(</span><span class="n">cit_names</span><span class="p">[</span><span class="n">cid</span><span class="p">],</span> <span class="n">cit_urls</span><span class="p">[</span><span class="n">cid</span><span class="p">])</span><span class="si">}</span><span class="s2">)"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" (</span><span class="si">{</span><span class="n">cit_names</span><span class="p">[</span><span class="n">cid</span><span class="p">]</span><span class="si">}</span><span class="s2">)"</span> + <span class="n">item_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + <span class="c1"># and show me...</span> + <span class="k">if</span> <span class="n">item_strings</span><span class="p">:</span> + <span class="n">list_top</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"The following software was used: (</span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">)"</span> + <span class="nb">print</span><span class="p">(</span><span class="n">_make_list</span><span class="p">(</span><span class="n">list_top</span><span class="p">,</span> <span class="n">item_strings</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No software was listed for </span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">()</span> + +<span class="k">for</span> <span class="n">test_file</span> <span class="ow">in</span> <span class="n">test_files</span><span class="p">:</span> + <span class="n">_test_sw_parsing</span><span class="p">(</span><span class="n">test_file</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"> +<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 [182]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># do ref. DB parsing</span> +<span class="k">def</span> <span class="nf">_test_ref_db_parsing</span><span class="p">(</span><span class="n">test_file</span><span class="p">):</span> + <span class="c1"># get file for testing</span> + <span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> + <span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span> + <span class="c1"># look for DBs with version or release date</span> + <span class="n">item_strings</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_data_ref_db."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"?version"</span><span class="p">,</span> <span class="s2">"?release_date"</span><span class="p">])</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="c1"># add whichever version we find first</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">i</span><span class="p">):</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" (</span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span> + <span class="k">break</span> + <span class="n">item_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + <span class="c1"># and show me...</span> + <span class="k">if</span> <span class="n">item_strings</span><span class="p">:</span> + <span class="n">list_top</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"The following reference databases were used: (</span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">)"</span> + <span class="nb">print</span><span class="p">(</span><span class="n">_make_list</span><span class="p">(</span><span class="n">list_top</span><span class="p">,</span> <span class="n">item_strings</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No reference databases were listed for </span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">()</span> + +<span class="k">for</span> <span class="n">test_file</span> <span class="ow">in</span> <span class="n">test_files</span><span class="p">:</span> + <span class="n">_test_ref_db_parsing</span><span class="p">(</span><span class="n">test_file</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"> +<pre>The following reference databases were used: (modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif) +- UniRef30 (2021_03) +- ColabFold DB (2021_08) + +No reference databases were listed for modelcif_MA_test/AF-P38129-F1-model_v3.cif + +No reference databases were listed for modelcif_MA_test/ma-bak-cepc-0001.cif + +No reference databases were listed for modelcif_MA_test/1crn.cif + +No reference databases were listed for modelcif_MA_test/Tara_A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1.cif + +No reference databases were listed for modelcif_MA_test/Var3D_I6XD65_1046.cif + +The following reference databases were used: (modelcif_MA_test/Var3D_L7N665_1046.cif) +- BFD (6a634dc6eb105c2e9b4cba7bbae93412) +- MGnify (2018_12) +- Uniclust30 (2018_08) +- Swiss-Prot (2021_03) +- TrEMBL (2021_03) +- UniRef90 (2021_03) + +No reference databases were listed for modelcif_MA_test/Var3D_P9WIE5_3767.cif + +No reference databases were listed for modelcif_MA_test/ORNL_F0JBU9_9DELT.cif + +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [47]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># do template parsing</span> +<span class="k">def</span> <span class="nf">_test_tpl_parsing</span><span class="p">(</span><span class="n">test_file</span><span class="p">):</span> + <span class="c1"># get file for testing</span> + <span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> + <span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span> + <span class="c1"># collect info per tpl-id</span> + <span class="n">tpl_dict</span> <span class="o">=</span> <span class="p">{}</span> <span class="c1"># keyed on template_id</span> + <span class="c1"># fetch main info</span> + <span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"template_id"</span><span class="p">,</span> <span class="s2">"target_asym_id"</span><span class="p">,</span> <span class="s2">"template_auth_asym_id"</span><span class="p">,</span> + <span class="s2">"?template_label_asym_id"</span><span class="p">]</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_template_details."</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> + <span class="n">tid</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="n">tpl_dict</span><span class="p">[</span><span class="n">tid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"trg_asym_id"</span><span class="p">:</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> + <span class="s2">"tpl_auth_asym_id"</span><span class="p">:</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> + <span class="p">}</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span> + <span class="n">tpl_dict</span><span class="p">[</span><span class="n">tid</span><span class="p">][</span><span class="s2">"tpl_label_asym_id"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> + <span class="c1"># add ref DBs</span> + <span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"template_id"</span><span class="p">,</span> <span class="s2">"db_accession_code"</span><span class="p">,</span> <span class="s2">"db_name"</span><span class="p">,</span> + <span class="s2">"?db_name_other_details"</span><span class="p">]</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_template_ref_db_details."</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> + <span class="n">tid</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="k">if</span> <span class="n">tid</span> <span class="ow">in</span> <span class="n">tpl_dict</span><span class="p">:</span> + <span class="n">tpl_dict</span><span class="p">[</span><span class="n">tid</span><span class="p">][</span><span class="s2">"db_acc"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"Other"</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span> + <span class="n">tpl_dict</span><span class="p">[</span><span class="n">tid</span><span class="p">][</span><span class="s2">"db_name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">tpl_dict</span><span class="p">[</span><span class="n">tid</span><span class="p">][</span><span class="s2">"db_name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> + <span class="c1"># add info for small molecules</span> + <span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"template_id"</span><span class="p">,</span> <span class="s2">"?comp_id"</span><span class="p">,</span> <span class="s2">"?details"</span><span class="p">]</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_template_non_poly."</span><span class="p">,</span> <span class="n">cols</span><span class="p">):</span> + <span class="n">tid</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="k">if</span> <span class="n">tid</span> <span class="ow">in</span> <span class="n">tpl_dict</span><span class="p">:</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span> + <span class="n">tpl_dict</span><span class="p">[</span><span class="n">tid</span><span class="p">][</span><span class="s2">"non_poly_comp_id"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span> + <span class="n">tpl_dict</span><span class="p">[</span><span class="n">tid</span><span class="p">][</span><span class="s2">"non_poly_details"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> + <span class="c1"># aggregate per template for diplaying</span> + <span class="n">tpl_td</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> + <span class="k">for</span> <span class="n">tpl</span> <span class="ow">in</span> <span class="n">tpl_dict</span><span class="o">.</span><span class="n">values</span><span class="p">():</span> + <span class="n">did</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_name'</span><span class="p">]</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_acc'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="k">if</span> <span class="n">did</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">tpl_td</span><span class="p">:</span> + <span class="k">if</span> <span class="n">tpl</span><span class="p">[</span><span class="s1">'db_name'</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"PDB"</span><span class="p">:</span> + <span class="n">link_url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"http://dx.doi.org/10.2210/pdb</span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_acc'</span><span class="p">]</span><span class="si">}</span><span class="s2">/pdb"</span> + <span class="k">elif</span> <span class="n">tpl</span><span class="p">[</span><span class="s1">'db_name'</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"PubChem"</span><span class="p">:</span> + <span class="n">link_url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"https://pubchem.ncbi.nlm.nih.gov/compound/</span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_acc'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">link_url</span> <span class="o">=</span> <span class="kc">None</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"URLs for </span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_name'</span><span class="p">]</span><span class="si">}</span><span class="s2"> NOT SUPPORTED YET"</span><span class="p">)</span> + <span class="k">if</span> <span class="n">link_url</span><span class="p">:</span> + <span class="n">tpl_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_name'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">_make_url</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_acc'</span><span class="p">],</span> <span class="n">link_url</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">tpl_text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_name'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'db_acc'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> + <span class="n">tpl_td</span><span class="p">[</span><span class="n">did</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"tpl_text"</span><span class="p">:</span> <span class="n">tpl_text</span><span class="p">,</span> + <span class="s2">"tpl_chains_label"</span><span class="p">:</span> <span class="p">[],</span> + <span class="s2">"tpl_chains_auth"</span><span class="p">:</span> <span class="p">[],</span> + <span class="s2">"tpl_chains_all_label"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> + <span class="s2">"tpl_non_poly_ids"</span><span class="p">:</span> <span class="p">[]</span> + <span class="p">}</span> + <span class="c1"># collect chain names</span> + <span class="k">if</span> <span class="s2">"tpl_label_asym_id"</span> <span class="ow">in</span> <span class="n">tpl</span><span class="p">:</span> + <span class="c1"># if here it is guaranteed to be non-empty</span> + <span class="n">tpl_td</span><span class="p">[</span><span class="n">did</span><span class="p">][</span><span class="s2">"tpl_chains_label"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_label_asym_id"</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># if any missing, we set all to False and fall back to auth</span> + <span class="n">tpl_td</span><span class="p">[</span><span class="n">did</span><span class="p">][</span><span class="s2">"tpl_chains_all_label"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span> + <span class="k">if</span> <span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_auth_asym_id"</span><span class="p">]:</span> + <span class="c1"># only add non empty ones</span> + <span class="n">tpl_td</span><span class="p">[</span><span class="n">did</span><span class="p">][</span><span class="s2">"tpl_chains_auth"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_auth_asym_id"</span><span class="p">])</span> + <span class="c1"># collect info on non poly if available (prefer short comp. ID)</span> + <span class="k">if</span> <span class="s2">"non_poly_comp_id"</span> <span class="ow">in</span> <span class="n">tpl</span><span class="p">:</span> + <span class="n">tpl_td</span><span class="p">[</span><span class="n">did</span><span class="p">][</span><span class="s2">"tpl_non_poly_ids"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s2">"non_poly_comp_id"</span><span class="p">])</span> + <span class="k">elif</span> <span class="s2">"non_poly_details"</span> <span class="ow">in</span> <span class="n">tpl</span><span class="p">:</span> + <span class="n">tpl_td</span><span class="p">[</span><span class="n">did</span><span class="p">][</span><span class="s2">"tpl_non_poly_ids"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s2">"non_poly_details"</span><span class="p">])</span> + <span class="c1"># turn into text</span> + <span class="n">item_strings</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">tpl</span> <span class="ow">in</span> <span class="n">tpl_td</span><span class="o">.</span><span class="n">values</span><span class="p">():</span> + <span class="n">item</span> <span class="o">=</span> <span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_text"</span><span class="p">]</span> + <span class="k">if</span> <span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_chains_all_label"</span><span class="p">]</span> <span class="ow">and</span> <span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_chains_label"</span><span class="p">]:</span> + <span class="n">chain_ids</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'tpl_chains_label'</span><span class="p">]))</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"; chains (label_asym_id): </span><span class="si">{</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chain_ids</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="k">elif</span> <span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_chains_auth"</span><span class="p">]:</span> + <span class="n">chain_ids</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'tpl_chains_auth'</span><span class="p">]))</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"; chains (auth_asym_id): </span><span class="si">{</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chain_ids</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="k">if</span> <span class="n">tpl</span><span class="p">[</span><span class="s2">"tpl_non_poly_ids"</span><span class="p">]:</span> + <span class="n">np_ids</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">tpl</span><span class="p">[</span><span class="s1">'tpl_non_poly_ids'</span><span class="p">]))</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"; non-polymers: </span><span class="si">{</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">np_ids</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="n">item_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + <span class="c1"># and show me...</span> + <span class="k">if</span> <span class="n">item_strings</span><span class="p">:</span> + <span class="n">list_top</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"The following templates were used: (</span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">)"</span> + <span class="nb">print</span><span class="p">(</span><span class="n">_make_list</span><span class="p">(</span><span class="n">list_top</span><span class="p">,</span> <span class="n">item_strings</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No templates were listed for </span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">()</span> + +<span class="k">for</span> <span class="n">test_file</span> <span class="ow">in</span> <span class="n">test_files</span><span class="p">:</span> + <span class="n">_test_tpl_parsing</span><span class="p">(</span><span class="n">test_file</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"> +<pre>No templates were listed for modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif + +The following templates were used: (modelcif_MA_test/AF-P38129-F1-model_v3.cif) +- PDB: [6TBM](http://dx.doi.org/10.2210/pdb6TBM/pdb); chains (auth_asym_id): G +- PDB: [6TB4](http://dx.doi.org/10.2210/pdb6TB4/pdb); chains (auth_asym_id): G +- PDB: [6F3T](http://dx.doi.org/10.2210/pdb6F3T/pdb); chains (auth_asym_id): A +- PDB: [6MZC](http://dx.doi.org/10.2210/pdb6MZC/pdb); chains (auth_asym_id): G + +No templates were listed for modelcif_MA_test/ma-bak-cepc-0001.cif + +No templates were listed for modelcif_MA_test/1crn.cif + +No templates were listed for modelcif_MA_test/Tara_A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1.cif + +The following templates were used: (modelcif_MA_test/Var3D_I6XD65_1046.cif) +- PDB: [3PL1](http://dx.doi.org/10.2210/pdb3PL1/pdb); chains (label_asym_id): A, B; non-polymers: FE2 +- PubChem: [1046](https://pubchem.ncbi.nlm.nih.gov/compound/1046); non-polymers: PZA + +No templates were listed for modelcif_MA_test/Var3D_L7N665_1046.cif + +The following templates were used: (modelcif_MA_test/Var3D_P9WIE5_3767.cif) +- PDB: [1SJ2](http://dx.doi.org/10.2210/pdb1SJ2/pdb); chains (label_asym_id): A, B, C, D, E, F, G, H, I, J; non-polymers: GOL, HEM +- PDB: [6CDQ](http://dx.doi.org/10.2210/pdb6CDQ/pdb); chains (label_asym_id): D, E, K, M, N, S; non-polymers: CL, NA, NIZ + +No templates were listed for modelcif_MA_test/ORNL_F0JBU9_9DELT.cif + +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [183]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># do protocol steps parsing</span> +<span class="k">def</span> <span class="nf">_test_protocol_steps_parsing</span><span class="p">(</span><span class="n">test_file</span><span class="p">):</span> + <span class="c1"># get file for testing</span> + <span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> + <span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span> + <span class="c1"># do it</span> + <span class="n">item_strings</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_protocol_step."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"step_id"</span><span class="p">,</span> <span class="s2">"method_type"</span><span class="p">,</span> <span class="s2">"?details"</span><span class="p">])</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Step </span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" : </span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="n">item_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + <span class="c1"># and show me...</span> + <span class="k">if</span> <span class="n">item_strings</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">_make_multiline_text</span><span class="p">(</span><span class="n">item_strings</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No protocol steps listed in </span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">()</span> + +<span class="k">for</span> <span class="n">test_file</span> <span class="ow">in</span> <span class="n">test_files</span><span class="p">:</span> + <span class="n">_test_protocol_steps_parsing</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> + +<span class="c1"># NOTE: compared with code in ParseCIF (8.8.22): block.find used without optional '?' there</span> +<span class="c1"># -> i.e. code above works also if it is lacking details</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"> +<pre>(modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif) +Step 1 - modeling : Model generated using ColabFold v1.2.0 with AlphaFold producing 5 models with 3 recycles each without model relaxation without templates ranked by pLDDT starting from an MSA from MMseqs2 (UniRef+Environmental) + +(modelcif_MA_test/AF-P38129-F1-model_v3.cif) +Step 1 - coevolution MSA +Step 2 - template search +Step 3 - modeling + +(modelcif_MA_test/ma-bak-cepc-0001.cif) +Step 1 - coevolution MSA : Create paired MSAs for the dimers +Step 2 - modeling : Model using AlphaFold with a 200 residue gap between the two chains + +No protocol steps listed in modelcif_MA_test/1crn.cif + +(modelcif_MA_test/Tara_A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1.cif) +Step 1 - modeling : Model using AlphaFold-Multimer (AlphaFold v2.2.0), without amber relaxation and producing 5 models with up to 3 recycles each, starting from paired and unparied MSAs for the dimers using MMseqs2. +Step 2 - model selection : Select best model, which is either the top-ranked model as determined by the ColabFold pipeline (iptmscore*0.8+ptmscore*0.2), or else the model with best congruence with crosslinks reported in the related study. + +(modelcif_MA_test/Var3D_I6XD65_1046.cif) +Step 1 - modeling : Docking of ligand PZA in structure + +(modelcif_MA_test/Var3D_L7N665_1046.cif) +Step 1 - modeling : Modelled the sequence of L7N665 with AlphaFold-Multimer as a homo-2-mer + +(modelcif_MA_test/Var3D_P9WIE5_3767.cif) +Step 1 - modeling : transferred ligand NIZ from experimental structure 6cdq into protein structure + +(modelcif_MA_test/ORNL_F0JBU9_9DELT.cif) +Step 1 - modeling +Step 2 - model selection + +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [184]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">_fetch_qa_data</span><span class="p">(</span><span class="n">block</span><span class="p">):</span> + <span class="c1"># fetch main info</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_qa_metric."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"id"</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">,</span> <span class="s2">"mode"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">])</span> + <span class="n">qa_dict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> <span class="c1"># for easy access: keyed on "id" and rest as dict</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">([</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"mode"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">])}</span> + <span class="n">qa_dict</span><span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)]</span> <span class="o">=</span> <span class="n">d</span> + <span class="c1"># fetch global scores</span> + <span class="n">qa_global</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_qa_metric_global."</span><span class="p">,</span> <span class="p">[</span><span class="s2">"metric_id"</span><span class="p">,</span> <span class="s2">"metric_value"</span><span class="p">])</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">metric_id</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="n">metric_value</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_number</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> + <span class="k">if</span> <span class="n">metric_id</span> <span class="ow">in</span> <span class="n">qa_dict</span><span class="p">:</span> + <span class="k">assert</span> <span class="n">qa_dict</span><span class="p">[</span><span class="n">metric_id</span><span class="p">][</span><span class="s2">"mode"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"global"</span> + <span class="n">qa_dict</span><span class="p">[</span><span class="n">metric_id</span><span class="p">][</span><span class="s2">"value"</span><span class="p">]</span> <span class="o">=</span> <span class="n">metric_value</span> + <span class="n">qa_global</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">qa_dict</span><span class="p">[</span><span class="n">metric_id</span><span class="p">])</span> + <span class="c1"># fetch local scores</span> + <span class="n">qa_local</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">qa_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="s2">"mode"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"local"</span><span class="p">]</span> + <span class="n">qa_local_pairwise</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">qa_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="s2">"mode"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"local-pairwise"</span><span class="p">]</span> + <span class="k">return</span> <span class="n">qa_global</span><span class="p">,</span> <span class="n">qa_local</span><span class="p">,</span> <span class="n">qa_local_pairwise</span> + +<span class="n">_fetch_qa_data</span><span class="p">(</span><span class="n">block</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">Out[184]:</div> + + + + +<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain"> +<pre>([{'name': 'pLDDT', 'mode': 'global', 'type': 'pLDDT', 'value': 88.312}, + {'name': 'pTM', 'mode': 'global', 'type': 'pTM', 'value': 0.78}], + [{'name': 'pLDDT', 'mode': 'local', 'type': 'pLDDT'}], + [{'name': 'PAE', 'mode': 'local-pairwise', 'type': 'PAE'}])</pre> +</div> + +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell "> +<div class="jp-Cell-inputWrapper"> +<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 [185]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> + <div class="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># do parsing of QA part and acc. data</span> +<span class="k">def</span> <span class="nf">_test_qa_acc_data_parsing</span><span class="p">(</span><span class="n">test_file</span><span class="p">):</span> + <span class="c1"># get file for testing</span> + <span class="n">doc</span> <span class="o">=</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span> + <span class="n">block</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">sole_block</span><span class="p">()</span> + <span class="c1"># get QA part (can reuse if already used elsewhere)</span> + <span class="n">qa_global</span><span class="p">,</span> <span class="n">qa_local</span><span class="p">,</span> <span class="n">qa_local_pairwise</span> <span class="o">=</span> <span class="n">_fetch_qa_data</span><span class="p">(</span><span class="n">block</span><span class="p">)</span> + <span class="c1"># parse accompanying data</span> + <span class="n">file_contents</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find_values</span><span class="p">(</span><span class="s2">"_ma_entry_associated_files.file_content"</span><span class="p">)</span> + <span class="n">has_single_zip_file</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">file_contents</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> \ + <span class="n">file_contents</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"archive with multiple files"</span> + <span class="k">if</span> <span class="n">has_single_zip_file</span><span class="p">:</span> + <span class="c1"># override with data from other block</span> + <span class="n">file_contents</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find_values</span><span class="p">(</span><span class="s2">"_ma_associated_archive_file_details.file_content"</span><span class="p">)</span> + <span class="n">has_loc_pw_in_acc</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span><span class="kc">True</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">file_contents</span> \ + <span class="k">if</span> <span class="n">gemmi</span><span class="o">.</span><span class="n">cif</span><span class="o">.</span><span class="n">as_string</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"local pairwise QA scores"</span><span class="p">)</span> + <span class="c1"># put together text</span> + <span class="n">text</span> <span class="o">=</span> <span class="s2">""</span> + <span class="c1"># text for QA</span> + <span class="n">item</span> <span class="o">=</span> <span class="s2">""</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">qa_global</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> + <span class="n">score_strings</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">v</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">v</span><span class="p">[</span><span class="s1">'value'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">qa_global</span><span class="p">]</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"The model has the following global model confidence scores:"</span> \ + <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">score_strings</span><span class="p">)</span><span class="si">}</span><span class="s2">."</span> + <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">qa_global</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"The model has a global model confidence score "</span> \ + <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">qa_global</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2">) of </span><span class="si">{</span><span class="n">qa_global</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'value'</span><span class="p">]</span><span class="si">}</span><span class="s2">."</span> + <span class="k">if</span> <span class="n">item</span><span class="p">:</span> + <span class="n">text</span> <span class="o">+=</span> <span class="n">_make_paragraph</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + <span class="c1"># lots of options for local QA string</span> + <span class="n">item</span> <span class="o">=</span> <span class="s2">""</span> + <span class="n">qa_local_names</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">v</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">qa_local</span><span class="p">])</span> + <span class="n">qa_loc_pw_names</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">v</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">qa_local_pairwise</span><span class="p">])</span> + <span class="k">if</span> <span class="n">qa_local_names</span> <span class="ow">and</span> <span class="n">qa_loc_pw_names</span> <span class="ow">and</span> <span class="n">has_loc_pw_in_acc</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Local per-residue model confidence scores (</span><span class="si">{</span><span class="n">qa_local_names</span><span class="si">}</span><span class="s2">) "</span> \ + <span class="sa">f</span><span class="s2">"are available in the model mmCIF file "</span> \ + <span class="sa">f</span><span class="s2">"and local per-residue-pair scores (</span><span class="si">{</span><span class="n">qa_loc_pw_names</span><span class="si">}</span><span class="s2">) "</span> \ + <span class="sa">f</span><span class="s2">"in the accompanying data download."</span> + <span class="k">elif</span> <span class="n">qa_local_names</span> <span class="ow">and</span> <span class="n">qa_loc_pw_names</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">has_loc_pw_in_acc</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Local per-residue model confidence scores (</span><span class="si">{</span><span class="n">qa_local_names</span><span class="si">}</span><span class="s2">) "</span> \ + <span class="sa">f</span><span class="s2">"and local per-residue-pair scores (</span><span class="si">{</span><span class="n">qa_loc_pw_names</span><span class="si">}</span><span class="s2">) "</span> \ + <span class="sa">f</span><span class="s2">"are available in the model mmCIF file."</span> + <span class="k">elif</span> <span class="n">qa_local_names</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">qa_loc_pw_names</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Local per-residue model confidence scores (</span><span class="si">{</span><span class="n">qa_local_names</span><span class="si">}</span><span class="s2">) "</span> \ + <span class="sa">f</span><span class="s2">"are available in the model mmCIF file."</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">qa_local_names</span> <span class="ow">and</span> <span class="n">qa_loc_pw_names</span> <span class="ow">and</span> <span class="n">has_loc_pw_in_acc</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Local per-residue-pair model confidence scores (</span><span class="si">{</span><span class="n">qa_loc_pw_names</span><span class="si">}</span><span class="s2">) "</span> \ + <span class="sa">f</span><span class="s2">"are available in the accompanying data download."</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">qa_local_names</span> <span class="ow">and</span> <span class="n">qa_loc_pw_names</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">has_loc_pw_in_acc</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Local per-residue-pair model confidence scores (</span><span class="si">{</span><span class="n">qa_loc_pw_names</span><span class="si">}</span><span class="s2">) "</span> \ + <span class="sa">f</span><span class="s2">"are available in the model mmCIF file."</span> + <span class="k">if</span> <span class="n">item</span><span class="p">:</span> + <span class="n">text</span> <span class="o">+=</span> <span class="n">_make_paragraph</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + <span class="c1"># list files in accompanying data (if any)</span> + <span class="k">if</span> <span class="n">has_single_zip_file</span><span class="p">:</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_associated_archive_file_details."</span><span class="p">,</span> + <span class="p">[</span><span class="s2">"file_path"</span><span class="p">,</span> <span class="s2">"?file_content"</span><span class="p">,</span> <span class="s2">"?description"</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># NOTE: aimed to work legacy-style for Baker-models but should be obsoleted</span> + <span class="c1"># -> can replace below with "table = None" in future</span> + <span class="n">table</span> <span class="o">=</span> <span class="n">block</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"_ma_entry_associated_files."</span><span class="p">,</span> + <span class="p">[</span><span class="s2">"file_url"</span><span class="p">,</span> <span class="s2">"?file_content"</span><span class="p">,</span> <span class="s2">"?details"</span><span class="p">])</span> + <span class="k">if</span> <span class="n">table</span><span class="p">:</span> + <span class="n">list_top</span> <span class="o">=</span> <span class="s2">"Files in accompanying data:"</span> + <span class="n">list_items</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span> + <span class="n">item</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">" (</span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span> + <span class="k">if</span> <span class="n">row</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="ow">and</span> <span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span> + <span class="n">item</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">": </span><span class="si">{</span><span class="n">row</span><span class="o">.</span><span class="n">str</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span> + <span class="n">list_items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + <span class="n">text</span> <span class="o">+=</span> <span class="n">_make_paragraph</span><span class="p">(</span><span class="n">_make_list</span><span class="p">(</span><span class="n">list_top</span><span class="p">,</span> <span class="n">list_items</span><span class="p">))</span> + <span class="c1"># conclude with standard pointer to ModelCIF file</span> + <span class="n">model_cif_link</span> <span class="o">=</span> <span class="n">_make_url</span><span class="p">(</span> + <span class="s2">"ModelCIF format"</span><span class="p">,</span> + <span class="s2">"https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/"</span> + <span class="p">)</span> + <span class="n">text</span> <span class="o">+=</span> <span class="n">_make_paragraph</span><span class="p">(</span> + <span class="sa">f</span><span class="s2">"Full details are available in </span><span class="si">{</span><span class="n">model_cif_link</span><span class="si">}</span><span class="s2">"</span> \ + <span class="sa">f</span><span class="s2">"in the model mmCIF file."</span> + <span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">test_file</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> + +<span class="k">for</span> <span class="n">test_file</span> <span class="ow">in</span> <span class="n">test_files</span><span class="p">:</span> + <span class="n">_test_qa_acc_data_parsing</span><span class="p">(</span><span class="n">test_file</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"> +<pre>(modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif) +The model has the following global model confidence scores: pLDDT of 88.312, pTM of 0.78. + +Local per-residue model confidence scores (pLDDT) are available in the model mmCIF file and local per-residue-pair scores (PAE) in the accompanying data download. + +Files in accompanying data: +- c103531_g3_i1_unrelaxed_rank_1_model_3_local_pairwise_qa.cif (local pairwise QA scores): Predicted aligned error + +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/AF-P38129-F1-model_v3.cif) +The model has a global model confidence score (pLDDT) of 73.91. + +Local per-residue model confidence scores (pLDDT) are available in the model mmCIF file. + +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/ma-bak-cepc-0001.cif) +The model has a global model confidence score (pLDDT) of 67.43. + +Local per-residue model confidence scores (pLDDT) are available in the model mmCIF file and local per-residue-pair scores (PAE, contact probability) in the accompanying data download. + +Files in accompanying data: +- ma-bak-cepc-0001_local_pairwise_qa.cif (local pairwise QA scores) +- ma-bak-cepc-0001_i95.a3m (multiple sequence alignments) + +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/1crn.cif) +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/Tara_A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1.cif) +The model has the following global model confidence scores: pLDDT of 32.232, pTM of 0.24. + +Local per-residue model confidence scores (pLDDT) are available in the model mmCIF file and local per-residue-pair scores (PAE) in the accompanying data download. + +Files in accompanying data: +- A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1_local_pairwise_qa.cif (local pairwise QA scores): Predicted aligned error. + +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/Var3D_I6XD65_1046.cif) +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/Var3D_L7N665_1046.cif) +The model has the following global model confidence scores: pLDDT of 88.204, pTM of 0.884, ipTM of 0.874. + +Local per-residue model confidence scores (pLDDT) are available in the model mmCIF file and local per-residue-pair scores (PAE) in the accompanying data download. + +Files in accompanying data: +- tmp/L7N665_1046_local_pairwise_qa.cif (local pairwise QA scores): Predicted aligned error. + +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/Var3D_P9WIE5_3767.cif) +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +(modelcif_MA_test/ORNL_F0JBU9_9DELT.cif) +The model has a global model confidence score (pLDDT) of 92.31. + +Local per-residue model confidence scores (pLDDT) and local per-residue-pair scores (PAE) are available in the model mmCIF file. + +Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file. + + +</pre> +</div> +</div> + +</div> + +</div> + +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs "> +<div class="jp-Cell-inputWrapper"> +<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="CodeMirror cm-s-jupyter"> +<div class=" highlight hl-ipython3"><pre><span></span> +</pre></div> + + </div> +</div> +</div> +</div> + +</div> +</body> + + + + + + + +</html> diff --git a/projects/CoFFE-sponge-proteins/tests/test.ipynb b/projects/CoFFE-sponge-proteins/tests/test.ipynb new file mode 100644 index 0000000..e63d7df --- /dev/null +++ b/projects/CoFFE-sponge-proteins/tests/test.ipynb @@ -0,0 +1,1110 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 63, + "id": "a2436da9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PROTEINS ONLY in fasta_file: ['c104827_g1_i1', 'c104894_g1_i2']\n", + "Working on ./PKG Cut...\n", + " translating c103531_g3_i1_unrelaxed_rank_1_model_3...\n", + " preparing data... (0.02s)\n", + " generating ModelCIF objects... (0.00s)\n", + " processing QA scores... (0.20s)\n", + " write to disk... (1.15s)\n", + " ... done with c103531_g3_i1_unrelaxed_rank_1_model_3 (1.37s).\n", + " translating c103545_g3_i2_unrelaxed_rank_1_model_3...\n", + " preparing data... (0.08s)\n", + " generating ModelCIF objects... (0.00s)\n", + " processing QA scores... (5.47s)\n", + " write to disk... (19.48s)\n", + " ... done with c103545_g3_i2_unrelaxed_rank_1_model_3 (25.13s).\n", + "... done with ./PKG Cut.\n" + ] + } + ], + "source": [ + "# fetch all functions from there for testing (__name__ hack to avoid executing main)\n", + "__name__ = \"test\"\n", + "execfile(\"./scripts/translate2modelcif.py\")\n", + "_main()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3c15acf4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PROTEINS ONLY in fasta_file: ['c104827_g1_i1', 'c104894_g1_i2']\n" + ] + } + ], + "source": [ + " # HC filepaths\n", + " cnfg_file = \"./PKG/config.json\"\n", + " metadata_file = \"./PKG/model_archive_metadata.csv\"\n", + " fasta_file = \"./PKG/Spongilla_lacustris_translated_proteome_fixed.fasta\"\n", + " model_dir = \"./PKG Cut\"\n", + " # model_dir = \"./PKG-all\"\n", + " out_dir = \"./modelcif\"\n", + " compress = False\n", + " #\n", + "\n", + " # parse/fetch global data\n", + " config_data = _parse_colabfold_config(cnfg_file)\n", + " metadata = _get_metadata(metadata_file)\n", + " seq_dict = _get_sequences(fasta_file, metadata)\n", + " if compress:\n", + " cifext = \"cif.gz\"\n", + " else:\n", + " cifext = \"cif\"\n", + " # fetch a single randomly chosen UniProt entry for tax info\n", + " upkb_data = _fetch_upkb_entry(\"P42690\")\n", + " tax_info = {k: v for k, v in upkb_data.items() \\\n", + " if k in [\"up_organism\", \"up_ncbi_taxid\"]}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "91657e38", + "metadata": {}, + "outputs": [], + "source": [ + "fle = \"c103531_g3_i1_unrelaxed_rank_1_model_3.pdb\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "281944d3", + "metadata": {}, + "outputs": [], + "source": [ + " file_prfx, mdl_name = _check_model_extra_files_present(model_dir,\n", + " fle)\n", + " fle = os.path.join(model_dir, fle)\n", + " mdlcf_json = _create_json(config_data)\n", + " mdlcf_json[\"tax_info\"] = tax_info\n", + " # mdl_name = [TITLE]_unrelaxed_rank_X_model_Y.pdb\n", + " mdl_name_parts = mdl_name.split('_')\n", + " assert len(mdl_name_parts) == 8\n", + " assert int(mdl_name_parts[5]) == 1 # rank 1 only\n", + " mdlcf_json[\"mdl_num\"] = int(mdl_name_parts[7])\n", + " mdlcf_json[\"mdl_title\"] = '_'.join(mdl_name_parts[:3])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0c9e86af", + "metadata": {}, + "outputs": [], + "source": [ + " ost_ent = _create_model_json(mdlcf_json, fle, seq_dict, metadata)\n", + "\n", + " # read quality scores from JSON file\n", + " _get_scores(mdlcf_json, file_prfx)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "aaa3c7d8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " generating ModelCIF objects... (0.00s)\n", + " processing QA scores... (0.34s)\n", + " write to disk... (1.04s)\n" + ] + } + ], + "source": [ + " _store_as_modelcif(mdlcf_json, ost_ent, out_dir, mdl_name, compress)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9f1a7a14", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['max_pae', 'pae', 'plddt', 'ptm'])\n" + ] + } + ], + "source": [ + "scores = json.load(open(\"./PKG Cut/c103545_g3_i2_unrelaxed_rank_1_model_3_scores.json\"))\n", + "print(scores.keys())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "afafbf78", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WEIRD NAME c100000_g1_i2_unrelaxed_rank_c100000_g1_i2_model_3\n", + "WEIRD NAME c100001_g1_i1_unrelaxed_rank_1_model_c100001_g1_i1\n" + ] + } + ], + "source": [ + "# check files\n", + "pdb_files = open(\"./PKG/files_PDB.txt\").readlines()\n", + "json_files = open(\"./PKG/files_JSON.txt\").readlines()\n", + "assert len(pdb_files) == len(json_files)\n", + "\n", + "mdl_titles = []\n", + "for pdb_file, json_file in zip(sorted(pdb_files), sorted(json_files)):\n", + " splitfile = os.path.split(pdb_file.strip())\n", + " assert len(splitfile) == 2\n", + " if splitfile[1]:\n", + " mdl_name, mdl_ext = os.path.splitext(splitfile[1])\n", + " assert mdl_ext == \".pdb\"\n", + " splitfile_j = os.path.split(json_file.strip())\n", + " assert len(splitfile_j) == 2\n", + " assert splitfile_j[1] == f\"{mdl_name}_scores.json\"\n", + " mdl_name_parts = mdl_name.split('_')\n", + " if len(mdl_name_parts) != 8 or mdl_name_parts[5] != '1':\n", + " print(\"WEIRD NAME\", mdl_name)\n", + " mdl_title = '_'.join(mdl_name_parts[:3])\n", + " mdl_titles.append(mdl_title)\n", + " \n", + "assert len(set(mdl_titles)) == len(mdl_titles)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "9146d967", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PROTEINS ONLY in metadata: ['c104658_g3_i5', 'c104704_g1_i1', 'c104839_g1_i1', 'c104839_g1_i3', 'c104872_g1_i1', 'c104894_g1_i3', 'c104922_g1_i2', 'c104954_g1_i2', 'c104956_g1_i1', 'c104958_g1_i1', 'c104973_g1_i2']\n" + ] + }, + { + "data": { + "text/plain": [ + "(41932, 41943, 11)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# all in metadata?\n", + "only_in_metadata = set(metadata.index) - set(mdl_titles)\n", + "if only_in_metadata:\n", + " print(\"PROTEINS ONLY in metadata:\", sorted(only_in_metadata))\n", + "only_in_seqs = set(mdl_titles) - set(metadata.index)\n", + "assert len(only_in_seqs) == 0\n", + "len(mdl_titles), len(metadata), len(only_in_metadata)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "3e6e7c3b", + "metadata": {}, + "outputs": [], + "source": [ + "# check files that were converted (input is std out from run cut to only include \"translating...\")\n", + "log_lines = open(\"./FromWork/docker_out_clean.txt\").readlines()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3e67fab0", + "metadata": {}, + "outputs": [], + "source": [ + "# plenty of assertions in here should also catch any errors...\n", + "idx = 0\n", + "timings = dict()\n", + "while idx < len(log_lines):\n", + " l = log_lines[idx].strip()\n", + " if \"already done...\" in l:\n", + " idx += 1\n", + " continue\n", + " assert l.startswith(\"translating\")\n", + " mdl_title = \"_\".join(l.split()[1].split('_')[:3])\n", + " l = log_lines[idx + 1].strip()\n", + " assert l.startswith(\"preparing data\")\n", + " assert l.endswith(\"s)\")\n", + " t_prep = float(l.split()[-1][1:-2])\n", + " l = log_lines[idx + 2].strip()\n", + " assert l.startswith(\"generating ModelCIF objects\")\n", + " assert l.endswith(\"s)\")\n", + " t_cif = float(l.split()[-1][1:-2])\n", + " l = log_lines[idx + 3].strip()\n", + " assert l.startswith(\"processing QA scores\")\n", + " assert l.endswith(\"s)\")\n", + " t_qa = float(l.split()[-1][1:-2])\n", + " l = log_lines[idx + 4].strip()\n", + " assert l.startswith(\"write to disk\")\n", + " assert l.endswith(\"s)\")\n", + " t_write = float(l.split()[-1][1:-2])\n", + " l = log_lines[idx + 5].strip()\n", + " assert l.startswith(\"... done with\")\n", + " assert l.endswith(\"s).\")\n", + " t_all = float(l.split()[-1][1:-3])\n", + " timings[mdl_title] = {\n", + " \"seq_len\": len(seq_dict[mdl_title]),\n", + " \"t_prep\": t_prep,\n", + " \"t_cif\": t_cif,\n", + " \"t_qa\": t_qa,\n", + " \"t_write\": t_write,\n", + " \"t_all\": t_all\n", + " }\n", + " idx += 6" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "fa6b06ac", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DONE 37738 models\n", + "MISSING 4194 models\n" + ] + } + ], + "source": [ + "print(f\"DONE {len(timings)} models\")\n", + "assert len(set(timings) - set(mdl_titles)) == 0\n", + "missing_ones = set(mdl_titles) - set(timings)\n", + "print(f\"MISSING {len(missing_ones)} models\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0025c378", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 2\n", + "2.106e-05 x - 4.487e-05 x + 0.05244\n", + "Average time per model (s): 2.1000026498489452\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "x = []\n", + "y = []\n", + "y2 = []\n", + "for v in timings.values():\n", + " x.append(v[\"seq_len\"])\n", + " y.append(v[\"t_all\"])\n", + " y2.append(v[\"t_write\"])\n", + "# fit quadratic function (for fun)\n", + "model = np.poly1d(np.polyfit(x, y, 2))\n", + "print(model)\n", + "# plot it\n", + "plt.scatter(x, y)\n", + "plt.scatter(x, y2)\n", + "polyline = np.linspace(1, max(x), 50)\n", + "plt.plot(polyline, model(polyline))\n", + "plt.xlabel(\"seq. length\")\n", + "plt.ylabel(\"conversion time\")\n", + "plt.legend([\"quadratic fit\", \"total time\", \"write time\"])\n", + "plt.gcf().patch.set_facecolor('white')\n", + "print(\"Average time per model (s):\", sum(y) / len(y))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "d5be3755", + "metadata": {}, + "outputs": [], + "source": [ + "# check results (self-contained version)\n", + "from ost import io\n", + "fasta_file = \"./PKG/Spongilla_lacustris_translated_proteome_fixed.fasta\"\n", + "out_dir = \"./modelcif\"\n", + "cifext = \"cif\"\n", + "seqs = io.LoadSequenceList(fasta_file)\n", + "seq_dict = {'_'.join(s.name.split('_')[:3]): s.string for s in seqs}\n", + "for out_fle in sorted(os.listdir(out_dir)):\n", + " if not out_fle.endswith(cifext) or \"_local_pairwise_qa\" in out_fle:\n", + " continue\n", + " mdl_name = os.path.splitext(out_fle)[0]\n", + " mdl_title = '_'.join(mdl_name.split('_')[:3])\n", + " # check if result can be read and has expected seq.\n", + " ent = io.LoadMMCIF(os.path.join(out_dir, out_fle))\n", + " assert ent.chain_count == 1, f\"Bad chain count {mdl_title}\"\n", + " ent_seq = \"\".join(res.one_letter_code for res in ent.residues)\n", + " assert ent_seq == seq_dict[mdl_title], f\"Bad seq. {mdl_title}\"\n", + " # NOTE: can use only this bit in main loop with os.path.join(out_dir, f\"{mdl_name}.{cifext}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "27544e00", + "metadata": {}, + "outputs": [ + { + "ename": "AssertionError", + "evalue": "c103545_g3_i2", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [17]\u001b[0m, in \u001b[0;36m<cell line: 2>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m desc\u001b[38;5;241m.\u001b[39msplitlines():\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m,\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m line:\n\u001b[0;32m----> 6\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m line\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCoFFE orthogroups\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m line\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCoFFE GO terms\u001b[39m\u001b[38;5;124m\"\u001b[39m), title\n", + "\u001b[0;31mAssertionError\u001b[0m: c103545_g3_i2" + ] + } + ], + "source": [ + "# check ,-separation in metadata\n", + "for title, row in metadata.iterrows():\n", + " desc = row.description\n", + " for line in desc.splitlines():\n", + " if \",\" in line:\n", + " assert line.startswith(\"CoFFE orthogroups\") or line.startswith(\"CoFFE GO terms\"), title" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "9bb42dd2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'CoFFE UniProt function: FUNCTION: Involved in hearing and vision as member of the USH2 complex. Necessary for elongation and maintenance of inner and outer hair cell stereocilia in the organ of Corti in the inner ear. Involved in the maintenance of the hair bundle ankle region, which connects stereocilia in cochlear hair cells of the inner ear. In retina photoreceptors, required for the maintenance of periciliary membrane complex that seems to play a role in regulating intracellular protein transport. {ECO:0000250|UniProtKB:Q80VW5}.'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "line" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "963be9a1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "c2495_g1_i1 CoFFE UniProt function: FUNCTION: Protein O-mannose kinase that specifically mediates phosphorylation at the 6-position of an O-mannose of the trisaccharide (N-acetylgalactosamine (GalNAc)-beta-1,3-N-acetylglucosamine (GlcNAc)-beta-1,4-mannose) to generate phosphorylated O-mannosyl trisaccharide (N-acetylgalactosamine-beta-1,3-N-acetylglucosamine-beta-1,4-(phosphate-6-)mannose). Phosphorylated O-mannosyl trisaccharide is a carbohydrate structure present in alpha-dystroglycan (DAG1), which is required for binding laminin G-like domain-containing extracellular proteins with high affinity. Only shows kinase activity when the GalNAc-beta-3-GlcNAc-beta-terminus is linked to the 4-position of O-mannose, suggesting that this disaccharide serves as the substrate recognition motif (By similarity). {ECO:0000250}.\n" + ] + } + ], + "source": [ + "# ok so we cannot blindly assume that commas are bad...\n", + "\n", + "# check longest tokens in metadata\n", + "new_desc = dict()\n", + "for title, row in metadata.iterrows():\n", + " desc = row.description\n", + " new_lines = []\n", + " for line in desc.splitlines():\n", + " is_loi = line.startswith(\"CoFFE orthogroups\") \\\n", + " or line.startswith(\"CoFFE GO terms\") \\\n", + " or line.startswith(\"Emapper orthogroups\") \\\n", + " or line.startswith(\"Emapper GO terms\") \\\n", + " or line.startswith(\"CoFFE PFAM domains\") \\\n", + " or line.startswith(\"Emapper PFAM domains\")\n", + " if \",\" in line and is_loi:\n", + " new_line = line.replace(\",\", \", \")\n", + " else:\n", + " new_line = line\n", + " token_lengths = [len(token) for token in new_line.split()]\n", + " if token_lengths and max(token_lengths) > 80:\n", + " print(title, new_line)\n", + " new_lines.append(new_line)\n", + " new_desc[title] = \"\\n\".join(new_lines)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "a62a49f5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[19286, 'c90048_g1_i1'],\n", + " [20561, 'c104513_g1_i1'],\n", + " [22685, 'c91485_g1_i1'],\n", + " [27674, 'c95514_g1_i1'],\n", + " [27687, 'c95514_g1_i3']]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# c2495_g1_i1 tested in MA and ok...let's check largest ones\n", + "sorted([len(desc), title] for title, desc in new_desc.items())[-5:]\n", + "# looks ok too..." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "f9b0899e", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model generated using ColabFold v1.2.0 with AlphaFold producing 5 models with 3 recycles each without model relaxation without templates ranked by pLDDT starting from an MSA from MMseqs2 (UniRef+Environmental)\n", + "Emapper preferred name [EggNOG]: -\n", + "Emapper description [EggNOG]: -\n", + "CoFFE preferred name [E\n", + "--------------------------------------------------------------------------------\n", + "Model generated using ColabFold v1.2.0 with AlphaFold producing 5 models with 3 recycles each without model relaxation without templates ranked by pLDDT starting from an MSA from MMseqs2 (UniRef+Environmental)\n", + "\n", + "Emapper preferred name [EggNOG]: -\n", + "Emapper description [EggNOG]: -\n", + "CoFFE preferred name [\n" + ] + } + ], + "source": [ + "# checking multiline details and markdown\n", + "from ost import io\n", + "import modelcif.reader\n", + "file_path = \"./modelcif/c103531_g3_i1_unrelaxed_rank_1_model_3.cif\"\n", + "ent, info = io.LoadMMCIF(file_path, info=True)\n", + "with open(file_path) as fh:\n", + " s, = modelcif.reader.read(fh)\n", + "print(info.GetStructDetails().model_details[:300])\n", + "print('-' * 80)\n", + "print(s.model_details[:300])\n", + "# NOTE: there may be a bug in OST's multiline parsing in terms of keeping line breaks intact...\n", + "# ...and lines are stripped so that we lose the trailing 2 spaces..." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "84326bee", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "isoform ID: c103531_g3_i1\n", + "\n", + "And **fat** and *emphasized* markdown with lists:\n", + "\n", + "- item1\n", + "- item2\n", + "\n", + "and [links](https://github.com).\n", + "\n", + "Note that markdown ignores linebreaks\n", + "unless two spaces at end \n", + "<- as in line above\n", + "--------------------------------------------------------------------------------\n", + "<p>isoform ID: c103531_g3_i1</p>\n", + "<p>And <strong>fat</strong> and <em>emphasized</em> markdown with lists:</p>\n", + "<ul>\n", + "<li>item1</li>\n", + "<li>item2</li>\n", + "</ul>\n", + "<p>and <a href=\"https://github.com\">links</a>.</p>\n", + "<p>Note that markdown ignores linebreaks\n", + "unless two spaces at end<br />\n", + "<- as in line above</p>\n" + ] + } + ], + "source": [ + "import markdown\n", + "markdown_test = \"\"\"isoform ID: c103531_g3_i1\n", + "\n", + "And **fat** and *emphasized* markdown with lists:\n", + "\n", + "- item1\n", + "- item2\n", + "\n", + "and [links](https://github.com).\n", + "\n", + "Note that markdown ignores linebreaks\n", + "unless two spaces at end \n", + "<- as in line above\"\"\"\n", + "print(markdown_test)\n", + "print('-' * 80)\n", + "print(markdown.markdown(markdown_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c4be6188", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- none : 3.84s vs 25.59s, 27824253\n", + "- gzip : 2.70s vs 25.59s, 5417406\n", + "- gz : 0.87s vs 25.59s, 5389143\n", + "- gz(9): 2.74s vs 25.59s, 5417802\n", + "- bz : 1.61s vs 25.59s, 3802066\n", + "- bz(9): 1.56s vs 25.59s, 3802066\n", + "- lzma : 22.27s vs 25.59s, 2083062\n" + ] + } + ], + "source": [ + "# test zip file speed and size\n", + "from timeit import default_timer as timer\n", + "import os, zipfile, gzip, shutil\n", + "\n", + "def zip_test(compression, level=None):\n", + " zip_file = \"test.zip\"\n", + " files = [\"modelcif/c103531_g3_i1_unrelaxed_rank_1_model_3_local_pairwise_qa.cif\"]\n", + " files.append(\"modelcif/c103545_g3_i2_unrelaxed_rank_1_model_3_local_pairwise_qa.cif\")\n", + " pstart = timer()\n", + " if compression == \"gzip\":\n", + " file_size = 0\n", + " for file in files:\n", + " with open(file, 'rb') as f_in:\n", + " with gzip.open(zip_file, 'wb') as f_out:\n", + " shutil.copyfileobj(f_in, f_out)\n", + " file_size += os.path.getsize(zip_file)\n", + " else:\n", + " with zipfile.ZipFile(zip_file, 'w', compression, compresslevel=level) as myzip:\n", + " for file in files:\n", + " myzip.write(file)\n", + " file_size = os.path.getsize(zip_file)\n", + " # for comparison full translation time for the files (i.e. from running _main)\n", + " if len(files) == 1:\n", + " ref_time = \"1.38s\"\n", + " else:\n", + " ref_time = f\"{1.38+24.21}s\"\n", + " if compression == zipfile.ZIP_STORED:\n", + " label = \"none \"\n", + " elif compression == zipfile.ZIP_DEFLATED:\n", + " if level:\n", + " label = f\"gz({level})\"\n", + " else:\n", + " label = \"gz \"\n", + " elif compression == zipfile.ZIP_BZIP2:\n", + " if level:\n", + " label = f\"bz({level})\"\n", + " else:\n", + " label = \"bz \"\n", + " elif compression == zipfile.ZIP_LZMA:\n", + " label = \"lzma \"\n", + " else:\n", + " label = \"gzip \"\n", + " print(f\"- {label}: {timer()-pstart:.2f}s vs {ref_time}, {file_size}\")\n", + " os.remove(zip_file)\n", + "\n", + "zip_test(zipfile.ZIP_STORED)\n", + "zip_test(\"gzip\")\n", + "zip_test(zipfile.ZIP_DEFLATED)\n", + "zip_test(zipfile.ZIP_DEFLATED, 9)\n", + "zip_test(zipfile.ZIP_BZIP2)\n", + "zip_test(zipfile.ZIP_BZIP2, 9)\n", + "zip_test(zipfile.ZIP_LZMA)" + ] + }, + { + "cell_type": "markdown", + "id": "a9dc14c2", + "metadata": {}, + "source": [ + "FAZIT: lzma is too slow but bzip2 has good compromise of size vs speed" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "2f604e78", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "137179 vs 184836 in 0.25s\n" + ] + } + ], + "source": [ + "# check out pdbx\n", + "import os\n", + "from timeit import default_timer as timer\n", + "from pdbx.reader.PdbxReader import PdbxReader\n", + "from pdbx.writer.PdbxWriter import PdbxWriter\n", + "test_file = \"modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif\"\n", + "# test_file = \"modelcif_MA_test/AF-P38129-F1-model_v3.cif\"\n", + "# test_file = \"modelcif_MA_test/ma-bak-cepc-0001.cif\"\n", + "# test_file = \"modelcif_MA_test/1crn.cif\"\n", + "test_file_out = \"modelcif_MA_test/test.cif\"\n", + "pstart = timer()\n", + "pdbx_data = []\n", + "with open(test_file, 'r') as f_in:\n", + " pdbxR = PdbxReader(f_in)\n", + " pdbxR.read(pdbx_data)\n", + "with open(test_file_out, 'w') as f_out:\n", + " pdbxW = PdbxWriter(f_out)\n", + " pdbxW.write(pdbx_data)\n", + "print(f\"{os.path.getsize(test_file)} vs {os.path.getsize(test_file_out)}\" \\\n", + " f\" in {timer()-pstart:.2f}s\")" + ] + }, + { + "cell_type": "markdown", + "id": "210ec7ee", + "metadata": {}, + "source": [ + "FAZIT: adds lots of spaces but doesn't remove anything \n", + "ISSUE: quotes around \"stop_...\" removed..." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ddad4236", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "137179 vs 137099 in 0.03s\n" + ] + } + ], + "source": [ + "# check out gemmi\n", + "import gemmi\n", + "pstart = timer()\n", + "doc = gemmi.cif.read(test_file)\n", + "doc.write_file(test_file_out)\n", + "print(f\"{os.path.getsize(test_file)} vs {os.path.getsize(test_file_out)}\" \\\n", + " f\" in {timer()-pstart:.2f}s\")" + ] + }, + { + "cell_type": "markdown", + "id": "9aa4244e", + "metadata": {}, + "source": [ + "FAZIT: much faster than pdbx, space handling similar to python-modelcif and also not removing anything and handling \"stop_...\" properly\n", + "\n", + "Also note that neither of the two messes up the order of tables and so files are easily comparable!\n", + "\n", + "**FAZIT**: gemmi is good!" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "dde612e7", + "metadata": {}, + "outputs": [], + "source": [ + "# quick test changing data_ block name\n", + "doc = gemmi.cif.read(test_file)\n", + "doc.sole_block().name = 'test'\n", + "doc.write_file(test_file_out)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cf4898d9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ma_qa_metric\n", + "['id', 'name', 'description', 'type', 'mode', 'type_other_details', 'software_group_id']\n", + "[['1', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'global', '.', '.'], ['2', 'pTM', 'Predicted accuracy according to the TM-score score in [0,1]', 'pTM', 'global', '.', '.'], ['3', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'local', '.', '.'], ['4', 'PAE', 'Predicted aligned error (in Angstroms)', 'PAE', 'local-pairwise', '.', '.']]\n" + ] + } + ], + "source": [ + "# parsing pdbx\n", + "# see https://mmcif.wwpdb.org/docs/sw-examples/python/html/\n", + "# -> all very low level\n", + "block = pdbx_data[0]\n", + "if block.exists(\"ma_qa_metric\"):\n", + " dc = block.getObj(\"ma_qa_metric\")\n", + " categoryName, attributeNameList, rowList = dc.get()\n", + " print(categoryName)\n", + " print(attributeNameList)\n", + " print(rowList)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a43fc1fb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_ma_qa_metric.\n", + "['_ma_qa_metric.id', '_ma_qa_metric.name', '_ma_qa_metric.description', '_ma_qa_metric.type', '_ma_qa_metric.mode', '_ma_qa_metric.type_other_details', '_ma_qa_metric.software_group_id']\n", + "[['1', 'pLDDT', \"'Predicted accuracy according to the CA-only lDDT in [0,100]'\", 'pLDDT', 'global', '.', '.'], ['2', 'pTM', \"'Predicted accuracy according to the TM-score score in [0,1]'\", 'pTM', 'global', '.', '.'], ['3', 'pLDDT', \"'Predicted accuracy according to the CA-only lDDT in [0,100]'\", 'pLDDT', 'local', '.', '.'], ['4', 'PAE', \"'Predicted aligned error (in Angstroms)'\", 'PAE', 'local-pairwise', '.', '.']]\n" + ] + } + ], + "source": [ + "# parsing gemmi\n", + "# see https://gemmi.readthedocs.io/en/latest/cif.html#block\n", + "block = doc.sole_block()\n", + "table = block.find_mmcif_category(\"_ma_qa_metric.\")\n", + "if table:\n", + " print(table.get_prefix())\n", + " print([tag for tag in table.tags])\n", + " print([[col for col in row] for row in table])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "fdd15c7c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[['1', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'global', '', ''], ['2', 'pTM', 'Predicted accuracy according to the TM-score score in [0,1]', 'pTM', 'global', '', ''], ['3', 'pLDDT', 'Predicted accuracy according to the CA-only lDDT in [0,100]', 'pLDDT', 'local', '', ''], ['4', 'PAE', 'Predicted aligned error (in Angstroms)', 'PAE', 'local-pairwise', '', '']]\n", + "\"\"\n" + ] + } + ], + "source": [ + "# note: \"row.str(#) or \"gemmi.cif.as_string\" map \".\" or \"?\" to \"\" and remove quotes from strings\n", + "if table:\n", + " print([[gemmi.cif.as_string(col) for col in row] for row in table])\n", + "print(f'\"{gemmi.cif.as_string(\"?\")}\"')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "17b4fcbd", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "<gemmi.cif.Table.Row: 3 local pLDDT pLDDT None>\n", + "{'id': ['1', '2', '3', '4'], 'name': ['pLDDT', 'pTM', 'pLDDT', 'PAE'], 'description': [\"'Predicted accuracy according to the CA-only lDDT in [0,100]'\", \"'Predicted accuracy according to the TM-score score in [0,1]'\", \"'Predicted accuracy according to the CA-only lDDT in [0,100]'\", \"'Predicted aligned error (in Angstroms)'\"], 'type': ['pLDDT', 'pTM', 'pLDDT', 'PAE'], 'mode': ['global', 'global', 'local', 'local-pairwise'], 'type_other_details': ['.', '.', '.', '.'], 'software_group_id': ['.', '.', '.', '.']}\n" + ] + }, + { + "data": { + "text/plain": [ + "{'id': ['1', '2', '3', '4'],\n", + " 'name': ['pLDDT', 'pTM', 'pLDDT', 'PAE'],\n", + " 'description': ['Predicted accuracy according to the CA-only lDDT in [0,100]',\n", + " 'Predicted accuracy according to the TM-score score in [0,1]',\n", + " 'Predicted accuracy according to the CA-only lDDT in [0,100]',\n", + " 'Predicted aligned error (in Angstroms)'],\n", + " 'type': ['pLDDT', 'pTM', 'pLDDT', 'PAE'],\n", + " 'mode': ['global', 'global', 'local', 'local-pairwise'],\n", + " 'type_other_details': [False, False, False, False],\n", + " 'software_group_id': [False, False, False, False]}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# use find with desired columns (incl. optional ones)\n", + "table = block.find(\"_ma_qa_metric.\", [\"id\", \"mode\", \"name\", \"type\", \"?meh\"])\n", + "print(table.has_column(4))\n", + "# and look for rows according to first column\n", + "print(table.find_row(\"3\"))\n", + "# and get dictionary (as is)\n", + "print(block.get_mmcif_category(\"_ma_qa_metric.\", raw=True))\n", + "# or nicely processed (? and . becoming None)\n", + "block.get_mmcif_category(\"_ma_qa_metric.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "id": "f60a0c20", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[True, True, True, True, False],\n", + " [True, True, False, True, False],\n", + " [True, True, False, True, False]]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[['ColabFold', 'https://github.com/sokrypton/ColabFold', '1.2.0', '1', ''],\n", + " ['MMseqs2', 'https://github.com/soedinglab/mmseqs2', '', '2', ''],\n", + " ['AlphaFold', 'https://github.com/deepmind/alphafold', '', '3', '']]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# some ways to deal with optional and missing (? or .) data\n", + "table = block.find(\"_software.\", [\"name\", \"?location\", \"?version\", \"?citation_id\", \"?meh\"])\n", + "display([[(row.has(idx) and bool(row.str(idx))) for idx in range(len(row))] for row in table])\n", + "display([[(row.str(idx) if row.has(idx) else '') for idx in range(len(row))] for row in table])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "f554c63c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# note that the above also works for completely missing tables\n", + "table = block.find(\"_meh.\", [\"name\", \"?location\", \"?version\", \"?citation_id\", \"?meh\"])\n", + "display([[(row.has(idx) and bool(row.str(idx))) for idx in range(len(row))] for row in table])" + ] + }, + { + "cell_type": "markdown", + "id": "36fb3920", + "metadata": {}, + "source": [ + "# ModelCIF -> MA" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "6424ff93", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "USAGE: python test_modelCIF_MA.py [CIF-FILE]\n" + ] + } + ], + "source": [ + "# fetch all functions from there for testing (__name__ hack to avoid executing main)\n", + "__name__ = \"test\"\n", + "execfile(\"./scripts/test_modelCIF_MA.py\")\n", + "_main()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "6dc9b31d", + "metadata": {}, + "outputs": [], + "source": [ + "# define test files for translations below\n", + "test_files = [\n", + " \"modelcif_MA_test/c103531_g3_i1_unrelaxed_rank_1_model_3.cif\",\n", + " \"modelcif_MA_test/AF-P38129-F1-model_v3.cif\",\n", + " \"modelcif_MA_test/ma-bak-cepc-0001.cif\",\n", + " \"modelcif_MA_test/1crn.cif\",\n", + " \"modelcif_MA_test/Tara_A0A1B0GTU1-O75152_unrelaxed_rank_1_model_1.cif\",\n", + " \"modelcif_MA_test/Var3D_I6XD65_1046.cif\",\n", + " \"modelcif_MA_test/Var3D_L7N665_1046.cif\",\n", + " \"modelcif_MA_test/Var3D_P9WIE5_3767.cif\",\n", + " \"modelcif_MA_test/ORNL_F0JBU9_9DELT.cif\",\n", + "]\n", + "\n", + "# open one for quick testing\n", + "doc = gemmi.cif.read(test_files[-4])\n", + "block = doc.sole_block()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "f8258452", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ModelCIF->MA for modelcif_MA_test/AF-P38129-F1-model_v3.cif\n", + "--------------------------------------------------------------------------------\n", + "TITLE: NO TITLE\n", + "--------------------------------------------------------------------------------\n", + "OVERVIEW:\n", + "--------------------------------------------------------------------------------\n", + "NO ABSTRACT\n", + "\n", + "This model is part of the dataset \"TOFILL\"\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "MATERIAL:\n", + "--------------------------------------------------------------------------------\n", + "The following molecular entities are in the model:\n", + "- Transcription initiation factor TFIID subunit 5 (chains: A)\n", + "UniProt: [P38129](https://www.uniprot.org/uniprot/P38129) 1-798; Saccharomyces cerevisiae (strain ATCC 204508 / S288c)\n", + "\n", + "The following software was used:\n", + "- AlphaFold (v2.0)\n", + "- dssp (4)\n", + "\n", + "The following templates were used:\n", + "- PDB: [6TBM](http://dx.doi.org/10.2210/pdb6TBM/pdb); chains (auth_asym_id): G\n", + "- PDB: [6TB4](http://dx.doi.org/10.2210/pdb6TB4/pdb); chains (auth_asym_id): G\n", + "- PDB: [6F3T](http://dx.doi.org/10.2210/pdb6F3T/pdb); chains (auth_asym_id): A\n", + "- PDB: [6MZC](http://dx.doi.org/10.2210/pdb6MZC/pdb); chains (auth_asym_id): G\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "PROCEDURE:\n", + "--------------------------------------------------------------------------------\n", + "Step 1 - coevolution MSA\n", + "Step 2 - template search\n", + "Step 3 - modeling\n", + "\n", + "The model has a global model confidence score (pLDDT) of 73.91.\n", + "\n", + "Local per-residue model confidence scores (pLDDT) are available in the model mmCIF file.\n", + "\n", + "Full details are available in [ModelCIF format](https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/)in the model mmCIF file.\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n" + ] + } + ], + "source": [ + "_process_file(test_files[1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e4368fa1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/projects/CoFFE-sponge-proteins/tests/test_modelCIF_MA.py b/projects/CoFFE-sponge-proteins/tests/test_modelCIF_MA.py new file mode 100644 index 0000000..5fdd23c --- /dev/null +++ b/projects/CoFFE-sponge-proteins/tests/test_modelCIF_MA.py @@ -0,0 +1,470 @@ +# USAGE: python test_modelCIF_MA.py [CIF-FILE] +# OUTPUT: preview of MA entry + +import gemmi, sys + +################################################################################ +# define converters for printing or for html (here markdown used for display) +def _make_url(link_text, link_url): + return f"[{link_text}]({link_url})" +def _make_list(list_top, list_items): + list_texts = [f"- {item}" for item in list_items] + list_text = '\n'.join(list_texts) + if list_texts: + return(f"{list_top}\n{list_text}") +def _make_multiline_text(lines): + return '\n'.join(lines) +def _make_paragraph(text): + return f"{text}\n\n" +################################################################################ + +################################################################################ +# HELPERS +################################################################################ +def _get_chain_entity(block): + # NOTE: adapted from ParseCIF (asym_ids as list and handle optional fields) + chain_entity = {} + + ma_target_entity = block.find( + "_ma_target_entity_instance.", ["asym_id", "entity_id"] + ) + if ma_target_entity: + for row in ma_target_entity: + if row["entity_id"] in chain_entity: + chain_entity[row["entity_id"]]["asym_ids"].append( + gemmi.cif.as_string(row["asym_id"]) + ) + else: + chain_entity[row["entity_id"]] = { + "asym_ids": [row["asym_id"]], + "ma_target_ref_db_details": [], + } + + for row in block.find("_entity.", ["id", "pdbx_description"]): + chain_entity[row["id"]].update( + {"pdbx_description": gemmi.cif.as_string(row["pdbx_description"])} + ) + + cols = [ + "target_entity_id", + "db_accession", + "db_name", + "?db_name_other_details", + "?organism_scientific", + "?seq_db_align_begin", + "?seq_db_align_end", + ] + # NOTE: row[col] doesn't work with '?' in find! Bad crashed happen if you try... + for row in block.find("_ma_target_ref_db_details.", cols): + json_obj = {} + target_entity_id = row[0] # make sure this stays at idx 0 in cols! + for idx, cq in enumerate(cols): + if cq.startswith('?'): + col = cq[1:] + if not row.has(idx): + json_obj[col] = None + continue + else: + col = cq + if col != "target_entity_id": + if col.find("seq_db_align") > -1: + json_obj[col] = gemmi.cif.as_int(row[idx]) + else: + json_obj[col] = gemmi.cif.as_string(row[idx]) + chain_entity[target_entity_id][ + "ma_target_ref_db_details" + ].append(json_obj) + + for row in block.find( + "_entity_poly.", + ["entity_id", "pdbx_strand_id", "pdbx_seq_one_letter_code"], + ): + chain_entity[row["entity_id"]]["olc"] = gemmi.cif.as_string( + row["pdbx_seq_one_letter_code"] + ).replace("\n", "") + + return chain_entity + +def _fetch_qa_data(block): + """Get 3 lists of QA scores and extract global scores.""" + # fetch main info + table = block.find("_ma_qa_metric.", ["id", "name", "mode", "type"]) + qa_dict = dict() # for easy access: keyed on "id" and rest as dict + for row in table: + d = {key: row.str(idx + 1) for idx, key in enumerate(["name", "mode", "type"])} + qa_dict[row.str(0)] = d + # fetch global scores + qa_global = [] + table = block.find("_ma_qa_metric_global.", ["metric_id", "metric_value"]) + for row in table: + metric_id = row.str(0) + metric_value = gemmi.cif.as_number(row.get(1)) + if metric_id in qa_dict: + assert qa_dict[metric_id]["mode"] == "global" + qa_dict[metric_id]["value"] = metric_value + qa_global.append(qa_dict[metric_id]) + # fetch local scores + qa_local = [d for d in qa_dict.values() if d["mode"] == "local"] + qa_local_pairwise = [d for d in qa_dict.values() if d["mode"] == "local-pairwise"] + return qa_global, qa_local, qa_local_pairwise +################################################################################ + +################################################################################ +# TEXT GETTERS +# -> each function turns gemmi-block into a text +# -> bits that could be reused elsewhere are given by helpers above +################################################################################ +def _get_title_text(block): + title = block.find_value("_struct.title") + if title: + title = gemmi.cif.as_string(title) + if title: + return title + else: + return "NO TITLE" + +def _get_overview_text(block): + abstract = block.find_value("_struct.pdbx_model_details") + if abstract: + abstract = gemmi.cif.as_string(abstract) + if abstract: + text = _make_paragraph(abstract) + else: + text = _make_paragraph("NO ABSTRACT") + # TODO: "TOFILL" below to be filled by MA using info from model set + text += _make_paragraph('This model is part of the dataset "TOFILL"') + return text + +def _get_entity_text(block): + # NOTE: reuse (updated!) code from ParseCIF + chain_entity = _get_chain_entity(block) + # do it + item_strings = [] + for ent in chain_entity: + item_title = f"{chain_entity[ent]['pdbx_description']} " \ + f"(chains: {', '.join(chain_entity[ent]['asym_ids'])})" + db_links = [item_title] + for i, ref in enumerate(chain_entity[ent]["ma_target_ref_db_details"]): + if ref["db_name"] == "UNP": + link_text = ref['db_accession'] + link_url = f"https://www.uniprot.org/uniprot/{ref['db_accession']}" + db_link = f"UniProt: {_make_url(link_text, link_url)}" + elif ref["db_name"] == "OrthoDB": + link_text = ref['db_accession'] + link_url = f"https://www.orthodb.org/?query={ref['db_accession']}" + db_link = f"OrthoDB: {_make_url(link_text, link_url)}" + elif ref["db_name"] == "Other" and ref["db_name_other_details"]: + db_link = f"{ref['db_name_other_details']}: {ref['db_accession']}" + else: + db_link = f"{ref['db_name']}: {ref['db_accession']}" + if ref['seq_db_align_begin'] and ref['seq_db_align_end']: + db_link += f" {ref['seq_db_align_begin']}-{ref['seq_db_align_end']}" + if ref['organism_scientific']: + db_link += f"; {ref['organism_scientific']}" + db_links.append(db_link) + item_strings.append(_make_multiline_text(db_links)) + # and into a paragraph... + if item_strings: + list_top = f"The following molecular entities are in the model:" + return _make_paragraph(_make_list(list_top, item_strings)) + else: + return "" + +def _get_sw_text(block): + # get author names for each citation + tmp = dict() + for row in block.find("_citation_author.", ["citation_id", "name"]): + cid = row.str(0) + name = row.str(1) + if cid not in tmp: + tmp[cid] = {"name": name.split()[0].split(",")[0], "etal": ""} + else: + tmp[cid]["etal"] = " et al." + cit_names = {cid: (d["name"] + d["etal"]) for cid, d in tmp.items()} + # add year if available + table = block.find("_citation.", ["id", "?year"]) + if table.has_column(1): + for row in table: + cid = row.str(0) + year = row.str(1) + if cid in cit_names and year: + cit_names[cid] += " " + year + # add URL if available + cit_urls = {} + table = block.find("_citation.", ["id", "?pdbx_database_id_DOI", "?pdbx_database_id_PubMed"]) + formatters = ["https://doi.org/%s", + "https://www.ncbi.nlm.nih.gov/pubmed/%s"] + for row in table: + cid = row.str(0) + # add whichever URL we find first + for i in range(1, table.width()): + if row.has(i) and row.str(i): + cit_urls[cid] = formatters[i - 1] % row.str(i) + break + # now map this to software + item_strings = [] + table = block.find("_software.", ["name", "?location", "?version", "?citation_id"]) + for row in table: + sw_name = row.str(0) + if row.has(1) and row.str(1): + item = _make_url(sw_name, row.str(1)) + else: + item = sw_name + if row.has(2) and row.str(2): + item += f" ({row.str(2)})" + if row.has(3) and row.str(3) in cit_names: + cid = row.str(3) + if cid in cit_urls: + item += f" ({_make_url(cit_names[cid], cit_urls[cid])})" + else: + item += f" ({cit_names[cid]})" + item_strings.append(item) + # and into a paragraph... + if item_strings: + list_top = f"The following software was used:" + return _make_paragraph(_make_list(list_top, item_strings)) + else: + return "" + +def _get_ref_db_text(block): + # look for DBs with version or release date + item_strings = [] + table = block.find("_ma_data_ref_db.", ["name", "?version", "?release_date"]) + for row in table: + item = f"{row.str(0)}" + # add whichever version we find first + for i in range(1, 3): + if row.has(i) and row.str(i): + item += f" ({row.str(i)})" + break + item_strings.append(item) + # and into a paragraph... + if item_strings: + list_top = f"The following reference databases were used:" + return _make_paragraph(_make_list(list_top, item_strings)) + else: + return "" + +def _get_tpl_text(block): + # collect info per tpl-id + tpl_dict = {} # keyed on template_id + # fetch main info + cols = ["template_id", "target_asym_id", "template_auth_asym_id", + "?template_label_asym_id"] + for row in block.find("_ma_template_details.", cols): + tid = row.str(0) + tpl_dict[tid] = { + "trg_asym_id": row.str(1), + "tpl_auth_asym_id": row.str(2) + } + if row.has(3) and row.str(3): + tpl_dict[tid]["tpl_label_asym_id"] = row.str(3) + # add ref DBs + cols = ["template_id", "db_accession_code", "db_name", + "?db_name_other_details"] + for row in block.find("_ma_template_ref_db_details.", cols): + tid = row.str(0) + if tid in tpl_dict: + tpl_dict[tid]["db_acc"] = row.str(1) + if row.str(2) == "Other" and row.has(3) and row.str(3): + tpl_dict[tid]["db_name"] = row.str(3) + else: + tpl_dict[tid]["db_name"] = row.str(2) + # add info for small molecules + cols = ["template_id", "?comp_id", "?details"] + for row in block.find("_ma_template_non_poly.", cols): + tid = row.str(0) + if tid in tpl_dict: + if row.has(1) and row.str(1): + tpl_dict[tid]["non_poly_comp_id"] = row.str(1) + if row.has(2) and row.str(2): + tpl_dict[tid]["non_poly_details"] = row.str(2) + # aggregate per template for diplaying + tpl_td = dict() + for tpl in tpl_dict.values(): + did = f"{tpl['db_name']}-{tpl['db_acc']}" + if did not in tpl_td: + if tpl['db_name'] == "PDB": + link_url = f"http://dx.doi.org/10.2210/pdb{tpl['db_acc']}/pdb" + elif tpl['db_name'] == "PubChem": + link_url = f"https://pubchem.ncbi.nlm.nih.gov/compound/{tpl['db_acc']}" + else: + link_url = None + print(f"URLs for {tpl['db_name']} NOT SUPPORTED YET") + if link_url: + tpl_text = f"{tpl['db_name']}: {_make_url(tpl['db_acc'], link_url)}" + else: + tpl_text = f"{tpl['db_name']}: {tpl['db_acc']}" + tpl_td[did] = { + "tpl_text": tpl_text, + "tpl_chains_label": [], + "tpl_chains_auth": [], + "tpl_chains_all_label": True, + "tpl_non_poly_ids": [] + } + # collect chain names + if "tpl_label_asym_id" in tpl: + # if here it is guaranteed to be non-empty + tpl_td[did]["tpl_chains_label"].append(tpl["tpl_label_asym_id"]) + else: + # if any missing, we set all to False and fall back to auth + tpl_td[did]["tpl_chains_all_label"] = False + if tpl["tpl_auth_asym_id"]: + # only add non empty ones + tpl_td[did]["tpl_chains_auth"].append(tpl["tpl_auth_asym_id"]) + # collect info on non poly if available (prefer short comp. ID) + if "non_poly_comp_id" in tpl: + tpl_td[did]["tpl_non_poly_ids"].append(tpl["non_poly_comp_id"]) + elif "non_poly_details" in tpl: + tpl_td[did]["tpl_non_poly_ids"].append(tpl["non_poly_details"]) + # turn into text + item_strings = [] + for tpl in tpl_td.values(): + item = tpl["tpl_text"] + if tpl["tpl_chains_all_label"] and tpl["tpl_chains_label"]: + chain_ids = sorted(set(tpl['tpl_chains_label'])) + item += f"; chains (label_asym_id): {', '.join(chain_ids)}" + elif tpl["tpl_chains_auth"]: + chain_ids = sorted(set(tpl['tpl_chains_auth'])) + item += f"; chains (auth_asym_id): {', '.join(chain_ids)}" + if tpl["tpl_non_poly_ids"]: + np_ids = sorted(set(tpl['tpl_non_poly_ids'])) + item += f"; non-polymers: {', '.join(np_ids)}" + item_strings.append(item) + # and into a paragraph... + if item_strings: + list_top = f"The following templates were used:" + return _make_paragraph(_make_list(list_top, item_strings)) + else: + return "" + +def _get_protocol_steps_text(block): + # do it + item_strings = [] + table = block.find("_ma_protocol_step.", ["step_id", "method_type", "?details"]) + for row in table: + item = f"Step {row.str(0)} - {row.str(1)}" + if row.has(2) and row.str(2): + item += f" : {row.str(2)}" + item_strings.append(item) + # and into a paragraph... + if item_strings: + return _make_paragraph(_make_multiline_text(item_strings)) + else: + return "" + +def _get_qa_acc_text(block): + # get QA part (can reuse if already used elsewhere) + qa_global, qa_local, qa_local_pairwise = _fetch_qa_data(block) + # parse accompanying data + file_contents = block.find_values("_ma_entry_associated_files.file_content") + has_single_zip_file = len(file_contents) == 1 and \ + file_contents.str(0) == "archive with multiple files" + if has_single_zip_file: + # override with data from other block + file_contents = block.find_values("_ma_associated_archive_file_details.file_content") + has_loc_pw_in_acc = any(True for v in file_contents \ + if gemmi.cif.as_string(v) == "local pairwise QA scores") + # put together text + text = "" + # text for QA + item = "" + if len(qa_global) > 1: + score_strings = [f"{v['name']} of {v['value']}" for v in qa_global] + item = f"The model has the following global model confidence scores:" \ + f" {', '.join(score_strings)}." + elif len(qa_global) == 1: + item = f"The model has a global model confidence score " \ + f"({qa_global[0]['name']}) of {qa_global[0]['value']}." + if item: + text += _make_paragraph(item) + # lots of options for local QA string + item = "" + qa_local_names = ", ".join([v["name"] for v in qa_local]) + qa_loc_pw_names = ", ".join([v["name"] for v in qa_local_pairwise]) + if qa_local_names and qa_loc_pw_names and has_loc_pw_in_acc: + item = f"Local per-residue model confidence scores ({qa_local_names}) " \ + f"are available in the model mmCIF file " \ + f"and local per-residue-pair scores ({qa_loc_pw_names}) " \ + f"in the accompanying data download." + elif qa_local_names and qa_loc_pw_names and not has_loc_pw_in_acc: + item = f"Local per-residue model confidence scores ({qa_local_names}) " \ + f"and local per-residue-pair scores ({qa_loc_pw_names}) " \ + f"are available in the model mmCIF file." + elif qa_local_names and not qa_loc_pw_names: + item = f"Local per-residue model confidence scores ({qa_local_names}) " \ + f"are available in the model mmCIF file." + elif not qa_local_names and qa_loc_pw_names and has_loc_pw_in_acc: + item = f"Local per-residue-pair model confidence scores ({qa_loc_pw_names}) " \ + f"are available in the accompanying data download." + elif not qa_local_names and qa_loc_pw_names and not has_loc_pw_in_acc: + item = f"Local per-residue-pair model confidence scores ({qa_loc_pw_names}) " \ + f"are available in the model mmCIF file." + if item: + text += _make_paragraph(item) + # list files in accompanying data (if any) + if has_single_zip_file: + table = block.find("_ma_associated_archive_file_details.", + ["file_path", "?file_content", "?description"]) + else: + # NOTE: aimed to work legacy-style for Baker-models but should be obsoleted + # -> can replace below with "table = None" in future + table = block.find("_ma_entry_associated_files.", + ["file_url", "?file_content", "?details"]) + if table: + list_top = "Files in accompanying data:" + list_items = [] + for row in table: + item = f"{row.str(0)}" + if row.has(1) and row.str(1): + item += f" ({row.str(1)})" + if row.has(2) and row.str(2): + item += f": {row.str(2)}" + list_items.append(item) + text += _make_paragraph(_make_list(list_top, list_items)) + # conclude with standard pointer to ModelCIF file + model_cif_link = _make_url( + "ModelCIF format", + "https://mmcif.wwpdb.org/dictionaries/mmcif_ma.dic/Index/" + ) + text += _make_paragraph( + f"Full details are available in {model_cif_link}" \ + f"in the model mmCIF file." + ) + return text +################################################################################ + +# full parsing of file +def _process_file(file_path): + print(f"ModelCIF->MA for {file_path}") + doc = gemmi.cif.read(file_path) + block = doc.sole_block() + print('-'*80) + print(f"TITLE: {_get_title_text(block)}") + print('-'*80) + print(f"OVERVIEW:\n{'-'*80}") + print(_get_overview_text(block)) + print('-'*80) + print(f"MATERIAL:\n{'-'*80}") + material_text = _get_entity_text(block) \ + + _get_sw_text(block) \ + + _get_ref_db_text(block) \ + + _get_tpl_text(block) + print(material_text) + print('-'*80) + print(f"PROCEDURE:\n{'-'*80}") + procedure_text = _get_protocol_steps_text(block) \ + + _get_qa_acc_text(block) + print(procedure_text) + print('-'*80) + +def _main(): + # get file to process + if len(sys.argv) == 2: + file_path = sys.argv[1] + _process_file(file_path) + else: + print("USAGE: python test_modelCIF_MA.py [CIF-FILE]") + +if __name__ == "__main__": + _main() diff --git a/projects/CoFFE-sponge-proteins/translate2modelcif.py b/projects/CoFFE-sponge-proteins/translate2modelcif.py new file mode 100644 index 0000000..12ad4cf --- /dev/null +++ b/projects/CoFFE-sponge-proteins/translate2modelcif.py @@ -0,0 +1,1017 @@ +#! /usr/local/bin/ost +"""Translate models from Niko from PDB + extra data into ModelCIF.""" + +# EXAMPLES for running: +""" +GT test setup: +ost scripts/translate2modelcif.py "./PKG Cut" "./PKG/config.json" \ + "./PKG/model_archive_metadata.csv" \ + "./PKG/Spongilla_lacustris_translated_proteome_fixed.fasta" \ + --out_dir="./modelcif" +Setup on work box for full translation: +ost scripts/translate2modelcif.py "./PKG-all" "./PKG/config.json" \ + "./PKG/model_archive_metadata.csv" \ + "./PKG/Spongilla_lacustris_translated_proteome_fixed.fasta" \ + --out_dir="./modelcif" --compress +""" + +import argparse +import datetime +import os +import sys +import gzip, shutil, zipfile + +from timeit import default_timer as timer +import numpy as np +import requests +import ujson as json +import pandas as pd + +import ihm +import ihm.citations +import modelcif +import modelcif.associated +import modelcif.dumper +import modelcif.model +import modelcif.protocol +import modelcif.reference + +from ost import io + +def _parse_args(): + """Parse command line arguments.""" + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description=__doc__, + ) + + parser.add_argument( + "model_dir", + type=str, + metavar="<MODEL DIR>", + help="Directory with model(s) to be translated.", + ) + parser.add_argument( + "config_file", + type=str, + metavar="<CONFIG FILE>", + help="Path to JSON file with ColabFold config.", + ) + parser.add_argument( + "metadata_file", + type=str, + metavar="<METADATA FILE>", + help="Path to CSV file with metadata.", + ) + parser.add_argument( + "fasta_file", + type=str, + metavar="<FASTA FILE>", + help="Path to FASTA file with sequences.", + ) + parser.add_argument( + "--out_dir", + type=str, + metavar="<OUTPUT DIR>", + default="", + help="Path to separate path to store results " \ + "(model_dir used, if none given).", + ) + parser.add_argument( + "--compress", + default=False, + action="store_true", + help="Compress ModelCIF file with gzip " \ + "(note that QA file is zipped either way).", + ) + + opts = parser.parse_args() + + # check that model dir exists + if opts.model_dir.endswith("/"): + opts.model_dir = opts.model_dir[:-1] + if not os.path.exists(opts.model_dir): + _abort_msg(f"Model directory '{opts.model_dir}' does not exist.") + if not os.path.isdir(opts.model_dir): + _abort_msg(f"Path '{opts.model_dir}' does not point to a directory.") + # check config_file + if not os.path.exists(opts.config_file): + _abort_msg(f"Config file '{opts.config_file}' does not exist.") + if not os.path.isfile(opts.config_file): + _abort_msg(f"Path '{opts.config_file}' does not point to a file.") + # check metadata_file + if not os.path.exists(opts.metadata_file): + _abort_msg(f"Metadata file '{opts.metadata_file}' does not exist.") + if not os.path.isfile(opts.metadata_file): + _abort_msg(f"Path '{opts.metadata_file}' does not point to a file.") + # check fasta_file + if not os.path.exists(opts.fasta_file): + _abort_msg(f"FASTA file '{opts.fasta_file}' does not exist.") + if not os.path.isfile(opts.fasta_file): + _abort_msg(f"Path '{opts.fasta_file}' does not point to a file.") + # check out_dir + if not opts.out_dir: + opts.out_dir = opts.model_dir + else: + if not os.path.exists(opts.out_dir): + _abort_msg(f"Output directory '{opts.out_dir}' does not exist.") + if not os.path.isdir(opts.out_dir): + _abort_msg(f"Path '{opts.out_dir}' does not point to a directory.") + + return opts + + +# pylint: disable=too-few-public-methods +class _GlobalPTM(modelcif.qa_metric.Global, modelcif.qa_metric.PTM): + """Predicted accuracy according to the TM-score score in [0,1]""" + + name = "pTM" + software = None + + +class _GlobalPLDDT(modelcif.qa_metric.Global, modelcif.qa_metric.PLDDT): + """Predicted accuracy according to the CA-only lDDT in [0,100]""" + + name = "pLDDT" + software = None + + +class _LocalPLDDT(modelcif.qa_metric.Local, modelcif.qa_metric.PLDDT): + """Predicted accuracy according to the CA-only lDDT in [0,100]""" + + name = "pLDDT" + software = None + + +class _PAE(modelcif.qa_metric.MetricType): + """Predicted aligned error (in Angstroms)""" + + type = "PAE" + other_details = None + + +class _LocalPairwisePAE(modelcif.qa_metric.LocalPairwise, _PAE): + """Predicted aligned error (in Angstroms)""" + + name = "PAE" + software = None + + +# pylint: enable=too-few-public-methods + + +class _OST2ModelCIF(modelcif.model.AbInitioModel): + """Map OST entity elements to ihm.model""" + + def __init__(self, *args, **kwargs): + """Initialise a model""" + self.ost_entity = kwargs.pop("ost_entity") + self.asym = kwargs.pop("asym") + + super().__init__(*args, **kwargs) + + def get_atoms(self): + # ToDo [internal]: Take B-factor out since its not a B-factor? + for atm in self.ost_entity.atoms: + yield modelcif.model.Atom( + asym_unit=self.asym[atm.chain.name], + seq_id=atm.residue.number.num, + atom_id=atm.name, + type_symbol=atm.element, + x=atm.pos[0], + y=atm.pos[1], + z=atm.pos[2], + het=atm.is_hetatom, + biso=atm.b_factor, + occupancy=atm.occupancy, + ) + + def add_scores(self, scores_json, entry_id, mdl_name): + """Add QA metrics from AF2 scores.""" + # global scores + self.qa_metrics.extend( + ( + _GlobalPLDDT(np.mean(scores_json["plddt"])), + _GlobalPTM(scores_json["ptm"]), + ) + ) + + # local scores + lpae = [] + i = 0 + for chn_i in self.ost_entity.chains: + for res_i in chn_i.residues: + # local pLDDT + self.qa_metrics.append( + _LocalPLDDT( + self.asym[chn_i.name].residue(res_i.number.num), + scores_json["plddt"][i], + ) + ) + + # pairwise alignment error + j = 0 + # We do a 2nd iteration over the OST entity above doing index + # magic because it keeps the code cleaner and is only around + # 0.3s slower than iterating the array directly. Majority of + # time goes into writing files, anyway. + for chn_j in self.ost_entity.chains: + for res_j in chn_j.residues: + lpae.append( + _LocalPairwisePAE( + self.asym[chn_i.name].residue(res_i.number.num), + self.asym[chn_j.name].residue(res_j.number.num), + scores_json["pae"][i][j], + ) + ) + j += 1 + + i += 1 + + self.qa_metrics.extend(lpae) + + ac_file = f"{mdl_name}_local_pairwise_qa.cif" + qa_file = modelcif.associated.LocalPairwiseQAScoresFile( + ac_file, + categories=["_ma_qa_metric_local_pairwise"], + copy_categories=["_ma_qa_metric"], + entry_id=entry_id, + entry_details="This file is an associated file consisting " + + "of local pairwise QA metrics. This is a partial mmCIF " + + "file and can be validated by merging with the main " + + "mmCIF file containing the model coordinates and other " + + "associated data.", + details="Predicted aligned error", + ) + + return modelcif.associated.Repository( + "", + [ + modelcif.associated.ZipFile(f"{mdl_name}.zip", + files=[qa_file]) + ], + ) + # NOTE: by convention MA expects zip file with same name as model-cif + + +def _abort_msg(msg, exit_code=1): + """Write error message and exit with exit_code.""" + print(f"{msg}\nAborting.", file=sys.stderr) + sys.exit(exit_code) + + +def _check_file(file_path): + """Make sure a file exists and is actually a file.""" + if not os.path.exists(file_path): + _abort_msg(f"File not found: '{file_path}'.") + if not os.path.isfile(file_path): + _abort_msg(f"File path does not point to file: '{file_path}'.") + + +def _check_model_extra_files_present(model_dir, pdb_file): + """Check that all files needed to process this model are present.""" + filestem = os.path.splitext(pdb_file)[0] + prfx = os.path.join(model_dir, filestem) + + scrs = f"{prfx}_scores.json" + _check_file(scrs) + + return prfx, filestem + + +def _get_audit_authors(): + """Return the list of authors that produced this model.""" + return ( + "Papadopoulos, Nikolaos", + "Ruperti, Fabian", + "Musser, Jacob", + "Mirdita, Milot", + "Steinegger, Martin", + "Arendt, Detlev" + ) + + +def _get_metadata(metadata_file): + """Read csv file with metedata and prepare for next steps.""" + metadata = pd.read_csv(metadata_file) + # make sure titles are unique + assert len(set(metadata.title)) == metadata.shape[0] + # expected title format c.._.._.. + return metadata.drop(columns=metadata.columns[0]) \ + .set_index("title") + + +def _get_sequences(fasta_file, metadata): + """Read fasta file with all sequences and check/compare with metadata.""" + seqs = io.LoadSequenceList(fasta_file) + # expected format of sequence names: [TITLE]_... + seq_dict = {'_'.join(s.name.split('_')[:3]): s.string for s in seqs} + only_in_metadata = set(metadata.index) - set(seq_dict) + if only_in_metadata: + print("PROTEINS ONLY in metadata:", sorted(only_in_metadata)) + only_in_seqs = set(seq_dict) - set(metadata.index) + if only_in_seqs: + print("PROTEINS ONLY in fasta_file:", sorted(only_in_seqs)) + return seq_dict + + +def _parse_colabfold_config(cnfg_file): + """Read config.json and fetch relevant data from it.""" + # NOTE: following code from https://github.com/sokrypton/ColabFold/blob/main/colabfold/batch.py to understand config + + # fetch and drop fields which are not relevant for model building + with open(cnfg_file, encoding="utf8") as jfh: + cf_config = json.load(jfh) + if "num_queries" in cf_config: + del cf_config["num_queries"] + # fetch relevant data + # -> MSA mode + if cf_config["msa_mode"] == "MMseqs2 (UniRef+Environmental)": + seq_dbs = ["UniRef", "Environmental"] + use_mmseqs = True + use_msa = True + elif cf_config["msa_mode"] == "MMseqs2 (UniRef only)": + seq_dbs = ["UniRef"] + use_mmseqs = True + use_msa = True + elif cf_config["msa_mode"] == "single_sequence": + seq_dbs = [] + use_mmseqs = False + use_msa = False + elif cf_config["msa_mode"] == "custom": + print("WARNING: Custom MSA mode used. Not clear from config what to do here!") + seq_dbs = [] + use_mmseqs = False + use_msa = True + else: + raise ValueError(f"Unknown msa_mode {cf_config['msa_mode']}") + # -> model type + if cf_config["model_type"] == "AlphaFold2-multimer-v1": + # AF-Multimer as introduced in AlphaFold v2.1.0 + use_multimer = True + multimer_version = 1 + elif cf_config["model_type"] == "AlphaFold2-multimer-v2": + # AF-Multimer as introduced in AlphaFold v2.2.0 + use_multimer = True + multimer_version = 2 + elif cf_config["model_type"] == "AlphaFold2-ptm": + use_multimer = False + multimer_version = None + else: + raise ValueError(f"Unknown model_type {cf_config['model_type']}") + + # write description + description = f"Model generated using ColabFold v{cf_config['version']}" + if use_multimer: + description += f" with AlphaFold-Multimer (v{multimer_version})" + else: + description += f" with AlphaFold" + description += f" producing {cf_config['num_models']} models" \ + f" with {cf_config['num_recycles']} recycles each" + if cf_config["use_amber"]: + description += ", with AMBER relaxation" + else: + description += ", without model relaxation" + if cf_config["use_templates"]: + print("WARNING: ColabFold may use PDB70 or custom templates. " \ + "Not clear from config!") + description += ", using templates" + else: + description += ", without templates" + if cf_config["rank_by"] == "plddt": + description += ", ranked by pLDDT" + elif cf_config["rank_by"] == "ptmscore": + description += ", ranked by pTM" + elif cf_config["rank_by"] == "multimer": + description += ", ranked by ipTM*0.8+pTM*0.2" + else: + raise ValueError(f"Unknown rank_by {cf_config['rank_by']}") + if use_msa: + description += ", starting from" + if use_mmseqs: + msa_type = "MSA" + else: + msa_type = "custom MSA" + if use_multimer: + if cf_config["pair_mode"] == "unpaired+paired": + description += f" paired and unpaired {msa_type}s" + elif cf_config["pair_mode"] == "paired": + description += f" paired {msa_type}s" + elif cf_config["pair_mode"] == "unpaired": + description += f" unpaired {msa_type}s" + else: + raise ValueError(f"Unknown pair_mode {cf_config['pair_mode']}") + else: + description += f" an {msa_type}" + if use_mmseqs: + description += f" from MMseqs2 ({'+'.join(seq_dbs)})" + else: + description += " without an MSA" + description += "." + + return { + "config": cf_config, + "seq_dbs": seq_dbs, + "use_mmseqs": use_mmseqs, + "use_msa": use_msa, + "use_multimer": use_multimer, + "multimer_version": multimer_version, + "description": description + } + + +def _get_protocol_steps_and_software(config_data): + """Create the list of protocol steps with software and parameters used.""" + protocol = [] + + # modelling step + step = { + "method_type": "modeling", + "name": None, + "details": config_data["description"], + } + # get input data + # Must refer to data already in the JSON, so we try keywords + step["input"] = "target_sequences" + # get output data + # Must refer to existing data, so we try keywords + step["output"] = "model" + # get software + step["software"] = [ + { + "name": "ColabFold", + "classification": "model building", + "description": "Structure prediction", + "citation": ihm.citations.colabfold, + "location": "https://github.com/sokrypton/ColabFold", + "type": "package", + "version": "1.2.0", + }] + if config_data["use_mmseqs"]: + step["software"].append({ + "name": "MMseqs2", + "classification": "data collection", + "description": "Many-against-Many sequence searching", + "citation": ihm.Citation( + pmid="30615063", + title="MMseqs2 desktop and local web server app for fast, " + + "interactive sequence searches.", + journal="Bioinformatics", + volume=35, + page_range=(2856, 2858), + year=2019, + authors=[ + "Mirdita, M.", + "Steinegger, M.", + "Soeding, J.", + ], + doi="10.1093/bioinformatics/bty1057", + ), + "location": "https://github.com/soedinglab/mmseqs2", + "type": "package", + "version": None, + }) + if config_data["use_multimer"]: + step["software"].append({ + "name": "AlphaFold-Multimer", + "classification": "model building", + "description": "Structure prediction", + "citation": ihm.Citation( + pmid=None, + title="Protein complex prediction with " + + "AlphaFold-Multimer.", + journal="bioRxiv", + volume=None, + page_range=None, + year=2021, + authors=[ + "Evans, R.", + "O'Neill, M.", + "Pritzel, A.", + "Antropova, N.", + "Senior, A.", + "Green, T.", + "Zidek, A.", + "Bates, R.", + "Blackwell, S.", + "Yim, J.", + "Ronneberger, O.", + "Bodenstein, S.", + "Zielinski, M.", + "Bridgland, A.", + "Potapenko, A.", + "Cowie, A.", + "Tunyasuvunakool, K.", + "Jain, R.", + "Clancy, E.", + "Kohli, P.", + "Jumper, J.", + "Hassabis, D.", + ], + doi="10.1101/2021.10.04.463034", + ), + "location": "https://github.com/deepmind/alphafold", + "type": "package", + "version": None, + }) + else: + step["software"].append({ + "name": "AlphaFold", + "classification": "model building", + "description": "Structure prediction", + "citation": ihm.citations.alphafold2, + "location": "https://github.com/deepmind/alphafold", + "type": "package", + "version": None, + }) + step["software_parameters"] = config_data["config"] + protocol.append(step) + + return protocol + + +def _get_title(mdl_title): + """Get a title for this modelling experiment.""" + return f"CoFFE model and functional annotation for {mdl_title}" + + +def _get_model_details(mdl_desc, mdl_annos): + """Get the model description.""" + return f"{mdl_desc}\n\n{mdl_annos}" + + +def _get_model_group_name(): + """Get a name for a model group.""" + + return None + + +def _get_sequence(chn): + """Get the sequence out of an OST chain.""" + # initialise + lst_rn = chn.residues[0].number.num + idx = 1 + sqe = chn.residues[0].one_letter_code + if lst_rn != 1: + sqe = "-" + idx = 0 + + for res in chn.residues[idx:]: + lst_rn += 1 + while lst_rn != res.number.num: + sqe += "-" + lst_rn += 1 + sqe += res.one_letter_code + + return sqe + + +def _check_sequence(up_ac, sequence): + """Verify sequence to only contain standard olc.""" + for res in sequence: + if res not in "ACDEFGHIKLMNPQRSTVWY": + raise RuntimeError( + "Non-standard aa found in UniProtKB sequence " + + f"for entry '{up_ac}': {res}" + ) + + +def _fetch_upkb_entry(up_ac): + """Fetch data for an UniProtKB entry.""" + # This is a simple parser for UniProtKB txt format, instead of breaking it up + # into multiple functions, we just allow many many branches & statements, + # here. + # pylint: disable=too-many-branches,too-many-statements + data = {} + data["up_organism"] = "" + data["up_sequence"] = "" + data["up_ac"] = up_ac + rspns = requests.get(f"https://www.uniprot.org/uniprot/{up_ac}.txt") + for line in rspns.iter_lines(decode_unicode=True): + if line.startswith("ID "): + sline = line.split() + if len(sline) != 5: + _abort_msg(f"Unusual UniProtKB ID line found:\n'{line}'") + data["up_id"] = sline[1] + elif line.startswith("OX NCBI_TaxID="): + # Following strictly the UniProtKB format: 'OX NCBI_TaxID=<ID>;' + data["up_ncbi_taxid"] = line[len("OX NCBI_TaxID=") : -1] + data["up_ncbi_taxid"] = data["up_ncbi_taxid"].split("{")[0].strip() + elif line.startswith("OS "): + if line[-1] == ".": + data["up_organism"] += line[len("OS ") : -1] + else: + data["up_organism"] += line[len("OS ") : -1] + " " + elif line.startswith("SQ "): + sline = line.split() + if len(sline) != 8: + _abort_msg(f"Unusual UniProtKB SQ line found:\n'{line}'") + data["up_seqlen"] = int(sline[2]) + data["up_crc64"] = sline[6] + elif line.startswith(" "): + sline = line.split() + if len(sline) > 6: + _abort_msg( + "Unusual UniProtKB sequence data line " + + f"found:\n'{line}'" + ) + data["up_sequence"] += "".join(sline) + elif line.startswith("RP "): + if "ISOFORM" in line.upper(): + RuntimeError( + f"First ISOFORM found for '{up_ac}', needs " + "handling." + ) + elif line.startswith("DT "): + # 2012-10-03 + dt_flds = line[len("DT ") :].split(", ") + if dt_flds[1].upper().startswith("SEQUENCE VERSION "): + data["up_last_mod"] = datetime.datetime.strptime( + dt_flds[0], "%d-%b-%Y" + ) + elif line.startswith("GN Name="): + data["up_gn"] = line[len("GN Name=") :].split(";")[0] + data["up_gn"] = data["up_gn"].split("{")[0].strip() + + # we have not seen isoforms in the data set, yet, so we just set them to '.' + data["up_isoform"] = None + + if "up_gn" not in data: + _abort_msg(f"No gene name found for UniProtKB entry '{up_ac}'.") + if "up_last_mod" not in data: + _abort_msg(f"No sequence version found for UniProtKB entry '{up_ac}'.") + if "up_crc64" not in data: + _abort_msg(f"No CRC64 value found for UniProtKB entry '{up_ac}'.") + if len(data["up_sequence"]) == 0: + _abort_msg(f"No sequence found for UniProtKB entry '{up_ac}'.") + # check that sequence length and CRC64 is correct + if data["up_seqlen"] != len(data["up_sequence"]): + _abort_msg( + "Sequence length of SQ line and sequence data differ for " + + f"UniProtKB entry '{up_ac}': {data['up_seqlen']} != " + + f"{len(data['up_sequence'])}" + ) + _check_sequence(data["up_ac"], data["up_sequence"]) + + if "up_id" not in data: + _abort_msg(f"No ID found for UniProtKB entry '{up_ac}'.") + if "up_ncbi_taxid" not in data: + _abort_msg(f"No NCBI taxonomy ID found for UniProtKB entry '{up_ac}'.") + if len(data["up_organism"]) == 0: + _abort_msg(f"No organism species found for UniProtKB entry '{up_ac}'.") + + return data + + +def _get_upkb_for_sequence(sqe, up_ac): + """Get UniProtKB entry data for given sequence.""" + up_data = _fetch_upkb_entry(up_ac) + if sqe != up_data["up_sequence"]: + raise RuntimeError( + f"Sequences not equal from file: {sqe}, from UniProtKB: " + + f"{up_data['up_sequence']}" + ) + + return up_data + + +def _get_entities(pdb_file, mdl_title, seq_dict): + """Gather data for the mmCIF (target) entities.""" + + ost_ent = io.LoadPDB(pdb_file) + # sanity checks + if ost_ent.chain_count != 1: + raise RuntimeError( + f"Unexpected oligomer for {mdl_title}" + ) + chn = ost_ent.chains[0] + sqe = _get_sequence(chn) + if sqe != seq_dict[mdl_title]: + raise RuntimeError( + f"Sequence for {mdl_title} not as expected; from file: {sqe}" \ + f", from seq. list: {seq_dict[mdl_title]}" + ) + # fill entities + entities = [{ + "pdb_sequence": sqe, + "pdb_chain_id": chn.name, + "description": f"Spongilla lacustris {mdl_title} protein" + }] + + return entities, ost_ent + + +def _get_scores(data, prfx): + """Check that all files needed to process this model are present.""" + scrs_fle = f"{prfx}_scores.json" + with open(scrs_fle, encoding="utf8") as jfh: + scrs_json = json.load(jfh) + + # NOTE for reuse of data when iterating multiple models: this will overwrite + # scores in data but will not delete any scores if prev. models had more... + data.update(scrs_json) + + +def _get_modelcif_entities(target_ents, source, asym_units, system): + """Create ModelCIF entities and asymmetric units.""" + for cif_ent in target_ents: + mdlcif_ent = modelcif.Entity( + cif_ent["pdb_sequence"], + description=cif_ent["description"], + source=source + ) + asym_units[cif_ent["pdb_chain_id"]] = modelcif.AsymUnit( + mdlcif_ent + ) + system.target_entities.append(mdlcif_ent) + + +def _assemble_modelcif_software(soft_dict): + """Create a modelcif.Software instance from dictionary.""" + return modelcif.Software( + soft_dict["name"], + soft_dict["classification"], + soft_dict["description"], + soft_dict["location"], + soft_dict["type"], + soft_dict["version"], + citation=soft_dict["citation"] + ) + + +def _get_sequence_dbs(seq_dbs): + """Get ColabFold seq. DBs.""" + # NOTE: hard coded for ColabFold versions before 2022/07/13 + # -> afterwards UniRef30 updated to 2022_02 (and maybe more changes) + db_dict = { + "UniRef": modelcif.ReferenceDatabase( + "UniRef30", + "http://wwwuser.gwdg.de/~compbiol/colabfold/uniref30_2103.tar.gz", + version="2021_03" + ), + "Environmental": modelcif.ReferenceDatabase( + "ColabFold DB", + "http://wwwuser.gwdg.de/~compbiol/colabfold/colabfold_envdb_202108.tar.gz", + version="2021_08" + ) + } + return [db_dict[seq_db] for seq_db in seq_dbs] + + +def _get_modelcif_protocol(protocol_steps, target_entities, model, ref_dbs): + """Create the protocol for the ModelCIF file.""" + protocol = modelcif.protocol.Protocol() + for js_step in protocol_steps: + sftwre = None + if js_step["software"]: + if len(js_step["software"]) == 1: + sftwre = _assemble_modelcif_software(js_step["software"][0]) + else: + sftwre = [] + for sft in js_step["software"]: + sftwre.append(_assemble_modelcif_software(sft)) + sftwre = modelcif.SoftwareGroup(elements=sftwre) + if js_step["software_parameters"]: + params = [] + for k, v in js_step["software_parameters"].items(): + params.append( + modelcif.SoftwareParameter(k, v) + ) + if isinstance(sftwre, modelcif.SoftwareGroup): + sftwre.parameters = params + else: + sftwre = modelcif.SoftwareGroup( + elements=(sftwre,), parameters=params + ) + + if js_step["input"] == "target_sequences": + input_data = modelcif.data.DataGroup(target_entities) + input_data.extend(ref_dbs) + elif js_step["input"] == "model": + input_data = model + else: + raise RuntimeError(f"Unknown protocol input: '{js_step['input']}'") + if js_step["output"] == "model": + output_data = model + else: + raise RuntimeError( + f"Unknown protocol output: '{js_step['output']}'" + ) + protocol.steps.append( + modelcif.protocol.Step( + input_data=input_data, + output_data=output_data, + name=js_step["name"], + details=js_step["details"], + software=sftwre, + ) + ) + protocol.steps[-1].method_type = js_step["method_type"] + + return protocol + + +def _compress_cif_file(cif_file): + """Compress cif file and delete original.""" + with open(cif_file, 'rb') as f_in: + with gzip.open(cif_file + '.gz', 'wb') as f_out: + shutil.copyfileobj(f_in, f_out) + os.remove(cif_file) + + +def _package_associated_files(mdl_name): + """Compress associated files into single zip file and delete original.""" + # file names must match ones from add_scores + zip_path = f"{mdl_name}.zip" + files = [f"{mdl_name}_local_pairwise_qa.cif"] + # zip settings tested for good speed vs compression + with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_BZIP2) as myzip: + for file in files: + myzip.write(file) + os.remove(file) + + +def _store_as_modelcif(data_json, ost_ent, out_dir, mdl_name, compress): + """Mix all the data into a ModelCIF file.""" + print(" generating ModelCIF objects...", end="") + pstart = timer() + # create system to gather all the data + system = modelcif.System( + title=data_json["title"], + id=data_json["mdl_title"].upper(), + model_details=data_json["model_details"], + ) + # create target entities, references, source, asymmetric units & assembly + # for source we assume all chains come from the same taxon + source = ihm.source.Natural( + ncbi_taxonomy_id=data_json["tax_info"]["up_ncbi_taxid"], + scientific_name=data_json["tax_info"]["up_organism"], + ) + + # create an asymmetric unit and an entity per target sequence + asym_units = {} + _get_modelcif_entities( + data_json["target_entities"], source, asym_units, system + ) + + assembly = modelcif.Assembly( + asym_units.values() + ) + + # audit_authors + system.authors.extend(data_json["audit_authors"]) + + # set up the model to produce coordinates + model = _OST2ModelCIF( + assembly=assembly, + asym=asym_units, + ost_entity=ost_ent, + name=f"Model {data_json['mdl_num']} (top ranked model)", + ) + print(f" ({timer()-pstart:.2f}s)") + print(" processing QA scores...", end="", flush=True) + pstart = timer() + system.repositories.append( + model.add_scores(data_json, system.id, mdl_name) + ) + print(f" ({timer()-pstart:.2f}s)") + + model_group = modelcif.model.ModelGroup( + [model], name=data_json["model_group_name"] + ) + system.model_groups.append(model_group) + + ref_dbs = _get_sequence_dbs(data_json["config_data"]["seq_dbs"]) + protocol = _get_modelcif_protocol( + data_json["protocol"], system.target_entities, model, ref_dbs + ) + system.protocols.append(protocol) + + # write modelcif System to file + print(" write to disk...", end="", flush=True) + pstart = timer() + # NOTE: this will dump PAE on path provided in add_scores + # -> hence we cheat by changing path and back while being exception-safe... + oldpwd = os.getcwd() + os.chdir(out_dir) + try: + with open(f"{mdl_name}.cif", "w", encoding="ascii") as mmcif_fh: + modelcif.dumper.write(mmcif_fh, [system]) + _package_associated_files(mdl_name) + if compress: + _compress_cif_file(f"{mdl_name}.cif") + finally: + os.chdir(oldpwd) + + print(f" ({timer()-pstart:.2f}s)") + + +def _create_json(config_data): + """Create a dictionary (mimicking JSON) that contains data which is the same + for all models.""" + data = {} + + data["audit_authors"] = _get_audit_authors() + data["protocol"] = _get_protocol_steps_and_software(config_data) + data["config_data"] = config_data + + return data + + +def _create_model_json(data, pdb_file, seq_dict, metadata): + """Create a dictionary (mimicking JSON) that contains all the data.""" + data["target_entities"], ost_ent = _get_entities(pdb_file, data["mdl_title"], + seq_dict) + data["title"] = _get_title(data["mdl_title"]) + mdl_desc = data["config_data"]["description"] + mdl_annos = metadata.loc[data["mdl_title"], "description"] + data["model_details"] = _get_model_details(mdl_desc, mdl_annos) + data["model_group_name"] = _get_model_group_name() + + return ost_ent + + +def _main(): + """Run as script.""" + opts = _parse_args() + + # parse/fetch global data + config_data = _parse_colabfold_config(opts.config_file) + metadata = _get_metadata(opts.metadata_file) + seq_dict = _get_sequences(opts.fasta_file, metadata) + if opts.compress: + cifext = "cif.gz" + else: + cifext = "cif" + # fetch a single randomly chosen UniProt entry for tax info + upkb_data = _fetch_upkb_entry("P42690") + tax_info = {k: v for k, v in upkb_data.items() \ + if k in ["up_organism", "up_ncbi_taxid"]} + + # get on with models + print(f"Working on {opts.model_dir}...") + + # iterate model directory + for fle in sorted(os.listdir(opts.model_dir)): + # iterate PDB files + if not fle.endswith(".pdb"): + continue + # check file and if done already + file_prfx, mdl_name = _check_model_extra_files_present(opts.model_dir, + fle) + fle = os.path.join(opts.model_dir, fle) + if os.path.exists(os.path.join(opts.out_dir, f"{mdl_name}.{cifext}")): + print(f" {mdl_name} already done...") + continue + + print(f" translating {mdl_name}...") + pdb_start = timer() + # NOTE: could also be prepared globally if all carefully overwritten + # but not worth the trouble... + mdlcf_json = _create_json(config_data) + mdlcf_json["tax_info"] = tax_info + # + + # mdl_name = [TITLE]_unrelaxed_rank_X_model_Y.pdb + mdl_name_parts = mdl_name.split('_') + assert len(mdl_name_parts) == 8 + assert int(mdl_name_parts[5]) == 1 # rank 1 only + mdlcf_json["mdl_num"] = int(mdl_name_parts[7]) + mdlcf_json["mdl_title"] = '_'.join(mdl_name_parts[:3]) + + # gather data into JSON-like structure + print(" preparing data...", end="") + pstart = timer() + ost_ent = _create_model_json(mdlcf_json, fle, seq_dict, metadata) + + # read quality scores from JSON file + _get_scores(mdlcf_json, file_prfx) + print(f" ({timer()-pstart:.2f}s)") + + _store_as_modelcif(mdlcf_json, ost_ent, opts.out_dir, mdl_name, + opts.compress) + print(f" ... done with {mdl_name} ({timer()-pdb_start:.2f}s).") + + # check if result can be read and has expected seq. + ent = io.LoadMMCIF(os.path.join(opts.out_dir, f"{mdl_name}.{cifext}")) + assert ent.chain_count == 1, f"Bad chain count {mdl_name}" + ent_seq = "".join(res.one_letter_code for res in ent.residues) + assert ent_seq == seq_dict[mdlcf_json["mdl_title"]], \ + f"Bad seq. {mdl_name}" + + print(f"... done with {opts.model_dir}.") + + +if __name__ == "__main__": + _main() + +# LocalWords: Xabi argparse args ArgumentParser formatter dir str metavar os +# LocalWords: RawDescriptionHelpFormatter ACs sys msg nAborting stderr acs +# LocalWords: fle cnfg config json pdb prfx scrs endswith modelcif uid pdbx +# LocalWords: struct cif utf mmcif fh datetime ost io ToDo chn lst rn idx aa +# LocalWords: sqe olc ACDEFGHIKLMNPQRSTVWY RuntimeError upkb txt pylint iter +# LocalWords: rspns unicode startswith sline len elif NCBI TaxID ncbi taxid +# LocalWords: seqlen crc ISOFORM DT dt flds isoforms isoform ent LoadPDB ihm +# LocalWords: mdlcf mdlcif asym AsymUnit init kwargs atm pos het hetatom pTM +# LocalWords: biso ujson GlobalPTM pLDDT ptm jfh numpy np GlobalPLDDT lDDT +# LocalWords: plddt LocalPLDDT timeit PAE MetricType LocalPairwisePAE lpae +# LocalWords: nd pae qa pstart ColabFold -- GitLab