Adds colorbrewer to vendor lib.
authordsc <dsc@wikimedia.org>
Sun, 1 Apr 2012 19:54:58 +0000 (12:54 -0700)
committerdsc <dsc@wikimedia.org>
Sun, 1 Apr 2012 22:06:19 +0000 (15:06 -0700)
lib/base.co
lib/graph/graph-edit-view.co
lib/graph/graph-model.co
lib/template/graph-edit.jade
static/vendor/colorbrewer.js [new symlink]
static/vendor/colorbrewer/LICENSE [new file with mode: 0644]
static/vendor/colorbrewer/colorbrewer.css [new file with mode: 0644]
static/vendor/colorbrewer/colorbrewer.js [new file with mode: 0644]
www/css/graph.styl
www/graph/edit.jade
www/modules.yaml

index 4d34594..f1f28f7 100644 (file)
@@ -21,9 +21,9 @@ BaseModel = exports.BaseModel = Backbone.Model.extend do # {{{
         @__class__      = @constructor
         @__super__      = @constructor.__super__
         @__superclass__ = @__super__.constructor
-        # Backbone.NestedModel.apply this, arguments
-        Backbone.Model.apply this, arguments
-        # @trigger 'create', this
+        # Backbone.NestedModel ...
+        Backbone.Model ...
+        @trigger 'create', this
     
     initialize: ->
         _.bindAll this, ...@__bind__ if @__bind__.length
index 6151007..49dca93 100644 (file)
@@ -1,5 +1,3 @@
-root = do -> this
-
 moment = require 'moment'
 
 _ = require 'kraken/util/underscore'
@@ -9,13 +7,10 @@ _ = require 'kraken/util/underscore'
 } = require 'kraken/chart'
 { Graph,
 } = require 'kraken/graph/graph-model'
+{ DataSetView,
+} = require 'kraken/dataset'
 
-
-/**
- * Helper that wraps a function to return false.
- */
-stopEventAnd = (fn) ->
-    ~> fn ...; false
+root = do -> this
 
 
 
@@ -31,10 +26,10 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
         axisLabelFormatter xAxisLabelFormatter yAxisLabelFormatter
         valueFormatter xValueFormatter yValueFormatter
     ]>
-    __bind__  : <[ 
+    __bind__  : <[
         render renderAll stopAndRender stopAndRenderAll resizeViewport
         numberFormatter numberFormatterHTML
-        onReady onSync onModelChange onScaffoldChange onFirstClickRenderOptionsTab
+        onReady onSync onModelChange onScaffoldChange onDataChange onFirstClickRenderOptionsTab
     ]>
     __debounce__: <[ render renderAll ]>
     ctorName  : 'GraphEditView'
@@ -53,11 +48,13 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
         'submit   form.options'                    : 'onOptionsSubmit'
         'change   input[type="checkbox"]'          : 'onOptionsSubmit'
     
+    subviews: []
     ready: false
     
     
     
     initialize : (o={}) ->
+        @subviews = []
         @model or= new Graph
         BaseView::initialize ...
         # console.log "#this.initialize!"
@@ -65,12 +62,9 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
         for name of @__debounce__
             @[name] = _.debounce @[name], DEBOUNCE_RENDER
         
-        # Resize graph on window resize
-        # Note: can't debounce the method itself, as the debounce wrapper returns undefined
-        $ root .on 'resize', _.debounce(@resizeViewport, DEBOUNCE_RENDER)
-        
         @id = _.domize 'graph', (@model.get('slug') or @model.id or @model.cid)
         
+        ### Model Events
         @model
             .on 'ready',            @onReady
             .on 'sync',             @onSync
@@ -82,19 +76,29 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
                 console.error "#this.error!", arguments
                 # TODO: UI alert
         
-        # Rerender the options boxes once the tab is visible
-        @$el.on 'click', '.graph-options-tab', @onFirstClickRenderOptionsTab
-        
-        @viewport = @$el.find '.viewport'
+        ### Graph Data UI
+        @subviews.push @dataset = new DataSetView { model:@model.get 'dataset' }
+        @$el.find '.graph-data-pane' .append @dataset.el
+        @dataset.on 'change', @onDataChange
         
+        ### Chart Options Tab, Scaffold
         @scaffold = new ChartOptionScaffold
         @$el.find '.graph-options-pane' .append @scaffold.el
         @scaffold.collection.reset that if o.graph_spec
-        @scaffold.on 'change', @onScaffoldChange
         
+        @scaffold.on 'change', @onScaffoldChange
         @chartOptions @model.getOptions(), {+silent}
+        
+        # Rerender the options boxes once the tab is visible
+        @$el.on 'click', '.graph-options-tab', @onFirstClickRenderOptionsTab
+        
+        ### Chart Viewport
+        @viewport = @$el.find '.viewport'
         @resizeViewport()
-        # _.delay @onReady, DEBOUNCE_RENDER
+        
+        # Resize chart on window resize
+        # Note: can't debounce the method itself, as the debounce wrapper returns undefined
+        $ root .on 'resize', _.debounce @resizeViewport, DEBOUNCE_RENDER
     
     
     
@@ -141,6 +145,7 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
     toTemplateLocals: ->
         attrs = _.clone @model.attributes
         delete attrs.options
+        delete attrs.dataset
         { $, _, op, @model, view:this } import attrs
     
     
@@ -189,13 +194,10 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
             form.find "textarea[name=#k]" .text txt
         this
     
-    
-    render: ->
-        return this unless @ready
-        @renderDetails()
-        
-        dataset = @model.get 'dataset'
-        size    = @resizeViewport()
+    # Redraw chart inside viewport.
+    renderChart: ->
+        data = @model.get 'dataset' .getData()
+        size = @resizeViewport()
         
         # XXX: use @model.changedAttributes() to calculate what to update
         options = @chartOptions() #import size
@@ -218,17 +220,26 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
         @chart?.destroy()
         @chart = new Dygraph do
             @viewport.0
-            dataset
+            data
             options
+        
         # unless @chart
         #     @chart = new Dygraph do
         #         @viewport.0
-        #         dataset
+        #         data
         #         options
         # else
         #     @chart.updateOptions options
         #     @chart.resize size
         
+        this
+    
+    
+    render: ->
+        return this unless @ready
+        @renderDetails()
+        _.invoke @subviews, 'render'
+        @renderChart()
         @updateURL()
         @trigger 'render', this
         false
@@ -328,6 +339,9 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
         unless _.isEqual(value, current) or (current is void and field.isDefault())
             @model.setOption(key, value, {+silent})
     
+    onDataChange: ->
+        ...
+    
     onFirstClickRenderOptionsTab: ->
         @$el.off 'click', '.graph-options-tab', @onFirstClickRenderOptionsTab
         @scaffold.render()
index d60c6cb..339b6e8 100644 (file)
@@ -6,6 +6,8 @@ Cascade = require 'kraken/util/cascade'
 } = require 'kraken/chart'
 { BaseModel, BaseList,
 } = require 'kraken/base'
+{ DataSet
+} = require 'kraken/dataset'
 
 root = do -> this
 
@@ -18,9 +20,14 @@ root = do -> this
 Graph = exports.Graph = BaseModel.extend do # {{{
     ctorName       : 'Graph'
     IGNORE_OPTIONS : <[ width height timingName ]>
