/*
 *
 *  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.apache.org/flexjs/basic";
@namespace my "shim.*";

.global {
    font-family:"Tahoma";
    font-size:11px;
    color:#222222;
}

.appTitle {
    font-weight:bold;
    font-size:16px;
}

mx|View {
/*	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;
	padding-left: 0px;
    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;

}


my|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;

}
*/

my|VBox {
    IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.VerticalLayout");
}

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