/*
////////////////////////////////////////////////////////////////////////////////
//
//  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.
//
////////////////////////////////////////////////////////////////////////////////
*/

/* Style for color-specific state - Beige */

/*
//----------------------------
//  Global styles
//----------------------------
*/
.global
{
    highlightAlphas:        .5, .25;
    borderColor:            #939A9D;
    headerColors:           #456F84, #9ABBC9;
    themeColor:             #75B1CE;
    rollOverColor:          #D6E6EE;
    selectionColor:         #B8D5E4;
}

/*
//----------------------------
// Type selectors
//----------------------------
*/
Application
{
    backgroundColor:		#AAB2B7;
    backgroundImage:        Embed("assets/blue_background.jpg");
}

/*
//----------------------------
// Apply to Panels and Alerts by default
//----------------------------
*/
.windowStatus {
	color: #BDE9FA;
}

.windowStyles {		/* catalog panel's title text */
	color: #BDE9FA;
}

/*
//----------------------------
// Named styles
//----------------------------
*/

.colorPanel /* for the background of some surfaces */
{
    borderStyle:            "solid";
    borderThickness:        0;
    backgroundColor:		#BDD6E2;
    backgroundAlpha:		0.4;
    color: 					#170505;
    cornerRadius:           4;
    dropShadowEnabled:      true;
}

.homeProgramHeader /* in HomeView */
{
    fontWeight:             "bold";
    fontSize:               13;
    color:                  #7AA4B9;
}

.homeMap
{
    borderStyle:            "solid";
    cornerRadius:           4;
    backgroundColor:        #7AA4B9;
    alpha:                  1;
    dottedMap:              Embed("assets/blue_dotted_map.png");
}

.instructions
{
    alpha:                  .85;
    color:                  #5C5857;
}

.storeControlBar
{
    fillAlphas: 			.60, .40;
    fillColors: 			#4A6F81, #BDD6E2;
    highlightAlphas:		.05, .25;
    cornerRadius: 			3;
	shadowDistance:         4;
	paddingLeft:            0;
	paddingRight:           0;
	paddingTop:             0;
	paddingBottom:          0;
	horizontalGap:          0;
    storeLogo:              Embed("assets/logo_blue.png");
}

.storeButtonBar
{
    cornerRadius:           0;
    buttonStyleName:        "storeButton";
    themeColor:             #456F84;
}

.storeButton
{
    cornerRadius:           0;
    fillColors:             #4A6F81, #BDD6E2, #456F84, #9ABBC9;
    fillAlphas:             1, 1;
    highlightAlphas:        .5, .25;
    fontWeight:             "normal";
    selectedOverSkin:       ClassReference("samples.flexstore.ButtonBarButtonSkin");
    selectedUpSkin:         ClassReference("samples.flexstore.ButtonBarButtonSkin");
    overSkin:               ClassReference("samples.flexstore.ButtonBarButtonSkin");
}

.catalogTitleButtonSelected
{
    color:                  #FFFFFF;
    fontWeight:             "bold";
}

.catalogTitleButtonDeselected
{
    color:                  #222222;
    fontWeight:             "bold";
}

.catalogTitleButtonHighlighted
{
    color:                  #BDE9FA;
    fontWeight:             "bold";
}

.catalogPanel
{
    highlightAlphas:        .5, .25;
    headerColors:           #456F84, #9ABBC9;
    borderAlpha:            1;
    borderColor:            #FFFFFF;
    borderThicknessRight:   1;
    borderThicknessBottom:  1;
    paddingRight:           0;
    paddingBottom:          0;
}