+    urlRoot        : '/graphs'
     
-    urlRoot        : '/graph'
-    ready          : false
+    /**
+     * Whether this Graph has loaded all assets, parent-graphs, and related
+     * resources.
+     * @type Boolean
+     */
+    ready : false
     
     /**
      * The chart type backing this graph.
@@ -43,6 +50,7 @@ Graph = exports.Graph = BaseModel.extend do # {{{
     
     
     
+    
     /**
      * Attribute defaults.
      */
@@ -51,7 +59,8 @@ Graph = exports.Graph = BaseModel.extend do # {{{
             slug    : ''
             name    : ''
             desc    : ''
-            dataset : '/data/non_mobile_pageviews_by.timestamp.language.csv'
+            # dataset : '/data/datasources/non_mobile_pageviews_by.timestamp.language.csv'
+            dataset : null
             width   : 'auto'
             height  : 320
             chartType : 'dygraphs'
@@ -84,14 +93,15 @@ Graph = exports.Graph = BaseModel.extend do # {{{
         # unless @id or @get('id') or @get('slug')
         #     @set 'slug', "unsaved_graph_#{@cid}"
         
+        # Insert submodels in place of JSON
+        @set 'dataset', new DataSet(@get('dataset')), {+silent}
+        
         @trigger 'init', this
         @load() if opts.autoLoad
     
     
     load: (opts={}) ->
         return this if @ready and not opts.force
-        
-        self = this
         @trigger 'load', this
         Seq()
             .seq_ (next) ~>
@@ -117,10 +127,10 @@ Graph = exports.Graph = BaseModel.extend do # {{{
             .seq ~>
                 @ready = true
                 @trigger 'ready', this
-        
         this
     
     
+    
     ### Accessors
     
     get: (key) ->
@@ -265,7 +275,7 @@ Graph = exports.Graph = BaseModel.extend do # {{{
     toURL: ->
         slug = @get 'slug', ''
         slug = "/#slug" if slug
-        "/graph#slug?#{@toKV { keepSlug: !!slug }}"
+        "#{@urlRoot}#slug?#{@toKV { keepSlug: !!slug }}"
     
     toString: -> "#{@ctorName}(id=#{@id}, cid=#{@cid})"
 # }}}
@@ -273,7 +283,7 @@ Graph = exports.Graph = BaseModel.extend do # {{{
 
 GraphList = exports.GraphList = BaseList.extend do # {{{
     ctorName : 'GraphList'
-    urlRoot  : '/graph'
+    urlRoot  : '/graphs'
     model    : Graph
     
     initialize : ->
index 77fb81b..574a32d 100644 (file)
@@ -1,5 +1,5 @@
-- var id = model.id || model.cid
-- var graph_id = view.id
+- var id = model.id || model.cid || view.id
+- var graph_id = view.id || id
 section.graph.graph-edit(id=graph_id)
     form.details.form-horizontal
         
@@ -61,11 +61,12 @@ section.graph.graph-edit(id=graph_id)
                                     p.help-block A description of the graph.
                     
                     .graph-data-pane.tab-pane(id="graph-#{graph_id}-data")
-                        .row-fluid
-                            label.dataset.control-label(for="#{id}_dataset") Data Set
-                            .controls
-                                input.span3.dataset(type='text', id="#{id}_dataset", name='dataset', placeholder='URL to dataset file', value=dataset)
-                                p.help-block This dataset filename will soon be replaced by a friendly UI.
+                        //- 
+                            .row-fluid
+                                label.dataset.control-label(for="#{id}_dataset") Data Set
+                                .controls
+                                    input.span3.dataset(type='text', id="#{id}_dataset", name='dataset', placeholder='URL to dataset file', value=dataset)
+                                    p.help-block This dataset filename will soon be replaced by a friendly UI.
                     
                     .graph-options-pane.tab-pane(id="graph-#{graph_id}-options")
 
