diff --git a/CHANGELOG.md b/CHANGELOG.md index 36dd080f4..0a566edf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## Unreleased - +## [0.27.0] - 2023-06-01 ### Fixed diff --git a/docs/api/suggester.md b/docs/api/suggester.md new file mode 100644 index 000000000..b8e4de8ad --- /dev/null +++ b/docs/api/suggester.md @@ -0,0 +1 @@ +::: textual.suggester diff --git a/docs/blog/images/selection-list.svg b/docs/blog/images/selection-list.svg new file mode 100644 index 000000000..040fa6d0f --- /dev/null +++ b/docs/blog/images/selection-list.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SelectionListApp + + + + + + + + + + SelectionListApp + + + Shall we play some games? ────────────────────────────────── + +XFalken's Maze +XBlack Jack +XGin Rummy +XHearts +XBridge +XCheckers +XChess +XPoker +XFighter Combat + + + + +────────────────────────────────────────────────────────────── + + + + + + diff --git a/docs/blog/images/sparkline.svg b/docs/blog/images/sparkline.svg new file mode 100644 index 000000000..ababa9a1e --- /dev/null +++ b/docs/blog/images/sparkline.svg @@ -0,0 +1,633 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SparklineColorsApp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blog/images/suggest.svg b/docs/blog/images/suggest.svg new file mode 100644 index 000000000..d6c5070fd --- /dev/null +++ b/docs/blog/images/suggest.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FruitsApp + + + + + + + + + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +strawberry +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blog/images/tooltips.svg b/docs/blog/images/tooltips.svg new file mode 100644 index 000000000..da3f93fa7 --- /dev/null +++ b/docs/blog/images/tooltips.svg @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TooltipApp + + + + + + + + + + + + + + + + + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +Click me +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +I must not fear. +Fear is the mind-killer. +Fear is the little-death that brings +total obliteration. +I will face my fear. + + + + + + + diff --git a/docs/blog/images/validation.svg b/docs/blog/images/validation.svg new file mode 100644 index 000000000..99d20c833 --- /dev/null +++ b/docs/blog/images/validation.svg @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + InputApp + + + + + + + + + + +Enter an even number between 1 and 100 that is also a palindrome. + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +foo +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +['Must be a valid number.''Value is not even.'"That's not a palindrome :/"] + + + + + + + + + + + + + + + + + + + diff --git a/docs/blog/posts/release2-24-0.md b/docs/blog/posts/release0-24-0.md similarity index 100% rename from docs/blog/posts/release2-24-0.md rename to docs/blog/posts/release0-24-0.md diff --git a/docs/blog/posts/release0-27-0.md b/docs/blog/posts/release0-27-0.md new file mode 100644 index 000000000..b4da88dd5 --- /dev/null +++ b/docs/blog/posts/release0-27-0.md @@ -0,0 +1,77 @@ +--- +draft: false +date: 2023-06-01 +categories: + - Release +title: "Textual adds Sparklines, Selection list, Input validation, and tool tips" +authors: + - willmcgugan +--- + +# Textual adds Sparklines, Selection list, Input validation, and tool tips + +It's been 12 days since the last Textual release, which is longer than our usual release cycle of a week. + +We've been a little distracted with our "dogfood" projects: [Frogmouth](https://github.com/Textualize/frogmouth) and [Trogon](https://github.com/Textualize/trogon). Both of which hit 1000 Github stars in 24 hours. We will be maintaining / updating those, but it is business as usual for this Textual release (and it's a big one). We have such sights to show you. + + + +## Sparkline widget + +A [Sparkline](../../widget_gallery.md#selectionlist) is essentially a mini-plot. Just detailed enough to keep an eye on time-series data. + +
+--8<-- "docs/blog/images/sparkline.svg" +
+ +Colors are configurable, and all it takes is a call to [`set_interval`](https://textual.textualize.io/api/message_pump/#textual.message_pump.MessagePump.set_interval) to make it animate. + +## Selection list + +Next up is the [SelectionList](../../widget_gallery.md#selectionlist) widget. Essentially a scrolling list of checkboxes. Lots of use cases for this one. + +
+--8<-- "docs/blog/images/selection-list.svg" +
+ +## Tooltips + +We've added [tooltips](../../guide/widgets.md#tooltips) to Textual widgets. + +The API couldn't be simpler: simply assign a string to the `tooltip` property on any widget. +This string will be displayed after 300ms when you hover over the widget. + + +
+--8<-- "docs/blog/images/tooltips.svg" +
+ +As always, you can configure how the tooltips will be displayed with CSS. + +## Input updates + +We have some quality of life improvements for the [Input](../../widget_gallery.md#input) widget. + +You can now use a simple declarative API to [validating input](http://127.0.0.1:8000/widgets/input/#validating-input). + +
+--8<-- "docs/blog/images/validation.svg" +
+ +Also in this release is a suggestion API, which will *suggest* auto completions as you type. +Hit right to accept the suggestion. + +Here's a screenshot: + +
+--8<-- "docs/blog/images/suggest.svg" +
+ +You could use this API to offer suggestions from a fixed list, or even pull the data from a network request. + +## Join us + +Development on Textual is *fast*. +We're very responsive to issues and feature requests. + +If you have any suggestions, jump on our [Discord server](https://discord.gg/Enf6Z3qhVr) and you may see your feature in the next release! diff --git a/docs/examples/widgets/sparkline_colors.py b/docs/examples/widgets/sparkline_colors.py index 5497beb47..5edc66213 100644 --- a/docs/examples/widgets/sparkline_colors.py +++ b/docs/examples/widgets/sparkline_colors.py @@ -1,3 +1,5 @@ +from math import sin + from textual.app import App, ComposeResult from textual.widgets._sparkline import Sparkline @@ -6,7 +8,7 @@ class SparklineColorsApp(App[None]): CSS_PATH = "sparkline_colors.css" def compose(self) -> ComposeResult: - nums = [10, 2, 30, 60, 45, 20, 7, 8, 9, 10, 50, 13, 10, 6, 5, 4, 3, 7, 20] + nums = [abs(sin(x / 3.14)) for x in range(0, 360 * 6, 20)] yield Sparkline(nums, summary_function=max, id="fst") yield Sparkline(nums, summary_function=max, id="snd") yield Sparkline(nums, summary_function=max, id="trd") diff --git a/mkdocs-nav.yml b/mkdocs-nav.yml index 1cd4f7f11..c45677fa0 100644 --- a/mkdocs-nav.yml +++ b/mkdocs-nav.yml @@ -186,6 +186,7 @@ nav: - "api/scrollbar.md" - "api/scroll_view.md" - "api/strip.md" + - "api/suggester.md" - "api/timer.md" - "api/types.md" - "api/walk.md" diff --git a/pyproject.toml b/pyproject.toml index 1504c6ce2..574668a42 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "textual" -version = "0.26.0" +version = "0.27.0" homepage = "https://github.com/Textualize/textual" description = "Modern Text User Interface framework" authors = ["Will McGugan "] diff --git a/src/textual/renderables/sparkline.py b/src/textual/renderables/sparkline.py index 6078a55df..8b22aff02 100644 --- a/src/textual/renderables/sparkline.py +++ b/src/textual/renderables/sparkline.py @@ -1,6 +1,7 @@ from __future__ import annotations import statistics +from fractions import Fraction from typing import Callable, Generic, Iterable, Sequence, TypeVar from rich.color import Color @@ -52,10 +53,10 @@ class Sparkline(Generic[T]): data: The data to partition. num_buckets: The number of buckets to partition the data into. """ - num_steps, remainder = divmod(len(data), num_buckets) - for i in range(num_buckets): - start = i * num_steps + min(i, remainder) - end = (i + 1) * num_steps + min(i + 1, remainder) + bucket_step = Fraction(len(data), num_buckets) + for bucket_no in range(num_buckets): + start = int(bucket_step * bucket_no) + end = int(bucket_step * (bucket_no + 1)) partition = data[start:end] if partition: yield partition diff --git a/tests/renderables/test_sparkline.py b/tests/renderables/test_sparkline.py index 5285ccc6c..12e53ea72 100644 --- a/tests/renderables/test_sparkline.py +++ b/tests/renderables/test_sparkline.py @@ -16,6 +16,7 @@ def test_sparkline_single_datapoint(): def test_sparkline_two_values_min_max(): + print(repr(render(Sparkline([2, 4], width=2)))) assert render(Sparkline([2, 4], width=2)) == f"{GREEN}▁{STOP}{RED}█{STOP}" @@ -40,13 +41,6 @@ def test_sparkline_shrink_data_to_width(): ) -def test_sparkline_shrink_data_to_width_non_divisible(): - assert ( - render(Sparkline([1, 2, 3, 4, 5], width=3, summary_function=min)) - == f"{GREEN}▁{STOP}{BLENDED}▄{STOP}{RED}█{STOP}" - ) - - def test_sparkline_color_blend(): assert ( render(Sparkline([1, 2, 3], width=3)) diff --git a/tests/snapshot_tests/__snapshots__/test_snapshots.ambr b/tests/snapshot_tests/__snapshots__/test_snapshots.ambr index 1c2ca4fa5..7252c099a 100644 --- a/tests/snapshot_tests/__snapshots__/test_snapshots.ambr +++ b/tests/snapshot_tests/__snapshots__/test_snapshots.ambr @@ -24362,268 +24362,682 @@ font-weight: 700; } - .terminal-734042839-matrix { + .terminal-2491064415-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-734042839-title { + .terminal-2491064415-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-734042839-r1 { fill: #e1e1e1 } - .terminal-734042839-r2 { fill: #c5c8c6 } - .terminal-734042839-r3 { fill: #e5a934 } - .terminal-734042839-r4 { fill: #fea62b } - .terminal-734042839-r5 { fill: #a9b24c } - .terminal-734042839-r6 { fill: #4ebf71 } - .terminal-734042839-r7 { fill: #7bb85e } - .terminal-734042839-r8 { fill: #c7ad40 } - .terminal-734042839-r9 { fill: #eea831 } - .terminal-734042839-r10 { fill: #eba832 } - .terminal-734042839-r11 { fill: #e8a933 } - .terminal-734042839-r12 { fill: #6cba64 } - .terminal-734042839-r13 { fill: #dcaa38 } - .terminal-734042839-r14 { fill: #f1a72f } - .terminal-734042839-r15 { fill: #f4a72e } - .terminal-734042839-r16 { fill: #f7a62d } - .terminal-734042839-r17 { fill: #faa62c } - .terminal-734042839-r18 { fill: #66bb67 } - .terminal-734042839-r19 { fill: #a2b24f } - .terminal-734042839-r20 { fill: #d0ac3d } - .terminal-734042839-r21 { fill: #84b75b } - .terminal-734042839-r22 { fill: #5dbc6a } - .terminal-734042839-r23 { fill: #60bc69 } - .terminal-734042839-r24 { fill: #63bb68 } - .terminal-734042839-r25 { fill: #dfaa37 } - .terminal-734042839-r26 { fill: #6fba63 } - .terminal-734042839-r27 { fill: #5abd6c } - .terminal-734042839-r28 { fill: #57bd6d } - .terminal-734042839-r29 { fill: #54be6e } - .terminal-734042839-r30 { fill: #51be6f } - .terminal-734042839-r31 { fill: #f49731 } - .terminal-734042839-r32 { fill: #dc7242 } - .terminal-734042839-r33 { fill: #b93c5b } - .terminal-734042839-r34 { fill: #ca574e } - .terminal-734042839-r35 { fill: #e88539 } - .terminal-734042839-r36 { fill: #f89c2f } - .terminal-734042839-r37 { fill: #f69b2f } - .terminal-734042839-r38 { fill: #f59930 } - .terminal-734042839-r39 { fill: #c44e52 } - .terminal-734042839-r40 { fill: #f09134 } - .terminal-734042839-r41 { fill: #f99e2e } - .terminal-734042839-r42 { fill: #faa02d } - .terminal-734042839-r43 { fill: #fba22c } - .terminal-734042839-r44 { fill: #fca42b } - .terminal-734042839-r45 { fill: #c24a54 } - .terminal-734042839-r46 { fill: #da6f43 } - .terminal-734042839-r47 { fill: #ec8a37 } - .terminal-734042839-r48 { fill: #ce5c4c } - .terminal-734042839-r49 { fill: #be4556 } - .terminal-734042839-r50 { fill: #c04656 } - .terminal-734042839-r51 { fill: #c14855 } - .terminal-734042839-r52 { fill: #f29333 } - .terminal-734042839-r53 { fill: #c65051 } - .terminal-734042839-r54 { fill: #bd4357 } - .terminal-734042839-r55 { fill: #bc4158 } - .terminal-734042839-r56 { fill: #bb3f59 } - .terminal-734042839-r57 { fill: #ba3d5a } - .terminal-734042839-r58 { fill: #124165 } - .terminal-734042839-r59 { fill: #153954 } - .terminal-734042839-r60 { fill: #0b5791 } - .terminal-734042839-r61 { fill: #0178d4 } - .terminal-734042839-r62 { fill: #0667b2 } - .terminal-734042839-r63 { fill: #0e4c7b } - .terminal-734042839-r64 { fill: #133e5f } - .terminal-734042839-r65 { fill: #123f61 } - .terminal-734042839-r66 { fill: #124063 } - .terminal-734042839-r67 { fill: #046dbd } - .terminal-734042839-r68 { fill: #11446c } - .terminal-734042839-r69 { fill: #133d5c } - .terminal-734042839-r70 { fill: #133c5a } - .terminal-734042839-r71 { fill: #143b58 } - .terminal-734042839-r72 { fill: #143a56 } - .terminal-734042839-r73 { fill: #036fc2 } - .terminal-734042839-r74 { fill: #0a5996 } - .terminal-734042839-r75 { fill: #0f4975 } - .terminal-734042839-r76 { fill: #0764ac } - .terminal-734042839-r77 { fill: #0272c8 } - .terminal-734042839-r78 { fill: #0371c6 } - .terminal-734042839-r79 { fill: #0370c4 } - .terminal-734042839-r80 { fill: #11436a } - .terminal-734042839-r81 { fill: #046cbb } - .terminal-734042839-r82 { fill: #0273cb } - .terminal-734042839-r83 { fill: #0274cd } - .terminal-734042839-r84 { fill: #0175cf } - .terminal-734042839-r85 { fill: #0176d1 } - .terminal-734042839-r86 { fill: #5b2935 } - .terminal-734042839-r87 { fill: #4c2730 } - .terminal-734042839-r88 { fill: #803144 } - .terminal-734042839-r89 { fill: #9c364f } - .terminal-734042839-r90 { fill: #6d2d3d } - .terminal-734042839-r91 { fill: #552833 } - .terminal-734042839-r92 { fill: #572934 } - .terminal-734042839-r93 { fill: #592935 } - .terminal-734042839-r94 { fill: #a63853 } - .terminal-734042839-r95 { fill: #602a38 } - .terminal-734042839-r96 { fill: #532832 } - .terminal-734042839-r97 { fill: #512832 } - .terminal-734042839-r98 { fill: #4f2731 } - .terminal-734042839-r99 { fill: #4d2730 } - .terminal-734042839-r100 { fill: #a93955 } - .terminal-734042839-r101 { fill: #843146 } - .terminal-734042839-r102 { fill: #682c3b } - .terminal-734042839-r103 { fill: #97354d } - .terminal-734042839-r104 { fill: #af3a57 } - .terminal-734042839-r105 { fill: #ad3956 } - .terminal-734042839-r106 { fill: #ab3955 } - .terminal-734042839-r107 { fill: #5e2a37 } - .terminal-734042839-r108 { fill: #a43852 } - .terminal-734042839-r109 { fill: #b13a58 } - .terminal-734042839-r110 { fill: #b33a58 } - .terminal-734042839-r111 { fill: #b53b59 } - .terminal-734042839-r112 { fill: #b73b5a } - .terminal-734042839-r113 { fill: #305d3e } - .terminal-734042839-r114 { fill: #2c4e36 } - .terminal-734042839-r115 { fill: #3c8452 } - .terminal-734042839-r116 { fill: #45a161 } - .terminal-734042839-r117 { fill: #367148 } - .terminal-734042839-r118 { fill: #2e573b } - .terminal-734042839-r119 { fill: #2f593c } - .terminal-734042839-r120 { fill: #305b3d } - .terminal-734042839-r121 { fill: #48ab66 } - .terminal-734042839-r122 { fill: #326341 } - .terminal-734042839-r123 { fill: #2e553a } - .terminal-734042839-r124 { fill: #2d5339 } - .terminal-734042839-r125 { fill: #2d5138 } - .terminal-734042839-r126 { fill: #2c4f37 } - .terminal-734042839-r127 { fill: #49af68 } - .terminal-734042839-r128 { fill: #3d8854 } - .terminal-734042839-r129 { fill: #346b45 } - .terminal-734042839-r130 { fill: #439b5e } - .terminal-734042839-r131 { fill: #4bb56b } - .terminal-734042839-r132 { fill: #4ab36a } - .terminal-734042839-r133 { fill: #49b169 } - .terminal-734042839-r134 { fill: #316140 } - .terminal-734042839-r135 { fill: #47a965 } - .terminal-734042839-r136 { fill: #4bb76c } - .terminal-734042839-r137 { fill: #4cb96d } - .terminal-734042839-r138 { fill: #4cbb6e } - .terminal-734042839-r139 { fill: #4dbd6f } + .terminal-2491064415-r1 { fill: #e1e1e1 } + .terminal-2491064415-r2 { fill: #c5c8c6 } + .terminal-2491064415-r3 { fill: #fea62b } + .terminal-2491064415-r4 { fill: #eea831 } + .terminal-2491064415-r5 { fill: #d0ac3c } + .terminal-2491064415-r6 { fill: #c2ae42 } + .terminal-2491064415-r7 { fill: #b4b048 } + .terminal-2491064415-r8 { fill: #9ab452 } + .terminal-2491064415-r9 { fill: #8db557 } + .terminal-2491064415-r10 { fill: #78b860 } + .terminal-2491064415-r11 { fill: #6eba63 } + .terminal-2491064415-r12 { fill: #66bb67 } + .terminal-2491064415-r13 { fill: #59bd6c } + .terminal-2491064415-r14 { fill: #54be6e } + .terminal-2491064415-r15 { fill: #4ebe70 } + .terminal-2491064415-r16 { fill: #50be70 } + .terminal-2491064415-r17 { fill: #57bd6d } + .terminal-2491064415-r18 { fill: #5cbc6b } + .terminal-2491064415-r19 { fill: #63bb68 } + .terminal-2491064415-r20 { fill: #74b961 } + .terminal-2491064415-r21 { fill: #7eb85d } + .terminal-2491064415-r22 { fill: #94b454 } + .terminal-2491064415-r23 { fill: #a1b34f } + .terminal-2491064415-r24 { fill: #aeb14a } + .terminal-2491064415-r25 { fill: #caad3f } + .terminal-2491064415-r26 { fill: #d9ab39 } + .terminal-2491064415-r27 { fill: #f7a62d } + .terminal-2491064415-r28 { fill: #f5a72e } + .terminal-2491064415-r29 { fill: #d7ab3a } + .terminal-2491064415-r30 { fill: #c8ad40 } + .terminal-2491064415-r31 { fill: #baaf45 } + .terminal-2491064415-r32 { fill: #9fb350 } + .terminal-2491064415-r33 { fill: #93b555 } + .terminal-2491064415-r34 { fill: #7cb85e } + .terminal-2491064415-r35 { fill: #72b962 } + .terminal-2491064415-r36 { fill: #6abb65 } + .terminal-2491064415-r37 { fill: #5bbd6b } + .terminal-2491064415-r38 { fill: #56bd6d } + .terminal-2491064415-r39 { fill: #4fbe70 } + .terminal-2491064415-r40 { fill: #55bd6e } + .terminal-2491064415-r41 { fill: #5abd6c } + .terminal-2491064415-r42 { fill: #60bc69 } + .terminal-2491064415-r43 { fill: #70ba63 } + .terminal-2491064415-r44 { fill: #79b85f } + .terminal-2491064415-r45 { fill: #8fb556 } + .terminal-2491064415-r46 { fill: #9bb352 } + .terminal-2491064415-r47 { fill: #a8b24c } + .terminal-2491064415-r48 { fill: #c4ae41 } + .terminal-2491064415-r49 { fill: #d3ac3c } + .terminal-2491064415-r50 { fill: #f1a730 } + .terminal-2491064415-r51 { fill: #fba62b } + .terminal-2491064415-r52 { fill: #ddaa37 } + .terminal-2491064415-r53 { fill: #ceac3d } + .terminal-2491064415-r54 { fill: #c0ae43 } + .terminal-2491064415-r55 { fill: #a5b24e } + .terminal-2491064415-r56 { fill: #98b453 } + .terminal-2491064415-r57 { fill: #81b75c } + .terminal-2491064415-r58 { fill: #76b960 } + .terminal-2491064415-r59 { fill: #6dba64 } + .terminal-2491064415-r60 { fill: #5ebc6a } + .terminal-2491064415-r61 { fill: #58bd6c } + .terminal-2491064415-r62 { fill: #50be6f } + .terminal-2491064415-r63 { fill: #4ebf71 } + .terminal-2491064415-r64 { fill: #53be6e } + .terminal-2491064415-r65 { fill: #58bd6d } + .terminal-2491064415-r66 { fill: #5dbc6a } + .terminal-2491064415-r67 { fill: #6cba64 } + .terminal-2491064415-r68 { fill: #75b961 } + .terminal-2491064415-r69 { fill: #8ab658 } + .terminal-2491064415-r70 { fill: #96b454 } + .terminal-2491064415-r71 { fill: #a3b24f } + .terminal-2491064415-r72 { fill: #beaf44 } + .terminal-2491064415-r73 { fill: #ccac3e } + .terminal-2491064415-r74 { fill: #7bb85f } + .terminal-2491064415-r75 { fill: #89b659 } + .terminal-2491064415-r76 { fill: #97b453 } + .terminal-2491064415-r77 { fill: #b1b049 } + .terminal-2491064415-r78 { fill: #d3ac3b } + .terminal-2491064415-r79 { fill: #ddaa38 } + .terminal-2491064415-r80 { fill: #e5a934 } + .terminal-2491064415-r81 { fill: #f2a72f } + .terminal-2491064415-r82 { fill: #fda62b } + .terminal-2491064415-r83 { fill: #f4a72e } + .terminal-2491064415-r84 { fill: #efa830 } + .terminal-2491064415-r85 { fill: #e8a933 } + .terminal-2491064415-r86 { fill: #cdac3e } + .terminal-2491064415-r87 { fill: #b7b047 } + .terminal-2491064415-r88 { fill: #aab14c } + .terminal-2491064415-r89 { fill: #9db351 } + .terminal-2491064415-r90 { fill: #83b75b } + .terminal-2491064415-r91 { fill: #91b556 } + .terminal-2491064415-r92 { fill: #acb14b } + .terminal-2491064415-r93 { fill: #b8af46 } + .terminal-2491064415-r94 { fill: #cfac3d } + .terminal-2491064415-r95 { fill: #e1a936 } + .terminal-2491064415-r96 { fill: #f0a730 } + .terminal-2491064415-r97 { fill: #fca62b } + .terminal-2491064415-r98 { fill: #f6a72d } + .terminal-2491064415-r99 { fill: #f1a72f } + .terminal-2491064415-r100 { fill: #eba832 } + .terminal-2491064415-r101 { fill: #dbaa38 } + .terminal-2491064415-r102 { fill: #d2ac3c } + .terminal-2491064415-r103 { fill: #bcaf45 } + .terminal-2491064415-r104 { fill: #b0b149 } + .terminal-2491064415-r105 { fill: #87b65a } + .terminal-2491064415-r106 { fill: #78b85f } + .terminal-2491064415-r107 { fill: #5abd6b } + .terminal-2491064415-r108 { fill: #6eba64 } + .terminal-2491064415-r109 { fill: #7db85e } + .terminal-2491064415-r110 { fill: #8bb658 } + .terminal-2491064415-r111 { fill: #a6b24d } + .terminal-2491064415-r112 { fill: #b3b048 } + .terminal-2491064415-r113 { fill: #d5ab3b } + .terminal-2491064415-r114 { fill: #deaa37 } + .terminal-2491064415-r115 { fill: #eda831 } + .terminal-2491064415-r116 { fill: #f3a72f } + .terminal-2491064415-r117 { fill: #fba62c } + .terminal-2491064415-r118 { fill: #f8a62d } + .terminal-2491064415-r119 { fill: #f3a72e } + .terminal-2491064415-r120 { fill: #dfaa37 } + .terminal-2491064415-r121 { fill: #d6ab3a } + .terminal-2491064415-r122 { fill: #c1ae43 } + .terminal-2491064415-r123 { fill: #b5b047 } + .terminal-2491064415-r124 { fill: #7fb85d } + .terminal-2491064415-r125 { fill: #f89c2f } + .terminal-2491064415-r126 { fill: #ec8a37 } + .terminal-2491064415-r127 { fill: #e6823b } + .terminal-2491064415-r128 { fill: #e1793f } + .terminal-2491064415-r129 { fill: #d66946 } + .terminal-2491064415-r130 { fill: #d26249 } + .terminal-2491064415-r131 { fill: #c9554f } + .terminal-2491064415-r132 { fill: #c54f52 } + .terminal-2491064415-r133 { fill: #c24a54 } + .terminal-2491064415-r134 { fill: #bd4257 } + .terminal-2491064415-r135 { fill: #bb4059 } + .terminal-2491064415-r136 { fill: #b93c5a } + .terminal-2491064415-r137 { fill: #b93d5a } + .terminal-2491064415-r138 { fill: #bc4158 } + .terminal-2491064415-r139 { fill: #be4456 } + .terminal-2491064415-r140 { fill: #c14855 } + .terminal-2491064415-r141 { fill: #c75350 } + .terminal-2491064415-r142 { fill: #cb584d } + .terminal-2491064415-r143 { fill: #d46647 } + .terminal-2491064415-r144 { fill: #d96e44 } + .terminal-2491064415-r145 { fill: #de7640 } + .terminal-2491064415-r146 { fill: #e98738 } + .terminal-2491064415-r147 { fill: #ef8f34 } + .terminal-2491064415-r148 { fill: #fba22c } + .terminal-2491064415-r149 { fill: #faa02d } + .terminal-2491064415-r150 { fill: #ee8e35 } + .terminal-2491064415-r151 { fill: #e98539 } + .terminal-2491064415-r152 { fill: #e37d3d } + .terminal-2491064415-r153 { fill: #d86d44 } + .terminal-2491064415-r154 { fill: #d46548 } + .terminal-2491064415-r155 { fill: #cb584e } + .terminal-2491064415-r156 { fill: #c75250 } + .terminal-2491064415-r157 { fill: #c44c53 } + .terminal-2491064415-r158 { fill: #be4457 } + .terminal-2491064415-r159 { fill: #bd4357 } + .terminal-2491064415-r160 { fill: #c04755 } + .terminal-2491064415-r161 { fill: #c65051 } + .terminal-2491064415-r162 { fill: #ca564f } + .terminal-2491064415-r163 { fill: #d26349 } + .terminal-2491064415-r164 { fill: #d76a45 } + .terminal-2491064415-r165 { fill: #dc7242 } + .terminal-2491064415-r166 { fill: #e7833a } + .terminal-2491064415-r167 { fill: #ed8c36 } + .terminal-2491064415-r168 { fill: #f89e2e } + .terminal-2491064415-r169 { fill: #fda42b } + .terminal-2491064415-r170 { fill: #f19233 } + .terminal-2491064415-r171 { fill: #eb8937 } + .terminal-2491064415-r172 { fill: #e5803b } + .terminal-2491064415-r173 { fill: #db7043 } + .terminal-2491064415-r174 { fill: #d66846 } + .terminal-2491064415-r175 { fill: #cd5a4d } + .terminal-2491064415-r176 { fill: #c9544f } + .terminal-2491064415-r177 { fill: #bf4556 } + .terminal-2491064415-r178 { fill: #bd4258 } + .terminal-2491064415-r179 { fill: #ba3d5a } + .terminal-2491064415-r180 { fill: #b93c5b } + .terminal-2491064415-r181 { fill: #bb3f59 } + .terminal-2491064415-r182 { fill: #bc4258 } + .terminal-2491064415-r183 { fill: #c44e52 } + .terminal-2491064415-r184 { fill: #c85350 } + .terminal-2491064415-r185 { fill: #d0604a } + .terminal-2491064415-r186 { fill: #d56747 } + .terminal-2491064415-r187 { fill: #da6f43 } + .terminal-2491064415-r188 { fill: #e57f3c } + .terminal-2491064415-r189 { fill: #ea8838 } + .terminal-2491064415-r190 { fill: #be4556 } + .terminal-2491064415-r191 { fill: #ca574e } + .terminal-2491064415-r192 { fill: #d05f4a } + .terminal-2491064415-r193 { fill: #d56846 } + .terminal-2491064415-r194 { fill: #e0783f } + .terminal-2491064415-r195 { fill: #e47f3c } + .terminal-2491064415-r196 { fill: #f49731 } + .terminal-2491064415-r197 { fill: #f99f2e } + .terminal-2491064415-r198 { fill: #fba12c } + .terminal-2491064415-r199 { fill: #fda52b } + .terminal-2491064415-r200 { fill: #f89d2f } + .terminal-2491064415-r201 { fill: #f59930 } + .terminal-2491064415-r202 { fill: #ef8e35 } + .terminal-2491064415-r203 { fill: #eb8938 } + .terminal-2491064415-r204 { fill: #e27b3e } + .terminal-2491064415-r205 { fill: #dd7341 } + .terminal-2491064415-r206 { fill: #d86b45 } + .terminal-2491064415-r207 { fill: #c75251 } + .terminal-2491064415-r208 { fill: #cd5c4c } + .terminal-2491064415-r209 { fill: #d36448 } + .terminal-2491064415-r210 { fill: #de7441 } + .terminal-2491064415-r211 { fill: #e27c3d } + .terminal-2491064415-r212 { fill: #ef8f35 } + .terminal-2491064415-r213 { fill: #f29532 } + .terminal-2491064415-r214 { fill: #f89d2e } + .terminal-2491064415-r215 { fill: #f99e2e } + .terminal-2491064415-r216 { fill: #f69a30 } + .terminal-2491064415-r217 { fill: #f09134 } + .terminal-2491064415-r218 { fill: #ec8b36 } + .terminal-2491064415-r219 { fill: #e47e3c } + .terminal-2491064415-r220 { fill: #df7740 } + .terminal-2491064415-r221 { fill: #cf5e4b } + .terminal-2491064415-r222 { fill: #be4357 } + .terminal-2491064415-r223 { fill: #d1614a } + .terminal-2491064415-r224 { fill: #db7142 } + .terminal-2491064415-r225 { fill: #e0793f } + .terminal-2491064415-r226 { fill: #ed8d36 } + .terminal-2491064415-r227 { fill: #f79c2f } + .terminal-2491064415-r228 { fill: #f99f2d } + .terminal-2491064415-r229 { fill: #fca42b } + .terminal-2491064415-r230 { fill: #fa9f2d } + .terminal-2491064415-r231 { fill: #f29333 } + .terminal-2491064415-r232 { fill: #e6813b } + .terminal-2491064415-r233 { fill: #e17a3e } + .terminal-2491064415-r234 { fill: #d16249 } + .terminal-2491064415-r235 { fill: #cc594d } + .terminal-2491064415-r236 { fill: #153954 } + .terminal-2491064415-r237 { fill: #133e5f } + .terminal-2491064415-r238 { fill: #0f4974 } + .terminal-2491064415-r239 { fill: #0e4e7f } + .terminal-2491064415-r240 { fill: #0c5389 } + .terminal-2491064415-r241 { fill: #095c9c } + .terminal-2491064415-r242 { fill: #0861a5 } + .terminal-2491064415-r243 { fill: #0568b5 } + .terminal-2491064415-r244 { fill: #046cbc } + .terminal-2491064415-r245 { fill: #036fc2 } + .terminal-2491064415-r246 { fill: #0273cb } + .terminal-2491064415-r247 { fill: #0175cf } + .terminal-2491064415-r248 { fill: #0177d3 } + .terminal-2491064415-r249 { fill: #0177d2 } + .terminal-2491064415-r250 { fill: #0274cd } + .terminal-2491064415-r251 { fill: #0272c9 } + .terminal-2491064415-r252 { fill: #0370c4 } + .terminal-2491064415-r253 { fill: #056ab8 } + .terminal-2491064415-r254 { fill: #0666b0 } + .terminal-2491064415-r255 { fill: #095ea0 } + .terminal-2491064415-r256 { fill: #0a5a97 } + .terminal-2491064415-r257 { fill: #0b558d } + .terminal-2491064415-r258 { fill: #0f4b79 } + .terminal-2491064415-r259 { fill: #10466e } + .terminal-2491064415-r260 { fill: #143b58 } + .terminal-2491064415-r261 { fill: #143c5a } + .terminal-2491064415-r262 { fill: #104670 } + .terminal-2491064415-r263 { fill: #0e4c7a } + .terminal-2491064415-r264 { fill: #0d5185 } + .terminal-2491064415-r265 { fill: #0a5a98 } + .terminal-2491064415-r266 { fill: #085fa1 } + .terminal-2491064415-r267 { fill: #0667b2 } + .terminal-2491064415-r268 { fill: #056ab9 } + .terminal-2491064415-r269 { fill: #046dbf } + .terminal-2491064415-r270 { fill: #0273c9 } + .terminal-2491064415-r271 { fill: #0174cd } + .terminal-2491064415-r272 { fill: #0175ce } + .terminal-2491064415-r273 { fill: #0371c6 } + .terminal-2491064415-r274 { fill: #046bbb } + .terminal-2491064415-r275 { fill: #0568b4 } + .terminal-2491064415-r276 { fill: #0860a4 } + .terminal-2491064415-r277 { fill: #095c9b } + .terminal-2491064415-r278 { fill: #0b5791 } + .terminal-2491064415-r279 { fill: #0e4d7d } + .terminal-2491064415-r280 { fill: #104873 } + .terminal-2491064415-r281 { fill: #133d5d } + .terminal-2491064415-r282 { fill: #143955 } + .terminal-2491064415-r283 { fill: #11446b } + .terminal-2491064415-r284 { fill: #0f4976 } + .terminal-2491064415-r285 { fill: #0e4f80 } + .terminal-2491064415-r286 { fill: #0a5894 } + .terminal-2491064415-r287 { fill: #095d9d } + .terminal-2491064415-r288 { fill: #0665ae } + .terminal-2491064415-r289 { fill: #0569b6 } + .terminal-2491064415-r290 { fill: #0272c7 } + .terminal-2491064415-r291 { fill: #0274cc } + .terminal-2491064415-r292 { fill: #0177d1 } + .terminal-2491064415-r293 { fill: #0178d4 } + .terminal-2491064415-r294 { fill: #0176cf } + .terminal-2491064415-r295 { fill: #0272c8 } + .terminal-2491064415-r296 { fill: #046dbd } + .terminal-2491064415-r297 { fill: #0569b7 } + .terminal-2491064415-r298 { fill: #0762a7 } + .terminal-2491064415-r299 { fill: #095e9f } + .terminal-2491064415-r300 { fill: #0a5996 } + .terminal-2491064415-r301 { fill: #0d4f82 } + .terminal-2491064415-r302 { fill: #0f4a77 } + .terminal-2491064415-r303 { fill: #0667b3 } + .terminal-2491064415-r304 { fill: #0762a8 } + .terminal-2491064415-r305 { fill: #095d9e } + .terminal-2491064415-r306 { fill: #0c548b } + .terminal-2491064415-r307 { fill: #104872 } + .terminal-2491064415-r308 { fill: #124165 } + .terminal-2491064415-r309 { fill: #133d5c } + .terminal-2491064415-r310 { fill: #143954 } + .terminal-2491064415-r311 { fill: #133c5a } + .terminal-2491064415-r312 { fill: #133e5e } + .terminal-2491064415-r313 { fill: #124063 } + .terminal-2491064415-r314 { fill: #10466f } + .terminal-2491064415-r315 { fill: #0c5287 } + .terminal-2491064415-r316 { fill: #0b5690 } + .terminal-2491064415-r317 { fill: #0a5b9a } + .terminal-2491064415-r318 { fill: #056ab7 } + .terminal-2491064415-r319 { fill: #0764ad } + .terminal-2491064415-r320 { fill: #085fa2 } + .terminal-2491064415-r321 { fill: #0b568f } + .terminal-2491064415-r322 { fill: #0d5186 } + .terminal-2491064415-r323 { fill: #0f4975 } + .terminal-2491064415-r324 { fill: #114368 } + .terminal-2491064415-r325 { fill: #133d5e } + .terminal-2491064415-r326 { fill: #143b59 } + .terminal-2491064415-r327 { fill: #123f61 } + .terminal-2491064415-r328 { fill: #11456c } + .terminal-2491064415-r329 { fill: #0d5083 } + .terminal-2491064415-r330 { fill: #0c548c } + .terminal-2491064415-r331 { fill: #0763aa } + .terminal-2491064415-r332 { fill: #0273ca } + .terminal-2491064415-r333 { fill: #0667b1 } + .terminal-2491064415-r334 { fill: #0761a7 } + .terminal-2491064415-r335 { fill: #0b5893 } + .terminal-2491064415-r336 { fill: #0c538a } + .terminal-2491064415-r337 { fill: #104771 } + .terminal-2491064415-r338 { fill: #133e60 } + .terminal-2491064415-r339 { fill: #133c5b } + .terminal-2491064415-r340 { fill: #143956 } + .terminal-2491064415-r341 { fill: #143a58 } + .terminal-2491064415-r342 { fill: #11436a } + .terminal-2491064415-r343 { fill: #104770 } + .terminal-2491064415-r344 { fill: #0e4e80 } + .terminal-2491064415-r345 { fill: #0c5288 } + .terminal-2491064415-r346 { fill: #4c2730 } + .terminal-2491064415-r347 { fill: #552833 } + .terminal-2491064415-r348 { fill: #672c3b } + .terminal-2491064415-r349 { fill: #702e3e } + .terminal-2491064415-r350 { fill: #792f41 } + .terminal-2491064415-r351 { fill: #893248 } + .terminal-2491064415-r352 { fill: #91344b } + .terminal-2491064415-r353 { fill: #9e3650 } + .terminal-2491064415-r354 { fill: #a43852 } + .terminal-2491064415-r355 { fill: #a93954 } + .terminal-2491064415-r356 { fill: #b13a58 } + .terminal-2491064415-r357 { fill: #b43b59 } + .terminal-2491064415-r358 { fill: #b83b5a } + .terminal-2491064415-r359 { fill: #b73b5a } + .terminal-2491064415-r360 { fill: #b33a58 } + .terminal-2491064415-r361 { fill: #af3a57 } + .terminal-2491064415-r362 { fill: #ab3955 } + .terminal-2491064415-r363 { fill: #a13751 } + .terminal-2491064415-r364 { fill: #9b364f } + .terminal-2491064415-r365 { fill: #8d3349 } + .terminal-2491064415-r366 { fill: #853246 } + .terminal-2491064415-r367 { fill: #7d3043 } + .terminal-2491064415-r368 { fill: #6b2d3c } + .terminal-2491064415-r369 { fill: #622b38 } + .terminal-2491064415-r370 { fill: #502731 } + .terminal-2491064415-r371 { fill: #512832 } + .terminal-2491064415-r372 { fill: #632b39 } + .terminal-2491064415-r373 { fill: #6d2d3d } + .terminal-2491064415-r374 { fill: #752f40 } + .terminal-2491064415-r375 { fill: #863247 } + .terminal-2491064415-r376 { fill: #8e334a } + .terminal-2491064415-r377 { fill: #9c364f } + .terminal-2491064415-r378 { fill: #a23751 } + .terminal-2491064415-r379 { fill: #a73854 } + .terminal-2491064415-r380 { fill: #b03a57 } + .terminal-2491064415-r381 { fill: #b13a57 } + .terminal-2491064415-r382 { fill: #ad3956 } + .terminal-2491064415-r383 { fill: #a33752 } + .terminal-2491064415-r384 { fill: #9d3650 } + .terminal-2491064415-r385 { fill: #90344a } + .terminal-2491064415-r386 { fill: #883247 } + .terminal-2491064415-r387 { fill: #803144 } + .terminal-2491064415-r388 { fill: #6f2d3e } + .terminal-2491064415-r389 { fill: #662c3a } + .terminal-2491064415-r390 { fill: #542833 } + .terminal-2491064415-r391 { fill: #4d2730 } + .terminal-2491064415-r392 { fill: #602a37 } + .terminal-2491064415-r393 { fill: #692c3b } + .terminal-2491064415-r394 { fill: #722e3f } + .terminal-2491064415-r395 { fill: #833145 } + .terminal-2491064415-r396 { fill: #8a3348 } + .terminal-2491064415-r397 { fill: #99354e } + .terminal-2491064415-r398 { fill: #9f3751 } + .terminal-2491064415-r399 { fill: #a53853 } + .terminal-2491064415-r400 { fill: #ae3a56 } + .terminal-2491064415-r401 { fill: #b23a58 } + .terminal-2491064415-r402 { fill: #b53b59 } + .terminal-2491064415-r403 { fill: #a63853 } + .terminal-2491064415-r404 { fill: #a03751 } + .terminal-2491064415-r405 { fill: #93344c } + .terminal-2491064415-r406 { fill: #8c3349 } + .terminal-2491064415-r407 { fill: #843146 } + .terminal-2491064415-r408 { fill: #732e3f } + .terminal-2491064415-r409 { fill: #6a2c3c } + .terminal-2491064415-r410 { fill: #9d364f } + .terminal-2491064415-r411 { fill: #94344c } + .terminal-2491064415-r412 { fill: #8b3349 } + .terminal-2491064415-r413 { fill: #7b3042 } + .terminal-2491064415-r414 { fill: #602a38 } + .terminal-2491064415-r415 { fill: #5b2936 } + .terminal-2491064415-r416 { fill: #532832 } + .terminal-2491064415-r417 { fill: #592935 } + .terminal-2491064415-r418 { fill: #772f41 } + .terminal-2491064415-r419 { fill: #7f3044 } + .terminal-2491064415-r420 { fill: #873247 } + .terminal-2491064415-r421 { fill: #a23752 } + .terminal-2491064415-r422 { fill: #97354d } + .terminal-2491064415-r423 { fill: #8f334a } + .terminal-2491064415-r424 { fill: #7e3043 } + .terminal-2491064415-r425 { fill: #762f40 } + .terminal-2491064415-r426 { fill: #682c3b } + .terminal-2491064415-r427 { fill: #622b39 } + .terminal-2491064415-r428 { fill: #5d2a36 } + .terminal-2491064415-r429 { fill: #532833 } + .terminal-2491064415-r430 { fill: #572934 } + .terminal-2491064415-r431 { fill: #612b38 } + .terminal-2491064415-r432 { fill: #672c3a } + .terminal-2491064415-r433 { fill: #742e40 } + .terminal-2491064415-r434 { fill: #7c3043 } + .terminal-2491064415-r435 { fill: #95354c } + .terminal-2491064415-r436 { fill: #a43853 } + .terminal-2491064415-r437 { fill: #92344b } + .terminal-2491064415-r438 { fill: #813145 } + .terminal-2491064415-r439 { fill: #7a2f42 } + .terminal-2491064415-r440 { fill: #652b39 } + .terminal-2491064415-r441 { fill: #5f2a37 } + .terminal-2491064415-r442 { fill: #562834 } + .terminal-2491064415-r443 { fill: #522832 } + .terminal-2491064415-r444 { fill: #4f2731 } + .terminal-2491064415-r445 { fill: #5e2a37 } + .terminal-2491064415-r446 { fill: #642b39 } + .terminal-2491064415-r447 { fill: #712e3e } + .terminal-2491064415-r448 { fill: #782f41 } + .terminal-2491064415-r449 { fill: #9a364e } + .terminal-2491064415-r450 { fill: #2c4e36 } + .terminal-2491064415-r451 { fill: #2e573b } + .terminal-2491064415-r452 { fill: #346a45 } + .terminal-2491064415-r453 { fill: #377449 } + .terminal-2491064415-r454 { fill: #3a7d4e } + .terminal-2491064415-r455 { fill: #3f8e57 } + .terminal-2491064415-r456 { fill: #41955b } + .terminal-2491064415-r457 { fill: #45a362 } + .terminal-2491064415-r458 { fill: #47a965 } + .terminal-2491064415-r459 { fill: #49af68 } + .terminal-2491064415-r460 { fill: #4bb76d } + .terminal-2491064415-r461 { fill: #4cba6e } + .terminal-2491064415-r462 { fill: #4dbe70 } + .terminal-2491064415-r463 { fill: #4dbd70 } + .terminal-2491064415-r464 { fill: #4cb96d } + .terminal-2491064415-r465 { fill: #4bb56c } + .terminal-2491064415-r466 { fill: #49b169 } + .terminal-2491064415-r467 { fill: #46a664 } + .terminal-2491064415-r468 { fill: #44a060 } + .terminal-2491064415-r469 { fill: #409159 } + .terminal-2491064415-r470 { fill: #3d8955 } + .terminal-2491064415-r471 { fill: #3b8050 } + .terminal-2491064415-r472 { fill: #356e47 } + .terminal-2491064415-r473 { fill: #336542 } + .terminal-2491064415-r474 { fill: #2d5238 } + .terminal-2491064415-r475 { fill: #2d5338 } + .terminal-2491064415-r476 { fill: #336642 } + .terminal-2491064415-r477 { fill: #367047 } + .terminal-2491064415-r478 { fill: #39794c } + .terminal-2491064415-r479 { fill: #3e8a55 } + .terminal-2491064415-r480 { fill: #409259 } + .terminal-2491064415-r481 { fill: #44a161 } + .terminal-2491064415-r482 { fill: #46a764 } + .terminal-2491064415-r483 { fill: #48ac67 } + .terminal-2491064415-r484 { fill: #4bb66c } + .terminal-2491064415-r485 { fill: #4cb96e } + .terminal-2491064415-r486 { fill: #4bb76c } + .terminal-2491064415-r487 { fill: #4ab36a } + .terminal-2491064415-r488 { fill: #45a262 } + .terminal-2491064415-r489 { fill: #41945a } + .terminal-2491064415-r490 { fill: #3e8c56 } + .terminal-2491064415-r491 { fill: #3c8452 } + .terminal-2491064415-r492 { fill: #377249 } + .terminal-2491064415-r493 { fill: #346944 } + .terminal-2491064415-r494 { fill: #2e563a } + .terminal-2491064415-r495 { fill: #2c4f36 } + .terminal-2491064415-r496 { fill: #326240 } + .terminal-2491064415-r497 { fill: #356c45 } + .terminal-2491064415-r498 { fill: #37754a } + .terminal-2491064415-r499 { fill: #3d8753 } + .terminal-2491064415-r500 { fill: #3f8f58 } + .terminal-2491064415-r501 { fill: #449e5f } + .terminal-2491064415-r502 { fill: #46a463 } + .terminal-2491064415-r503 { fill: #47aa66 } + .terminal-2491064415-r504 { fill: #4ab46b } + .terminal-2491064415-r505 { fill: #4bb86d } + .terminal-2491064415-r506 { fill: #4cbb6f } + .terminal-2491064415-r507 { fill: #4cb86d } + .terminal-2491064415-r508 { fill: #48ab66 } + .terminal-2491064415-r509 { fill: #46a563 } + .terminal-2491064415-r510 { fill: #42985c } + .terminal-2491064415-r511 { fill: #3f9058 } + .terminal-2491064415-r512 { fill: #3d8854 } + .terminal-2491064415-r513 { fill: #38764b } + .terminal-2491064415-r514 { fill: #356d46 } + .terminal-2491064415-r515 { fill: #4bb56b } + .terminal-2491064415-r516 { fill: #45a261 } + .terminal-2491064415-r517 { fill: #42985d } + .terminal-2491064415-r518 { fill: #3a7e4f } + .terminal-2491064415-r519 { fill: #38774b } + .terminal-2491064415-r520 { fill: #326341 } + .terminal-2491064415-r521 { fill: #305d3e } + .terminal-2491064415-r522 { fill: #2e5539 } + .terminal-2491064415-r523 { fill: #2d5339 } + .terminal-2491064415-r524 { fill: #2e573a } + .terminal-2491064415-r525 { fill: #305b3d } + .terminal-2491064415-r526 { fill: #356c46 } + .terminal-2491064415-r527 { fill: #397b4d } + .terminal-2491064415-r528 { fill: #3c8351 } + .terminal-2491064415-r529 { fill: #439c5f } + .terminal-2491064415-r530 { fill: #40935a } + .terminal-2491064415-r531 { fill: #3b8251 } + .terminal-2491064415-r532 { fill: #397a4d } + .terminal-2491064415-r533 { fill: #356b45 } + .terminal-2491064415-r534 { fill: #31603f } + .terminal-2491064415-r535 { fill: #2e553a } + .terminal-2491064415-r536 { fill: #2f593c } + .terminal-2491064415-r537 { fill: #346a44 } + .terminal-2491064415-r538 { fill: #38784c } + .terminal-2491064415-r539 { fill: #429a5d } + .terminal-2491064415-r540 { fill: #44a061 } + .terminal-2491064415-r541 { fill: #42975c } + .terminal-2491064415-r542 { fill: #3c8553 } + .terminal-2491064415-r543 { fill: #336843 } + .terminal-2491064415-r544 { fill: #2f583b } + .terminal-2491064415-r545 { fill: #2e5439 } + .terminal-2491064415-r546 { fill: #2d5137 } + .terminal-2491064415-r547 { fill: #2d5439 } + .terminal-2491064415-r548 { fill: #316140 } + .terminal-2491064415-r549 { fill: #336743 } + .terminal-2491064415-r550 { fill: #37744a } + .terminal-2491064415-r551 { fill: #3a7c4e } + .terminal-2491064415-r552 { fill: #41965b } + .terminal-2491064415-r553 { fill: #449f60 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - SparklineColorsApp + SparklineColorsApp - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -24654,217 +25068,217 @@ font-weight: 700; } - .terminal-4213219187-matrix { + .terminal-3805192064-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4213219187-title { + .terminal-3805192064-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4213219187-r1 { fill: #e1e1e1 } - .terminal-4213219187-r2 { fill: #c5c8c6 } - .terminal-4213219187-r3 { fill: #104670 } - .terminal-4213219187-r4 { fill: #0c548b } - .terminal-4213219187-r5 { fill: #0a5996 } - .terminal-4213219187-r6 { fill: #0f4a78 } - .terminal-4213219187-r7 { fill: #0d5186 } - .terminal-4213219187-r8 { fill: #0e4d7e } - .terminal-4213219187-r9 { fill: #0569b6 } - .terminal-4213219187-r10 { fill: #0e4d7d } - .terminal-4213219187-r11 { fill: #104771 } - .terminal-4213219187-r12 { fill: #0f4a77 } - .terminal-4213219187-r13 { fill: #0b5791 } - .terminal-4213219187-r14 { fill: #0b5690 } - .terminal-4213219187-r15 { fill: #0274cc } - .terminal-4213219187-r16 { fill: #0d5084 } - .terminal-4213219187-r17 { fill: #0371c6 } - .terminal-4213219187-r18 { fill: #085fa1 } - .terminal-4213219187-r19 { fill: #0a5b99 } - .terminal-4213219187-r20 { fill: #0c538a } - .terminal-4213219187-r21 { fill: #0e4e80 } - .terminal-4213219187-r22 { fill: #0a5a97 } - .terminal-4213219187-r23 { fill: #0c5288 } - .terminal-4213219187-r24 { fill: #11456d } - .terminal-4213219187-r25 { fill: #0e4e7f } - .terminal-4213219187-r26 { fill: #0d4f81 } - .terminal-4213219187-r27 { fill: #0d5185 } - .terminal-4213219187-r28 { fill: #0178d4 } - .terminal-4213219187-r29 { fill: #0f4b78 } - .terminal-4213219187-r30 { fill: #0f4974 } - .terminal-4213219187-r31 { fill: #0763aa } - .terminal-4213219187-r32 { fill: #0d5083 } - .terminal-4213219187-r33 { fill: #0f4975 } - .terminal-4213219187-r34 { fill: #11446b } - .terminal-4213219187-r35 { fill: #0175cf } - .terminal-4213219187-r36 { fill: #0c5388 } - .terminal-4213219187-r37 { fill: #0c5287 } - .terminal-4213219187-r38 { fill: #0a5894 } - .terminal-4213219187-r39 { fill: #0e4c7b } - .terminal-4213219187-r40 { fill: #056ab8 } - .terminal-4213219187-r41 { fill: #0762a8 } - .terminal-4213219187-r42 { fill: #104872 } - .terminal-4213219187-r43 { fill: #0e4f80 } - .terminal-4213219187-r44 { fill: #0665ad } - .terminal-4213219187-r45 { fill: #10466e } - .terminal-4213219187-r46 { fill: #0c548c } - .terminal-4213219187-r47 { fill: #0f4976 } - .terminal-4213219187-r48 { fill: #0667b2 } - .terminal-4213219187-r49 { fill: #11446c } - .terminal-4213219187-r50 { fill: #0568b4 } - .terminal-4213219187-r51 { fill: #085fa2 } - .terminal-4213219187-r52 { fill: #0a5a98 } - .terminal-4213219187-r53 { fill: #10456e } - .terminal-4213219187-r54 { fill: #0d5287 } - .terminal-4213219187-r55 { fill: #133e5e } - .terminal-4213219187-r56 { fill: #124062 } - .terminal-4213219187-r57 { fill: #124164 } - .terminal-4213219187-r58 { fill: #10466f } - .terminal-4213219187-r59 { fill: #133e60 } - .terminal-4213219187-r60 { fill: #114368 } - .terminal-4213219187-r61 { fill: #124266 } - .terminal-4213219187-r62 { fill: #123f61 } - .terminal-4213219187-r63 { fill: #124063 } - .terminal-4213219187-r64 { fill: #124267 } - .terminal-4213219187-r65 { fill: #10456d } - .terminal-4213219187-r66 { fill: #114267 } - .terminal-4213219187-r67 { fill: #11436a } - .terminal-4213219187-r68 { fill: #0f4874 } - .terminal-4213219187-r69 { fill: #133d5c } - .terminal-4213219187-r70 { fill: #133d5d } - .terminal-4213219187-r71 { fill: #133f60 } - .terminal-4213219187-r72 { fill: #114369 } - .terminal-4213219187-r73 { fill: #124165 } - .terminal-4213219187-r74 { fill: #133e5f } - .terminal-4213219187-r75 { fill: #11456c } - .terminal-4213219187-r76 { fill: #124166 } - .terminal-4213219187-r77 { fill: #124064 } - .terminal-4213219187-r78 { fill: #104770 } - .terminal-4213219187-r79 { fill: #114268 } - .terminal-4213219187-r80 { fill: #133d5e } - .terminal-4213219187-r81 { fill: #143954 } - .terminal-4213219187-r82 { fill: #143b58 } - .terminal-4213219187-r83 { fill: #143955 } - .terminal-4213219187-r84 { fill: #143a56 } - .terminal-4213219187-r85 { fill: #153954 } - .terminal-4213219187-r86 { fill: #143a57 } - .terminal-4213219187-r87 { fill: #143956 } - .terminal-4213219187-r88 { fill: #143b59 } + .terminal-3805192064-r1 { fill: #e1e1e1 } + .terminal-3805192064-r2 { fill: #c5c8c6 } + .terminal-3805192064-r3 { fill: #104670 } + .terminal-3805192064-r4 { fill: #0c548b } + .terminal-3805192064-r5 { fill: #104772 } + .terminal-3805192064-r6 { fill: #0a5996 } + .terminal-3805192064-r7 { fill: #0d5083 } + .terminal-3805192064-r8 { fill: #0d5186 } + .terminal-3805192064-r9 { fill: #0569b6 } + .terminal-3805192064-r10 { fill: #0762a7 } + .terminal-3805192064-r11 { fill: #0e4d7d } + .terminal-3805192064-r12 { fill: #104872 } + .terminal-3805192064-r13 { fill: #0f4a77 } + .terminal-3805192064-r14 { fill: #0b5791 } + .terminal-3805192064-r15 { fill: #0274cc } + .terminal-3805192064-r16 { fill: #0d5084 } + .terminal-3805192064-r17 { fill: #0371c6 } + .terminal-3805192064-r18 { fill: #085fa1 } + .terminal-3805192064-r19 { fill: #0a5b99 } + .terminal-3805192064-r20 { fill: #0c538a } + .terminal-3805192064-r21 { fill: #0a5a97 } + .terminal-3805192064-r22 { fill: #0c5288 } + .terminal-3805192064-r23 { fill: #11456d } + .terminal-3805192064-r24 { fill: #0d4f81 } + .terminal-3805192064-r25 { fill: #0d5185 } + .terminal-3805192064-r26 { fill: #0b568f } + .terminal-3805192064-r27 { fill: #0178d4 } + .terminal-3805192064-r28 { fill: #0668b3 } + .terminal-3805192064-r29 { fill: #0f4a76 } + .terminal-3805192064-r30 { fill: #0f4b78 } + .terminal-3805192064-r31 { fill: #0763aa } + .terminal-3805192064-r32 { fill: #0b5690 } + .terminal-3805192064-r33 { fill: #0e4c7c } + .terminal-3805192064-r34 { fill: #0175cf } + .terminal-3805192064-r35 { fill: #0e4e80 } + .terminal-3805192064-r36 { fill: #0c5388 } + .terminal-3805192064-r37 { fill: #0c5287 } + .terminal-3805192064-r38 { fill: #0a5894 } + .terminal-3805192064-r39 { fill: #0b558d } + .terminal-3805192064-r40 { fill: #056ab8 } + .terminal-3805192064-r41 { fill: #0e4c7b } + .terminal-3805192064-r42 { fill: #0762a8 } + .terminal-3805192064-r43 { fill: #0665ad } + .terminal-3805192064-r44 { fill: #0e4d7c } + .terminal-3805192064-r45 { fill: #0c548c } + .terminal-3805192064-r46 { fill: #0e4e7f } + .terminal-3805192064-r47 { fill: #0f4b7a } + .terminal-3805192064-r48 { fill: #0667b2 } + .terminal-3805192064-r49 { fill: #11446c } + .terminal-3805192064-r50 { fill: #0f4975 } + .terminal-3805192064-r51 { fill: #0568b4 } + .terminal-3805192064-r52 { fill: #0f4976 } + .terminal-3805192064-r53 { fill: #085fa2 } + .terminal-3805192064-r54 { fill: #0a5a98 } + .terminal-3805192064-r55 { fill: #124164 } + .terminal-3805192064-r56 { fill: #0d5287 } + .terminal-3805192064-r57 { fill: #133e5e } + .terminal-3805192064-r58 { fill: #10466f } + .terminal-3805192064-r59 { fill: #124266 } + .terminal-3805192064-r60 { fill: #123f61 } + .terminal-3805192064-r61 { fill: #124063 } + .terminal-3805192064-r62 { fill: #114267 } + .terminal-3805192064-r63 { fill: #114369 } + .terminal-3805192064-r64 { fill: #124062 } + .terminal-3805192064-r65 { fill: #133e5f } + .terminal-3805192064-r66 { fill: #124165 } + .terminal-3805192064-r67 { fill: #124166 } + .terminal-3805192064-r68 { fill: #10456d } + .terminal-3805192064-r69 { fill: #123f62 } + .terminal-3805192064-r70 { fill: #114368 } + .terminal-3805192064-r71 { fill: #11446a } + .terminal-3805192064-r72 { fill: #124064 } + .terminal-3805192064-r73 { fill: #104873 } + .terminal-3805192064-r74 { fill: #133f60 } + .terminal-3805192064-r75 { fill: #133d5d } + .terminal-3805192064-r76 { fill: #11446b } + .terminal-3805192064-r77 { fill: #11456c } + .terminal-3805192064-r78 { fill: #123f60 } + .terminal-3805192064-r79 { fill: #11436a } + .terminal-3805192064-r80 { fill: #133d5c } + .terminal-3805192064-r81 { fill: #143954 } + .terminal-3805192064-r82 { fill: #143b58 } + .terminal-3805192064-r83 { fill: #143a56 } + .terminal-3805192064-r84 { fill: #143955 } + .terminal-3805192064-r85 { fill: #153954 } + .terminal-3805192064-r86 { fill: #143a57 } + .terminal-3805192064-r87 { fill: #143956 } + .terminal-3805192064-r88 { fill: #143c5a } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - SparklineSummaryFunctionApp + SparklineSummaryFunctionApp - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +