flipflop 2.2.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile +1 -0
- data/README.md +29 -3
- data/Rakefile +2 -2
- data/app/assets/stylesheets/flipflop.css +1 -1
- data/app/controllers/flipflop/features_controller.rb +0 -2
- data/app/controllers/flipflop/strategies_controller.rb +0 -1
- data/app/models/flipflop/feature.rb +3 -1
- data/lib/flipflop/strategies/active_record_strategy.rb +1 -1
- data/lib/flipflop/strategies/query_string_strategy.rb +1 -1
- data/lib/flipflop/strategies/redis_strategy.rb +41 -0
- data/lib/flipflop/version.rb +1 -1
- data/lib/flipflop.rb +1 -0
- data/lib/generators/flipflop/features/templates/features.rb +2 -1
- data/lib/generators/flipflop/install/install_generator.rb +21 -6
- data/test/integration/dashboard_test.rb +36 -12
- data/test/test_helper.rb +7 -1
- data/test/unit/strategies/redis_strategy_test.rb +97 -0
- metadata +4 -3
- data/app/controllers/concerns/flipflop/environment_filters.rb +0 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDQyZGU4ODNkZGVhNWMzYWM2OWZiNDYwM2ZmNDllNGY1YjZmOTM5NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDZkZjM2YTNhZDEwNjBjZDY3MDM0Y2FmZGQwNmIzMDY1MWRhOGE1OA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTQ2MWIxZjBiNGMxY2VlMDgyMzVlNWQ1MjY2NmRjOTZhNjY2YmI5NWRiYzQy
|
10
|
+
NTZlMzJhOWQ3MTliNTI3NjdiMjg1NDAwYzU0YWY2MzU1Mjc1YmQyZmQzNWZi
|
11
|
+
YWI5YTQ0Y2I3M2E4MTFiYjYwODE3NThmZTVjZjFkODZlZTNjMDA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Njc0NTFiMGEwNmEzMmQ1YjdlN2EzNjhjMWQyM2ZlNDJlY2E3MzI3Mjk0ZGMz
|
14
|
+
ZmU5MTg3NTU1MzRmMzkxM2Y2ODkxODhkNWFkNDIyMjM1MGE2NThmNDI0MmY1
|
15
|
+
MWNiZWNhZjdhZGM5MzRhYzRlNTlmNTMxNTI4NTFmZTdmNjFmNjE=
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -8,7 +8,7 @@ application functionality at run-time. It is originally based on
|
|
8
8
|
* an improved dashboard
|
9
9
|
* thread safety
|
10
10
|
* better database performance due to per-request caching, enabled by default
|
11
|
-
* more strategies (query strings, sessions, custom code)
|
11
|
+
* more strategies (Redis, query strings, sessions, custom code)
|
12
12
|
* more strategy options (cookie options, strategy names and descriptions, custom database models)
|
13
13
|
* the ability to use the same strategy twice, with different options
|
14
14
|
* configuration in a fixed location (`config/features.rb`) that is usable even if you don't use the database strategy
|
@@ -18,7 +18,7 @@ application functionality at run-time. It is originally based on
|
|
18
18
|
You can configure strategy layers that will evaluate if a feature is currently
|
19
19
|
enabled or disabled. Available strategies are:
|
20
20
|
* a per-feature default setting
|
21
|
-
* database (with Active Record), to flipflop features site-wide for all users
|
21
|
+
* database (with Active Record or Redis), to flipflop features site-wide for all users
|
22
22
|
* cookie or session, to flipflop features for single users
|
23
23
|
* query string parameters, to flipflop features occasionally (in development mode for example)
|
24
24
|
* custom strategy code
|
@@ -82,15 +82,23 @@ The following strategies are provided:
|
|
82
82
|
* `:httponly` – Whether the cookies are accessible via scripting or only HTTP. Default is `false`.
|
83
83
|
* `:query_string` – Interpret query string parameters as features. This strategy is only used for resolving. It does not allow switching features on/off.
|
84
84
|
* `:prefix` – String prefix for all query string parameters. Defaults to no prefix.
|
85
|
+
* `:redis` – Save feature settings in Redis.
|
86
|
+
* `:client` – Use the specified Redis client instead of `Redis.new`.
|
87
|
+
* `:prefix` – String prefix for all Redis keys. Defaults to no prefix.
|
85
88
|
* `:session` – Save feature settings in the current user's application session.
|
86
89
|
* `:prefix` – String prefix for all session variables. Defaults to no prefix.
|
87
90
|
* `:default` – Not strictly needed, all feature defaults will be applied if no strategies match a feature. Include this strategy to determine the order of using the default value, and to make it appear in the dashboard.
|
91
|
+
* `:test` – Simple strategy that stores features in memory. Useful for testing. If you call `Flipflop::FeatureSet.current.test!` this strategy is enabled and replaces all configured strategies.
|
88
92
|
|
89
93
|
All strategies support these options, to change the appearance of the dashboard:
|
90
94
|
* `:name` – The name of the strategy. Defaults to the name of the selected strategy.
|
91
95
|
* `:description` – The description of the strategy. Every strategy has a default description.
|
92
96
|
* `:hidden` – Optionally hides the strategy from the dashboard. Default is `false`.
|
93
97
|
|
98
|
+
The same strategy type can be used multiple times, as long as the options are
|
99
|
+
different. To prevent subtle bugs, an error is raised if two identical
|
100
|
+
strategies are configured.
|
101
|
+
|
94
102
|
## Checking if a feature is enabled
|
95
103
|
|
96
104
|
`Flipflop.enabled?` or the dynamic predicate methods can be used to check
|
@@ -150,7 +158,8 @@ Flipflop.configure do
|
|
150
158
|
end
|
151
159
|
```
|
152
160
|
|
153
|
-
You can define your own custom strategies by inheriting from
|
161
|
+
You can define your own custom strategies by inheriting from
|
162
|
+
`Flipflop::Strategies::AbstractStrategy`:
|
154
163
|
|
155
164
|
```ruby
|
156
165
|
class UserPreferenceStrategy < Flipflop::Strategies::AbstractStrategy
|
@@ -201,6 +210,23 @@ Flipflop.configure do
|
|
201
210
|
end
|
202
211
|
```
|
203
212
|
|
213
|
+
If you define your class inside `Flipflop::Strategies`, you can use the
|
214
|
+
shorthand name to refer to your strategy:
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
module Flipflop::Strategies
|
218
|
+
class UserPreferenceStrategy < AbstractStrategy
|
219
|
+
# ...
|
220
|
+
end
|
221
|
+
end
|
222
|
+
```
|
223
|
+
|
224
|
+
```ruby
|
225
|
+
Flipflop.configure do
|
226
|
+
strategy :user_preference
|
227
|
+
end
|
228
|
+
```
|
229
|
+
|
204
230
|
## Dashboard access control
|
205
231
|
|
206
232
|
The dashboard provides visibility and control over the features.
|
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ namespace :assets do
|
|
20
20
|
stylesheet_file = "flipflop.css"
|
21
21
|
stylesheet_path = stylesheets_path + "/" + stylesheet_file
|
22
22
|
|
23
|
-
task :compile do
|
23
|
+
task :compile => :clean do
|
24
24
|
require "bundler/setup"
|
25
25
|
require "flipflop"
|
26
26
|
require "sprockets"
|
@@ -34,6 +34,6 @@ namespace :assets do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
task :clean do
|
37
|
-
FileUtils.rm(stylesheet_path)
|
37
|
+
FileUtils.rm(stylesheet_path) rescue nil
|
38
38
|
end
|
39
39
|
end
|
@@ -1 +1 @@
|
|
1
|
-
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active{outline:0}a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a,a:visited{text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]>.caret,.dropup>.btn>.caret,section.flipflop table tbody td.toggle div.toolbar div.group .dropup>input[type=submit]>.caret{border-top-color:#000 !important}.label,section.flipflop table tbody td.status span{border:1px solid #000}.table,section.flipflop table{border-collapse:collapse !important}.table td,section.flipflop table td,.table th,section.flipflop table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}@-moz-viewport{width:device-width}@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@-webkit-viewport{width:device-width}@viewport{width:device-width}html{font-size:16px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:1rem;line-height:1.5;color:#373a3c;background-color:#fff}[tabindex="-1"]:focus{outline:none !important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #818a91}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:bold}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}pre{margin-top:0;margin-bottom:1rem}figure{margin:0 0 1rem}img{vertical-align:middle}[role="button"]{cursor:pointer}a,area,button,[role="button"],input,label,select,summary,textarea{touch-action:manipulation}table{background-color:transparent}caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#818a91;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,textarea{margin:0;line-height:inherit;border-radius:0}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type="search"]{box-sizing:inherit;-webkit-appearance:none}output{display:inline-block}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:0.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}.h1{font-size:2.5rem}.h2{font-size:2rem}.h3{font-size:1.75rem}.h4{font-size:1.5rem}.h5{font-size:1.25rem}.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300}.display-2{font-size:5.5rem;font-weight:300}.display-3{font-size:4.5rem;font-weight:300}.display-4{font-size:3.5rem;font-weight:300}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:5px}.dl-horizontal{margin-right:-1.875rem;margin-left:-1.875rem}.dl-horizontal::after{content:"";display:table;clear:both}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:0.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:0.25rem solid #eceeef}.blockquote-footer{display:block;font-size:80%;line-height:1.5;color:#818a91}.blockquote-footer::before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:0.25rem solid #eceeef;border-left:0}.blockquote-reverse .blockquote-footer::before{content:""}.blockquote-reverse .blockquote-footer::after{content:"\00A0 \2014"}.container{margin-left:auto;margin-right:auto;padding-left:0.9375rem;padding-right:0.9375rem}.container::after{content:"";display:table;clear:both}@media (min-width: 544px){.container{max-width:576px}}@media (min-width: 768px){.container{max-width:720px}}@media (min-width: 992px){.container{max-width:940px}}@media (min-width: 1200px){.container{max-width:1140px}}.container-fluid,section.flipflop{margin-left:auto;margin-right:auto;padding-left:0.9375rem;padding-right:0.9375rem}.container-fluid::after,section.flipflop::after{content:"";display:table;clear:both}.row{margin-left:-0.9375rem;margin-right:-0.9375rem}.row::after{content:"";display:table;clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{position:relative;min-height:1px;padding-left:0.9375rem;padding-right:0.9375rem}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 544px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 768px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 992px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{float:left}.col-xl-1{width:8.33333%}.col-xl-2{width:16.66667%}.col-xl-3{width:25%}.col-xl-4{width:33.33333%}.col-xl-5{width:41.66667%}.col-xl-6{width:50%}.col-xl-7{width:58.33333%}.col-xl-8{width:66.66667%}.col-xl-9{width:75%}.col-xl-10{width:83.33333%}.col-xl-11{width:91.66667%}.col-xl-12{width:100%}.col-xl-pull-0{right:auto}.col-xl-pull-1{right:8.33333%}.col-xl-pull-2{right:16.66667%}.col-xl-pull-3{right:25%}.col-xl-pull-4{right:33.33333%}.col-xl-pull-5{right:41.66667%}.col-xl-pull-6{right:50%}.col-xl-pull-7{right:58.33333%}.col-xl-pull-8{right:66.66667%}.col-xl-pull-9{right:75%}.col-xl-pull-10{right:83.33333%}.col-xl-pull-11{right:91.66667%}.col-xl-pull-12{right:100%}.col-xl-push-0{left:auto}.col-xl-push-1{left:8.33333%}.col-xl-push-2{left:16.66667%}.col-xl-push-3{left:25%}.col-xl-push-4{left:33.33333%}.col-xl-push-5{left:41.66667%}.col-xl-push-6{left:50%}.col-xl-push-7{left:58.33333%}.col-xl-push-8{left:66.66667%}.col-xl-push-9{left:75%}.col-xl-push-10{left:83.33333%}.col-xl-push-11{left:91.66667%}.col-xl-push-12{left:100%}.col-xl-offset-0{margin-left:0%}.col-xl-offset-1{margin-left:8.33333%}.col-xl-offset-2{margin-left:16.66667%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-4{margin-left:33.33333%}.col-xl-offset-5{margin-left:41.66667%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-7{margin-left:58.33333%}.col-xl-offset-8{margin-left:66.66667%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-10{margin-left:83.33333%}.col-xl-offset-11{margin-left:91.66667%}.col-xl-offset-12{margin-left:100%}}.table,section.flipflop table{width:100%;max-width:100%;margin-bottom:1rem}.table th,section.flipflop table th,.table td,section.flipflop table td{padding:0.75rem;line-height:1.5;vertical-align:top;border-top:1px solid #eceeef}.table thead th,section.flipflop table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody,section.flipflop table tbody+tbody{border-top:2px solid #eceeef}.table .table,section.flipflop table .table,.table section.flipflop table,section.flipflop .table table,section.flipflop table table{background-color:#fff}.table-sm th,.table-sm td{padding:0.3rem}.table-bordered{border:1px solid #eceeef}.table-bordered th,.table-bordered td{border:1px solid #eceeef}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd),section.flipflop table tbody tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover tbody tr:hover{background-color:#f5f5f5}.table-active,.table-active>th,.table-active>td{background-color:#f5f5f5}.table-hover .table-active:hover{background-color:#e8e8e8}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#e8e8e8}.table-success,.table-success>th,.table-success>td{background-color:#dff0d8}.table-hover .table-success:hover{background-color:#d0e9c6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>th,.table-info>td{background-color:#d9edf7}.table-hover .table-info:hover{background-color:#c4e3f3}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>th,.table-warning>td{background-color:#fcf8e3}.table-hover .table-warning:hover{background-color:#faf2cc}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>th,.table-danger>td{background-color:#f2dede}.table-hover .table-danger:hover{background-color:#ebcccc}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.table-responsive{display:block;width:100%;min-height:0.01%;overflow-x:auto}.thead-inverse th,section.flipflop table thead th{color:#fff;background-color:#373a3c}.thead-default th{color:#55595c;background-color:#eceeef}.table-inverse{color:#eceeef;background-color:#373a3c}.table-inverse.table-bordered{border:0}.table-inverse th,.table-inverse td,.table-inverse thead th{border-color:#55595c}.table-reflow thead{float:left}.table-reflow tbody{display:block;white-space:nowrap}.table-reflow th,.table-reflow td{border-top:1px solid #eceeef;border-left:1px solid #eceeef}.table-reflow th:last-child,.table-reflow td:last-child{border-right:1px solid #eceeef}.table-reflow thead:last-child tr:last-child th,.table-reflow thead:last-child tr:last-child td,.table-reflow tbody:last-child tr:last-child th,.table-reflow tbody:last-child tr:last-child td,.table-reflow tfoot:last-child tr:last-child th,.table-reflow tfoot:last-child tr:last-child td{border-bottom:1px solid #eceeef}.table-reflow tr{float:left}.table-reflow tr th,.table-reflow tr td{display:block !important;border:1px solid #eceeef}.btn,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]{display:inline-block;font-weight:normal;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;border:1px solid transparent;padding:0.375rem 1rem;font-size:1rem;line-height:1.5;border-radius:0.25rem;transition:all 0.2s ease-in-out}.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:focus,.btn.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit],.btn:active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:focus,.btn:active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active.focus,.btn.active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:focus,.btn.active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active.focus[type=submit]{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:focus,.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:hover{text-decoration:none}.btn.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit]{text-decoration:none}.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active,.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]{background-image:none;outline:0}.btn.disabled,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit],.btn:disabled,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled{cursor:not-allowed;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:focus,.btn-primary.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit].active{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary:active,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active,.btn-primary.active,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit],.open>.btn-primary.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit].active{color:#fff;background-color:#025aa5;border-color:#01549b;background-image:none}.btn-primary:active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active:hover,.btn-primary:active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active:focus,.btn-primary:active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active.focus,.btn-primary.active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:hover,.btn-primary.active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:focus,.btn-primary.active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active.focus[type=submit],.open>.btn-primary.dropdown-toggle:hover,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit].active:hover,.open>.btn-primary.dropdown-toggle:focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit].active:focus,.open>.btn-primary.dropdown-toggle.focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle.focus[type=submit].active{color:#fff;background-color:#014682;border-color:#01315a}.btn-primary.disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit].active:focus,.btn-primary.disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled.focus[type=submit].active,.btn-primary:disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:disabled:focus,.btn-primary:disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:disabled.focus{background-color:#0275d8;border-color:#0275d8}.btn-primary.disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit].active:hover,.btn-primary:disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:disabled:hover{background-color:#0275d8;border-color:#0275d8}.btn-secondary,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:not(.active){color:#373a3c;background-color:#fff;border-color:#ccc}.btn-secondary:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:hover:not(.active){color:#373a3c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:focus:not(.active),.btn-secondary.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit]:not(.active){color:#373a3c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:active,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:not(.active),.btn-secondary.active,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:not(.active),.open>.btn-secondary.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit]:not(.active){color:#373a3c;background-color:#e6e6e6;border-color:#adadad;background-image:none}.btn-secondary:active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:hover:not(.active),.btn-secondary:active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:focus:not(.active),.btn-secondary:active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active.focus:not(.active),.btn-secondary.active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:hover:not(.active),.btn-secondary.active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:focus:not(.active),.btn-secondary.active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active.focus[type=submit]:not(.active),.open>.btn-secondary.dropdown-toggle:hover,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit]:hover:not(.active),.open>.btn-secondary.dropdown-toggle:focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit]:focus:not(.active),.open>.btn-secondary.dropdown-toggle.focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle.focus[type=submit]:not(.active){color:#373a3c;background-color:#d4d4d4;border-color:#8c8c8c}.btn-secondary.disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit]:focus:not(.active),.btn-secondary.disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled.focus[type=submit]:not(.active),.btn-secondary:disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled:focus:not(.active),.btn-secondary:disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled.focus:not(.active){background-color:#fff;border-color:#ccc}.btn-secondary.disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit]:hover:not(.active),.btn-secondary:disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled:hover:not(.active){background-color:#fff;border-color:#ccc}.btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#2aabd2;background-image:none}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1f7e9a}.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info:disabled:focus,.btn-info:disabled.focus{background-color:#5bc0de;border-color:#5bc0de}.btn-info.disabled:hover,.btn-info:disabled:hover{background-color:#5bc0de;border-color:#5bc0de}.btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#419641}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#419641;background-image:none}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#2d672d}.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success:disabled:focus,.btn-success:disabled.focus{background-color:#5cb85c;border-color:#5cb85c}.btn-success.disabled:hover,.btn-success:disabled:hover{background-color:#5cb85c;border-color:#5cb85c}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#eb9316;background-image:none}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#b06d0f}.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning:disabled:focus,.btn-warning:disabled.focus{background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning.disabled:hover,.btn-warning:disabled:hover{background-color:#f0ad4e;border-color:#f0ad4e}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#c12e2a;background-image:none}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#8b211e}.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger:disabled:focus,.btn-danger:disabled.focus{background-color:#d9534f;border-color:#d9534f}.btn-danger.disabled:hover,.btn-danger:disabled:hover{background-color:#d9534f;border-color:#d9534f}.btn-primary-outline{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.btn-primary-outline:focus,.btn-primary-outline.focus,.btn-primary-outline:active,.btn-primary-outline.active,.open>.btn-primary-outline.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary-outline:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary-outline.disabled:focus,.btn-primary-outline.disabled.focus,.btn-primary-outline:disabled:focus,.btn-primary-outline:disabled.focus{border-color:#43a7fd}.btn-primary-outline.disabled:hover,.btn-primary-outline:disabled:hover{border-color:#43a7fd}.btn-secondary-outline{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.btn-secondary-outline:focus,.btn-secondary-outline.focus,.btn-secondary-outline:active,.btn-secondary-outline.active,.open>.btn-secondary-outline.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-secondary-outline:hover{color:#fff;background-color:#ccc;border-color:#ccc}.btn-secondary-outline.disabled:focus,.btn-secondary-outline.disabled.focus,.btn-secondary-outline:disabled:focus,.btn-secondary-outline:disabled.focus{border-color:white}.btn-secondary-outline.disabled:hover,.btn-secondary-outline:disabled:hover{border-color:white}.btn-info-outline{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.btn-info-outline:focus,.btn-info-outline.focus,.btn-info-outline:active,.btn-info-outline.active,.open>.btn-info-outline.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info-outline:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info-outline.disabled:focus,.btn-info-outline.disabled.focus,.btn-info-outline:disabled:focus,.btn-info-outline:disabled.focus{border-color:#b0e1ef}.btn-info-outline.disabled:hover,.btn-info-outline:disabled:hover{border-color:#b0e1ef}.btn-success-outline{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.btn-success-outline:focus,.btn-success-outline.focus,.btn-success-outline:active,.btn-success-outline.active,.open>.btn-success-outline.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success-outline:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success-outline.disabled:focus,.btn-success-outline.disabled.focus,.btn-success-outline:disabled:focus,.btn-success-outline:disabled.focus{border-color:#a3d7a3}.btn-success-outline.disabled:hover,.btn-success-outline:disabled:hover{border-color:#a3d7a3}.btn-warning-outline{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.btn-warning-outline:focus,.btn-warning-outline.focus,.btn-warning-outline:active,.btn-warning-outline.active,.open>.btn-warning-outline.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning-outline:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning-outline.disabled:focus,.btn-warning-outline.disabled.focus,.btn-warning-outline:disabled:focus,.btn-warning-outline:disabled.focus{border-color:#f8d9ac}.btn-warning-outline.disabled:hover,.btn-warning-outline:disabled:hover{border-color:#f8d9ac}.btn-danger-outline{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.btn-danger-outline:focus,.btn-danger-outline.focus,.btn-danger-outline:active,.btn-danger-outline.active,.open>.btn-danger-outline.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger-outline:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger-outline.disabled:focus,.btn-danger-outline.disabled.focus,.btn-danger-outline:disabled:focus,.btn-danger-outline:disabled.focus{border-color:#eba5a3}.btn-danger-outline.disabled:hover,.btn-danger-outline:disabled:hover{border-color:#eba5a3}.btn-link{font-weight:normal;color:#0275d8;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link:disabled{background-color:transparent}.btn-link,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.btn-link:disabled:focus,.btn-link:disabled:hover{color:#818a91;text-decoration:none}.btn-lg,.btn-group-lg>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg>input[type=submit]{padding:0.75rem 1.25rem;font-size:1.25rem;line-height:1.33333;border-radius:0.3rem}.btn-sm,.btn-group-sm>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]{padding:0.25rem 0.75rem;font-size:0.875rem;line-height:1.5;border-radius:0.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit],.btn-group-vertical>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]{position:relative;float:left}.btn-group>.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:focus,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:focus,.btn-group>.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:active,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:active,.btn-group>.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group>.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input.active[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>input.active[type=submit],.btn-group-vertical>.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:focus,.btn-group-vertical>.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:active,.btn-group-vertical>.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input.active[type=submit]{z-index:2}.btn-group>.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:hover,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:hover,.btn-group-vertical>.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:hover{z-index:2}.btn-group .btn+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+.btn,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group .btn+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+input[type=submit],.btn-group .btn+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+.btn-group,.btn-group section.flipflop table tbody td.toggle div.toolbar .btn+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group .btn+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+div.group,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+div.group,.btn-group .btn-group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+.btn,.btn-group section.flipflop table tbody td.toggle div.toolbar div.group+.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group div.group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group div.group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group .btn-group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group div.group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group div.group+input[type=submit],.btn-group .btn-group+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+.btn-group,.btn-group section.flipflop table tbody td.toggle div.toolbar div.group+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group div.group+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group div.group+.btn-group,.btn-group section.flipflop table tbody td.toggle div.toolbar .btn-group+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group .btn-group+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+div.group,.btn-group section.flipflop table tbody td.toggle div.toolbar div.group+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group div.group+div.group,section.flipflop table tbody td.toggle div.toolbar div.group div.group+div.group{margin-left:-1px}.btn-toolbar,section.flipflop table tbody td.toggle div.toolbar{margin-left:-5px}.btn-toolbar::after,section.flipflop table tbody td.toggle div.toolbar::after{content:"";display:table;clear:both}.btn-toolbar .btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group,section.flipflop table tbody td.toggle div.toolbar div.group,.btn-toolbar .input-group,section.flipflop table tbody td.toggle div.toolbar .input-group{float:left}.btn-toolbar>.btn,section.flipflop table tbody td.toggle div.toolbar>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-toolbar>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group div.toolbar>input[type=submit],.btn-toolbar>.btn-group,section.flipflop table tbody td.toggle div.toolbar>.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-toolbar>div.group,section.flipflop table tbody td.toggle div.toolbar>div.group,.btn-toolbar>.input-group,section.flipflop table tbody td.toggle div.toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:not(:first-child):not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>.btn:first-child:not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:first-child:not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group>.btn:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group,section.flipflop table tbody td.toggle div.toolbar div.group>div.group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>.btn-group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>div.group:not(:first-child):not(:last-child)>input[type=submit]{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>.btn-group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:first-child:not(:last-child)>input[type=submit]:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>.btn-group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:last-child:not(:first-child)>input[type=submit]:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,section.flipflop table tbody td.toggle div.toolbar div.group .dropdown-toggle:active,.btn-group.open .dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.open.group .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.btn-group-lg.group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg.btn-group>input[type=submit]+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group div.btn-group-lg.group>input[type=submit]+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn .caret,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit] .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg>input[type=submit] .caret{border-width:0.3em 0.3em 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret,.dropup section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg>input[type=submit] .caret,section.flipflop table tbody td.toggle div.toolbar div.group .dropup .btn-group-lg>input[type=submit] .caret{border-width:0 0.3em 0.3em}.btn-group-vertical>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit],.btn-group-vertical>.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group,.btn-group-vertical>.btn-group>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>input[type=submit]{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group::after,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group::after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>input[type=submit]{float:none}.btn-group-vertical>.btn+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+input[type=submit],.btn-group-vertical>.btn+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>.btn+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+div.group,.btn-group-vertical>.btn-group+.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>div.group+input[type=submit],.btn-group-vertical>.btn-group+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>.btn-group+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group+div.group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:first-child:not(:last-child){border-top-right-radius:0.25rem;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:last-child:not(:first-child){border-bottom-left-radius:0.25rem;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:not(:first-child):not(:last-child)>input[type=submit]{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:first-child:not(:last-child)>input[type=submit]:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:last-child:not(:first-child)>input[type=submit]:first-child{border-top-right-radius:0;border-top-left-radius:0}[data-toggle="buttons"]>.btn input[type="radio"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>input[type=submit] input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>input[type=submit] input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>.btn input[type="radio"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>.btn-group>input[type=submit] input[type="radio"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>input[type=submit] input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>.btn input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>.btn-group>input[type=submit] input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>input[type=submit] input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.label,section.flipflop table tbody td.status span{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0.25rem}.label:empty,section.flipflop table tbody td.status span:empty{display:none}.btn .label,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit] .label,.btn section.flipflop table tbody td.status span,section.flipflop table tbody td.status .btn span,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit] td.status span,section.flipflop table tbody td.status td.toggle div.toolbar div.group input[type=submit] span{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-pill,section.flipflop table tbody td.status span{padding-right:.6em;padding-left:.6em;border-radius:10rem}.label-default,section.flipflop table tbody td.status span.off{background-color:#818a91}.label-default[href]:focus,section.flipflop table tbody td.status span[href].off:focus,.label-default[href]:hover,section.flipflop table tbody td.status span[href].off:hover{background-color:#687077}.label-primary{background-color:#0275d8}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#025aa5}.label-success,section.flipflop table tbody td.status span.on{background-color:#5cb85c}.label-success[href]:focus,section.flipflop table tbody td.status span[href].on:focus,.label-success[href]:hover,section.flipflop table tbody td.status span[href].on:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}section.flipflop{margin:5rem 0 0}section.flipflop table thead th{position:relative;cursor:default}section.flipflop table thead th[data-tooltip]:before,section.flipflop table thead th[data-tooltip]:after{transition:all 0.2s ease-out;transform:translateY(0.2rem) translateZ(0);opacity:0;display:block;position:absolute}section.flipflop table thead th[data-tooltip]:before{content:attr(data-tooltip);width:98%;left:0;bottom:3.75rem;margin:0;padding:0.5rem 0.75rem;background:#55595c;border-radius:0.2rem;font-size:0.875rem;font-weight:normal;pointer-events:none}section.flipflop table thead th[data-tooltip]:after{content:" ";width:0;height:0;left:1rem;bottom:3.25rem;border-left:solid transparent 0.5rem;border-right:solid transparent 0.5rem;border-top:solid #55595c 0.5rem}section.flipflop table thead th:hover[data-tooltip]:before,section.flipflop table thead th:hover[data-tooltip]:after{transform:translateY(0) translateZ(0);opacity:1}section.flipflop table tbody td.status{width:2rem;font-size:1.1rem}section.flipflop table tbody td.status span{width:2rem}section.flipflop table tbody td.name{min-width:11rem;padding-top:0.9rem;font-weight:bold}section.flipflop table tbody td.description{min-width:11rem;padding-top:0.9rem}section.flipflop table tbody td.toggle{min-width:11rem}section.flipflop table tbody td.toggle div.toolbar{margin-left:0}
|
1
|
+
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active{outline:0}a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a,a:visited{text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]>.caret,.dropup>.btn>.caret,section.flipflop table tbody td.toggle div.toolbar div.group .dropup>input[type=submit]>.caret{border-top-color:#000 !important}.label,section.flipflop table tbody td.status span{border:1px solid #000}.table,section.flipflop table{border-collapse:collapse !important}.table td,section.flipflop table td,.table th,section.flipflop table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}@-moz-viewport{width:device-width}@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@-webkit-viewport{width:device-width}@viewport{width:device-width}html{font-size:16px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:1rem;line-height:1.5;color:#373a3c;background-color:#fff}[tabindex="-1"]:focus{outline:none !important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #818a91}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:bold}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}pre{margin-top:0;margin-bottom:1rem}figure{margin:0 0 1rem}img{vertical-align:middle}[role="button"]{cursor:pointer}a,area,button,[role="button"],input,label,select,summary,textarea{touch-action:manipulation}table{background-color:transparent}caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#818a91;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,textarea{margin:0;line-height:inherit;border-radius:0}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type="search"]{box-sizing:inherit;-webkit-appearance:none}output{display:inline-block}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:0.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}.h1{font-size:2.5rem}.h2{font-size:2rem}.h3{font-size:1.75rem}.h4{font-size:1.5rem}.h5{font-size:1.25rem}.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300}.display-2{font-size:5.5rem;font-weight:300}.display-3{font-size:4.5rem;font-weight:300}.display-4{font-size:3.5rem;font-weight:300}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:5px}.dl-horizontal{margin-right:-1.875rem;margin-left:-1.875rem}.dl-horizontal::after{content:"";display:table;clear:both}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:0.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:0.25rem solid #eceeef}.blockquote-footer{display:block;font-size:80%;line-height:1.5;color:#818a91}.blockquote-footer::before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:0.25rem solid #eceeef;border-left:0}.blockquote-reverse .blockquote-footer::before{content:""}.blockquote-reverse .blockquote-footer::after{content:"\00A0 \2014"}.table,section.flipflop table{width:100%;max-width:100%;margin-bottom:1rem}.table th,section.flipflop table th,.table td,section.flipflop table td{padding:0.75rem;line-height:1.5;vertical-align:top;border-top:1px solid #eceeef}.table thead th,section.flipflop table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody,section.flipflop table tbody+tbody{border-top:2px solid #eceeef}.table .table,section.flipflop table .table,.table section.flipflop table,section.flipflop .table table,section.flipflop table table{background-color:#fff}.table-sm th,.table-sm td{padding:0.3rem}.table-bordered{border:1px solid #eceeef}.table-bordered th,.table-bordered td{border:1px solid #eceeef}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd),section.flipflop table tbody tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover tbody tr:hover{background-color:#f5f5f5}.table-active,.table-active>th,.table-active>td{background-color:#f5f5f5}.table-hover .table-active:hover{background-color:#e8e8e8}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#e8e8e8}.table-success,.table-success>th,.table-success>td{background-color:#dff0d8}.table-hover .table-success:hover{background-color:#d0e9c6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>th,.table-info>td{background-color:#d9edf7}.table-hover .table-info:hover{background-color:#c4e3f3}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>th,.table-warning>td{background-color:#fcf8e3}.table-hover .table-warning:hover{background-color:#faf2cc}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>th,.table-danger>td{background-color:#f2dede}.table-hover .table-danger:hover{background-color:#ebcccc}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.table-responsive{display:block;width:100%;min-height:0.01%;overflow-x:auto}.thead-inverse th,section.flipflop table thead th{color:#fff;background-color:#373a3c}.thead-default th{color:#55595c;background-color:#eceeef}.table-inverse{color:#eceeef;background-color:#373a3c}.table-inverse.table-bordered{border:0}.table-inverse th,.table-inverse td,.table-inverse thead th{border-color:#55595c}.table-reflow thead{float:left}.table-reflow tbody{display:block;white-space:nowrap}.table-reflow th,.table-reflow td{border-top:1px solid #eceeef;border-left:1px solid #eceeef}.table-reflow th:last-child,.table-reflow td:last-child{border-right:1px solid #eceeef}.table-reflow thead:last-child tr:last-child th,.table-reflow thead:last-child tr:last-child td,.table-reflow tbody:last-child tr:last-child th,.table-reflow tbody:last-child tr:last-child td,.table-reflow tfoot:last-child tr:last-child th,.table-reflow tfoot:last-child tr:last-child td{border-bottom:1px solid #eceeef}.table-reflow tr{float:left}.table-reflow tr th,.table-reflow tr td{display:block !important;border:1px solid #eceeef}.btn,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]{display:inline-block;font-weight:normal;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;border:1px solid transparent;padding:0.375rem 1rem;font-size:1rem;line-height:1.5;border-radius:0.25rem;transition:all 0.2s ease-in-out}.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:focus,.btn.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit],.btn:active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:focus,.btn:active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active.focus,.btn.active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:focus,.btn.active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active.focus[type=submit]{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:focus,.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:hover{text-decoration:none}.btn.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit]{text-decoration:none}.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active,.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]{background-image:none;outline:0}.btn.disabled,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit],.btn:disabled,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled{cursor:not-allowed;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:focus,.btn-primary.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit].active{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary:active,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active,.btn-primary.active,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit],.open>.btn-primary.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit].active{color:#fff;background-color:#025aa5;border-color:#01549b;background-image:none}.btn-primary:active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active:hover,.btn-primary:active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active:focus,.btn-primary:active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:active.focus,.btn-primary.active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:hover,.btn-primary.active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:focus,.btn-primary.active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active.focus[type=submit],.open>.btn-primary.dropdown-toggle:hover,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit].active:hover,.open>.btn-primary.dropdown-toggle:focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit].active:focus,.open>.btn-primary.dropdown-toggle.focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle.focus[type=submit].active{color:#fff;background-color:#014682;border-color:#01315a}.btn-primary.disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit].active:focus,.btn-primary.disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled.focus[type=submit].active,.btn-primary:disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:disabled:focus,.btn-primary:disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:disabled.focus{background-color:#0275d8;border-color:#0275d8}.btn-primary.disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit].active:hover,.btn-primary:disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit].active:disabled:hover{background-color:#0275d8;border-color:#0275d8}.btn-secondary,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:not(.active){color:#373a3c;background-color:#fff;border-color:#ccc}.btn-secondary:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:hover:not(.active){color:#373a3c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:focus:not(.active),.btn-secondary.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.focus[type=submit]:not(.active){color:#373a3c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:active,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:not(.active),.btn-secondary.active,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:not(.active),.open>.btn-secondary.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit]:not(.active){color:#373a3c;background-color:#e6e6e6;border-color:#adadad;background-image:none}.btn-secondary:active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:hover:not(.active),.btn-secondary:active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active:focus:not(.active),.btn-secondary:active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:active.focus:not(.active),.btn-secondary.active:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:hover:not(.active),.btn-secondary.active:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active[type=submit]:focus:not(.active),.btn-secondary.active.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.active.focus[type=submit]:not(.active),.open>.btn-secondary.dropdown-toggle:hover,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit]:hover:not(.active),.open>.btn-secondary.dropdown-toggle:focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle[type=submit]:focus:not(.active),.open>.btn-secondary.dropdown-toggle.focus,section.flipflop table tbody td.toggle div.toolbar div.group .open>input.dropdown-toggle.focus[type=submit]:not(.active){color:#373a3c;background-color:#d4d4d4;border-color:#8c8c8c}.btn-secondary.disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit]:focus:not(.active),.btn-secondary.disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled.focus[type=submit]:not(.active),.btn-secondary:disabled:focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled:focus:not(.active),.btn-secondary:disabled.focus,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled.focus:not(.active){background-color:#fff;border-color:#ccc}.btn-secondary.disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input.disabled[type=submit]:hover:not(.active),.btn-secondary:disabled:hover,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]:disabled:hover:not(.active){background-color:#fff;border-color:#ccc}.btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#2aabd2;background-image:none}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1f7e9a}.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info:disabled:focus,.btn-info:disabled.focus{background-color:#5bc0de;border-color:#5bc0de}.btn-info.disabled:hover,.btn-info:disabled:hover{background-color:#5bc0de;border-color:#5bc0de}.btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#419641}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#419641;background-image:none}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#2d672d}.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success:disabled:focus,.btn-success:disabled.focus{background-color:#5cb85c;border-color:#5cb85c}.btn-success.disabled:hover,.btn-success:disabled:hover{background-color:#5cb85c;border-color:#5cb85c}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#eb9316;background-image:none}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#b06d0f}.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning:disabled:focus,.btn-warning:disabled.focus{background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning.disabled:hover,.btn-warning:disabled:hover{background-color:#f0ad4e;border-color:#f0ad4e}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#c12e2a;background-image:none}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#8b211e}.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger:disabled:focus,.btn-danger:disabled.focus{background-color:#d9534f;border-color:#d9534f}.btn-danger.disabled:hover,.btn-danger:disabled:hover{background-color:#d9534f;border-color:#d9534f}.btn-primary-outline{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.btn-primary-outline:focus,.btn-primary-outline.focus,.btn-primary-outline:active,.btn-primary-outline.active,.open>.btn-primary-outline.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary-outline:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary-outline.disabled:focus,.btn-primary-outline.disabled.focus,.btn-primary-outline:disabled:focus,.btn-primary-outline:disabled.focus{border-color:#43a7fd}.btn-primary-outline.disabled:hover,.btn-primary-outline:disabled:hover{border-color:#43a7fd}.btn-secondary-outline{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.btn-secondary-outline:focus,.btn-secondary-outline.focus,.btn-secondary-outline:active,.btn-secondary-outline.active,.open>.btn-secondary-outline.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-secondary-outline:hover{color:#fff;background-color:#ccc;border-color:#ccc}.btn-secondary-outline.disabled:focus,.btn-secondary-outline.disabled.focus,.btn-secondary-outline:disabled:focus,.btn-secondary-outline:disabled.focus{border-color:white}.btn-secondary-outline.disabled:hover,.btn-secondary-outline:disabled:hover{border-color:white}.btn-info-outline{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.btn-info-outline:focus,.btn-info-outline.focus,.btn-info-outline:active,.btn-info-outline.active,.open>.btn-info-outline.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info-outline:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info-outline.disabled:focus,.btn-info-outline.disabled.focus,.btn-info-outline:disabled:focus,.btn-info-outline:disabled.focus{border-color:#b0e1ef}.btn-info-outline.disabled:hover,.btn-info-outline:disabled:hover{border-color:#b0e1ef}.btn-success-outline{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.btn-success-outline:focus,.btn-success-outline.focus,.btn-success-outline:active,.btn-success-outline.active,.open>.btn-success-outline.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success-outline:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success-outline.disabled:focus,.btn-success-outline.disabled.focus,.btn-success-outline:disabled:focus,.btn-success-outline:disabled.focus{border-color:#a3d7a3}.btn-success-outline.disabled:hover,.btn-success-outline:disabled:hover{border-color:#a3d7a3}.btn-warning-outline{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.btn-warning-outline:focus,.btn-warning-outline.focus,.btn-warning-outline:active,.btn-warning-outline.active,.open>.btn-warning-outline.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning-outline:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning-outline.disabled:focus,.btn-warning-outline.disabled.focus,.btn-warning-outline:disabled:focus,.btn-warning-outline:disabled.focus{border-color:#f8d9ac}.btn-warning-outline.disabled:hover,.btn-warning-outline:disabled:hover{border-color:#f8d9ac}.btn-danger-outline{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.btn-danger-outline:focus,.btn-danger-outline.focus,.btn-danger-outline:active,.btn-danger-outline.active,.open>.btn-danger-outline.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger-outline:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger-outline.disabled:focus,.btn-danger-outline.disabled.focus,.btn-danger-outline:disabled:focus,.btn-danger-outline:disabled.focus{border-color:#eba5a3}.btn-danger-outline.disabled:hover,.btn-danger-outline:disabled:hover{border-color:#eba5a3}.btn-link{font-weight:normal;color:#0275d8;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link:disabled{background-color:transparent}.btn-link,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.btn-link:disabled:focus,.btn-link:disabled:hover{color:#818a91;text-decoration:none}.btn-lg,.btn-group-lg>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg>input[type=submit]{padding:0.75rem 1.25rem;font-size:1.25rem;line-height:1.33333;border-radius:0.3rem}.btn-sm,.btn-group-sm>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]{padding:0.25rem 0.75rem;font-size:0.875rem;line-height:1.5;border-radius:0.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit],.btn-group-vertical>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]{position:relative;float:left}.btn-group>.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:focus,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:focus,.btn-group>.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:active,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:active,.btn-group>.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group>.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input.active[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>input.active[type=submit],.btn-group-vertical>.btn:focus,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:focus,.btn-group-vertical>.btn:active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:active,.btn-group-vertical>.btn.active,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input.active[type=submit]{z-index:2}.btn-group>.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:hover,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:hover,.btn-group-vertical>.btn:hover,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:hover{z-index:2}.btn-group .btn+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+.btn,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group .btn+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+input[type=submit],.btn-group .btn+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+.btn-group,.btn-group section.flipflop table tbody td.toggle div.toolbar .btn+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group .btn+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group input[type=submit]+div.group,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit]+div.group,.btn-group .btn-group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+.btn,.btn-group section.flipflop table tbody td.toggle div.toolbar div.group+.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group div.group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group div.group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group .btn-group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group div.group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group div.group+input[type=submit],.btn-group .btn-group+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+.btn-group,.btn-group section.flipflop table tbody td.toggle div.toolbar div.group+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group div.group+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group div.group+.btn-group,.btn-group section.flipflop table tbody td.toggle div.toolbar .btn-group+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group .btn-group+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group+div.group,.btn-group section.flipflop table tbody td.toggle div.toolbar div.group+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group div.group+div.group,section.flipflop table tbody td.toggle div.toolbar div.group div.group+div.group{margin-left:-1px}.btn-toolbar,section.flipflop table tbody td.toggle div.toolbar{margin-left:-5px}.btn-toolbar::after,section.flipflop table tbody td.toggle div.toolbar::after{content:"";display:table;clear:both}.btn-toolbar .btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group,section.flipflop table tbody td.toggle div.toolbar div.group,.btn-toolbar .input-group,section.flipflop table tbody td.toggle div.toolbar .input-group{float:left}.btn-toolbar>.btn,section.flipflop table tbody td.toggle div.toolbar>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-toolbar>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group div.toolbar>input[type=submit],.btn-toolbar>.btn-group,section.flipflop table tbody td.toggle div.toolbar>.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-toolbar>div.group,section.flipflop table tbody td.toggle div.toolbar>div.group,.btn-toolbar>.input-group,section.flipflop table tbody td.toggle div.toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:not(:first-child):not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>.btn:first-child:not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:first-child:not(:last-child):not(.dropdown-toggle),section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group>.btn:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group,section.flipflop table tbody td.toggle div.toolbar div.group>div.group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>.btn-group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group>div.group:not(:first-child):not(:last-child)>input[type=submit]{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>.btn-group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:first-child:not(:last-child)>input[type=submit]:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>.btn-group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group>div.group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar div.group>div.group:last-child:not(:first-child)>input[type=submit]:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,section.flipflop table tbody td.toggle div.toolbar div.group .dropdown-toggle:active,.btn-group.open .dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.open.group .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group>input[type=submit]+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>input[type=submit]+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.btn-group-lg.group>.btn+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg.btn-group>input[type=submit]+.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar div.group div.btn-group-lg.group>input[type=submit]+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn .caret,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit] .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg>input[type=submit] .caret{border-width:0.3em 0.3em 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret,.dropup section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-lg>input[type=submit] .caret,section.flipflop table tbody td.toggle div.toolbar div.group .dropup .btn-group-lg>input[type=submit] .caret{border-width:0 0.3em 0.3em}.btn-group-vertical>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit],.btn-group-vertical>.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group,.btn-group-vertical>.btn-group>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>input[type=submit]{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group::after,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group::after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group>input[type=submit]{float:none}.btn-group-vertical>.btn+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+input[type=submit],.btn-group-vertical>.btn+.btn-group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>.btn+div.group,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]+div.group,.btn-group-vertical>.btn-group+.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group+.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group+input[type=submit],section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>div.group+input[type=submit],.btn-group-vertical>.btn-group+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group+.btn-group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>.btn-group+div.group,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group+div.group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:first-child:not(:last-child){border-top-right-radius:0.25rem;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child),section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>input[type=submit]:last-child:not(:first-child){border-bottom-left-radius:0.25rem;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:not(:first-child):not(:last-child)>.btn,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>input[type=submit],section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:not(:first-child):not(:last-child)>input[type=submit]{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:first-child:not(:last-child)>.btn:last-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group:first-child:not(:last-child)>input[type=submit]:last-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:first-child:not(:last-child)>input[type=submit]:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:last-child:not(:first-child)>.btn:first-child,section.flipflop table tbody td.toggle div.toolbar div.group .btn-group-vertical>.btn-group:last-child:not(:first-child)>input[type=submit]:first-child,section.flipflop table tbody td.toggle div.toolbar .btn-group-vertical>div.group:last-child:not(:first-child)>input[type=submit]:first-child{border-top-right-radius:0;border-top-left-radius:0}[data-toggle="buttons"]>.btn input[type="radio"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>input[type=submit] input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>input[type=submit] input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>.btn input[type="radio"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>.btn-group>input[type=submit] input[type="radio"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>input[type=submit] input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>.btn input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar div.group [data-toggle="buttons"]>.btn-group>input[type=submit] input[type="checkbox"],section.flipflop table tbody td.toggle div.toolbar [data-toggle="buttons"]>div.group>input[type=submit] input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.label,section.flipflop table tbody td.status span{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0.25rem}.label:empty,section.flipflop table tbody td.status span:empty{display:none}.btn .label,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit] .label,.btn section.flipflop table tbody td.status span,section.flipflop table tbody td.status .btn span,section.flipflop table tbody td.toggle div.toolbar div.group input[type=submit] td.status span,section.flipflop table tbody td.status td.toggle div.toolbar div.group input[type=submit] span{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-pill,section.flipflop table tbody td.status span{padding-right:.6em;padding-left:.6em;border-radius:10rem}.label-default,section.flipflop table tbody td.status span.off{background-color:#818a91}.label-default[href]:focus,section.flipflop table tbody td.status span[href].off:focus,.label-default[href]:hover,section.flipflop table tbody td.status span[href].off:hover{background-color:#687077}.label-primary{background-color:#0275d8}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#025aa5}.label-success,section.flipflop table tbody td.status span.on{background-color:#5cb85c}.label-success[href]:focus,section.flipflop table tbody td.status span[href].on:focus,.label-success[href]:hover,section.flipflop table tbody td.status span[href].on:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}section.flipflop{margin-left:auto;margin-right:auto;padding-left:0.9375rem;padding-right:0.9375rem;margin:5rem 0 0}section.flipflop::after{content:"";display:table;clear:both}section.flipflop table thead th{position:relative;cursor:default}section.flipflop table thead th[data-tooltip]:before,section.flipflop table thead th[data-tooltip]:after{transition:all 0.2s ease-out;transform:translateY(0.2rem) translateZ(0);opacity:0;display:block;position:absolute}section.flipflop table thead th[data-tooltip]:before{content:attr(data-tooltip);width:98%;left:0;bottom:3.75rem;margin:0;padding:0.5rem 0.75rem;background:#55595c;border-radius:0.2rem;font-size:0.875rem;font-weight:normal;pointer-events:none}section.flipflop table thead th[data-tooltip]:after{content:" ";width:0;height:0;left:1rem;bottom:3.25rem;border-left:solid transparent 0.5rem;border-right:solid transparent 0.5rem;border-top:solid #55595c 0.5rem}section.flipflop table thead th:hover[data-tooltip]:before,section.flipflop table thead th:hover[data-tooltip]:after{transform:translateY(0) translateZ(0);opacity:1}section.flipflop table tbody td.status{width:2rem;font-size:1.1rem}section.flipflop table tbody td.status span{width:2rem}section.flipflop table tbody td.name{min-width:11rem;padding-top:0.9rem;font-weight:bold}section.flipflop table tbody td.description{min-width:11rem;padding-top:0.9rem}section.flipflop table tbody td.toggle{min-width:11rem}section.flipflop table tbody td.toggle div.toolbar{margin-left:0}
|
@@ -8,7 +8,7 @@ module Flipflop
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def initialize(**options)
|
11
|
-
@class = options.delete(:class) ||
|
11
|
+
@class = options.delete(:class) || ::Flipflop::Feature
|
12
12
|
if !@class.kind_of?(Class)
|
13
13
|
@class = ActiveSupport::Inflector.constantize(@class.to_s)
|
14
14
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Flipflop
|
2
|
+
module Strategies
|
3
|
+
class RedisStrategy < AbstractStrategy
|
4
|
+
class << self
|
5
|
+
def default_description
|
6
|
+
"Stores features in Redis. Applies to all users."
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(**options)
|
11
|
+
@client = options.delete(:client) || ::Redis.new
|
12
|
+
@prefix = options.delete(:prefix).to_s.freeze
|
13
|
+
super(**options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def switchable?
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def enabled?(feature)
|
21
|
+
redis_value = @client.get(redis_key(feature))
|
22
|
+
return if redis_value.nil?
|
23
|
+
redis_value === "1"
|
24
|
+
end
|
25
|
+
|
26
|
+
def switch!(feature, enabled)
|
27
|
+
@client.set(redis_key(feature), enabled ? "1" : "0")
|
28
|
+
end
|
29
|
+
|
30
|
+
def clear!(feature)
|
31
|
+
@client.del(redis_key(feature))
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
def redis_key(feature)
|
37
|
+
@prefix + feature.to_s
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/flipflop/version.rb
CHANGED
data/lib/flipflop.rb
CHANGED
@@ -18,6 +18,7 @@ require "flipflop/strategies/cookie_strategy"
|
|
18
18
|
require "flipflop/strategies/default_strategy"
|
19
19
|
require "flipflop/strategies/lambda_strategy"
|
20
20
|
require "flipflop/strategies/query_string_strategy"
|
21
|
+
require "flipflop/strategies/redis_strategy"
|
21
22
|
require "flipflop/strategies/session_strategy"
|
22
23
|
require "flipflop/strategies/test_strategy"
|
23
24
|
|
@@ -10,12 +10,27 @@ class Flipflop::InstallGenerator < Rails::Generators::Base
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def configure_dashboard
|
13
|
-
|
14
|
-
# Replace
|
15
|
-
|
16
|
-
|
17
|
-
config.flipflop.dashboard_access_filter = :require_development
|
13
|
+
comment = <<-RUBY
|
14
|
+
# Replace with a lambda or method name defined in ApplicationController
|
15
|
+
# to implement access control for the Flipflop dashboard.
|
16
|
+
RUBY
|
18
17
|
|
19
|
-
|
18
|
+
forbidden = <<-RUBY
|
19
|
+
config.flipflop.dashboard_access_filter = -> { head :forbidden }
|
20
|
+
RUBY
|
21
|
+
|
22
|
+
allowed = <<-RUBY
|
23
|
+
config.flipflop.dashboard_access_filter = nil
|
24
|
+
RUBY
|
25
|
+
|
26
|
+
environment(indent(comment + forbidden + "\n", 4).lstrip)
|
27
|
+
environment(indent(comment + allowed + "\n", 2).lstrip, env: [:development, :test])
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def indent(content, multiplier = 2)
|
33
|
+
spaces = " " * multiplier
|
34
|
+
content.each_line.map {|line| line.blank? ? line : "#{spaces}#{line}" }.join
|
20
35
|
end
|
21
36
|
end
|
@@ -17,18 +17,6 @@ describe Flipflop do
|
|
17
17
|
Flipflop::Strategies::AbstractStrategy::RequestInterceptor.request = nil
|
18
18
|
end
|
19
19
|
|
20
|
-
describe "outside development and test" do
|
21
|
-
before do
|
22
|
-
Rails.env.stub(:test?, false) do
|
23
|
-
visit "/flipflop"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should be forbidden" do
|
28
|
-
assert_equal 403, page.status_code
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
20
|
describe "without features" do
|
33
21
|
before do
|
34
22
|
visit "/flipflop"
|
@@ -106,6 +94,24 @@ describe Flipflop do
|
|
106
94
|
refute has_selector?("td[data-strategy=cookie] input.active[type=submit]")
|
107
95
|
end
|
108
96
|
end
|
97
|
+
|
98
|
+
it "should enable feature after in spite of redefinition and reordering" do
|
99
|
+
Flipflop::FeatureSet.current.instance_variable_set(:@strategies, {})
|
100
|
+
Module.new do
|
101
|
+
extend Flipflop::Configurable
|
102
|
+
strategy :active_record, description: "Store in database."
|
103
|
+
strategy :cookie, description: "Store in cookie."
|
104
|
+
end
|
105
|
+
|
106
|
+
within("tr[data-feature=world-domination] td[data-strategy=cookie]") do
|
107
|
+
click_on "on"
|
108
|
+
end
|
109
|
+
|
110
|
+
within("tr[data-feature=world-domination]") do
|
111
|
+
assert_equal "on", first("td.status").text
|
112
|
+
assert_equal "on", first("td[data-strategy=cookie] input.active[type=submit]").value
|
113
|
+
end
|
114
|
+
end
|
109
115
|
end
|
110
116
|
|
111
117
|
describe "with active record strategy" do
|
@@ -145,6 +151,24 @@ describe Flipflop do
|
|
145
151
|
refute has_selector?("td[data-strategy=active-record] input.active[type=submit]")
|
146
152
|
end
|
147
153
|
end
|
154
|
+
|
155
|
+
it "should enable feature after in spite of redefinition and reordering" do
|
156
|
+
Flipflop::FeatureSet.current.instance_variable_set(:@strategies, {})
|
157
|
+
Module.new do
|
158
|
+
extend Flipflop::Configurable
|
159
|
+
strategy :active_record, description: "Store in database."
|
160
|
+
strategy :cookie, description: "Store in cookie."
|
161
|
+
end
|
162
|
+
|
163
|
+
within("tr[data-feature=world-domination] td[data-strategy=active-record]") do
|
164
|
+
click_on "on"
|
165
|
+
end
|
166
|
+
|
167
|
+
within("tr[data-feature=world-domination]") do
|
168
|
+
assert_equal "on", first("td.status").text
|
169
|
+
assert_equal "on", first("td[data-strategy=active-record] input.active[type=submit]").value
|
170
|
+
end
|
171
|
+
end
|
148
172
|
end
|
149
173
|
end
|
150
174
|
|
data/test/test_helper.rb
CHANGED
@@ -89,8 +89,14 @@ class TestApp
|
|
89
89
|
def migrate!
|
90
90
|
ActiveRecord::Base.establish_connection
|
91
91
|
|
92
|
-
ActiveRecord::Tasks::DatabaseTasks.create_current
|
92
|
+
silence_stdout { ActiveRecord::Tasks::DatabaseTasks.create_current }
|
93
93
|
ActiveRecord::Migration.verbose = false
|
94
94
|
ActiveRecord::Migrator.migrate(Rails.application.paths["db/migrate"].to_a)
|
95
95
|
end
|
96
|
+
|
97
|
+
def silence_stdout
|
98
|
+
stdout, $stdout = $stdout, StringIO.new
|
99
|
+
yield rescue nil
|
100
|
+
$stdout = stdout
|
101
|
+
end
|
96
102
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.expand_path("../../../test_helper", __FILE__)
|
2
|
+
|
3
|
+
require "fakeredis"
|
4
|
+
|
5
|
+
describe Flipflop::Strategies::RedisStrategy do
|
6
|
+
before do
|
7
|
+
Redis.new.flushall
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "with defaults" do
|
11
|
+
subject do
|
12
|
+
Flipflop::Strategies::RedisStrategy.new.freeze
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have default name" do
|
16
|
+
assert_equal "redis", subject.name
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have default description" do
|
20
|
+
assert_equal "Stores features in Redis. Applies to all users.",
|
21
|
+
subject.description
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be switchable" do
|
25
|
+
assert_equal true, subject.switchable?
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have unique key" do
|
29
|
+
assert_match /^\w+$/, subject.key
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "with enabled feature" do
|
33
|
+
before do
|
34
|
+
Redis.new.set("one", 1)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have feature enabled" do
|
38
|
+
assert_equal true, subject.enabled?(:one)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be able to switch feature off" do
|
42
|
+
subject.switch!(:one, false)
|
43
|
+
assert_equal false, subject.enabled?(:one)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should be able to clear feature" do
|
47
|
+
subject.clear!(:one)
|
48
|
+
assert_nil subject.enabled?(:one)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "with disabled feature" do
|
53
|
+
before do
|
54
|
+
Redis.new.set("two", 0)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should not have feature enabled" do
|
58
|
+
assert_equal false, subject.enabled?(:two)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should be able to switch feature on" do
|
62
|
+
subject.switch!(:two, true)
|
63
|
+
assert_equal true, subject.enabled?(:two)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should be able to clear feature" do
|
67
|
+
subject.clear!(:two)
|
68
|
+
assert_nil subject.enabled?(:two)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "with unsaved feature" do
|
73
|
+
it "should not know feature" do
|
74
|
+
assert_nil subject.enabled?(:three)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should be able to switch feature on" do
|
78
|
+
subject.switch!(:three, true)
|
79
|
+
assert_equal true, subject.enabled?(:three)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "with options" do
|
85
|
+
subject do
|
86
|
+
Flipflop::Strategies::RedisStrategy.new(
|
87
|
+
client: Redis.new(db: 1),
|
88
|
+
prefix: "my_feature:",
|
89
|
+
).freeze
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should use prefix and database to resolve parameters" do
|
93
|
+
Redis.new(db: 1).set("my_feature:one", 1)
|
94
|
+
assert_equal true, subject.enabled?(:one)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flipflop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Annesley
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-05-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -43,7 +43,6 @@ files:
|
|
43
43
|
- README.md
|
44
44
|
- Rakefile
|
45
45
|
- app/assets/stylesheets/flipflop.css
|
46
|
-
- app/controllers/concerns/flipflop/environment_filters.rb
|
47
46
|
- app/controllers/flipflop/features_controller.rb
|
48
47
|
- app/controllers/flipflop/strategies_controller.rb
|
49
48
|
- app/models/flipflop/feature.rb
|
@@ -65,6 +64,7 @@ files:
|
|
65
64
|
- lib/flipflop/strategies/lambda_strategy.rb
|
66
65
|
- lib/flipflop/strategies/options_hasher.rb
|
67
66
|
- lib/flipflop/strategies/query_string_strategy.rb
|
67
|
+
- lib/flipflop/strategies/redis_strategy.rb
|
68
68
|
- lib/flipflop/strategies/session_strategy.rb
|
69
69
|
- lib/flipflop/strategies/test_strategy.rb
|
70
70
|
- lib/flipflop/version.rb
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- test/unit/strategies/lambda_strategy_test.rb
|
94
94
|
- test/unit/strategies/options_hasher_test.rb
|
95
95
|
- test/unit/strategies/query_string_strategy_test.rb
|
96
|
+
- test/unit/strategies/redis_strategy_test.rb
|
96
97
|
- test/unit/strategies/session_strategy_test.rb
|
97
98
|
- test/unit/strategies/test_strategy_test.rb
|
98
99
|
homepage: https://github.com/voormedia/flipflop
|