diff --git a/static/vendor/colorbrewer.js b/static/vendor/colorbrewer.js
new file mode 120000 (symlink)
index 0000000..62bd362
--- /dev/null
@@ -0,0 +1 @@
+colorbrewer/colorbrewer.js
\ No newline at end of file
diff --git a/static/vendor/colorbrewer/LICENSE b/static/vendor/colorbrewer/LICENSE
new file mode 100644 (file)
index 0000000..2ac775d
--- /dev/null
@@ -0,0 +1,38 @@
+Apache-Style Software License for ColorBrewer software and ColorBrewer Color
+Schemes
+
+Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State
+University.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License. You may obtain a copy of
+the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+License for the specific language governing permissions and limitations under
+the License.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions as source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. The end-user documentation included with the redistribution, if any, must
+include the following acknowledgment: "This product includes color
+specifications and designs developed by Cynthia Brewer
+(http://colorbrewer.org/)." Alternately, this acknowledgment may appear in the
+software itself, if and wherever such third-party acknowledgments normally
+appear.
+
+4. The name "ColorBrewer" must not be used to endorse or promote products
+derived from this software without prior written permission. For written
+permission, please contact Cynthia Brewer at cbrewer@psu.edu.
+
+5. Products derived from this software may not be called "ColorBrewer", nor
+may "ColorBrewer" appear in their name, without prior written permission of
+Cynthia Brewer.
diff --git a/static/vendor/colorbrewer/colorbrewer.css b/static/vendor/colorbrewer/colorbrewer.css
new file mode 100644 (file)
index 0000000..de8f8ba
--- /dev/null
@@ -0,0 +1,1327 @@
+/*
+ * This product includes color specifications and designs developed by Cynthia
+ * Brewer (http://colorbrewer.org/).
+ */
+.YlGn .q0-3{fill:rgb(247,252,185)}
+.YlGn .q1-3{fill:rgb(173,221,142)}
+.YlGn .q2-3{fill:rgb(49,163,84)}
+.YlGn .q0-4{fill:rgb(255,255,204)}
+.YlGn .q1-4{fill:rgb(194,230,153)}
+.YlGn .q2-4{fill:rgb(120,198,121)}
+.YlGn .q3-4{fill:rgb(35,132,67)}
+.YlGn .q0-5{fill:rgb(255,255,204)}
+.YlGn .q1-5{fill:rgb(194,230,153)}
+.YlGn .q2-5{fill:rgb(120,198,121)}
+.YlGn .q3-5{fill:rgb(49,163,84)}
+.YlGn .q4-5{fill:rgb(0,104,55)}
+.YlGn .q0-6{fill:rgb(255,255,204)}
+.YlGn .q1-6{fill:rgb(217,240,163)}
+.YlGn .q2-6{fill:rgb(173,221,142)}
+.YlGn .q3-6{fill:rgb(120,198,121)}
+.YlGn .q4-6{fill:rgb(49,163,84)}
+.YlGn .q5-6{fill:rgb(0,104,55)}
+.YlGn .q0-7{fill:rgb(255,255,204)}
+.YlGn .q1-7{fill:rgb(217,240,163)}
+.YlGn .q2-7{fill:rgb(173,221,142)}
+.YlGn .q3-7{fill:rgb(120,198,121)}
+.YlGn .q4-7{fill:rgb(65,171,93)}
+.YlGn .q5-7{fill:rgb(35,132,67)}
+.YlGn .q6-7{fill:rgb(0,90,50)}
+.YlGn .q0-8{fill:rgb(255,255,229)}
+.YlGn .q1-8{fill:rgb(247,252,185)}
+.YlGn .q2-8{fill:rgb(217,240,163)}
+.YlGn .q3-8{fill:rgb(173,221,142)}
+.YlGn .q4-8{fill:rgb(120,198,121)}
+.YlGn .q5-8{fill:rgb(65,171,93)}
+.YlGn .q6-8{fill:rgb(35,132,67)}
+.YlGn .q7-8{fill:rgb(0,90,50)}
+.YlGn .q0-9{fill:rgb(255,255,229)}
+.YlGn .q1-9{fill:rgb(247,252,185)}
+.YlGn .q2-9{fill:rgb(217,240,163)}
+.YlGn .q3-9{fill:rgb(173,221,142)}
+.YlGn .q4-9{fill:rgb(120,198,121)}
+.YlGn .q5-9{fill:rgb(65,171,93)}
+.YlGn .q6-9{fill:rgb(35,132,67)}
+.YlGn .q7-9{fill:rgb(0,104,55)}
+.YlGn .q8-9{fill:rgb(0,69,41)}
+.YlGnBu .q0-3{fill:rgb(237,248,177)}
+.YlGnBu .q1-3{fill:rgb(127,205,187)}
+.YlGnBu .q2-3{fill:rgb(44,127,184)}
+.YlGnBu .q0-4{fill:rgb(255,255,204)}
+.YlGnBu .q1-4{fill:rgb(161,218,180)}
+.YlGnBu .q2-4{fill:rgb(65,182,196)}
+.YlGnBu .q3-4{fill:rgb(34,94,168)}
+.YlGnBu .q0-5{fill:rgb(255,255,204)}
+.YlGnBu .q1-5{fill:rgb(161,218,180)}
+.YlGnBu .q2-5{fill:rgb(65,182,196)}
+.YlGnBu .q3-5{fill:rgb(44,127,184)}
+.YlGnBu .q4-5{fill:rgb(37,52,148)}
+.YlGnBu .q0-6{fill:rgb(255,255,204)}
+.YlGnBu .q1-6{fill:rgb(199,233,180)}
+.YlGnBu .q2-6{fill:rgb(127,205,187)}
+.YlGnBu .q3-6{fill:rgb(65,182,196)}
+.YlGnBu .q4-6{fill:rgb(44,127,184)}
+.YlGnBu .q5-6{fill:rgb(37,52,148)}
+.YlGnBu .q0-7{fill:rgb(255,255,204)}
+.YlGnBu .q1-7{fill:rgb(199,233,180)}
+.YlGnBu .q2-7{fill:rgb(127,205,187)}
+.YlGnBu .q3-7{fill:rgb(65,182,196)}
+.YlGnBu .q4-7{fill:rgb(29,145,192)}
+.YlGnBu .q5-7{fill:rgb(34,94,168)}
+.YlGnBu .q6-7{fill:rgb(12,44,132)}
+.YlGnBu .q0-8{fill:rgb(255,255,217)}
+.YlGnBu .q1-8{fill:rgb(237,248,177)}
+.YlGnBu .q2-8{fill:rgb(199,233,180)}
+.YlGnBu .q3-8{fill:rgb(127,205,187)}
+.YlGnBu .q4-8{fill:rgb(65,182,196)}
+.YlGnBu .q5-8{fill:rgb(29,145,192)}
+.YlGnBu .q6-8{fill:rgb(34,94,168)}
+.YlGnBu .q7-8{fill:rgb(12,44,132)}
+.YlGnBu .q0-9{fill:rgb(255,255,217)}
+.YlGnBu .q1-9{fill:rgb(237,248,177)}
+.YlGnBu .q2-9{fill:rgb(199,233,180)}
+.YlGnBu .q3-9{fill:rgb(127,205,187)}
+.YlGnBu .q4-9{fill:rgb(65,182,196)}
+.YlGnBu .q5-9{fill:rgb(29,145,192)}
+.YlGnBu .q6-9{fill:rgb(34,94,168)}
+.YlGnBu .q7-9{fill:rgb(37,52,148)}
+.YlGnBu .q8-9{fill:rgb(8,29,88)}
+.GnBu .q0-3{fill:rgb(224,243,219)}
+.GnBu .q1-3{fill:rgb(168,221,181)}
+.GnBu .q2-3{fill:rgb(67,162,202)}
+.GnBu .q0-4{fill:rgb(240,249,232)}
+.GnBu .q1-4{fill:rgb(186,228,188)}
+.GnBu .q2-4{fill:rgb(123,204,196)}
+.GnBu .q3-4{fill:rgb(43,140,190)}
+.GnBu .q0-5{fill:rgb(240,249,232)}
+.GnBu .q1-5{fill:rgb(186,228,188)}
+.GnBu .q2-5{fill:rgb(123,204,196)}
+.GnBu .q3-5{fill:rgb(67,162,202)}
+.GnBu .q4-5{fill:rgb(8,104,172)}
+.GnBu .q0-6{fill:rgb(240,249,232)}
+.GnBu .q1-6{fill:rgb(204,235,197)}
+.GnBu .q2-6{fill:rgb(168,221,181)}
+.GnBu .q3-6{fill:rgb(123,204,196)}
+.GnBu .q4-6{fill:rgb(67,162,202)}
+.GnBu .q5-6{fill:rgb(8,104,172)}
+.GnBu .q0-7{fill:rgb(240,249,232)}
+.GnBu .q1-7{fill:rgb(204,235,197)}
+.GnBu .q2-7{fill:rgb(168,221,181)}
+.GnBu .q3-7{fill:rgb(123,204,196)}
+.GnBu .q4-7{fill:rgb(78,179,211)}
+.GnBu .q5-7{fill:rgb(43,140,190)}
+.GnBu .q6-7{fill:rgb(8,88,158)}
+.GnBu .q0-8{fill:rgb(247,252,240)}
+.GnBu .q1-8{fill:rgb(224,243,219)}
+.GnBu .q2-8{fill:rgb(204,235,197)}
+.GnBu .q3-8{fill:rgb(168,221,181)}
+.GnBu .q4-8{fill:rgb(123,204,196)}
+.GnBu .q5-8{fill:rgb(78,179,211)}
+.GnBu .q6-8{fill:rgb(43,140,190)}
+.GnBu .q7-8{fill:rgb(8,88,158)}
+.GnBu .q0-9{fill:rgb(247,252,240)}
+.GnBu .q1-9{fill:rgb(224,243,219)}
+.GnBu .q2-9{fill:rgb(204,235,197)}
+.GnBu .q3-9{fill:rgb(168,221,181)}
+.GnBu .q4-9{fill:rgb(123,204,196)}
+.GnBu .q5-9{fill:rgb(78,179,211)}
+.GnBu .q6-9{fill:rgb(43,140,190)}
+.GnBu .q7-9{fill:rgb(8,104,172)}
+.GnBu .q8-9{fill:rgb(8,64,129)}
+.BuGn .q0-3{fill:rgb(229,245,249)}
+.BuGn .q1-3{fill:rgb(153,216,201)}
+.BuGn .q2-3{fill:rgb(44,162,95)}
+.BuGn .q0-4{fill:rgb(237,248,251)}
+.BuGn .q1-4{fill:rgb(178,226,226)}
+.BuGn .q2-4{fill:rgb(102,194,164)}
+.BuGn .q3-4{fill:rgb(35,139,69)}
+.BuGn .q0-5{fill:rgb(237,248,251)}
+.BuGn .q1-5{fill:rgb(178,226,226)}
+.BuGn .q2-5{fill:rgb(102,194,164)}
+.BuGn .q3-5{fill:rgb(44,162,95)}
+.BuGn .q4-5{fill:rgb(0,109,44)}
+.BuGn .q0-6{fill:rgb(237,248,251)}
+.BuGn .q1-6{fill:rgb(204,236,230)}
+.BuGn .q2-6{fill:rgb(153,216,201)}
+.BuGn .q3-6{fill:rgb(102,194,164)}
+.BuGn .q4-6{fill:rgb(44,162,95)}
+.BuGn .q5-6{fill:rgb(0,109,44)}
+.BuGn .q0-7{fill:rgb(237,248,251)}
+.BuGn .q1-7{fill:rgb(204,236,230)}
+.BuGn .q2-7{fill:rgb(153,216,201)}
+.BuGn .q3-7{fill:rgb(102,194,164)}
+.BuGn .q4-7{fill:rgb(65,174,118)}
+.BuGn .q5-7{fill:rgb(35,139,69)}
+.BuGn .q6-7{fill:rgb(0,88,36)}
+.BuGn .q0-8{fill:rgb(247,252,253)}
+.BuGn .q1-8{fill:rgb(229,245,249)}
+.BuGn .q2-8{fill:rgb(204,236,230)}
+.BuGn .q3-8{fill:rgb(153,216,201)}
+.BuGn .q4-8{fill:rgb(102,194,164)}
+.BuGn .q5-8{fill:rgb(65,174,118)}
+.BuGn .q6-8{fill:rgb(35,139,69)}
+.BuGn .q7-8{fill:rgb(0,88,36)}
+.BuGn .q0-9{fill:rgb(247,252,253)}
+.BuGn .q1-9{fill:rgb(229,245,249)}
+.BuGn .q2-9{fill:rgb(204,236,230)}
+.BuGn .q3-9{fill:rgb(153,216,201)}
+.BuGn .q4-9{fill:rgb(102,194,164)}
+.BuGn .q5-9{fill:rgb(65,174,118)}
+.BuGn .q6-9{fill:rgb(35,139,69)}
+.BuGn .q7-9{fill:rgb(0,109,44)}
+.BuGn .q8-9{fill:rgb(0,68,27)}
+.PuBuGn .q0-3{fill:rgb(236,226,240)}
+.PuBuGn .q1-3{fill:rgb(166,189,219)}
+.PuBuGn .q2-3{fill:rgb(28,144,153)}
+.PuBuGn .q0-4{fill:rgb(246,239,247)}
+.PuBuGn .q1-4{fill:rgb(189,201,225)}
+.PuBuGn .q2-4{fill:rgb(103,169,207)}
+.PuBuGn .q3-4{fill:rgb(2,129,138)}
+.PuBuGn .q0-5{fill:rgb(246,239,247)}
+.PuBuGn .q1-5{fill:rgb(189,201,225)}
+.PuBuGn .q2-5{fill:rgb(103,169,207)}
+.PuBuGn .q3-5{fill:rgb(28,144,153)}
+.PuBuGn .q4-5{fill:rgb(1,108,89)}
+.PuBuGn .q0-6{fill:rgb(246,239,247)}
+.PuBuGn .q1-6{fill:rgb(208,209,230)}
+.PuBuGn .q2-6{fill:rgb(166,189,219)}
+.PuBuGn .q3-6{fill:rgb(103,169,207)}
+.PuBuGn .q4-6{fill:rgb(28,144,153)}
+.PuBuGn .q5-6{fill:rgb(1,108,89)}
+.PuBuGn .q0-7{fill:rgb(246,239,247)}
+.PuBuGn .q1-7{fill:rgb(208,209,230)}
+.PuBuGn .q2-7{fill:rgb(166,189,219)}
+.PuBuGn .q3-7{fill:rgb(103,169,207)}
+.PuBuGn .q4-7{fill:rgb(54,144,192)}
+.PuBuGn .q5-7{fill:rgb(2,129,138)}
+.PuBuGn .q6-7{fill:rgb(1,100,80)}
+.PuBuGn .q0-8{fill:rgb(255,247,251)}
+.PuBuGn .q1-8{fill:rgb(236,226,240)}
+.PuBuGn .q2-8{fill:rgb(208,209,230)}
+.PuBuGn .q3-8{fill:rgb(166,189,219)}
+.PuBuGn .q4-8{fill:rgb(103,169,207)}
+.PuBuGn .q5-8{fill:rgb(54,144,192)}
+.PuBuGn .q6-8{fill:rgb(2,129,138)}
+.PuBuGn .q7-8{fill:rgb(1,100,80)}
+.PuBuGn .q0-9{fill:rgb(255,247,251)}
+.PuBuGn .q1-9{fill:rgb(236,226,240)}
+.PuBuGn .q2-9{fill:rgb(208,209,230)}
+.PuBuGn .q3-9{fill:rgb(166,189,219)}
+.PuBuGn .q4-9{fill:rgb(103,169,207)}
+.PuBuGn .q5-9{fill:rgb(54,144,192)}
+.PuBuGn .q6-9{fill:rgb(2,129,138)}
+.PuBuGn .q7-9{fill:rgb(1,108,89)}
+.PuBuGn .q8-9{fill:rgb(1,70,54)}
+.PuBu .q0-3{fill:rgb(236,231,242)}
+.PuBu .q1-3{fill:rgb(166,189,219)}
+.PuBu .q2-3{fill:rgb(43,140,190)}
+.PuBu .q0-4{fill:rgb(241,238,246)}
+.PuBu .q1-4{fill:rgb(189,201,225)}
+.PuBu .q2-4{fill:rgb(116,169,207)}
+.PuBu .q3-4{fill:rgb(5,112,176)}
+.PuBu .q0-5{fill:rgb(241,238,246)}
+.PuBu .q1-5{fill:rgb(189,201,225)}
+.PuBu .q2-5{fill:rgb(116,169,207)}
+.PuBu .q3-5{fill:rgb(43,140,190)}
+.PuBu .q4-5{fill:rgb(4,90,141)}
+.PuBu .q0-6{fill:rgb(241,238,246)}
+.PuBu .q1-6{fill:rgb(208,209,230)}
+.PuBu .q2-6{fill:rgb(166,189,219)}
+.PuBu .q3-6{fill:rgb(116,169,207)}
+.PuBu .q4-6{fill:rgb(43,140,190)}
+.PuBu .q5-6{fill:rgb(4,90,141)}
+.PuBu .q0-7{fill:rgb(241,238,246)}
+.PuBu .q1-7{fill:rgb(208,209,230)}
+.PuBu .q2-7{fill:rgb(166,189,219)}
+.PuBu .q3-7{fill:rgb(116,169,207)}
+.PuBu .q4-7{fill:rgb(54,144,192)}
+.PuBu .q5-7{fill:rgb(5,112,176)}
+.PuBu .q6-7{fill:rgb(3,78,123)}
+.PuBu .q0-8{fill:rgb(255,247,251)}
+.PuBu .q1-8{fill:rgb(236,231,242)}
+.PuBu .q2-8{fill:rgb(208,209,230)}
+.PuBu .q3-8{fill:rgb(166,189,219)}
+.PuBu .q4-8{fill:rgb(116,169,207)}
+.PuBu .q5-8{fill:rgb(54,144,192)}
+.PuBu .q6-8{fill:rgb(5,112,176)}
+.PuBu .q7-8{fill:rgb(3,78,123)}
+.PuBu .q0-9{fill:rgb(255,247,251)}
+.PuBu .q1-9{fill:rgb(236,231,242)}
+.PuBu .q2-9{fill:rgb(208,209,230)}
+.PuBu .q3-9{fill:rgb(166,189,219)}
+.PuBu .q4-9{fill:rgb(116,169,207)}
+.PuBu .q5-9{fill:rgb(54,144,192)}
+.PuBu .q6-9{fill:rgb(5,112,176)}
+.PuBu .q7-9{fill:rgb(4,90,141)}
+.PuBu .q8-9{fill:rgb(2,56,88)}
+.BuPu .q0-3{fill:rgb(224,236,244)}
+.BuPu .q1-3{fill:rgb(158,188,218)}
+.BuPu .q2-3{fill:rgb(136,86,167)}
+.BuPu .q0-4{fill:rgb(237,248,251)}
+.BuPu .q1-4{fill:rgb(179,205,227)}
+.BuPu .q2-4{fill:rgb(140,150,198)}
+.BuPu .q3-4{fill:rgb(136,65,157)}
+.BuPu .q0-5{fill:rgb(237,248,251)}
+.BuPu .q1-5{fill:rgb(179,205,227)}
+.BuPu .q2-5{fill:rgb(140,150,198)}
+.BuPu .q3-5{fill:rgb(136,86,167)}
+.BuPu .q4-5{fill:rgb(129,15,124)}
+.BuPu .q0-6{fill:rgb(237,248,251)}
+.BuPu .q1-6{fill:rgb(191,211,230)}
+.BuPu .q2-6{fill:rgb(158,188,218)}
+.BuPu .q3-6{fill:rgb(140,150,198)}
+.BuPu .q4-6{fill:rgb(136,86,167)}
+.BuPu .q5-6{fill:rgb(129,15,124)}
+.BuPu .q0-7{fill:rgb(237,248,251)}
+.BuPu .q1-7{fill:rgb(191,211,230)}
+.BuPu .q2-7{fill:rgb(158,188,218)}
+.BuPu .q3-7{fill:rgb(140,150,198)}
+.BuPu .q4-7{fill:rgb(140,107,177)}
+.BuPu .q5-7{fill:rgb(136,65,157)}
+.BuPu .q6-7{fill:rgb(110,1,107)}
+.BuPu .q0-8{fill:rgb(247,252,253)}
+.BuPu .q1-8{fill:rgb(224,236,244)}
+.BuPu .q2-8{fill:rgb(191,211,230)}
+.BuPu .q3-8{fill:rgb(158,188,218)}
+.BuPu .q4-8{fill:rgb(140,150,198)}
+.BuPu .q5-8{fill:rgb(140,107,177)}
+.BuPu .q6-8{fill:rgb(136,65,157)}
+.BuPu .q7-8{fill:rgb(110,1,107)}
+.BuPu .q0-9{fill:rgb(247,252,253)}
+.BuPu .q1-9{fill:rgb(224,236,244)}
+.BuPu .q2-9{fill:rgb(191,211,230)}
+.BuPu .q3-9{fill:rgb(158,188,218)}
+.BuPu .q4-9{fill:rgb(140,150,198)}
+.BuPu .q5-9{fill:rgb(140,107,177)}
+.BuPu .q6-9{fill:rgb(136,65,157)}
+.BuPu .q7-9{fill:rgb(129,15,124)}
+.BuPu .q8-9{fill:rgb(77,0,75)}
+.RdPu .q0-3{fill:rgb(253,224,221)}
+.RdPu .q1-3{fill:rgb(250,159,181)}
+.RdPu .q2-3{fill:rgb(197,27,138)}
+.RdPu .q0-4{fill:rgb(254,235,226)}
+.RdPu .q1-4{fill:rgb(251,180,185)}
+.RdPu .q2-4{fill:rgb(247,104,161)}
+.RdPu .q3-4{fill:rgb(174,1,126)}
+.RdPu .q0-5{fill:rgb(254,235,226)}
+.RdPu .q1-5{fill:rgb(251,180,185)}
+.RdPu .q2-5{fill:rgb(247,104,161)}
+.RdPu .q3-5{fill:rgb(197,27,138)}
+.RdPu .q4-5{fill:rgb(122,1,119)}
+.RdPu .q0-6{fill:rgb(254,235,226)}
+.RdPu .q1-6{fill:rgb(252,197,192)}
+.RdPu .q2-6{fill:rgb(250,159,181)}
+.RdPu .q3-6{fill:rgb(247,104,161)}
+.RdPu .q4-6{fill:rgb(197,27,138)}
+.RdPu .q5-6{fill:rgb(122,1,119)}
+.RdPu .q0-7{fill:rgb(254,235,226)}
+.RdPu .q1-7{fill:rgb(252,197,192)}
+.RdPu .q2-7{fill:rgb(250,159,181)}
+.RdPu .q3-7{fill:rgb(247,104,161)}
+.RdPu .q4-7{fill:rgb(221,52,151)}
+.RdPu .q5-7{fill:rgb(174,1,126)}
+.RdPu .q6-7{fill:rgb(122,1,119)}
+.RdPu .q0-8{fill:rgb(255,247,243)}
+.RdPu .q1-8{fill:rgb(253,224,221)}
+.RdPu .q2-8{fill:rgb(252,197,192)}
+.RdPu .q3-8{fill:rgb(250,159,181)}
+.RdPu .q4-8{fill:rgb(247,104,161)}
+.RdPu .q5-8{fill:rgb(221,52,151)}
+.RdPu .q6-8{fill:rgb(174,1,126)}
+.RdPu .q7-8{fill:rgb(122,1,119)}
+.RdPu .q0-9{fill:rgb(255,247,243)}
+.RdPu .q1-9{fill:rgb(253,224,221)}
+.RdPu .q2-9{fill:rgb(252,197,192)}
+.RdPu .q3-9{fill:rgb(250,159,181)}
+.RdPu .q4-9{fill:rgb(247,104,161)}
+.RdPu .q5-9{fill:rgb(221,52,151)}
+.RdPu .q6-9{fill:rgb(174,1,126)}
+.RdPu .q7-9{fill:rgb(122,1,119)}
+.RdPu .q8-9{fill:rgb(73,0,106)}
+.PuRd .q0-3{fill:rgb(231,225,239)}
+.PuRd .q1-3{fill:rgb(201,148,199)}
+.PuRd .q2-3{fill:rgb(221,28,119)}
+.PuRd .q0-4{fill:rgb(241,238,246)}
+.PuRd .q1-4{fill:rgb(215,181,216)}
+.PuRd .q2-4{fill:rgb(223,101,176)}
+.PuRd .q3-4{fill:rgb(206,18,86)}
+.PuRd .q0-5{fill:rgb(241,238,246)}
+.PuRd .q1-5{fill:rgb(215,181,216)}
+.PuRd .q2-5{fill:rgb(223,101,176)}
+.PuRd .q3-5{fill:rgb(221,28,119)}
+.PuRd .q4-5{fill:rgb(152,0,67)}
+.PuRd .q0-6{fill:rgb(241,238,246)}
+.PuRd .q1-6{fill:rgb(212,185,218)}
+.PuRd .q2-6{fill:rgb(201,148,199)}
+.PuRd .q3-6{fill:rgb(223,101,176)}
+.PuRd .q4-6{fill:rgb(221,28,119)}
+.PuRd .q5-6{fill:rgb(152,0,67)}
+.PuRd .q0-7{fill:rgb(241,238,246)}
+.PuRd .q1-7{fill:rgb(212,185,218)}
+.PuRd .q2-7{fill:rgb(201,148,199)}
+.PuRd .q3-7{fill:rgb(223,101,176)}
+.PuRd .q4-7{fill:rgb(231,41,138)}
+.PuRd .q5-7{fill:rgb(206,18,86)}
+.PuRd .q6-7{fill:rgb(145,0,63)}
+.PuRd .q0-8{fill:rgb(247,244,249)}
+.PuRd .q1-8{fill:rgb(231,225,239)}
+.PuRd .q2-8{fill:rgb(212,185,218)}
+.PuRd .q3-8{fill:rgb(201,148,199)}
+.PuRd .q4-8{fill:rgb(223,101,176)}
+.PuRd .q5-8{fill:rgb(231,41,138)}
+.PuRd .q6-8{fill:rgb(206,18,86)}
+.PuRd .q7-8{fill:rgb(145,0,63)}
+.PuRd .q0-9{fill:rgb(247,244,249)}
+.PuRd .q1-9{fill:rgb(231,225,239)}
+.PuRd .q2-9{fill:rgb(212,185,218)}
+.PuRd .q3-9{fill:rgb(201,148,199)}
+.PuRd .q4-9{fill:rgb(223,101,176)}
+.PuRd .q5-9{fill:rgb(231,41,138)}
+.PuRd .q6-9{fill:rgb(206,18,86)}
+.PuRd .q7-9{fill:rgb(152,0,67)}
+.PuRd .q8-9{fill:rgb(103,0,31)}
+.OrRd .q0-3{fill:rgb(254,232,200)}
+.OrRd .q1-3{fill:rgb(253,187,132)}
+.OrRd .q2-3{fill:rgb(227,74,51)}
+.OrRd .q0-4{fill:rgb(254,240,217)}
+.OrRd .q1-4{fill:rgb(253,204,138)}
+.OrRd .q2-4{fill:rgb(252,141,89)}
+.OrRd .q3-4{fill:rgb(215,48,31)}
+.OrRd .q0-5{fill:rgb(254,240,217)}
+.OrRd .q1-5{fill:rgb(253,204,138)}
+.OrRd .q2-5{fill:rgb(252,141,89)}
+.OrRd .q3-5{fill:rgb(227,74,51)}
+.OrRd .q4-5{fill:rgb(179,0,0)}
+.OrRd .q0-6{fill:rgb(254,240,217)}
+.OrRd .q1-6{fill:rgb(253,212,158)}
+.OrRd .q2-6{fill:rgb(253,187,132)}
+.OrRd .q3-6{fill:rgb(252,141,89)}
+.OrRd .q4-6{fill:rgb(227,74,51)}
+.OrRd .q5-6{fill:rgb(179,0,0)}
+.OrRd .q0-7{fill:rgb(254,240,217)}
+.OrRd .q1-7{fill:rgb(253,212,158)}
+.OrRd .q2-7{fill:rgb(253,187,132)}
+.OrRd .q3-7{fill:rgb(252,141,89)}
+.OrRd .q4-7{fill:rgb(239,101,72)}
+.OrRd .q5-7{fill:rgb(215,48,31)}
+.OrRd .q6-7{fill:rgb(153,0,0)}
+.OrRd .q0-8{fill:rgb(255,247,236)}
+.OrRd .q1-8{fill:rgb(254,232,200)}
+.OrRd .q2-8{fill:rgb(253,212,158)}
+.OrRd .q3-8{fill:rgb(253,187,132)}
+.OrRd .q4-8{fill:rgb(252,141,89)}
+.OrRd .q5-8{fill:rgb(239,101,72)}
+.OrRd .q6-8{fill:rgb(215,48,31)}
+.OrRd .q7-8{fill:rgb(153,0,0)}
+.OrRd .q0-9{fill:rgb(255,247,236)}
+.OrRd .q1-9{fill:rgb(254,232,200)}
+.OrRd .q2-9{fill:rgb(253,212,158)}
+.OrRd .q3-9{fill:rgb(253,187,132)}
+.OrRd .q4-9{fill:rgb(252,141,89)}
+.OrRd .q5-9{fill:rgb(239,101,72)}
+.OrRd .q6-9{fill:rgb(215,48,31)}
+.OrRd .q7-9{fill:rgb(179,0,0)}
+.OrRd .q8-9{fill:rgb(127,0,0)}
+.YlOrRd .q0-3{fill:rgb(255,237,160)}
+.YlOrRd .q1-3{fill:rgb(254,178,76)}
+.YlOrRd .q2-3{fill:rgb(240,59,32)}
+.YlOrRd .q0-4{fill:rgb(255,255,178)}
+.YlOrRd .q1-4{fill:rgb(254,204,92)}
+.YlOrRd .q2-4{fill:rgb(253,141,60)}
+.YlOrRd .q3-4{fill:rgb(227,26,28)}
+.YlOrRd .q0-5{fill:rgb(255,255,178)}
+.YlOrRd .q1-5{fill:rgb(254,204,92)}
+.YlOrRd .q2-5{fill:rgb(253,141,60)}
+.YlOrRd .q3-5{fill:rgb(240,59,32)}
+.YlOrRd .q4-5{fill:rgb(189,0,38)}
+.YlOrRd .q0-6{fill:rgb(255,255,178)}
+.YlOrRd .q1-6{fill:rgb(254,217,118)}
+.YlOrRd .q2-6{fill:rgb(254,178,76)}
+.YlOrRd .q3-6{fill:rgb(253,141,60)}
+.YlOrRd .q4-6{fill:rgb(240,59,32)}
+.YlOrRd .q5-6{fill:rgb(189,0,38)}
+.YlOrRd .q0-7{fill:rgb(255,255,178)}
+.YlOrRd .q1-7{fill:rgb(254,217,118)}
+.YlOrRd .q2-7{fill:rgb(254,178,76)}
+.YlOrRd .q3-7{fill:rgb(253,141,60)}
+.YlOrRd .q4-7{fill:rgb(252,78,42)}
+.YlOrRd .q5-7{fill:rgb(227,26,28)}
+.YlOrRd .q6-7{fill:rgb(177,0,38)}
+.YlOrRd .q0-8{fill:rgb(255,255,204)}
+.YlOrRd .q1-8{fill:rgb(255,237,160)}
+.YlOrRd .q2-8{fill:rgb(254,217,118)}
+.YlOrRd .q3-8{fill:rgb(254,178,76)}
+.YlOrRd .q4-8{fill:rgb(253,141,60)}
+.YlOrRd .q5-8{fill:rgb(252,78,42)}
+.YlOrRd .q6-8{fill:rgb(227,26,28)}
+.YlOrRd .q7-8{fill:rgb(177,0,38)}
+.YlOrRd .q0-9{fill:rgb(255,255,204)}
+.YlOrRd .q1-9{fill:rgb(255,237,160)}
+.YlOrRd .q2-9{fill:rgb(254,217,118)}
+.YlOrRd .q3-9{fill:rgb(254,178,76)}
+.YlOrRd .q4-9{fill:rgb(253,141,60)}
+.YlOrRd .q5-9{fill:rgb(252,78,42)}
+.YlOrRd .q6-9{fill:rgb(227,26,28)}
+.YlOrRd .q7-9{fill:rgb(189,0,38)}
+.YlOrRd .q8-9{fill:rgb(128,0,38)}
+.YlOrBr .q0-3{fill:rgb(255,247,188)}
+.YlOrBr .q1-3{fill:rgb(254,196,79)}
+.YlOrBr .q2-3{fill:rgb(217,95,14)}
+.YlOrBr .q0-4{fill:rgb(255,255,212)}
+.YlOrBr .q1-4{fill:rgb(254,217,142)}
+.YlOrBr .q2-4{fill:rgb(254,153,41)}
+.YlOrBr .q3-4{fill:rgb(204,76,2)}
+.YlOrBr .q0-5{fill:rgb(255,255,212)}
+.YlOrBr .q1-5{fill:rgb(254,217,142)}
+.YlOrBr .q2-5{fill:rgb(254,153,41)}
+.YlOrBr .q3-5{fill:rgb(217,95,14)}
+.YlOrBr .q4-5{fill:rgb(153,52,4)}
+.YlOrBr .q0-6{fill:rgb(255,255,212)}
+.YlOrBr .q1-6{fill:rgb(254,227,145)}
+.YlOrBr .q2-6{fill:rgb(254,196,79)}
+.YlOrBr .q3-6{fill:rgb(254,153,41)}
+.YlOrBr .q4-6{fill:rgb(217,95,14)}
+.YlOrBr .q5-6{fill:rgb(153,52,4)}
+.YlOrBr .q0-7{fill:rgb(255,255,212)}
+.YlOrBr .q1-7{fill:rgb(254,227,145)}
+.YlOrBr .q2-7{fill:rgb(254,196,79)}
+.YlOrBr .q3-7{fill:rgb(254,153,41)}
+.YlOrBr .q4-7{fill:rgb(236,112,20)}
+.YlOrBr .q5-7{fill:rgb(204,76,2)}
+.YlOrBr .q6-7{fill:rgb(140,45,4)}
+.YlOrBr .q0-8{fill:rgb(255,255,229)}
+.YlOrBr .q1-8{fill:rgb(255,247,188)}
+.YlOrBr .q2-8{fill:rgb(254,227,145)}
+.YlOrBr .q3-8{fill:rgb(254,196,79)}
+.YlOrBr .q4-8{fill:rgb(254,153,41)}
+.YlOrBr .q5-8{fill:rgb(236,112,20)}
+.YlOrBr .q6-8{fill:rgb(204,76,2)}
+.YlOrBr .q7-8{fill:rgb(140,45,4)}
+.YlOrBr .q0-9{fill:rgb(255,255,229)}
+.YlOrBr .q1-9{fill:rgb(255,247,188)}
+.YlOrBr .q2-9{fill:rgb(254,227,145)}
+.YlOrBr .q3-9{fill:rgb(254,196,79)}
+.YlOrBr .q4-9{fill:rgb(254,153,41)}
+.YlOrBr .q5-9{fill:rgb(236,112,20)}
+.YlOrBr .q6-9{fill:rgb(204,76,2)}
+.YlOrBr .q7-9{fill:rgb(153,52,4)}
+.YlOrBr .q8-9{fill:rgb(102,37,6)}
+.Purples .q0-3{fill:rgb(239,237,245)}
+.Purples .q1-3{fill:rgb(188,189,220)}
+.Purples .q2-3{fill:rgb(117,107,177)}
+.Purples .q0-4{fill:rgb(242,240,247)}
+.Purples .q1-4{fill:rgb(203,201,226)}
+.Purples .q2-4{fill:rgb(158,154,200)}
+.Purples .q3-4{fill:rgb(106,81,163)}
+.Purples .q0-5{fill:rgb(242,240,247)}
+.Purples .q1-5{fill:rgb(203,201,226)}
+.Purples .q2-5{fill:rgb(158,154,200)}
+.Purples .q3-5{fill:rgb(117,107,177)}
+.Purples .q4-5{fill:rgb(84,39,143)}
+.Purples .q0-6{fill:rgb(242,240,247)}
+.Purples .q1-6{fill:rgb(218,218,235)}
+.Purples .q2-6{fill:rgb(188,189,220)}
+.Purples .q3-6{fill:rgb(158,154,200)}
+.Purples .q4-6{fill:rgb(117,107,177)}
+.Purples .q5-6{fill:rgb(84,39,143)}
+.Purples .q0-7{fill:rgb(242,240,247)}
+.Purples .q1-7{fill:rgb(218,218,235)}
+.Purples .q2-7{fill:rgb(188,189,220)}
+.Purples .q3-7{fill:rgb(158,154,200)}
+.Purples .q4-7{fill:rgb(128,125,186)}
+.Purples .q5-7{fill:rgb(106,81,163)}
+.Purples .q6-7{fill:rgb(74,20,134)}
+.Purples .q0-8{fill:rgb(252,251,253)}
+.Purples .q1-8{fill:rgb(239,237,245)}
+.Purples .q2-8{fill:rgb(218,218,235)}
+.Purples .q3-8{fill:rgb(188,189,220)}
+.Purples .q4-8{fill:rgb(158,154,200)}
+.Purples .q5-8{fill:rgb(128,125,186)}
+.Purples .q6-8{fill:rgb(106,81,163)}
+.Purples .q7-8{fill:rgb(74,20,134)}
+.Purples .q0-9{fill:rgb(252,251,253)}
+.Purples .q1-9{fill:rgb(239,237,245)}
+.Purples .q2-9{fill:rgb(218,218,235)}
+.Purples .q3-9{fill:rgb(188,189,220)}
+.Purples .q4-9{fill:rgb(158,154,200)}
+.Purples .q5-9{fill:rgb(128,125,186)}
+.Purples .q6-9{fill:rgb(106,81,163)}
+.Purples .q7-9{fill:rgb(84,39,143)}
+.Purples .q8-9{fill:rgb(63,0,125)}
+.Blues .q0-3{fill:rgb(222,235,247)}
+.Blues .q1-3{fill:rgb(158,202,225)}
+.Blues .q2-3{fill:rgb(49,130,189)}
+.Blues .q0-4{fill:rgb(239,243,255)}
+.Blues .q1-4{fill:rgb(189,215,231)}
+.Blues .q2-4{fill:rgb(107,174,214)}
+.Blues .q3-4{fill:rgb(33,113,181)}
+.Blues .q0-5{fill:rgb(239,243,255)}
+.Blues .q1-5{fill:rgb(189,215,231)}
+.Blues .q2-5{fill:rgb(107,174,214)}
+.Blues .q3-5{fill:rgb(49,130,189)}
+.Blues .q4-5{fill:rgb(8,81,156)}
+.Blues .q0-6{fill:rgb(239,243,255)}
+.Blues .q1-6{fill:rgb(198,219,239)}
+.Blues .q2-6{fill:rgb(158,202,225)}
+.Blues .q3-6{fill:rgb(107,174,214)}
+.Blues .q4-6{fill:rgb(49,130,189)}
+.Blues .q5-6{fill:rgb(8,81,156)}
+.Blues .q0-7{fill:rgb(239,243,255)}
+.Blues .q1-7{fill:rgb(198,219,239)}
+.Blues .q2-7{fill:rgb(158,202,225)}
+.Blues .q3-7{fill:rgb(107,174,214)}
+.Blues .q4-7{fill:rgb(66,146,198)}
+.Blues .q5-7{fill:rgb(33,113,181)}
+.Blues .q6-7{fill:rgb(8,69,148)}
+.Blues .q0-8{fill:rgb(247,251,255)}
+.Blues .q1-8{fill:rgb(222,235,247)}
+.Blues .q2-8{fill:rgb(198,219,239)}
+.Blues .q3-8{fill:rgb(158,202,225)}
+.Blues .q4-8{fill:rgb(107,174,214)}
+.Blues .q5-8{fill:rgb(66,146,198)}
+.Blues .q6-8{fill:rgb(33,113,181)}
+.Blues .q7-8{fill:rgb(8,69,148)}
+.Blues .q0-9{fill:rgb(247,251,255)}
+.Blues .q1-9{fill:rgb(222,235,247)}
+.Blues .q2-9{fill:rgb(198,219,239)}
+.Blues .q3-9{fill:rgb(158,202,225)}
+.Blues .q4-9{fill:rgb(107,174,214)}
+.Blues .q5-9{fill:rgb(66,146,198)}
+.Blues .q6-9{fill:rgb(33,113,181)}
+.Blues .q7-9{fill:rgb(8,81,156)}
+.Blues .q8-9{fill:rgb(8,48,107)}
+.Greens .q0-3{fill:rgb(229,245,224)}
+.Greens .q1-3{fill:rgb(161,217,155)}
+.Greens .q2-3{fill:rgb(49,163,84)}
+.Greens .q0-4{fill:rgb(237,248,233)}
+.Greens .q1-4{fill:rgb(186,228,179)}
+.Greens .q2-4{fill:rgb(116,196,118)}
+.Greens .q3-4{fill:rgb(35,139,69)}
+.Greens .q0-5{fill:rgb(237,248,233)}
+.Greens .q1-5{fill:rgb(186,228,179)}
+.Greens .q2-5{fill:rgb(116,196,118)}
+.Greens .q3-5{fill:rgb(49,163,84)}
+.Greens .q4-5{fill:rgb(0,109,44)}
+.Greens .q0-6{fill:rgb(237,248,233)}
+.Greens .q1-6{fill:rgb(199,233,192)}
+.Greens .q2-6{fill:rgb(161,217,155)}
+.Greens .q3-6{fill:rgb(116,196,118)}
+.Greens .q4-6{fill:rgb(49,163,84)}
+.Greens .q5-6{fill:rgb(0,109,44)}
+.Greens .q0-7{fill:rgb(237,248,233)}
+.Greens .q1-7{fill:rgb(199,233,192)}
+.Greens .q2-7{fill:rgb(161,217,155)}
+.Greens .q3-7{fill:rgb(116,196,118)}
+.Greens .q4-7{fill:rgb(65,171,93)}
+.Greens .q5-7{fill:rgb(35,139,69)}
+.Greens .q6-7{fill:rgb(0,90,50)}
+.Greens .q0-8{fill:rgb(247,252,245)}
+.Greens .q1-8{fill:rgb(229,245,224)}
+.Greens .q2-8{fill:rgb(199,233,192)}
+.Greens .q3-8{fill:rgb(161,217,155)}
+.Greens .q4-8{fill:rgb(116,196,118)}
+.Greens .q5-8{fill:rgb(65,171,93)}
+.Greens .q6-8{fill:rgb(35,139,69)}
+.Greens .q7-8{fill:rgb(0,90,50)}
+.Greens .q0-9{fill:rgb(247,252,245)}
+.Greens .q1-9{fill:rgb(229,245,224)}
+.Greens .q2-9{fill:rgb(199,233,192)}
+.Greens .q3-9{fill:rgb(161,217,155)}
+.Greens .q4-9{fill:rgb(116,196,118)}
+.Greens .q5-9{fill:rgb(65,171,93)}
+.Greens .q6-9{fill:rgb(35,139,69)}
+.Greens .q7-9{fill:rgb(0,109,44)}
+.Greens .q8-9{fill:rgb(0,68,27)}
+.Oranges .q0-3{fill:rgb(254,230,206)}
+.Oranges .q1-3{fill:rgb(253,174,107)}
+.Oranges .q2-3{fill:rgb(230,85,13)}
+.Oranges .q0-4{fill:rgb(254,237,222)}
+.Oranges .q1-4{fill:rgb(253,190,133)}
+.Oranges .q2-4{fill:rgb(253,141,60)}
+.Oranges .q3-4{fill:rgb(217,71,1)}
+.Oranges .q0-5{fill:rgb(254,237,222)}
+.Oranges .q1-5{fill:rgb(253,190,133)}
+.Oranges .q2-5{fill:rgb(253,141,60)}
+.Oranges .q3-5{fill:rgb(230,85,13)}
+.Oranges .q4-5{fill:rgb(166,54,3)}
+.Oranges .q0-6{fill:rgb(254,237,222)}
+.Oranges .q1-6{fill:rgb(253,208,162)}
+.Oranges .q2-6{fill:rgb(253,174,107)}
+.Oranges .q3-6{fill:rgb(253,141,60)}
+.Oranges .q4-6{fill:rgb(230,85,13)}
+.Oranges .q5-6{fill:rgb(166,54,3)}
+.Oranges .q0-7{fill:rgb(254,237,222)}
+.Oranges .q1-7{fill:rgb(253,208,162)}
+.Oranges .q2-7{fill:rgb(253,174,107)}
+.Oranges .q3-7{fill:rgb(253,141,60)}
+.Oranges .q4-7{fill:rgb(241,105,19)}
+.Oranges .q5-7{fill:rgb(217,72,1)}
+.Oranges .q6-7{fill:rgb(140,45,4)}
+.Oranges .q0-8{fill:rgb(255,245,235)}
+.Oranges .q1-8{fill:rgb(254,230,206)}
+.Oranges .q2-8{fill:rgb(253,208,162)}