/*
 *
 *  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 s "library://ns.adobe.com/flex/spark";

/*
//------------------------------
//  Spark TitleBar
//------------------------------
*/

s|TitleBar
{
    skinClass: ClassReference("spark.skins.spark.windowChrome.TitleBarSkin");
}

/*
//------------------------------
//  Spark WindowedApplication
//------------------------------
*/

s|WindowedApplication
{
    backgroundAlpha: 1;
    backgroundColor: #FFFFFF;
    resizeAffordanceWidth: 6;
    skinClass: ClassReference("spark.skins.spark.WindowedApplicationSkin");
}

/*
//------------------------------
//  Spark Window
//------------------------------
*/

s|Window
{
    backgroundAlpha: 1;
    backgroundColor: #FFFFFF;
    resizeAffordanceWidth: 6;
    skinClass: ClassReference("spark.skins.spark.WindowedApplicationSkin");
}

