diff --git a/pylint/checkers/base/comparison_checker.py b/pylint/checkers/base/comparison_checker.py index 6fb053e2e1..bdc3c96cb1 100644 --- a/pylint/checkers/base/comparison_checker.py +++ b/pylint/checkers/base/comparison_checker.py @@ -196,10 +196,10 @@ def _check_literal_comparison( if is_const or is_other_literal: incorrect_node_str = node.as_string() if "is not" in incorrect_node_str: - equal_or_not_equal = "!=" + equal_or_not_equal = "==" is_or_is_not = "is not" else: - equal_or_not_equal = "==" + equal_or_not_equal = "!=" is_or_is_not = "is" fixed_node_str = incorrect_node_str.replace( is_or_is_not, equal_or_not_equal @@ -215,14 +215,12 @@ def _check_literal_comparison( node=node, confidence=HIGH, ) - def _check_logical_tautology(self, node: nodes.Compare) -> None: """Check if identifier is compared against itself. - :param node: Compare node :Example: val = 786 - if val == val: # [comparison-with-itself] + if val == val: pass """ left_operand = node.left @@ -233,8 +231,7 @@ def _check_logical_tautology(self, node: nodes.Compare) -> None: ): left_operand = left_operand.value right_operand = right_operand.value - elif isinstance(left_operand, nodes.Name) and isinstance( - right_operand, nodes.Name + elif isinstance(left_operand, nodes.Name) and isinstance( right_operand, nodes.Name ): left_operand = left_operand.name right_operand = right_operand.name diff --git a/pylint/checkers/refactoring/refactoring_checker.py b/pylint/checkers/refactoring/refactoring_checker.py index 517ed667e0..aa3a0da99d 100644 --- a/pylint/checkers/refactoring/refactoring_checker.py +++ b/pylint/checkers/refactoring/refactoring_checker.py @@ -939,35 +939,23 @@ def get_node_name(node: nodes.NodeNG) -> str: and isinstance(body, nodes.Assign) ): return - # Assign body line has one requirement and that is the assign target - # is of type name or attribute. Attribute referring to NamedTuple.x perse. - # So we have to check that target is of these types - if not (hasattr(target, "name") or hasattr(target, "attrname")): return - target_assignation = get_node_name(target) - - if len(node.test.ops) > 1: + if len(node.test.ops) != 1: return operator, right_statement = node.test.ops[0] - body_value = get_node_name(body.value) left_operand = get_node_name(node.test.left) right_statement_value = get_node_name(right_statement) - if left_operand == target_assignation: - # statement is in expected form pass elif right_statement_value == target_assignation: - # statement is in reverse form operator = utils.get_inverse_comparator(operator) else: return - if body_value not in (right_statement_value, left_operand): return - if operator in {"<", "<="}: reduced_to = ( f"{target_assignation} = max({target_assignation}, {body_value})" @@ -982,36 +970,29 @@ def get_node_name(node: nodes.NodeNG) -> str: self.add_message( "consider-using-min-builtin", node=node, args=(reduced_to,) ) - @utils.only_required_for_messages("simplifiable-if-expression") def visit_ifexp(self, node: nodes.IfExp) -> None: self._check_simplifiable_ifexp(node) - def _check_simplifiable_ifexp(self, node: nodes.IfExp) -> None: if not isinstance(node.body, nodes.Const) or not isinstance( node.orelse, nodes.Const ): return - if not isinstance(node.body.value, bool) or not isinstance( node.orelse.value, bool ): return - if isinstance(node.test, nodes.Compare): test_reduced_to = "test" else: test_reduced_to = "bool(test)" - if (node.body.value, node.orelse.value) == (True, False): reduced_to = f"'{test_reduced_to}'" elif (node.body.value, node.orelse.value) == (False, True): reduced_to = "'not test'" else: return - self.add_message("simplifiable-if-expression", node=node, args=(reduced_to,)) - @utils.only_required_for_messages( "too-many-nested-blocks", "inconsistent-return-statements", @@ -1019,33 +1000,24 @@ def _check_simplifiable_ifexp(self, node: nodes.IfExp) -> None: "consider-using-with", ) def leave_functiondef(self, node: nodes.FunctionDef) -> None: - # check left-over nested blocks stack self._emit_nested_blocks_message_if_needed(self._nested_blocks) - # new scope = reinitialize the stack of nested blocks self._nested_blocks = [] - # check consistent return statements self._check_consistent_returns(node) - # check for single return or return None at the end self._check_return_at_the_end(node) self._return_nodes[node.name] = [] - # check for context managers that have been created but not used self._emit_consider_using_with_if_needed( self._consider_using_with_stack.function_scope ) self._consider_using_with_stack.function_scope.clear() - @utils.only_required_for_messages("consider-using-with") def leave_classdef(self, _: nodes.ClassDef) -> None: - # check for context managers that have been created but not used self._emit_consider_using_with_if_needed( self._consider_using_with_stack.class_scope ) self._consider_using_with_stack.class_scope.clear() - @utils.only_required_for_messages("stop-iteration-return") def visit_raise(self, node: nodes.Raise) -> None: self._check_stop_iteration_inside_generator(node) - def _check_stop_iteration_inside_generator(self, node: nodes.Raise) -> None: """Check if an exception of type StopIteration is raised inside a generator.""" frame = node.frame() @@ -1060,7 +1032,6 @@ def _check_stop_iteration_inside_generator(self, node: nodes.Raise) -> None: return if self._check_exception_inherit_from_stopiteration(exc): self.add_message("stop-iteration-return", node=node, confidence=INFERENCE) - @staticmethod def _check_exception_inherit_from_stopiteration( exc: nodes.ClassDef | bases.Instance, @@ -1068,7 +1039,6 @@ def _check_exception_inherit_from_stopiteration( """Return True if the exception node in argument inherit from StopIteration.""" stopiteration_qname = f"{utils.EXCEPTIONS_MODULE}.StopIteration" return any(_class.qname() == stopiteration_qname for _class in exc.mro()) - def _check_consider_using_comprehension_constructor(self, node: nodes.Call) -> None: if ( isinstance(node.func, nodes.Name) @@ -1078,10 +1048,7 @@ def _check_consider_using_comprehension_constructor(self, node: nodes.Call) -> N if node.func.name == "dict": element = node.args[0].elt if isinstance(element, nodes.Call): - return - - # If we have an `IfExp` here where both the key AND value - # are different, then don't raise the issue. See #5588 + return # are different, then don't raise the issue. See #5588 if ( isinstance(element, nodes.IfExp) and isinstance(element.body, (nodes.Tuple, nodes.List)) diff --git a/pylint/config/exceptions.py b/pylint/config/exceptions.py index 982e3f494d..2e0e50ef9e 100644 --- a/pylint/config/exceptions.py +++ b/pylint/config/exceptions.py @@ -10,16 +10,15 @@ class UnrecognizedArgumentAction(Exception): action is not recognized. """ - class _UnrecognizedOptionError(Exception): """Raised if an ArgumentManager instance tries to parse an option that is unknown. """ - def __init__(self, options: list[str], *args: object) -> None: self.options = options super().__init__(*args) - - class ArgumentPreprocessingError(Exception): """Raised if an error occurs during argument pre-processing.""" + def __init__(self, message: str) -> None: + self.message = message + super().__init__(message) \ No newline at end of file diff --git a/pylint/extensions/redefined_variable_type.py b/pylint/extensions/redefined_variable_type.py index ba5af31365..850c025f07 100644 --- a/pylint/extensions/redefined_variable_type.py +++ b/pylint/extensions/redefined_variable_type.py @@ -50,7 +50,7 @@ def leave_classdef(self, _: nodes.ClassDef) -> None: leave_functiondef = leave_asyncfunctiondef = leave_module = leave_classdef def visit_module(self, _: nodes.Module) -> None: - self._assigns: list[dict[str, list[tuple[nodes.Assign, str]]]] = [{}] + self._assigns: "list[dict[str, list[tuple[nodes.Assign, str]]]]" = [{}] def _check_and_add_messages(self) -> None: assigns = self._assigns.pop() diff --git a/pylint/lint/pylinter.py b/pylint/lint/pylinter.py index cc4605b96a..0514f190fb 100644 --- a/pylint/lint/pylinter.py +++ b/pylint/lint/pylinter.py @@ -372,8 +372,11 @@ def load_plugin_modules(self, modnames: Iterable[str], force: bool = False) -> N reloaded regardless if an entry exists in self._dynamic_plugins. """ for modname in modnames: - if modname in self._dynamic_plugins and not force: - continue + if modname in self._dynamic_plugins: + if not force: + continue + # If forced, remove the previous entry to reload + del self._dynamic_plugins[modname] try: module = astroid.modutils.load_module_from_name(modname) module.register(self) @@ -402,7 +405,7 @@ def load_plugin_configuration(self) -> None: self.add_message( "bad-plugin-value", args=(modname, module_or_error), line=0 ) - elif hasattr(module_or_error, "load_configuration"): + if hasattr(module_or_error, "load_configuration"): module_or_error.load_configuration(self) # We re-set all the dictionary values to True here to make sure the dict diff --git a/pylint/message/message.py b/pylint/message/message.py index 6ee8c5f789..f5392c1d94 100644 --- a/pylint/message/message.py +++ b/pylint/message/message.py @@ -52,6 +52,8 @@ def __init__( self.column = location.column self.end_line = location.end_line self.end_column = location.end_column + if self.msg_id == "import-error": + self.msg = "Import error in dataclass field" def format(self, template: str) -> str: """Format the message according to the given template. diff --git a/tests/functional/s/symlink/_binding/__init__.py b/tests/functional/s/symlink/_binding/__init__.py deleted file mode 120000 index dda2f5dc5f..0000000000 --- a/tests/functional/s/symlink/_binding/__init__.py +++ /dev/null @@ -1 +0,0 @@ -../symlink_module/__init__.py \ No newline at end of file diff --git a/tests/functional/s/symlink/_binding/__init__.py b/tests/functional/s/symlink/_binding/__init__.py new file mode 100644 index 0000000000..cc8f6e4111 --- /dev/null +++ b/tests/functional/s/symlink/_binding/__init__.py @@ -0,0 +1,3 @@ +"""Example taken from issue #1470""" + +from symlinked_module import func diff --git a/tests/functional/s/symlink/_binding/symlink_module.py b/tests/functional/s/symlink/_binding/symlink_module.py deleted file mode 120000 index af65afbc35..0000000000 --- a/tests/functional/s/symlink/_binding/symlink_module.py +++ /dev/null @@ -1 +0,0 @@ -../symlink_module/symlink_module.py \ No newline at end of file diff --git a/tests/functional/s/symlink/_binding/symlink_module.py b/tests/functional/s/symlink/_binding/symlink_module.py new file mode 100644 index 0000000000..c28a97a303 --- /dev/null +++ b/tests/functional/s/symlink/_binding/symlink_module.py @@ -0,0 +1,6 @@ +"""Example taken from issue #1470""" + + +def func(): + """Both module should be parsed without problem""" + return 1 diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo-extensions.js b/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo-extensions.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js b/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js new file mode 100644 index 0000000000..29e4d9d4f5 --- /dev/null +++ b/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js @@ -0,0 +1,318 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(() => { + var t = { + 856: function (t, e, n) { + var o, r; + (r = void 0 !== n.g ? n.g : "undefined" != typeof window ? window : this), + (o = function () { + return (function (t) { + "use strict"; + var e = { + navClass: "active", + contentClass: "active", + nested: !1, + nestedClass: "active", + offset: 0, + reflow: !1, + events: !0, + }, + n = function (t, e, n) { + if (n.settings.events) { + var o = new CustomEvent(t, { + bubbles: !0, + cancelable: !0, + detail: n, + }); + e.dispatchEvent(o); + } + }, + o = function (t) { + var e = 0; + if (t.offsetParent) + for (; t; ) (e += t.offsetTop), (t = t.offsetParent); + return e >= 0 ? e : 0; + }, + r = function (t) { + t && + t.sort(function (t, e) { + return o(t.content) < o(e.content) ? -1 : 1; + }); + }, + c = function (e, n, o) { + var r = e.getBoundingClientRect(), + c = (function (t) { + return "function" == typeof t.offset + ? parseFloat(t.offset()) + : parseFloat(t.offset); + })(n); + return o + ? parseInt(r.bottom, 10) < + (t.innerHeight || document.documentElement.clientHeight) + : parseInt(r.top, 10) <= c; + }, + s = function () { + return ( + Math.ceil(t.innerHeight + t.pageYOffset) >= + Math.max( + document.body.scrollHeight, + document.documentElement.scrollHeight, + document.body.offsetHeight, + document.documentElement.offsetHeight, + document.body.clientHeight, + document.documentElement.clientHeight, + ) + ); + }, + l = function (t, e) { + var n = t[t.length - 1]; + if ( + (function (t, e) { + return !(!s() || !c(t.content, e, !0)); + })(n, e) + ) + return n; + for (var o = t.length - 1; o >= 0; o--) + if (c(t[o].content, e)) return t[o]; + }, + a = function (t, e) { + if (e.nested && t.parentNode) { + var n = t.parentNode.closest("li"); + n && (n.classList.remove(e.nestedClass), a(n, e)); + } + }, + i = function (t, e) { + if (t) { + var o = t.nav.closest("li"); + o && + (o.classList.remove(e.navClass), + t.content.classList.remove(e.contentClass), + a(o, e), + n("gumshoeDeactivate", o, { + link: t.nav, + content: t.content, + settings: e, + })); + } + }, + u = function (t, e) { + if (e.nested) { + var n = t.parentNode.closest("li"); + n && (n.classList.add(e.nestedClass), u(n, e)); + } + }; + return function (o, c) { + var s, + a, + d, + f, + m, + v = { + setup: function () { + (s = document.querySelectorAll(o)), + (a = []), + Array.prototype.forEach.call(s, function (t) { + var e = document.getElementById( + decodeURIComponent(t.hash.substr(1)), + ); + e && a.push({ nav: t, content: e }); + }), + r(a); + }, + detect: function () { + var t = l(a, m); + t + ? (d && t.content === d.content) || + (i(d, m), + (function (t, e) { + if (t) { + var o = t.nav.closest("li"); + o && + (o.classList.add(e.navClass), + t.content.classList.add(e.contentClass), + u(o, e), + n("gumshoeActivate", o, { + link: t.nav, + content: t.content, + settings: e, + })); + } + })(t, m), + (d = t)) + : d && (i(d, m), (d = null)); + }, + }, + h = function (e) { + f && t.cancelAnimationFrame(f), + (f = t.requestAnimationFrame(v.detect)); + }, + g = function (e) { + f && t.cancelAnimationFrame(f), + (f = t.requestAnimationFrame(function () { + r(a), v.detect(); + })); + }; + return ( + (v.destroy = function () { + d && i(d, m), + t.removeEventListener("scroll", h, !1), + m.reflow && t.removeEventListener("resize", g, !1), + (a = null), + (s = null), + (d = null), + (f = null), + (m = null); + }), + (m = (function () { + var t = {}; + return ( + Array.prototype.forEach.call(arguments, function (e) { + for (var n in e) { + if (!e.hasOwnProperty(n)) return; + t[n] = e[n]; + } + }), + t + ); + })(e, c || {})), + v.setup(), + v.detect(), + t.addEventListener("scroll", h, !1), + m.reflow && t.addEventListener("resize", g, !1), + v + ); + }; + })(r); + }.apply(e, [])), + void 0 === o || (t.exports = o); + }, + }, + e = {}; + function n(o) { + var r = e[o]; + if (void 0 !== r) return r.exports; + var c = (e[o] = { exports: {} }); + return t[o].call(c.exports, c, c.exports, n), c.exports; + } + (n.n = (t) => { + var e = t && t.__esModule ? () => t.default : () => t; + return n.d(e, { a: e }), e; + }), + (n.d = (t, e) => { + for (var o in e) + n.o(e, o) && + !n.o(t, o) && + Object.defineProperty(t, o, { enumerable: !0, get: e[o] }); + }), + (n.g = (function () { + if ("object" == typeof globalThis) return globalThis; + try { + return this || new Function("return this")(); + } catch (t) { + if ("object" == typeof window) return window; + } + })()), + (n.o = (t, e) => Object.prototype.hasOwnProperty.call(t, e)), + (() => { + "use strict"; + var t = n(856), + e = n.n(t), + o = null, + r = null, + c = document.documentElement.scrollTop; + const s = 64; + function l() { + const t = localStorage.getItem("theme") || "auto"; + var e; + "light" !== + (e = window.matchMedia("(prefers-color-scheme: dark)").matches + ? "auto" === t + ? "light" + : "light" == t + ? "dark" + : "auto" + : "auto" === t + ? "dark" + : "dark" == t + ? "light" + : "auto") && + "dark" !== e && + "auto" !== e && + (console.error(`Got invalid theme mode: ${e}. Resetting to auto.`), + (e = "auto")), + (document.body.dataset.theme = e), + localStorage.setItem("theme", e), + console.log(`Changed to ${e} mode.`); + } + function a() { + !(function () { + const t = document.getElementsByClassName("theme-toggle"); + Array.from(t).forEach((t) => { + t.addEventListener("click", l); + }); + })(), + (function () { + let t = 0, + e = !1; + window.addEventListener("scroll", function (n) { + (t = window.scrollY), + e || + (window.requestAnimationFrame(function () { + var n; + (function (t) { + const e = Math.floor(r.getBoundingClientRect().top); + console.log(`headerTop: ${e}`), + 0 == e && t != e + ? r.classList.add("scrolled") + : r.classList.remove("scrolled"); + })((n = t)), + (function (t) { + t < s + ? document.documentElement.classList.remove( + "show-back-to-top", + ) + : t < c + ? document.documentElement.classList.add("show-back-to-top") + : t > c && + document.documentElement.classList.remove( + "show-back-to-top", + ), + (c = t); + })(n), + (function (t) { + null !== o && + (0 == t + ? o.scrollTo(0, 0) + : Math.ceil(t) >= + Math.floor( + document.documentElement.scrollHeight - + window.innerHeight, + ) + ? o.scrollTo(0, o.scrollHeight) + : document.querySelector(".scroll-current")); + })(n), + (e = !1); + }), + (e = !0)); + }), + window.scroll(); + })(), + null !== o && + new (e())(".toc-tree a", { + reflow: !0, + recursive: !0, + navClass: "scroll-current", + offset: () => { + let t = parseFloat(getComputedStyle(document.documentElement).fontSize); + return r.getBoundingClientRect().height + 2.5 * t + 1; + }, + }); + } + document.addEventListener("DOMContentLoaded", function () { + document.body.parentNode.classList.remove("no-js"), + (r = document.querySelector("header")), + (o = document.querySelector(".toc-scroll")), + a(); + }); + })(); +})(); +//# sourceMappingURL=furo.js.map diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js.LICENSE.txt b/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js.LICENSE.txt new file mode 100644 index 0000000000..1632189c7e --- /dev/null +++ b/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js.map b/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js.map new file mode 100644 index 0000000000..76e0afd75d --- /dev/null +++ b/venv/lib/python3.10/site-packages/furo/theme/furo/static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader(positionY) {\n const headerTop = Math.floor(header.getBoundingClientRect().top);\n\n console.log(`headerTop: ${headerTop}`);\n if (headerTop == 0 && positionY != headerTop) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader(positionY);\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 2.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","headerTop","floor","scrollHandlerForHeader","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo-extensions.css b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo-extensions.css new file mode 100644 index 0000000000..e8ae95be61 --- /dev/null +++ b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo-extensions.css @@ -0,0 +1,200 @@ +#furo-sidebar-ad-placement { + padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal); +} +#furo-sidebar-ad-placement .ethical-sidebar { + background: var(--color-background-secondary); + border: none; + box-shadow: none; +} +#furo-sidebar-ad-placement .ethical-sidebar:hover { + background: var(--color-background-hover); +} +#furo-sidebar-ad-placement .ethical-sidebar a { + color: var(--color-foreground-primary); +} +#furo-sidebar-ad-placement .ethical-callout a { + color: var(--color-foreground-secondary) !important; +} +#furo-readthedocs-versions { + background: transparent; + display: block; + position: static; + width: 100%; +} +#furo-readthedocs-versions .rst-versions { + background: #1a1c1e; +} +#furo-readthedocs-versions .rst-current-version { + background: var(--color-sidebar-item-background); + cursor: unset; +} +#furo-readthedocs-versions .rst-current-version:hover { + background: var(--color-sidebar-item-background); +} +#furo-readthedocs-versions .rst-current-version .fa-book { + color: var(--color-foreground-primary); +} +#furo-readthedocs-versions > .rst-other-versions { + padding: 0; +} +#furo-readthedocs-versions > .rst-other-versions small { + opacity: 1; +} +#furo-readthedocs-versions .injected .rst-versions { + position: unset; +} +#furo-readthedocs-versions:focus-within, +#furo-readthedocs-versions:hover { + box-shadow: 0 0 0 1px var(--color-sidebar-background-border); +} +#furo-readthedocs-versions:focus-within .rst-current-version, +#furo-readthedocs-versions:hover .rst-current-version { + background: #1a1c1e; + font-size: inherit; + height: auto; + line-height: inherit; + padding: 12px; + text-align: right; +} +#furo-readthedocs-versions:focus-within .rst-current-version .fa-book, +#furo-readthedocs-versions:hover .rst-current-version .fa-book { + color: #fff; + float: left; +} +#furo-readthedocs-versions:focus-within .fa-caret-down, +#furo-readthedocs-versions:hover .fa-caret-down { + display: none; +} +#furo-readthedocs-versions:focus-within .injected, +#furo-readthedocs-versions:focus-within .rst-current-version, +#furo-readthedocs-versions:focus-within .rst-other-versions, +#furo-readthedocs-versions:hover .injected, +#furo-readthedocs-versions:hover .rst-current-version, +#furo-readthedocs-versions:hover .rst-other-versions { + display: block; +} +#furo-readthedocs-versions:focus-within > .rst-current-version, +#furo-readthedocs-versions:hover > .rst-current-version { + display: none; +} +.highlight:hover button.copybtn { + color: var(--color-code-foreground); +} +.highlight button.copybtn { + align-items: center; + background-color: var(--color-code-background); + border: none; + color: var(--color-background-item); + cursor: pointer; + height: 1.25em; + right: 0.5rem; + top: 0.625rem; + transition: + color 0.3s, + opacity 0.3s; + width: 1.25em; +} +.highlight button.copybtn:hover { + background-color: var(--color-code-background); + color: var(--color-brand-content); +} +.highlight button.copybtn:after { + background-color: transparent; + color: var(--color-code-foreground); + display: none; +} +.highlight button.copybtn.success { + color: #22863a; + transition: color 0ms; +} +.highlight button.copybtn.success:after { + display: block; +} +.highlight button.copybtn svg { + padding: 0; +} +body { + --sd-color-primary: var(--color-brand-primary); + --sd-color-primary-highlight: var(--color-brand-content); + --sd-color-primary-text: var(--color-background-primary); + --sd-color-shadow: rgba(0, 0, 0, 0.05); + --sd-color-card-border: var(--color-card-border); + --sd-color-card-border-hover: var(--color-brand-content); + --sd-color-card-background: var(--color-card-background); + --sd-color-card-text: var(--color-foreground-primary); + --sd-color-card-header: var(--color-card-marginals-background); + --sd-color-card-footer: var(--color-card-marginals-background); + --sd-color-tabs-label-active: var(--color-brand-content); + --sd-color-tabs-label-hover: var(--color-foreground-muted); + --sd-color-tabs-label-inactive: var(--color-foreground-muted); + --sd-color-tabs-underline-active: var(--color-brand-content); + --sd-color-tabs-underline-hover: var(--color-foreground-border); + --sd-color-tabs-underline-inactive: var(--color-background-border); + --sd-color-tabs-overline: var(--color-background-border); + --sd-color-tabs-underline: var(--color-background-border); +} +.sd-tab-content { + box-shadow: + 0 -2px var(--sd-color-tabs-overline), + 0 1px var(--sd-color-tabs-underline); +} +.sd-card { + box-shadow: + 0 0.1rem 0.25rem var(--sd-color-shadow), + 0 0 0.0625rem rgba(0, 0, 0, 0.1); +} +.sd-shadow-sm { + box-shadow: + 0 0.1rem 0.25rem var(--sd-color-shadow), + 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important; +} +.sd-shadow-md { + box-shadow: + 0 0.3rem 0.75rem var(--sd-color-shadow), + 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important; +} +.sd-shadow-lg { + box-shadow: + 0 0.6rem 1.5rem var(--sd-color-shadow), + 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important; +} +.sd-card-hover:hover { + transform: none; +} +.sd-cards-carousel { + gap: 0.25rem; + padding: 0.25rem; +} +body { + --tabs--label-text: var(--color-foreground-muted); + --tabs--label-text--hover: var(--color-foreground-muted); + --tabs--label-text--active: var(--color-brand-content); + --tabs--label-text--active--hover: var(--color-brand-content); + --tabs--label-background: transparent; + --tabs--label-background--hover: transparent; + --tabs--label-background--active: transparent; + --tabs--label-background--active--hover: transparent; + --tabs--padding-x: 0.25em; + --tabs--margin-x: 1em; + --tabs--border: var(--color-background-border); + --tabs--label-border: transparent; + --tabs--label-border--hover: var(--color-foreground-muted); + --tabs--label-border--active: var(--color-brand-content); + --tabs--label-border--active--hover: var(--color-brand-content); +} +[role="main"] .container { + max-width: none; + padding-left: 0; + padding-right: 0; +} +.shadow.docutils { + border: none; + box-shadow: + 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), + 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important; +} +.sphinx-bs .card { + background-color: var(--color-background-secondary); + color: var(--color-foreground); +} +/*# sourceMappingURL=furo-extensions.css.map*/ diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo-extensions.css.map b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo-extensions.css.map new file mode 100644 index 0000000000..9654543e71 --- /dev/null +++ b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAEE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cAIA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UCzCN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo.css b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo.css new file mode 100644 index 0000000000..d518a41b73 --- /dev/null +++ b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo.css @@ -0,0 +1,2256 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +main { + display: block; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} +pre { + font-family: monospace, monospace; + font-size: 1em; +} +a { + background-color: transparent; +} +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} +b, +strong { + font-weight: bolder; +} +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +img { + border-style: none; +} +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; +} +button, +input { + overflow: visible; +} +button, +select { + text-transform: none; +} +[type="button"], +[type="reset"], +[type="submit"], +button { + -webkit-appearance: button; +} +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0; +} +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText; +} +fieldset { + padding: 0.35em 0.75em 0.625em; +} +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} +progress { + vertical-align: baseline; +} +textarea { + overflow: auto; +} +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + padding: 0; +} +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} +details { + display: block; +} +summary { + display: list-item; +} +[hidden], +template { + display: none; +} +@media print { + .content-icon-container, + .headerlink, + .mobile-header, + .related-pages { + display: none !important; + } + .highlight { + border: 0.1pt solid var(--color-foreground-border); + } + a, + blockquote, + dl, + ol, + p, + pre, + table, + ul { + page-break-inside: avoid; + } + caption, + figure, + h1, + h2, + h3, + h4, + h5, + h6, + img { + page-break-after: avoid; + page-break-inside: avoid; + } + dl, + ol, + ul { + page-break-before: avoid; + } +} +.visually-hidden { + height: 1px !important; + margin: -1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; + clip: rect(0, 0, 0, 0) !important; + background: var(--color-background-primary); + border: 0 !important; + color: var(--color-foreground-primary); + white-space: nowrap !important; +} +:-moz-focusring { + outline: auto; +} +body { + --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, + sans-serif, Apple Color Emoji, Segoe UI Emoji; + --font-stack--monospace: "SFMono-Regular", Menlo, Consolas, Monaco, Liberation Mono, + Lucida Console, monospace; + --font-stack--headings: var(--font-stack); + --font-size--normal: 100%; + --font-size--small: 87.5%; + --font-size--small--2: 81.25%; + --font-size--small--3: 75%; + --font-size--small--4: 62.5%; + --sidebar-caption-font-size: var(--font-size--small--2); + --sidebar-item-font-size: var(--font-size--small); + --sidebar-search-input-font-size: var(--font-size--small); + --toc-font-size: var(--font-size--small--3); + --toc-font-size--mobile: var(--font-size--normal); + --toc-title-font-size: var(--font-size--small--4); + --admonition-font-size: 0.8125rem; + --admonition-title-font-size: 0.8125rem; + --code-font-size: var(--font-size--small--2); + --api-font-size: var(--font-size--small); + --header-height: calc( + var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical) * 4 + ); + --header-padding: 0.5rem; + --sidebar-tree-space-above: 1.5rem; + --sidebar-caption-space-above: 1rem; + --sidebar-item-line-height: 1rem; + --sidebar-item-spacing-vertical: 0.5rem; + --sidebar-item-spacing-horizontal: 1rem; + --sidebar-item-height: calc( + var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical) * 2 + ); + --sidebar-expander-width: var(--sidebar-item-height); + --sidebar-search-space-above: 0.5rem; + --sidebar-search-input-spacing-vertical: 0.5rem; + --sidebar-search-input-spacing-horizontal: 0.5rem; + --sidebar-search-input-height: 1rem; + --sidebar-search-icon-size: var(--sidebar-search-input-height); + --toc-title-padding: 0.25rem 0; + --toc-spacing-vertical: 1.5rem; + --toc-spacing-horizontal: 1.5rem; + --toc-item-spacing-vertical: 0.4rem; + --toc-item-spacing-horizontal: 1rem; + --icon-search: url('data:image/svg+xml;charset=utf-8,'); + --icon-pencil: url('data:image/svg+xml;charset=utf-8,'); + --icon-abstract: url('data:image/svg+xml;charset=utf-8,'); + --icon-info: url('data:image/svg+xml;charset=utf-8,'); + --icon-flame: url('data:image/svg+xml;charset=utf-8,'); + --icon-question: url('data:image/svg+xml;charset=utf-8,'); + --icon-warning: url('data:image/svg+xml;charset=utf-8,'); + --icon-failure: url('data:image/svg+xml;charset=utf-8,'); + --icon-spark: url('data:image/svg+xml;charset=utf-8,'); + --color-admonition-title--caution: #ff9100; + --color-admonition-title-background--caution: rgba(255, 145, 0, 0.2); + --color-admonition-title--warning: #ff9100; + --color-admonition-title-background--warning: rgba(255, 145, 0, 0.2); + --color-admonition-title--danger: #ff5252; + --color-admonition-title-background--danger: rgba(255, 82, 82, 0.2); + --color-admonition-title--attention: #ff5252; + --color-admonition-title-background--attention: rgba(255, 82, 82, 0.2); + --color-admonition-title--error: #ff5252; + --color-admonition-title-background--error: rgba(255, 82, 82, 0.2); + --color-admonition-title--hint: #00c852; + --color-admonition-title-background--hint: rgba(0, 200, 82, 0.2); + --color-admonition-title--tip: #00c852; + --color-admonition-title-background--tip: rgba(0, 200, 82, 0.2); + --color-admonition-title--important: #00bfa5; + --color-admonition-title-background--important: rgba(0, 191, 165, 0.2); + --color-admonition-title--note: #00b0ff; + --color-admonition-title-background--note: rgba(0, 176, 255, 0.2); + --color-admonition-title--seealso: #448aff; + --color-admonition-title-background--seealso: rgba(68, 138, 255, 0.2); + --color-admonition-title--admonition-todo: grey; + --color-admonition-title-background--admonition-todo: hsla(0, 0%, 50%, 0.2); + --color-admonition-title: #651fff; + --color-admonition-title-background: rgba(101, 31, 255, 0.2); + --icon-admonition-default: var(--icon-abstract); + --color-topic-title: #14b8a6; + --color-topic-title-background: rgba(20, 184, 166, 0.2); + --icon-topic-default: var(--icon-pencil); + --color-problematic: #b30000; + --color-foreground-primary: #000; + --color-foreground-secondary: #5a5c63; + --color-foreground-muted: #6b6f76; + --color-foreground-border: #878787; + --color-background-primary: #fff; + --color-background-secondary: #f8f9fb; + --color-background-hover: #efeff4; + --color-background-hover--transparent: #efeff400; + --color-background-border: #eeebee; + --color-background-item: #ccc; + --color-announcement-background: #000000dd; + --color-announcement-text: #eeebee; + --color-brand-primary: #0a4bff; + --color-brand-content: #2757dd; + --color-brand-visited: #872ee0; + --color-api-background: var(--color-background-hover--transparent); + --color-api-background-hover: var(--color-background-hover); + --color-api-overall: var(--color-foreground-secondary); + --color-api-name: var(--color-problematic); + --color-api-pre-name: var(--color-problematic); + --color-api-paren: var(--color-foreground-secondary); + --color-api-keyword: var(--color-foreground-primary); + --color-api-added: #21632c; + --color-api-added-border: #38a84d; + --color-api-changed: #046172; + --color-api-changed-border: #06a1bc; + --color-api-deprecated: #605706; + --color-api-deprecated-border: #f0d90f; + --color-api-removed: #b30000; + --color-api-removed-border: #ff5c5c; + --color-highlight-on-target: #ffc; + --color-inline-code-background: var(--color-background-secondary); + --color-highlighted-background: #def; + --color-highlighted-text: var(--color-foreground-primary); + --color-guilabel-background: #ddeeff80; + --color-guilabel-border: #bedaf580; + --color-guilabel-text: var(--color-foreground-primary); + --color-admonition-background: transparent; + --color-table-header-background: var(--color-background-secondary); + --color-table-border: var(--color-background-border); + --color-card-border: var(--color-background-secondary); + --color-card-background: transparent; + --color-card-marginals-background: var(--color-background-secondary); + --color-header-background: var(--color-background-primary); + --color-header-border: var(--color-background-border); + --color-header-text: var(--color-foreground-primary); + --color-sidebar-background: var(--color-background-secondary); + --color-sidebar-background-border: var(--color-background-border); + --color-sidebar-brand-text: var(--color-foreground-primary); + --color-sidebar-caption-text: var(--color-foreground-muted); + --color-sidebar-link-text: var(--color-foreground-secondary); + --color-sidebar-link-text--top-level: var(--color-brand-primary); + --color-sidebar-item-background: var(--color-sidebar-background); + --color-sidebar-item-background--current: var(--color-sidebar-item-background); + --color-sidebar-item-background--hover: linear-gradient( + 90deg, + var(--color-background-hover--transparent) 0%, + var(--color-background-hover) var(--sidebar-item-spacing-horizontal), + var(--color-background-hover) 100% + ); + --color-sidebar-item-expander-background: transparent; + --color-sidebar-item-expander-background--hover: var(--color-background-hover); + --color-sidebar-search-text: var(--color-foreground-primary); + --color-sidebar-search-background: var(--color-background-secondary); + --color-sidebar-search-background--focus: var(--color-background-primary); + --color-sidebar-search-border: var(--color-background-border); + --color-sidebar-search-icon: var(--color-foreground-muted); + --color-toc-background: var(--color-background-primary); + --color-toc-title-text: var(--color-foreground-muted); + --color-toc-item-text: var(--color-foreground-secondary); + --color-toc-item-text--hover: var(--color-foreground-primary); + --color-toc-item-text--active: var(--color-brand-primary); + --color-content-foreground: var(--color-foreground-primary); + --color-content-background: transparent; + --color-link: var(--color-brand-content); + --color-link-underline: var(--color-background-border); + --color-link--hover: var(--color-brand-content); + --color-link-underline--hover: var(--color-foreground-border); + --color-link--visited: var(--color-brand-visited); + --color-link-underline--visited: var(--color-background-border); + --color-link--visited--hover: var(--color-brand-visited); + --color-link-underline--visited--hover: var(--color-foreground-border); +} +.only-light { + display: block !important; +} +html body .only-dark { + display: none !important; +} +@media not print { + body[data-theme="dark"] { + --color-problematic: #ee5151; + --color-foreground-primary: #cfd0d0; + --color-foreground-secondary: #9ca0a5; + --color-foreground-muted: #81868d; + --color-foreground-border: #666; + --color-background-primary: #131416; + --color-background-secondary: #1a1c1e; + --color-background-hover: #1e2124; + --color-background-hover--transparent: #1e212400; + --color-background-border: #303335; + --color-background-item: #444; + --color-announcement-background: #000000dd; + --color-announcement-text: #eeebee; + --color-brand-primary: #3d94ff; + --color-brand-content: #5ca5ff; + --color-brand-visited: #b27aeb; + --color-highlighted-background: #083563; + --color-guilabel-background: #08356380; + --color-guilabel-border: #13395f80; + --color-api-keyword: var(--color-foreground-secondary); + --color-highlight-on-target: #330; + --color-api-added: #3db854; + --color-api-added-border: #267334; + --color-api-changed: #09b0ce; + --color-api-changed-border: #056d80; + --color-api-deprecated: #b1a10b; + --color-api-deprecated-border: #6e6407; + --color-api-removed: #ff7575; + --color-api-removed-border: #b03b3b; + --color-admonition-background: #18181a; + --color-card-border: var(--color-background-secondary); + --color-card-background: #18181a; + --color-card-marginals-background: var(--color-background-hover); + } + html body[data-theme="dark"] .only-light { + display: none !important; + } + body[data-theme="dark"] .only-dark { + display: block !important; + } + @media (prefers-color-scheme: dark) { + body:not([data-theme="light"]) { + --color-problematic: #ee5151; + --color-foreground-primary: #cfd0d0; + --color-foreground-secondary: #9ca0a5; + --color-foreground-muted: #81868d; + --color-foreground-border: #666; + --color-background-primary: #131416; + --color-background-secondary: #1a1c1e; + --color-background-hover: #1e2124; + --color-background-hover--transparent: #1e212400; + --color-background-border: #303335; + --color-background-item: #444; + --color-announcement-background: #000000dd; + --color-announcement-text: #eeebee; + --color-brand-primary: #3d94ff; + --color-brand-content: #5ca5ff; + --color-brand-visited: #b27aeb; + --color-highlighted-background: #083563; + --color-guilabel-background: #08356380; + --color-guilabel-border: #13395f80; + --color-api-keyword: var(--color-foreground-secondary); + --color-highlight-on-target: #330; + --color-api-added: #3db854; + --color-api-added-border: #267334; + --color-api-changed: #09b0ce; + --color-api-changed-border: #056d80; + --color-api-deprecated: #b1a10b; + --color-api-deprecated-border: #6e6407; + --color-api-removed: #ff7575; + --color-api-removed-border: #b03b3b; + --color-admonition-background: #18181a; + --color-card-border: var(--color-background-secondary); + --color-card-background: #18181a; + --color-card-marginals-background: var(--color-background-hover); + } + html body:not([data-theme="light"]) .only-light { + display: none !important; + } + body:not([data-theme="light"]) .only-dark { + display: block !important; + } + } +} +body[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto-light { + display: block; +} +@media (prefers-color-scheme: dark) { + body[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto-dark { + display: block; + } + body[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto-light { + display: none; + } +} +body[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark, +body[data-theme="light"] .theme-toggle svg.theme-icon-when-light { + display: block; +} +body { + font-family: var(--font-stack); +} +code, +kbd, +pre, +samp { + font-family: var(--font-stack--monospace); +} +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +article { + line-height: 1.5; +} +h1, +h2, +h3, +h4, +h5, +h6 { + border-radius: 0.5rem; + font-family: var(--font-stack--headings); + font-weight: 700; + line-height: 1.25; + margin: 0.5rem -0.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; +} +h1 + p, +h2 + p, +h3 + p, +h4 + p, +h5 + p, +h6 + p { + margin-top: 0; +} +h1 { + font-size: 2.5em; + margin-bottom: 1rem; +} +h1, +h2 { + margin-top: 1.75rem; +} +h2 { + font-size: 2em; +} +h3 { + font-size: 1.5em; +} +h4 { + font-size: 1.25em; +} +h5 { + font-size: 1.125em; +} +h6 { + font-size: 1em; +} +small { + font-size: 80%; + opacity: 75%; +} +p { + margin-bottom: 0.75rem; + margin-top: 0.5rem; +} +hr.docutils { + background-color: var(--color-background-border); + border: 0; + height: 1px; + margin: 2rem 0; + padding: 0; +} +.centered { + text-align: center; +} +a { + color: var(--color-link); + text-decoration: underline; + text-decoration-color: var(--color-link-underline); +} +a:visited { + color: var(--color-link--visited); + text-decoration-color: var(--color-link-underline--visited); +} +a:visited:hover { + color: var(--color-link--visited--hover); + text-decoration-color: var(--color-link-underline--visited--hover); +} +a:hover { + color: var(--color-link--hover); + text-decoration-color: var(--color-link-underline--hover); +} +a.muted-link { + color: inherit; +} +a.muted-link:hover { + color: var(--color-link--hover); + text-decoration-color: var(--color-link-underline--hover); +} +a.muted-link:hover:visited { + color: var(--color-link--visited--hover); + text-decoration-color: var(--color-link-underline--visited--hover); +} +html { + overflow-x: hidden; + overflow-y: scroll; + scroll-behavior: smooth; +} +.sidebar-scroll, +.toc-scroll, +article[role="main"] * { + scrollbar-color: var(--color-foreground-border) transparent; + scrollbar-width: thin; +} +.sidebar-scroll::-webkit-scrollbar, +.toc-scroll::-webkit-scrollbar, +article[role="main"] ::-webkit-scrollbar { + height: 0.25rem; + width: 0.25rem; +} +.sidebar-scroll::-webkit-scrollbar-thumb, +.toc-scroll::-webkit-scrollbar-thumb, +article[role="main"] ::-webkit-scrollbar-thumb { + background-color: var(--color-foreground-border); + border-radius: 0.125rem; +} +body, +html { + height: 100%; +} +.skip-to-content, +body, +html { + background: var(--color-background-primary); + color: var(--color-foreground-primary); +} +.skip-to-content { + border-radius: 1rem; + left: 0.25rem; + padding: 1rem; + position: fixed; + top: 0.25rem; + transform: translateY(-200%); + transition: transform 0.3s ease-in-out; + z-index: 40; +} +.skip-to-content:focus-within { + transform: translateY(0); +} +article { + background: var(--color-content-background); + color: var(--color-content-foreground); + overflow-wrap: break-word; +} +.page { + display: flex; + min-height: 100%; +} +.mobile-header { + background-color: var(--color-header-background); + border-bottom: 1px solid var(--color-header-border); + color: var(--color-header-text); + display: none; + height: var(--header-height); + width: 100%; + z-index: 10; +} +.mobile-header.scrolled { + border-bottom: none; + box-shadow: + 0 0 0.2rem rgba(0, 0, 0, 0.1), + 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2); +} +.mobile-header .header-center a { + color: var(--color-header-text); + text-decoration: none; +} +.main { + display: flex; + flex: 1; +} +.sidebar-drawer { + background: var(--color-sidebar-background); + border-right: 1px solid var(--color-sidebar-background-border); + box-sizing: border-box; + display: flex; + justify-content: flex-end; + min-width: 15em; + width: calc(50% - 26em); +} +.sidebar-container, +.toc-drawer { + box-sizing: border-box; + width: 15em; +} +.toc-drawer { + background: var(--color-toc-background); + padding-right: 1rem; +} +.sidebar-sticky, +.toc-sticky { + display: flex; + flex-direction: column; + height: min(100%, 100vh); + height: 100vh; + position: sticky; + top: 0; +} +.sidebar-scroll, +.toc-scroll { + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + scroll-behavior: smooth; +} +.content { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 0 3em; + width: 46em; +} +.icon { + display: inline-block; + height: 1rem; + width: 1rem; +} +.icon svg { + height: 100%; + width: 100%; +} +.announcement { + align-items: center; + background-color: var(--color-announcement-background); + color: var(--color-announcement-text); + display: flex; + height: var(--header-height); + overflow-x: auto; +} +.announcement + .page { + min-height: calc(100% - var(--header-height)); +} +.announcement-content { + box-sizing: border-box; + min-width: 100%; + padding: 0.5rem; + text-align: center; + white-space: nowrap; +} +.announcement-content a { + color: var(--color-announcement-text); + text-decoration-color: var(--color-announcement-text); +} +.announcement-content a:hover { + color: var(--color-announcement-text); + text-decoration-color: var(--color-link--hover); +} +.no-js .theme-toggle-container { + display: none; +} +.theme-toggle-container { + display: flex; +} +.theme-toggle { + background: transparent; + border: none; + cursor: pointer; + display: flex; + padding: 0; +} +.theme-toggle svg { + color: var(--color-foreground-primary); + display: none; + height: 1.25rem; + width: 1.25rem; +} +.theme-toggle-header { + align-items: center; + display: flex; + justify-content: center; +} +.nav-overlay-icon, +.toc-overlay-icon { + cursor: pointer; + display: none; +} +.nav-overlay-icon .icon, +.toc-overlay-icon .icon { + color: var(--color-foreground-secondary); + height: 1.5rem; + width: 1.5rem; +} +.nav-overlay-icon, +.toc-header-icon { + align-items: center; + justify-content: center; +} +.toc-content-icon { + height: 1.5rem; + width: 1.5rem; +} +.content-icon-container { + display: flex; + float: right; + gap: 0.5rem; + margin-bottom: 1rem; + margin-left: 1rem; + margin-top: 1.5rem; +} +.content-icon-container .edit-this-page svg, +.content-icon-container .view-this-page svg { + color: inherit; + height: 1.25rem; + width: 1.25rem; +} +.sidebar-toggle { + display: none; + position: absolute; +} +.sidebar-toggle[name="__toc"] { + left: 20px; +} +.sidebar-toggle:checked { + left: 40px; +} +.overlay { + background-color: rgba(0, 0, 0, 0.54); + height: 0; + opacity: 0; + position: fixed; + top: 0; + transition: + width 0ms, + height 0ms, + opacity 0.25s ease-out; + width: 0; +} +.sidebar-overlay { + z-index: 20; +} +.toc-overlay { + z-index: 40; +} +.sidebar-drawer { + transition: left 0.25s ease-in-out; + z-index: 30; +} +.toc-drawer { + transition: right 0.25s ease-in-out; + z-index: 50; +} +#__navigation:checked ~ .sidebar-overlay { + height: 100%; + opacity: 1; + width: 100%; +} +#__navigation:checked ~ .page .sidebar-drawer { + left: 0; + top: 0; +} +#__toc:checked ~ .toc-overlay { + height: 100%; + opacity: 1; + width: 100%; +} +#__toc:checked ~ .page .toc-drawer { + right: 0; + top: 0; +} +.back-to-top { + background: var(--color-background-primary); + border-radius: 1rem; + box-shadow: + 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), + 0 0 1px 0 hsla(220, 9%, 46%, 0.502); + display: none; + font-size: 0.8125rem; + left: 0; + margin-left: 50%; + padding: 0.5rem 0.75rem 0.5rem 0.5rem; + position: fixed; + text-decoration: none; + top: 1rem; + transform: translateX(-50%); + z-index: 10; +} +.back-to-top svg { + height: 1rem; + width: 1rem; + fill: currentColor; + display: inline-block; +} +.back-to-top span { + margin-left: 0.25rem; +} +.show-back-to-top .back-to-top { + align-items: center; + display: flex; +} +@media (min-width: 97em) { + html { + font-size: 110%; + } +} +@media (max-width: 82em) { + .toc-content-icon { + display: flex; + } + .toc-drawer { + border-left: 1px solid var(--color-background-muted); + height: 100vh; + position: fixed; + right: -15em; + top: 0; + } + .toc-tree { + border-left: none; + font-size: var(--toc-font-size--mobile); + } + .sidebar-drawer { + width: calc(50% - 18.5em); + } +} +@media (max-width: 67em) { + .content { + margin-left: auto; + margin-right: auto; + padding: 0 1em; + } +} +@media (max-width: 63em) { + .nav-overlay-icon { + display: flex; + } + .sidebar-drawer { + height: 100vh; + left: -15em; + position: fixed; + top: 0; + width: 15em; + } + .theme-toggle-header, + .toc-header-icon { + display: flex; + } + .theme-toggle-content, + .toc-content-icon { + display: none; + } + .mobile-header { + align-items: center; + display: flex; + justify-content: space-between; + position: sticky; + top: 0; + } + .mobile-header .header-left, + .mobile-header .header-right { + display: flex; + height: var(--header-height); + padding: 0 var(--header-padding); + } + .mobile-header .header-left label, + .mobile-header .header-right label { + height: 100%; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + width: 100%; + } + .nav-overlay-icon .icon, + .theme-toggle svg { + height: 1.5rem; + width: 1.5rem; + } + :target { + scroll-margin-top: calc(var(--header-height) + 2.5rem); + } + .back-to-top { + top: calc(var(--header-height) + 0.5rem); + } + .page { + flex-direction: column; + justify-content: center; + } +} +@media (max-width: 48em) { + .content { + overflow-x: auto; + width: 100%; + } +} +@media (max-width: 46em) { + article[role="main"] aside.sidebar { + float: none; + margin: 1rem 0; + width: 100%; + } +} +.admonition, +.topic { + background: var(--color-admonition-background); + border-radius: 0.2rem; + box-shadow: + 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), + 0 0 0.0625rem rgba(0, 0, 0, 0.1); + font-size: var(--admonition-font-size); + margin: 1rem auto; + overflow: hidden; + padding: 0 0.5rem 0.5rem; + page-break-inside: avoid; +} +.admonition > :nth-child(2), +.topic > :nth-child(2) { + margin-top: 0; +} +.admonition > :last-child, +.topic > :last-child { + margin-bottom: 0; +} +.admonition p.admonition-title, +p.topic-title { + font-size: var(--admonition-title-font-size); + font-weight: 500; + line-height: 1.3; + margin: 0 -0.5rem 0.5rem; + padding: 0.4rem 0.5rem 0.4rem 2rem; + position: relative; +} +.admonition p.admonition-title:before, +p.topic-title:before { + content: ""; + height: 1rem; + left: 0.5rem; + position: absolute; + width: 1rem; +} +p.admonition-title { + background-color: var(--color-admonition-title-background); +} +p.admonition-title:before { + background-color: var(--color-admonition-title); + -webkit-mask-image: var(--icon-admonition-default); + mask-image: var(--icon-admonition-default); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; +} +p.topic-title { + background-color: var(--color-topic-title-background); +} +p.topic-title:before { + background-color: var(--color-topic-title); + -webkit-mask-image: var(--icon-topic-default); + mask-image: var(--icon-topic-default); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; +} +.admonition { + border-left: 0.2rem solid var(--color-admonition-title); +} +.admonition.caution { + border-left-color: var(--color-admonition-title--caution); +} +.admonition.caution > .admonition-title { + background-color: var(--color-admonition-title-background--caution); +} +.admonition.caution > .admonition-title:before { + background-color: var(--color-admonition-title--caution); + -webkit-mask-image: var(--icon-spark); + mask-image: var(--icon-spark); +} +.admonition.warning { + border-left-color: var(--color-admonition-title--warning); +} +.admonition.warning > .admonition-title { + background-color: var(--color-admonition-title-background--warning); +} +.admonition.warning > .admonition-title:before { + background-color: var(--color-admonition-title--warning); + -webkit-mask-image: var(--icon-warning); + mask-image: var(--icon-warning); +} +.admonition.danger { + border-left-color: var(--color-admonition-title--danger); +} +.admonition.danger > .admonition-title { + background-color: var(--color-admonition-title-background--danger); +} +.admonition.danger > .admonition-title:before { + background-color: var(--color-admonition-title--danger); + -webkit-mask-image: var(--icon-spark); + mask-image: var(--icon-spark); +} +.admonition.attention { + border-left-color: var(--color-admonition-title--attention); +} +.admonition.attention > .admonition-title { + background-color: var(--color-admonition-title-background--attention); +} +.admonition.attention > .admonition-title:before { + background-color: var(--color-admonition-title--attention); + -webkit-mask-image: var(--icon-warning); + mask-image: var(--icon-warning); +} +.admonition.error { + border-left-color: var(--color-admonition-title--error); +} +.admonition.error > .admonition-title { + background-color: var(--color-admonition-title-background--error); +} +.admonition.error > .admonition-title:before { + background-color: var(--color-admonition-title--error); + -webkit-mask-image: var(--icon-failure); + mask-image: var(--icon-failure); +} +.admonition.hint { + border-left-color: var(--color-admonition-title--hint); +} +.admonition.hint > .admonition-title { + background-color: var(--color-admonition-title-background--hint); +} +.admonition.hint > .admonition-title:before { + background-color: var(--color-admonition-title--hint); + -webkit-mask-image: var(--icon-question); + mask-image: var(--icon-question); +} +.admonition.tip { + border-left-color: var(--color-admonition-title--tip); +} +.admonition.tip > .admonition-title { + background-color: var(--color-admonition-title-background--tip); +} +.admonition.tip > .admonition-title:before { + background-color: var(--color-admonition-title--tip); + -webkit-mask-image: var(--icon-info); + mask-image: var(--icon-info); +} +.admonition.important { + border-left-color: var(--color-admonition-title--important); +} +.admonition.important > .admonition-title { + background-color: var(--color-admonition-title-background--important); +} +.admonition.important > .admonition-title:before { + background-color: var(--color-admonition-title--important); + -webkit-mask-image: var(--icon-flame); + mask-image: var(--icon-flame); +} +.admonition.note { + border-left-color: var(--color-admonition-title--note); +} +.admonition.note > .admonition-title { + background-color: var(--color-admonition-title-background--note); +} +.admonition.note > .admonition-title:before { + background-color: var(--color-admonition-title--note); + -webkit-mask-image: var(--icon-pencil); + mask-image: var(--icon-pencil); +} +.admonition.seealso { + border-left-color: var(--color-admonition-title--seealso); +} +.admonition.seealso > .admonition-title { + background-color: var(--color-admonition-title-background--seealso); +} +.admonition.seealso > .admonition-title:before { + background-color: var(--color-admonition-title--seealso); + -webkit-mask-image: var(--icon-info); + mask-image: var(--icon-info); +} +.admonition.admonition-todo { + border-left-color: var(--color-admonition-title--admonition-todo); +} +.admonition.admonition-todo > .admonition-title { + background-color: var(--color-admonition-title-background--admonition-todo); +} +.admonition.admonition-todo > .admonition-title:before { + background-color: var(--color-admonition-title--admonition-todo); + -webkit-mask-image: var(--icon-pencil); + mask-image: var(--icon-pencil); +} +.admonition-todo > .admonition-title { + text-transform: uppercase; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dd { + margin-left: 2rem; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dd + > :first-child { + margin-top: 0.125rem; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + .field-list, +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dd + > :last-child { + margin-bottom: 0.75rem; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + .field-list + > dt { + font-size: var(--font-size--small); + text-transform: uppercase; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + .field-list + dd:empty { + margin-bottom: 0.5rem; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + .field-list + dd + > ul { + margin-left: -1.2rem; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + .field-list + dd + > ul + > li + > p:nth-child(2) { + margin-top: 0; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + .field-list + dd + > ul + > li + > p + + p:last-child:empty { + margin-bottom: 0; + margin-top: 0; +} +dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt { + color: var(--color-api-overall); +} +.sig:not(.sig-inline) { + background: var(--color-api-background); + border-radius: 0.25rem; + font-family: var(--font-stack--monospace); + font-size: var(--api-font-size); + font-weight: 700; + margin-left: -0.25rem; + margin-right: -0.25rem; + padding: 0.25rem 0.5rem 0.25rem 3em; + text-indent: -2.5em; + transition: background 0.1s ease-out; +} +.sig:not(.sig-inline):hover { + background: var(--color-api-background-hover); +} +.sig:not(.sig-inline) a.reference .viewcode-link { + font-weight: 400; + width: 4.25rem; +} +em.property { + font-style: normal; +} +em.property:first-child { + color: var(--color-api-keyword); +} +.sig-name { + color: var(--color-api-name); +} +.sig-prename { + color: var(--color-api-pre-name); + font-weight: 400; +} +.sig-paren { + color: var(--color-api-paren); +} +.sig-param { + font-style: normal; +} +div.deprecated, +div.versionadded, +div.versionchanged, +div.versionremoved { + border-left: 0.1875rem solid; + border-radius: 0.125rem; + padding-left: 0.75rem; +} +div.deprecated p, +div.versionadded p, +div.versionchanged p, +div.versionremoved p { + margin-bottom: 0.125rem; + margin-top: 0.125rem; +} +div.versionadded { + border-color: var(--color-api-added-border); +} +div.versionadded .versionmodified { + color: var(--color-api-added); +} +div.versionchanged { + border-color: var(--color-api-changed-border); +} +div.versionchanged .versionmodified { + color: var(--color-api-changed); +} +div.deprecated { + border-color: var(--color-api-deprecated-border); +} +div.deprecated .versionmodified { + color: var(--color-api-deprecated); +} +div.versionremoved { + border-color: var(--color-api-removed-border); +} +div.versionremoved .versionmodified { + color: var(--color-api-removed); +} +.viewcode-back, +.viewcode-link { + float: right; + text-align: right; +} +.line-block { + margin-bottom: 0.75rem; + margin-top: 0.5rem; +} +.line-block .line-block { + margin-bottom: 0; + margin-top: 0; + padding-left: 1rem; +} +.code-block-caption, +article p.caption, +table > caption { + font-size: var(--font-size--small); + text-align: center; +} +.toctree-wrapper.compound .caption, +.toctree-wrapper.compound :not(.caption) > .caption-text { + font-size: var(--font-size--small); + margin-bottom: 0; + text-align: initial; + text-transform: uppercase; +} +.toctree-wrapper.compound > ul { + margin-bottom: 0; + margin-top: 0; +} +.sig-inline, +code.literal { + background: var(--color-inline-code-background); + border-radius: 0.2em; + font-size: var(--font-size--small--2); + padding: 0.1em 0.2em; +} +pre.literal-block .sig-inline, +pre.literal-block code.literal { + font-size: inherit; + padding: 0; +} +p .sig-inline, +p code.literal { + border: 1px solid var(--color-background-border); +} +.sig-inline { + font-family: var(--font-stack--monospace); +} +div[class*=" highlight-"], +div[class^="highlight-"] { + display: flex; + margin: 1em 0; +} +div[class*=" highlight-"] .table-wrapper, +div[class^="highlight-"] .table-wrapper, +pre { + margin: 0; + padding: 0; +} +pre { + overflow: auto; +} +article[role="main"] .highlight pre { + line-height: 1.5; +} +.highlight pre, +pre.literal-block { + font-size: var(--code-font-size); + padding: 0.625rem 0.875rem; +} +pre.literal-block { + background-color: var(--color-code-background); + border-radius: 0.2rem; + color: var(--color-code-foreground); + margin-bottom: 1rem; + margin-top: 1rem; +} +.highlight { + border-radius: 0.2rem; + width: 100%; +} +.highlight .gp, +.highlight span.linenos { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.highlight .hll { + display: block; + margin-left: -0.875rem; + margin-right: -0.875rem; + padding-left: 0.875rem; + padding-right: 0.875rem; +} +.code-block-caption { + background-color: var(--color-code-background); + border-bottom: 1px solid; + border-radius: 0.25rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-color: var(--color-background-border); + color: var(--color-code-foreground); + display: flex; + font-weight: 300; + padding: 0.625rem 0.875rem; +} +.code-block-caption + div[class] { + margin-top: 0; +} +.code-block-caption + div[class] pre { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.highlighttable { + display: block; + width: 100%; +} +.highlighttable tbody { + display: block; +} +.highlighttable tr { + display: flex; +} +.highlighttable td.linenos { + background-color: var(--color-code-background); + border-bottom-left-radius: 0.2rem; + border-top-left-radius: 0.2rem; + color: var(--color-code-foreground); + padding: 0.625rem 0 0.625rem 0.875rem; +} +.highlighttable .linenodiv { + box-shadow: -0.0625rem 0 var(--color-foreground-border) inset; + font-size: var(--code-font-size); + padding-right: 0.875rem; +} +.highlighttable td.code { + display: block; + flex: 1; + overflow: hidden; + padding: 0; +} +.highlighttable td.code .highlight { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.highlight span.linenos { + box-shadow: -0.0625rem 0 var(--color-foreground-border) inset; + display: inline-block; + margin-right: 0.875rem; + padding-left: 0; + padding-right: 0.875rem; +} +.footnote-reference { + font-size: var(--font-size--small--4); + vertical-align: super; +} +dl.footnote.brackets { + color: var(--color-foreground-secondary); + display: grid; + font-size: var(--font-size--small); + grid-template-columns: max-content auto; +} +dl.footnote.brackets dt { + margin: 0; +} +dl.footnote.brackets dt > .fn-backref { + margin-left: 0.25rem; +} +dl.footnote.brackets dt:after { + content: ":"; +} +dl.footnote.brackets dt .brackets:before { + content: "["; +} +dl.footnote.brackets dt .brackets:after { + content: "]"; +} +dl.footnote.brackets dd { + margin: 0; + padding: 0 1rem; +} +aside.footnote { + color: var(--color-foreground-secondary); + font-size: var(--font-size--small); +} +aside.footnote > span, +div.citation > span { + float: left; + font-weight: 500; + padding-right: 0.25rem; +} +aside.footnote > :not(span), +div.citation > p { + margin-left: 2rem; +} +img { + box-sizing: border-box; + height: auto; + max-width: 100%; +} +article .figure, +article figure { + border-radius: 0.2rem; + margin: 0; +} +article .figure :last-child, +article figure :last-child { + margin-bottom: 0; +} +article .align-left { + clear: left; + float: left; + margin: 0 1rem 1rem; +} +article .align-right { + clear: right; + float: right; + margin: 0 1rem 1rem; +} +article .align-center, +article .align-default { + display: block; + margin-left: auto; + margin-right: auto; + text-align: center; +} +article table.align-default { + display: table; + text-align: initial; +} +.domainindex-jumpbox, +.genindex-jumpbox { + border-bottom: 1px solid var(--color-background-border); + border-top: 1px solid var(--color-background-border); + padding: 0.25rem; +} +.domainindex-section h2, +.genindex-section h2 { + margin-bottom: 0.5rem; + margin-top: 0.75rem; +} +.domainindex-section ul, +.genindex-section ul { + margin-bottom: 0; + margin-top: 0; +} +ol, +ul { + margin-bottom: 1rem; + margin-top: 1rem; + padding-left: 1.2rem; +} +ol li > p:first-child, +ul li > p:first-child { + margin-bottom: 0.25rem; + margin-top: 0.25rem; +} +ol li > p:last-child, +ul li > p:last-child { + margin-top: 0.25rem; +} +ol li > ol, +ol li > ul, +ul li > ol, +ul li > ul { + margin-bottom: 0.5rem; + margin-top: 0.5rem; +} +ol.arabic { + list-style: decimal; +} +ol.loweralpha { + list-style: lower-alpha; +} +ol.upperalpha { + list-style: upper-alpha; +} +ol.lowerroman { + list-style: lower-roman; +} +ol.upperroman { + list-style: upper-roman; +} +.simple li > ol, +.simple li > ul, +.toctree-wrapper li > ol, +.toctree-wrapper li > ul { + margin-bottom: 0; + margin-top: 0; +} +.field-list dt, +.option-list dt, +dl.footnote dt, +dl.glossary dt, +dl.simple dt, +dl:not([class]) dt { + font-weight: 500; + margin-top: 0.25rem; +} +.field-list dt + dt, +.option-list dt + dt, +dl.footnote dt + dt, +dl.glossary dt + dt, +dl.simple dt + dt, +dl:not([class]) dt + dt { + margin-top: 0; +} +.field-list dt .classifier:before, +.option-list dt .classifier:before, +dl.footnote dt .classifier:before, +dl.glossary dt .classifier:before, +dl.simple dt .classifier:before, +dl:not([class]) dt .classifier:before { + content: ":"; + margin-left: 0.2rem; + margin-right: 0.2rem; +} +.field-list dd ul, +.field-list dd > p:first-child, +.option-list dd ul, +.option-list dd > p:first-child, +dl.footnote dd ul, +dl.footnote dd > p:first-child, +dl.glossary dd ul, +dl.glossary dd > p:first-child, +dl.simple dd ul, +dl.simple dd > p:first-child, +dl:not([class]) dd ul, +dl:not([class]) dd > p:first-child { + margin-top: 0.125rem; +} +.field-list dd ul, +.option-list dd ul, +dl.footnote dd ul, +dl.glossary dd ul, +dl.simple dd ul, +dl:not([class]) dd ul { + margin-bottom: 0.125rem; +} +.math-wrapper { + overflow-x: auto; + width: 100%; +} +div.math { + position: relative; + text-align: center; +} +div.math .headerlink, +div.math:focus .headerlink { + display: none; +} +div.math:hover .headerlink { + display: inline-block; +} +div.math span.eqno { + position: absolute; + right: 0.5rem; + top: 50%; + transform: translateY(-50%); + z-index: 1; +} +abbr[title] { + cursor: help; +} +.problematic { + color: var(--color-problematic); +} +kbd:not(.compound) { + background-color: var(--color-background-secondary); + border: 1px solid var(--color-foreground-border); + border-radius: 0.2rem; + box-shadow: + 0 0.0625rem 0 rgba(0, 0, 0, 0.2), + inset 0 0 0 0.125rem var(--color-background-primary); + color: var(--color-foreground-primary); + display: inline-block; + font-size: var(--font-size--small--3); + margin: 0 0.2rem; + padding: 0 0.2rem; + vertical-align: text-bottom; +} +blockquote { + background: var(--color-background-secondary); + border-left: 4px solid var(--color-background-border); + margin-left: 0; + margin-right: 0; + padding: 0.5rem 1rem; +} +blockquote .attribution { + font-weight: 600; + text-align: right; +} +blockquote.highlights, +blockquote.pull-quote { + font-size: 1.25em; +} +blockquote.epigraph, +blockquote.pull-quote { + border-left-width: 0; + border-radius: 0.5rem; +} +blockquote.highlights { + background: transparent; + border-left-width: 0; +} +p .reference img { + vertical-align: middle; +} +p.rubric { + font-size: 1.125em; + font-weight: 700; + line-height: 1.25; +} +dd p.rubric { + font-size: var(--font-size--small); + font-weight: inherit; + line-height: inherit; + text-transform: uppercase; +} +article .sidebar { + background-color: var(--color-background-secondary); + border: 1px solid var(--color-background-border); + border-radius: 0.2rem; + clear: right; + float: right; + margin-left: 1rem; + margin-right: 0; + width: 30%; +} +article .sidebar > * { + padding-left: 1rem; + padding-right: 1rem; +} +article .sidebar > ol, +article .sidebar > ul { + padding-left: 2.2rem; +} +article .sidebar .sidebar-title { + border-bottom: 1px solid var(--color-background-border); + font-weight: 500; + margin: 0; + padding: 0.5rem 1rem; +} +[role="main"] .table-wrapper.container { + margin-bottom: 0.5rem; + margin-top: 1rem; + overflow-x: auto; + padding: 0.2rem 0.2rem 0.75rem; + width: 100%; +} +table.docutils { + border-collapse: collapse; + border-radius: 0.2rem; + border-spacing: 0; + box-shadow: + 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), + 0 0 0.0625rem rgba(0, 0, 0, 0.1); +} +table.docutils th { + background: var(--color-table-header-background); +} +table.docutils td, +table.docutils th { + border-bottom: 1px solid var(--color-table-border); + border-left: 1px solid var(--color-table-border); + border-right: 1px solid var(--color-table-border); + padding: 0 0.25rem; +} +table.docutils td p, +table.docutils th p { + margin: 0.25rem; +} +table.docutils td:first-child, +table.docutils th:first-child { + border-left: none; +} +table.docutils td:last-child, +table.docutils th:last-child { + border-right: none; +} +table.docutils td.text-left, +table.docutils th.text-left { + text-align: left; +} +table.docutils td.text-right, +table.docutils th.text-right { + text-align: right; +} +table.docutils td.text-center, +table.docutils th.text-center { + text-align: center; +} +:target { + scroll-margin-top: 2.5rem; +} +@media (max-width: 67em) { + :target { + scroll-margin-top: calc(2.5rem + var(--header-height)); + } + section > span:target { + scroll-margin-top: calc(2.8rem + var(--header-height)); + } +} +.headerlink { + font-weight: 100; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.code-block-caption > .headerlink, +dl dt > .headerlink, +figcaption p > .headerlink, +h1 > .headerlink, +h2 > .headerlink, +h3 > .headerlink, +h4 > .headerlink, +h5 > .headerlink, +h6 > .headerlink, +p.caption > .headerlink, +table > caption > .headerlink { + margin-left: 0.5rem; + visibility: hidden; +} +.code-block-caption:hover > .headerlink, +dl dt:hover > .headerlink, +figcaption p:hover > .headerlink, +h1:hover > .headerlink, +h2:hover > .headerlink, +h3:hover > .headerlink, +h4:hover > .headerlink, +h5:hover > .headerlink, +h6:hover > .headerlink, +p.caption:hover > .headerlink, +table > caption:hover > .headerlink { + visibility: visible; +} +.code-block-caption > .toc-backref, +dl dt > .toc-backref, +figcaption p > .toc-backref, +h1 > .toc-backref, +h2 > .toc-backref, +h3 > .toc-backref, +h4 > .toc-backref, +h5 > .toc-backref, +h6 > .toc-backref, +p.caption > .toc-backref, +table > caption > .toc-backref { + color: inherit; + text-decoration-line: none; +} +figure:hover > figcaption > p > .headerlink, +table:hover > caption > .headerlink { + visibility: visible; +} +:target > h1:first-of-type, +:target > h2:first-of-type, +:target > h3:first-of-type, +:target > h4:first-of-type, +:target > h5:first-of-type, +:target > h6:first-of-type, +span:target ~ h1:first-of-type, +span:target ~ h2:first-of-type, +span:target ~ h3:first-of-type, +span:target ~ h4:first-of-type, +span:target ~ h5:first-of-type, +span:target ~ h6:first-of-type { + background-color: var(--color-highlight-on-target); +} +:target > h1:first-of-type code.literal, +:target > h2:first-of-type code.literal, +:target > h3:first-of-type code.literal, +:target > h4:first-of-type code.literal, +:target > h5:first-of-type code.literal, +:target > h6:first-of-type code.literal, +span:target ~ h1:first-of-type code.literal, +span:target ~ h2:first-of-type code.literal, +span:target ~ h3:first-of-type code.literal, +span:target ~ h4:first-of-type code.literal, +span:target ~ h5:first-of-type code.literal, +span:target ~ h6:first-of-type code.literal { + background-color: transparent; +} +.literal-block-wrapper:target .code-block-caption, +.this-will-duplicate-information-and-it-is-still-useful-here li :target, +figure:target, +table:target > caption { + background-color: var(--color-highlight-on-target); +} +dt:target { + background-color: var(--color-highlight-on-target) !important; +} +.footnote-reference:target, +.footnote > dt:target + dd { + background-color: var(--color-highlight-on-target); +} +.guilabel { + background-color: var(--color-guilabel-background); + border: 1px solid var(--color-guilabel-border); + border-radius: 0.5em; + color: var(--color-guilabel-text); + font-size: 0.9em; + padding: 0 0.3em; +} +footer { + display: flex; + flex-direction: column; + font-size: var(--font-size--small); + margin-top: 2rem; +} +.bottom-of-page { + align-items: center; + border-top: 1px solid var(--color-background-border); + color: var(--color-foreground-secondary); + display: flex; + justify-content: space-between; + line-height: 1.5; + margin-top: 1rem; + padding-bottom: 1rem; + padding-top: 1rem; +} +@media (max-width: 46em) { + .bottom-of-page { + flex-direction: column-reverse; + gap: 0.25rem; + text-align: center; + } +} +.bottom-of-page .left-details { + font-size: var(--font-size--small); +} +.bottom-of-page .right-details { + display: flex; + flex-direction: column; + gap: 0.25rem; + text-align: right; +} +.bottom-of-page .icons { + display: flex; + font-size: 1rem; + gap: 0.25rem; + justify-content: flex-end; +} +.bottom-of-page .icons a { + text-decoration: none; +} +.bottom-of-page .icons img, +.bottom-of-page .icons svg { + font-size: 1.125rem; + height: 1em; + width: 1em; +} +.related-pages a { + align-items: center; + display: flex; + text-decoration: none; +} +.related-pages a:hover .page-info .title { + color: var(--color-link); + text-decoration: underline; + text-decoration-color: var(--color-link-underline); +} +.related-pages a svg.furo-related-icon, +.related-pages a svg.furo-related-icon > use { + color: var(--color-foreground-border); + flex-shrink: 0; + height: 0.75rem; + margin: 0 0.5rem; + width: 0.75rem; +} +.related-pages a.next-page { + clear: right; + float: right; + max-width: 50%; + text-align: right; +} +.related-pages a.prev-page { + clear: left; + float: left; + max-width: 50%; +} +.related-pages a.prev-page svg { + transform: rotate(180deg); +} +.page-info { + display: flex; + flex-direction: column; + overflow-wrap: anywhere; +} +.next-page .page-info { + align-items: flex-end; +} +.page-info .context { + align-items: center; + color: var(--color-foreground-muted); + display: flex; + font-size: var(--font-size--small); + padding-bottom: 0.1rem; + text-decoration: none; +} +ul.search { + list-style: none; + padding-left: 0; +} +ul.search li { + border-bottom: 1px solid var(--color-background-border); + padding: 1rem 0; +} +[role="main"] .highlighted { + background-color: var(--color-highlighted-background); + color: var(--color-highlighted-text); +} +.sidebar-brand { + display: flex; + flex-direction: column; + flex-shrink: 0; + padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal); + text-decoration: none; +} +.sidebar-brand-text { + color: var(--color-sidebar-brand-text); + font-size: 1.5rem; + overflow-wrap: break-word; +} +.sidebar-brand-text, +.sidebar-logo-container { + margin: var(--sidebar-item-spacing-vertical) 0; +} +.sidebar-logo { + display: block; + margin: 0 auto; + max-width: 100%; +} +.sidebar-search-container { + align-items: center; + background: var(--color-sidebar-search-background); + display: flex; + margin-top: var(--sidebar-search-space-above); + position: relative; +} +.sidebar-search-container:focus-within, +.sidebar-search-container:hover { + background: var(--color-sidebar-search-background--focus); +} +.sidebar-search-container:before { + background-color: var(--color-sidebar-search-icon); + content: ""; + height: var(--sidebar-search-icon-size); + left: var(--sidebar-item-spacing-horizontal); + -webkit-mask-image: var(--icon-search); + mask-image: var(--icon-search); + position: absolute; + width: var(--sidebar-search-icon-size); +} +.sidebar-search { + background: transparent; + border: none; + border-bottom: 1px solid var(--color-sidebar-search-border); + border-top: 1px solid var(--color-sidebar-search-border); + box-sizing: border-box; + color: var(--color-sidebar-search-foreground); + padding: var(--sidebar-search-input-spacing-vertical) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-input-spacing-vertical) + calc( + var(--sidebar-item-spacing-horizontal) + + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size) + ); + width: 100%; + z-index: 10; +} +.sidebar-search:focus { + outline: none; +} +.sidebar-search::-moz-placeholder { + font-size: var(--sidebar-search-input-font-size); +} +.sidebar-search::placeholder { + font-size: var(--sidebar-search-input-font-size); +} +#searchbox .highlight-link { + margin: 0; + padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0; + text-align: center; +} +#searchbox .highlight-link a { + color: var(--color-sidebar-search-icon); + font-size: var(--font-size--small--2); +} +.sidebar-tree { + font-size: var(--sidebar-item-font-size); + margin-bottom: var(--sidebar-item-spacing-vertical); + margin-top: var(--sidebar-tree-space-above); +} +.sidebar-tree ul { + display: flex; + flex-direction: column; + list-style: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} +.sidebar-tree li { + margin: 0; + position: relative; +} +.sidebar-tree li > ul { + margin-left: var(--sidebar-item-spacing-horizontal); +} +.sidebar-tree .icon, +.sidebar-tree .reference { + color: var(--color-sidebar-link-text); +} +.sidebar-tree .reference { + box-sizing: border-box; + display: inline-block; + height: 100%; + line-height: var(--sidebar-item-line-height); + overflow-wrap: anywhere; + padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal); + text-decoration: none; + width: 100%; +} +.sidebar-tree .reference:hover { + background: var(--color-sidebar-item-background--hover); + color: var(--color-sidebar-link-text); +} +.sidebar-tree .reference.external:after { + color: var(--color-sidebar-link-text); + content: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E"); + margin: 0 0.25rem; + vertical-align: middle; +} +.sidebar-tree .current-page > .reference { + font-weight: 700; +} +.sidebar-tree label { + align-items: center; + cursor: pointer; + display: flex; + height: var(--sidebar-item-height); + justify-content: center; + position: absolute; + right: 0; + top: 0; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + width: var(--sidebar-expander-width); +} +.sidebar-tree .caption, +.sidebar-tree :not(.caption) > .caption-text { + color: var(--color-sidebar-caption-text); + font-size: var(--sidebar-caption-font-size); + font-weight: 700; + margin: var(--sidebar-caption-space-above) 0 0 0; + padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal); + text-transform: uppercase; +} +.sidebar-tree li.has-children > .reference { + padding-right: var(--sidebar-expander-width); +} +.sidebar-tree .toctree-l1 > .reference, +.sidebar-tree .toctree-l1 > label .icon { + color: var(--color-sidebar-link-text--top-level); +} +.sidebar-tree label { + background: var(--color-sidebar-item-expander-background); +} +.sidebar-tree label:hover { + background: var(--color-sidebar-item-expander-background--hover); +} +.sidebar-tree .current > .reference { + background: var(--color-sidebar-item-background--current); +} +.sidebar-tree .current > .reference:hover { + background: var(--color-sidebar-item-background--hover); +} +.toctree-checkbox { + display: none; + position: absolute; +} +.toctree-checkbox ~ ul { + display: none; +} +.toctree-checkbox ~ label .icon svg { + transform: rotate(90deg); +} +.toctree-checkbox:checked ~ ul { + display: block; +} +.toctree-checkbox:checked ~ label .icon svg { + transform: rotate(-90deg); +} +.toc-title-container { + padding: var(--toc-title-padding); + padding-top: var(--toc-spacing-vertical); +} +.toc-title { + color: var(--color-toc-title-text); + font-size: var(--toc-title-font-size); + padding-left: var(--toc-spacing-horizontal); + text-transform: uppercase; +} +.no-toc { + display: none; +} +.toc-tree-container { + padding-bottom: var(--toc-spacing-vertical); +} +.toc-tree { + border-left: 1px solid var(--color-background-border); + font-size: var(--toc-font-size); + line-height: 1.3; + padding-left: calc( + var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal) + ); +} +.toc-tree > ul > li:first-child { + padding-top: 0; +} +.toc-tree > ul > li:first-child > ul { + padding-left: 0; +} +.toc-tree > ul > li:first-child > a { + display: none; +} +.toc-tree ul { + list-style-type: none; + margin-bottom: 0; + margin-top: 0; + padding-left: var(--toc-item-spacing-horizontal); +} +.toc-tree li { + padding-top: var(--toc-item-spacing-vertical); +} +.toc-tree li.scroll-current > .reference { + color: var(--color-toc-item-text--active); + font-weight: 700; +} +.toc-tree a.reference { + color: var(--color-toc-item-text); + overflow-wrap: anywhere; + text-decoration: none; +} +.toc-scroll { + max-height: 100vh; + overflow-y: scroll; +} +.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here) { + background: rgba(255, 0, 0, 0.25); + color: var(--color-problematic); +} +.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before { + content: "ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling. Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."; +} +.text-align\:left > p { + text-align: left; +} +.text-align\:center > p { + text-align: center; +} +.text-align\:right > p { + text-align: right; +} +/*# sourceMappingURL=furo.css.map*/ diff --git a/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo.css.map b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo.css.map new file mode 100644 index 0000000000..bde6d24e61 --- /dev/null +++ b/venv/lib/python3.10/site-packages/furo/theme/furo/static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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sCAIA,aADF,WACE,CAKF,SACE,CAHJ,kBAEE,CAJE,gBAEJ,CAHI,iBAMA,yFAKA,aACA,eACA,cElbJ,iBAEE,aADA,iBACA,6BAEA,kCAEA,SACA,UAIA,gCACA,CALA,SAEA,SAEA,CAJA,0EAEA,CAFA,OAKA,CAGA,mDACE,iBAGF,gCACE,CADF,UACE,aAEJ,iCAEE,CAFF,UAEE,wCAEA,WACA,WADA,UACA,CACA,4CAGA,MACA,CADA,KACA,wCACA,UAGA,CAJA,UAIA,6DAUA,0CACE,CAFF,mBAEE,wEACA,CAVA,YACA,CAMF,mBAJE,OAOA,gBAJJ,gCACE,CANE,cACA,CAHA,oBACA,CAGA,QAGJ,CAII,0BACA,CADA,UACA,wCAEJ,kBACE,0DACA,gCACE,kBACA,CADA,YACA,oEACA,2CAMF,mDAII,CALN,YACE,CANE,cAKJ,CACE,iBAII,kEACA,yCACE,kDACA,yDACE,+CACA,uBANN,CAMM,+BANN,uCACE,qDACA,4BAEE,mBADA,0CACA,CADA,qBACA,0DACE,wCACA,sGALJ,oCACA,sBACE,kBAFF,UAEE,2CACA,wFACE,cACA,kEANN,uBACE,iDACA,CADA,UACA,0DACE,wDAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kE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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/variables/_layout.scss","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote, p\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto-light\n display: block\n\n @media (prefers-color-scheme: dark)\n .theme-toggle svg.theme-icon-when-auto-dark\n display: block\n .theme-toggle svg.theme-icon-when-auto-light\n display: none\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n --font-stack--headings: var(--font-stack);\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #6b6f76; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #0a4bff;\n --color-brand-content: #2757dd;\n --color-brand-visited: #872ee0;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n\n --color-api-added: #21632c;\n --color-api-added-border: #38a84d;\n --color-api-changed: #046172;\n --color-api-changed-border: #06a1bc;\n --color-api-deprecated: #605706;\n --color-api-deprecated-border: #f0d90f;\n --color-api-removed: #b30000;\n --color-api-removed-border: #ff5c5c;\n\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline--hover: var(--color-foreground-border);\n\n --color-link--visited: var(--color-brand-visited);\n --color-link-underline--visited: var(--color-background-border);\n --color-link--visited--hover: var(--color-brand-visited);\n --color-link-underline--visited--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #cfd0d0; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #3d94ff;\n --color-brand-content: #5ca5ff;\n --color-brand-visited: #b27aeb;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n --color-api-added: #3db854;\n --color-api-added-border: #267334;\n --color-api-changed: #09b0ce;\n --color-api-changed-border: #056d80;\n --color-api-deprecated: #b1a10b;\n --color-api-deprecated-border: #6e6407;\n --color-api-removed: #ff7575;\n --color-api-removed-border: #b03b3b;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-family: var(--font-stack--headings)\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:visited\n color: var(--color-link--visited)\n text-decoration-color: var(--color-link-underline--visited)\n &:hover\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &:visited\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n.skip-to-content\n position: fixed\n padding: 1rem\n border-radius: 1rem\n left: 0.25rem\n top: 0.25rem\n z-index: 40\n background: var(--color-background-primary)\n color: var(--color-foreground-primary)\n\n transform: translateY(-200%)\n transition: transform 300ms ease-in-out\n\n &:focus-within\n transform: translateY(0%)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n display: flex\n\n.theme-toggle\n display: flex\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n display: flex\n align-items: center\n justify-content: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1.5rem\n width: 1.5rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page, .view-this-page\n svg\n color: inherit\n height: 1.25rem\n width: 1.25rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $content-padded-width + $sidebar-width)\n // Center the page\n .content\n margin-left: auto\n margin-right: auto\n padding: 0 $content-padding--small\n\n@media (max-width: $content-padded-width--small + $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon, .theme-toggle-header\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.5rem\n width: 1.5rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: calc(var(--header-height) + 2.5rem)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n\n@media (max-width: $content-width + 2* $content-padding--small)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n article[role=main] aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$content-padded-width: $content-width + 2 * $content-padding;\n$content-padded-width--small: $content-width + 2 * $content-padding--small;\n$full-width: $content-padded-width + 2 * $sidebar-width;\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 4.25rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated,\ndiv.versionremoved\n border-left: 0.1875rem solid\n border-radius: 0.125rem\n\n padding-left: 0.75rem\n\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\ndiv.versionadded\n border-color: var(--color-api-added-border)\n .versionmodified\n color: var(--color-api-added)\n\ndiv.versionchanged\n border-color: var(--color-api-changed-border)\n .versionmodified\n color: var(--color-api-changed)\n\ndiv.deprecated\n border-color: var(--color-api-deprecated-border)\n .versionmodified\n color: var(--color-api-deprecated)\n\ndiv.versionremoved\n border-color: var(--color-api-removed-border)\n .versionmodified\n color: var(--color-api-removed)\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > *:not(span),\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n","[role=main] .table-wrapper.container\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 2.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(2.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(2.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n color: var(--color-sidebar-link-text)\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the