/*
 *
 *  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.
 *
 */

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace components "flatspark.components.*";
@namespace ns "http://flex.apache.org/experimental/ns";


@font-face { 
	src: url("flatspark/assets/fonts/awesome/FontAwesome.otf"); 
	fontFamily: FontAwesome;
	embedAsCFF: true;
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Regular.otf");
	fontFamily: Lato; 
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Regular_Italic.otf");
	fontFamily: Lato;
	fontStyle: italic;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Bold.otf");
	fontFamily: Lato;
	fontWeight: bold;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Bold_Italic.otf");
	fontFamily: Lato;
	fontStyle: italic;
	fontWeight: bold;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Light.otf");
	fontFamily: LatoLight;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Light_Italic.otf");
	fontFamily: LatoLight;
	fontStyle: italic;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Hairline.otf");
	fontFamily: LatoHairline;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Hairline_Italic.otf");
	fontFamily: LatoHairline;
	fontStyle: italic;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Black.otf");
	fontFamily: LatoBlack;
	embedAsCFF: true; 
}

@font-face {
	src:url("flatspark/assets/fonts/lato/Lato_Black_Italic.otf");
	fontFamily: LatoBlack;
	fontStyle: italic;
	embedAsCFF: true; 
}

global
{
	modal-transparency: 0.98;
	modal-transparency-blur: 0;
	modal-transparency-color: #2c3e50;
}

s|Application {
	fontFamily: Lato, Helvetica, Arial, sans-serif;
}

s|Button {
	fontSize: 14;
}

components|ButtonIcon {
	skinClass: ClassReference("flatspark.skins.ButtonIconSkin");
	fontSize: 14;
	iconFontSize: 17;
}

components|TextInputIcon {
	skinClass: ClassReference("flatspark.skins.TextInputIconSkin");
}