/*!
 * *  Licensed to the Apache Software Foundation (ASF) under one or more
 * *  contributor license agreements.  See the NOTICE file distributed with
 * *  this work for additional information regarding copyright ownership.
 * *  The ASF licenses this file to You under the Apache License, Version 2.0
 * *  (the "License"); you may not use this file except in compliance with
 * *  the License.  You may obtain a copy of the License at
 * *
 * *      http://www.apache.org/licenses/LICENSE-2.0
 * *
 * *  Unless required by applicable law or agreed to in writing, software
 * *  distributed under the License is distributed on an "AS IS" BASIS,
 * *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * *  See the License for the specific language governing permissions and
 * *  limitations under the License.
 * */
@namespace j "library://ns.apache.org/royale/jewel";
@namespace "http://www.w3.org/1999/xhtml";
.jewel.badge.secondary {
  background: #E2D70B;
  color: #FFFFFF;
}

.jewel.button.secondary {
  background: linear-gradient(#f4e813, #cac00a);
  border: 1px solid #999207;
  box-shadow: inset 0 1px 0 #f7ef5c;
  border-radius: 0.25rem;
  color: #FFFFFF;
  text-shadow: 0 -1px 0 rgba(80, 76, 4, 0.7);
}
.jewel.button.secondary:hover, .jewel.button.secondary:hover:focus {
  background: linear-gradient(#E2D70B, #b1a909);
  border: 1px solid #817a06;
  color: #FFFFFF;
}
.jewel.button.secondary:active, .jewel.button.secondary:active:focus {
  background: linear-gradient(#b1a909, #817a06);
  border: 1px solid #504c04;
  box-shadow: inset 0px 1px 3px 0px rgba(50, 50, 50, 0.5);
  color: #FFFFFF;
}
.jewel.button.secondary:focus {
  border: 1px solid #999207;
  box-shadow: inset 0px 0px 0px 1px rgba(254, 253, 238, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.6);
  color: #FFFFFF;
}
.jewel.button.secondary[disabled] {
  background: #f3f3f3 !important;
  border: 1px solid #d9d9d9 !important;
  box-shadow: none !important;
  color: silver;
  text-shadow: unset;
}
.jewel.button.secondary[disabled]:hover, .jewel.button.secondary[disabled]:hover:focus {
  color: silver;
}

.jewel.button.secondary.outlined {
  background: rgba(226, 215, 11, 0.05);
  border: 1px solid #b1a909;
  box-shadow: none;
  color: #999207;
  text-shadow: none;
}
.jewel.button.secondary.outlined:hover, .jewel.button.secondary.outlined:hover:focus {
  background: rgba(226, 215, 11, 0.15);
  border: 1px solid #999207;
  color: #686305;
}
.jewel.button.secondary.outlined:active, .jewel.button.secondary.outlined:active:focus {
  background: rgba(226, 215, 11, 0.25);
  border: 1px solid #8a8407;
  box-shadow: none;
  color: #686305;
}
.jewel.button.secondary.outlined:focus {
  border: 1px solid #817a06;
  box-shadow: none;
  color: #686305;
}
.jewel.button.secondary.outlined[disabled] {
  background: rgba(243, 243, 243, 0.1) !important;
  border: 1px solid #d9d9d9 !important;
  color: silver;
  text-shadow: unset;
}
.jewel.button.secondary.outlined[disabled]:hover, .jewel.button.secondary.outlined[disabled]:hover:focus {
  color: silver;
}

.jewel.button.secondary.unboxed {
  background: rgba(226, 215, 11, 0);
  border: 1px solid transparent;
  box-shadow: none;
  color: #999207;
  text-shadow: none;
}
.jewel.button.secondary.unboxed:hover, .jewel.button.secondary.unboxed:hover:focus {
  background: rgba(226, 215, 11, 0.15);
  border: 1px solid transparent;
  color: #686305;
}
.jewel.button.secondary.unboxed:active, .jewel.button.secondary.unboxed:active:focus {
  background: rgba(226, 215, 11, 0.25);
  border: 1px solid transparent;
  box-shadow: none;
  color: #686305;
}
.jewel.button.secondary.unboxed:focus {
  background: rgba(226, 215, 11, 0.15);
  border: 1px solid transparent;
  box-shadow: none;
  color: #686305;
}
.jewel.button.secondary.unboxed[disabled] {
  background: rgba(243, 243, 243, 0) !important;
  border: 1px solid transparent !important;
  color: silver;
  text-shadow: unset;
}
.jewel.button.secondary.unboxed[disabled]:hover, .jewel.button.secondary.unboxed[disabled]:hover:focus {
  color: silver;
}

.jewel.checkbox.secondary input + span::before {
  background: linear-gradient(white, #f3f3f3);
  border: 1px solid #b3b3b3;
}
.jewel.checkbox.secondary input + span::after {
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
}
.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
}
.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
}
.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
  background: linear-gradient(#f9f48d, #f7ef5c);
  border: 1px solid #999207;
}
.jewel.checkbox.secondary input[disabled] + span {
  color: silver;
}
.jewel.checkbox.secondary input[disabled] + span::before {
  background: #f3f3f3;
  border: 1px solid #d9d9d9;
}
.jewel.checkbox.secondary input:checked[disabled] + span::after {
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
}
.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
}
.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
}
.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
}

