/*
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";
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace asf "org.apache.flex.utilities.developerToolSuite.*";

asf|MainApplication {
    backgroundColor: #DDDDDD;
    skinClass: ClassReference("org.apache.flex.utilities.developerToolSuite.ApplicationSkin");
}

asf|SettingsValidationInProgressWindow {
    borderAlpha: 1;
    borderThickness: 2;
    borderVisible: true;
    borderStyle: outset;
    backgroundAlpha: 1;
    backgroundColor: #ffffff;
}


.stackedForm {
    skinClass: ClassReference("spark.skins.spark.StackedFormSkin");
}

.stackedFormItem {
    skinClass: ClassReference("spark.skins.spark.StackedFormItemSkin");
}
