/*
 *
 *  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 "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";

.global {
    font-family:"Tahoma";
    font-size:11px;
    color:#222222;
}

.appTitle {
    font-weight:bold;
    font-size:16px;
}

mx|Application {
/*	background-image: "";
    theme-color:#CC6600;   */
    selection-color:#D0DFE6;
    roll-over-color:#E6F0F3;
    background-color:#FFFFFF;
    font-family: Verdana;
}



mx|Panel {
/*    header-colors: #FAEED1, #E3C38D;
    footer-colors: #F4DBB0, #E3C38D;  */
    corner-radius:10;
/*    drop-shadow: true;
    shadow-distance:6;  */
    margin-top:0;
    margin-left:0;
    margin-right:0;
    margin-bottom:0;
}



mx|Button {
    color: #FFFFFF;
    disabled-color: #999999;
    text-roll-over-color: #FFFFFF;
    font-family:"Verdana";
    font-size: 9px;
    font-weight: "bold";
/*    fill-colors: #C86336, #763322;  */
    corner-radius:8;
/*    border-color: #854230;
    border-thickness:3;  */
	foo: 42;  /* This should not cause a warning or error. */
}


mx|CheckBox {
    color: #000000;
    font-size: 10px;
    font-weight: "normal";
}

mx|RadioButton {
    color: #000000;
    font-size: 10px;
    font-weight: "normal";
}



mx|DataGrid {
    alternating-row-colors:#FFFCEC,#FFF6E2;
    border-style:"solid";
    border-color:#CCCCCC;
    header-color:#FAEED1;
    v-grid-line-color:#CCCCCC;
    color:#111111;
    font-size:9px;
    text-indent:4;
}




mx|ComboBox {
    color: #111111;
    text-roll-over-color: #111111;
    font-size:9px;
    font-weight: "bold";
/*    fill-colors: #FFFFFF, #C2CCCF;  */
    background-color: #FFFCEC;
    corner-radius: 7;
/*    border-thickness: 1;
    border-color: #854230;  */
    margin-left: 6;
    selection-color:#f5dcb2;
    roll-over-color:#faeed1;

}


mx|HSlider {
/*    fill-colors: #FFFFFF, #C2CCCF;
    track-colors: #FAEED1, #E3C38D;
    border-color: #666666;  */
    tick-color: #666666;
    label-offset: -3;
    tick-offset: -3;
    track-highlight: true;
}

mx|Menu {
	openDuration: 250;
}

/*
Apache Flex: requires rideau.jar which is not open-source 

@font-face {
	src: url("BickhamScriptPro-Regular.otf");
	fontFamily: "TestFont";
	embedAsCFF: true;
}

*/

TextInput {
/*    font-family:"TestFont";  */
    paddingTop: 5;

}

@media (os-platform: "Android") and (application-dpi: 160)
{
    mx|ComboBox 
    {
        color: #111111;
        fontSize:9px;
    }
}
