flipflop 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|