.jewel.switch.secondary input:checked + .switch {
  background: linear-gradient(#e2d70b, #f5ea2b);
  box-shadow: 0px 0px 0px 1px #cac00a;
}
.jewel.switch.secondary input:focus + .switch {
  box-shadow: 0px 0px 0px 1px #b1a909;
}
.jewel.switch.secondary input:checked + .switch::before {
  background: #fdfbd6;
}
.jewel.switch.secondary input[disabled]:checked + .switch {
  background: #d9d9d9;
  box-shadow: 0px 0px 0px 1px #cccccc;
}
.jewel.switch.secondary input[disabled] + .switch {
  background: #f3f3f3;
  box-shadow: 0px 0px 0px 1px #e6e6e6;
}
.jewel.switch.secondary input[disabled] + .switch::before {
  background: white;
}
.jewel.switch.secondary .switch {
  background: linear-gradient(#d9d9d9, #f3f3f3);
  box-shadow: 0px 0px 0px 1px #cccccc;
}
.jewel.switch.secondary .switch::before {
  background: #fdfbd6;
}

.jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
  background: #f5eb35;
}
.jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.selected, .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.selectable:active {
  background: #f4e91d;
}

.jewel.item.secondary.hovered {
  background: #E2D70B;
}
.jewel.item.secondary.selected, .jewel.item.secondary.selectable:active {
  background: #cac00a;
}

.jewel.loader.secondary.segment {
  border-top-color: #E2D70B;
}

.jewel.snackbar.secondary .jewel.snackbar-content {
  background: linear-gradient(#f4e813, #cac00a);
  border: 1px solid #999207;
  box-shadow: inset 0 1px 0 #f7ef5c;
  border-bottom: none;
}
.jewel.snackbar.secondary .jewel.snackbar-message {
  color: #FFFFFF;
}
.jewel.snackbar.secondary .jewel.snackbar-action {
  color: #E2D70B;
}
.jewel.snackbar.secondary .jewel.snackbar-action:hover {
  background: linear-gradient(#E2D70B, #b1a909);
}

a:visited {
  color: #b1a909;
}

a:hover {
  color: #E2D70B;
}

a:active {
  color: #f5ea2b;
}

.secondary-lightest {
  color: #fcf9bd;
}

.secondary-light {
  color: #f7ef5c;
}

.secondary-normal {
  color: #E2D70B;
}

.secondary-dark {
  color: #817a06;
}

.secondary-darkest {
  color: #1f1e02;
}

.jewel.togglebutton.secondary {
  background: linear-gradient(#f4e813, #cac00a);
  border: 1px solid #999207;
  box-shadow: inset 0 1px 0 #f7ef5c;
  border-radius: 0.25rem;
  color: #FFFFFF;
  text-shadow: 0 -1px 0 rgba(80, 76, 4, 0.7);
}
.jewel.togglebutton.secondary:hover, .jewel.togglebutton.secondary:hover:focus {
  background: linear-gradient(#E2D70B, #b1a909);
  border: 1px solid #817a06;
  color: #FFFFFF;
}
.jewel.togglebutton.secondary:active, .jewel.togglebutton.secondary:active:focus {
  background: linear-gradient(#b1a909, #817a06);
  border: 1px solid #504c04;
  box-shadow: inset 0px 1px 3px 0px rgba(50, 50, 50, 0.5);
  color: #FFFFFF;
}
.jewel.togglebutton.secondary:focus {
  border: 1px solid #999207;
  box-shadow: inset 0px 0px 0px 1px rgba(254, 253, 238, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.6);
  color: #FFFFFF;
}
.jewel.togglebutton.secondary[disabled] {
  background: #f3f3f3 !important;
  border: 1px solid #d9d9d9 !important;
  box-shadow: none !important;
  color: silver;
  text-shadow: unset;
}
.jewel.togglebutton.secondary.selected {
  background: linear-gradient(#b1a909, #817a06);
  border: 1px solid #504c04;
  box-shadow: inset 0px 1px 3px 0px rgba(50, 50, 50, 0.5);
  color: #FFFFFF;
}

.jewel.togglebutton.secondary.outlined {
  background: rgba(226, 215, 11, 0.05);
  border: 1px solid #b1a909;
  box-shadow: none;
  color: #999207;
  text-shadow: none;
}
.jewel.togglebutton.secondary.outlined:hover, .jewel.togglebutton.secondary.outlined:hover:focus {
  background: rgba(226, 215, 11, 0.15);
  border: 1px solid #999207;
  color: #686305;
}
.jewel.togglebutton.secondary.outlined:active, .jewel.togglebutton.secondary.outlined:active:focus {
  background: rgba(226, 215, 11, 0.25);
  border: 1px solid #8a8407;
  box-shadow: none;
  color: #686305;
}
.jewel.togglebutton.secondary.outlined:focus {
  border: 1px solid #817a06;
  box-shadow: none;
  color: #686305;
}
.jewel.togglebutton.secondary.outlined[disabled] {
  background: rgba(243, 243, 243, 0.1) !important;
  border: 1px solid #d9d9d9 !important;
  color: silver;
  text-shadow: unset;
}
.jewel.togglebutton.secondary.outlined.selected {
  background: rgba(226, 215, 11, 0.25);
  border: 1px solid #8a8407;
  box-shadow: none;
  color: #686305;
}

.jewel.togglebutton.secondary.unboxed {
  background: rgba(226, 215, 11, 0);
  border: 1px solid transparent;
  box-shadow: none;
  color: #999207;
  text-shadow: none;
}
.jewel.togglebutton.secondary.unboxed:hover, .jewel.togglebutton.secondary.unboxed:hover:focus {
  background: rgba(226, 215, 11, 0.15);
  border: 1px solid transparent;
  color: #686305;
}
.jewel.togglebutton.secondary.unboxed:active, .jewel.togglebutton.secondary.unboxed:active:focus {
  background: rgba(226, 215, 11, 0.25);
  border: 1px solid transparent;
  box-shadow: none;
  color: #686305;
}
.jewel.togglebutton.secondary.unboxed:focus {
  background: rgba(226, 215, 11, 0.15);
  border: 1px solid transparent;
  box-shadow: none;
  color: #686305;
}
.jewel.togglebutton.secondary.unboxed[disabled] {
  background: rgba(243, 243, 243, 0) !important;
  border: 1px solid transparent !important;
  color: silver;
  text-shadow: unset;
}
.jewel.togglebutton.secondary.unboxed[disabled]:hover, .jewel.togglebutton.secondary.unboxed[disabled]:hover:focus {
  color: silver;
}

/*# sourceMappingURL=defaults.css.map */
