/*

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

@font-face {
	src: url("/assets/fonts/open-sans/OpenSans-Bold.ttf");
	fontFamily: openSansBold;
	advancedAntiAliasing: true;
	unicodeRange:
		U+0044, /* D */
		U+004F, /* O */
		U+0057, /* W */
		U+004E, /* N */
		U+004C, /* L */
		U+0041, /* A */
		U+0030-U+0039, /* Numbers [0..9] */
		U+002E-U+002E; /* Period [.] */
}

s|Button
{
	skinClass : ClassReference("ws.tink.spark.skins.controls.ButtonSkin");
	fontFamily : openSansBold;
	fontSize : 14;
	color	: #FFFFFF;
	borderColor: #DBDBDB;
}

.mainBtnStyle
{
	chromeColor: #679d13;
}

