/*

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 st "ws.tink.spark.controls.*";

@font-face {
	src: url("/assets/fonts/open-sans/OpenSans-SemiboldItalic.ttf");
	fontFamily: openSansSemibold;
	advancedAntiAliasing: true;
	fontStyle:italic;
}

st|StepRenderer st|ActivityIndicator
{
	skinClass : ClassReference("ws.tink.spark.skins.controls.StepActivityIndicatorSkin");
}

st|StepRenderer st|ActivityIndicator st|Rotator
{
	skinClass : ClassReference("ws.tink.spark.skins.controls.StepRotatorSkin");
}

st|StepRenderer
{
	color 			: #FFFFFF;
	activeColor		: #FFFFFF;
	errorColor		: #B20E13;
	completeColor	: #679d13;
	borderColor		: #BFBFBF;
}

st|ProgressBar
{
	skinClass : ClassReference("ws.tink.spark.skins.controls.ProgressBarSkin");
	chromeColor	: #1275a4;
}

s|TextInput
{
	fontFamily : openSansSemibold;
	fontSize : 13;
	color	: #757575;
	skinClass : ClassReference("ws.tink.spark.skins.controls.TextInputSkin");
	borderColor		: #BFBFBF;
}

s|TextInput:normalWithPrompt,
s|TextInput:disabledWithPrompt
{
	color: #BBBBBB;
}

s|Label.linkText {
    color: #0000FF;
    verticalAlign: middle;
    textDecoration: none;
}

s|Label.linkTextHover {
    color: #0000FF;
    verticalAlign: middle;
    textDecoration: underline;
}
