/*
*
*  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 "http://flex.apache.org/experimental/ns";
@namespace s "library://ns.adobe.com/flex/spark";

Accordion
{
	skinClass: ClassReference("spark.skins.AccordionSkin");
}

Accordion s|ButtonBarButton
{
	cornerRadius : 0;
}

Alert 
{
    skinClass: ClassReference("spark.skins.AlertSkin");
}

BorderDataNavigator
{
	skinClass: ClassReference("spark.skins.BorderDataNavigatorSkin");
}


ColorPicker 
{
    skinClass: ClassReference("spark.skins.ColorPickerSkin");
}

ProgressBar 
{
    skinClass: ClassReference("spark.skins.ProgressBarSkin");
}

DataAccordion
{
	skinClass: ClassReference("spark.skins.DataAccordionSkin");
}

DataAccordion s|ButtonBarButton
{
	cornerRadius : 0;
}

DataNavigator
{
	skinClass: ClassReference("spark.skins.DataNavigatorSkin");
}

InlineScroller
{
	skinClass: ClassReference("spark.skins.InlineScrollerSkin");
}

Navigator
{
	skinClass: ClassReference("spark.skins.NavigatorSkin");
}

Menu {
    skinClass: ClassReference("spark.skins.MenuSkin");
}

MenuBar {
    skinClass: ClassReference("spark.skins.MenuBarSkin");
}

MaskedTextInput {
    fontFamily: _typewriter;
}

MaskedTextInput #textDisplay {
    color: #000000;
    fontStyle: normal;
    typographicCase: uppercase;
}

MaskedTextInput #promptDisplay {
    color: #cccccc;
    fontStyle: normal;
}

MaskedTextInput:disabledWithPrompt {
    color: #cccccc;
}

RichTextEditor {
	skinClass: ClassReference("spark.skins.RichTextEditorSkin");
}