/*
 *
 *  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 "library://ns.adobe.com/flex/mx";
@namespace charts "mx.charts.chartClasses.*";

charts|ChartBase
{
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");           
	fontSize : 10;
}

charts|CartesianChart
{
	axisColor : #D5DEDD;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");           
	fontSize : 10;
}

charts|PolarChart
{
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");           
	fontSize : 10;
}

AreaChart
{
	axisColor : #D5DEDD;
	dataTipRenderer: ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	textAlign : "left";
}

AreaSeries
{
	adjustedRadius: 2;
	radius: 4;
}

/*
//--------------------------------
//  BarSeries
//--------------------------------
*/

BarSeries
{
	labelClass: ClassReference("spark.components.Label");
	labelSizeLimit : 9;
}

/*
//--------------------------------
//  BarChart
//--------------------------------
*/

BarChart
{
	labelClass: ClassReference("spark.components.Label");
	axisColor: #D5DEDD;
	barWidthRatio : 0.65;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	gridLinesStyleName : "horizontalGridLines";
	textAlign : "left";
}

BubbleSeries
{
	
}

BubbleChart
{
	axisColor : #D5DEDD;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	gridLinesStyleName : "bothGridLines";
	maxRadius : 50;
	minRadius : 0;
	textAlign : "left";
}

CandlestickSeries
{
	
}

CandlestickChart
{
	axisColor: #D5DEDD;
	columnWidthRatio : 0.65;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	textAlign : "left";
}

/*
//--------------------------------
//  ColumnSeries
//--------------------------------
*/

ColumnSeries
{
	labelClass: ClassReference("spark.components.Label");
	labelSizeLimit : 9;
}

/*
//--------------------------------
//  ColumnChart
//--------------------------------
*/

ColumnChart
{
	labelClass: ClassReference("spark.components.Label");
	axisColor : #D5DEDD;
	columnWidthRatio : 0.65;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	textAlign : "left";
}

HLOCSeries
{
	closeTickLength : 3;
	openTickLength: 3;
	hlocColor: 0;
}

HLOCChart
{
	axisColor : #D5DEDD;
	columnWidthRatio : 0.65;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	textAlign : "left";
}

LineSeries
{
	adjustedRadius: 2;
	radius : 4;
}

LineChart
{
	axisColor : #D5DEDD;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	textAlign : "left";
}

PlotSeries
{
	radius: 5;
	adjustedRadius : 2;
}

PlotChart
{
	axisColor : #D5DEDD;
	dataTipRenderer : ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	gridLinesStyleName : "bothGridLines";
	textAlign : "left";
}

PieSeries
{
	calloutGap : 10;
	innerRadius : 0;
	insideLabelSizeLimit : 9;
	labelPosition : "none";
	renderDirection : "counterClockwise";
	shadowDepth : 4;
}

PieChart
{
	dataTipRenderer: ClassReference("mx.charts.chartClasses.DataTip");
	fontSize : 10;
	innerRadius : 0;
	textAlign : "left";
}

/*
//--------------------------------
//  AxisRenderer
//--------------------------------
*/

AxisRenderer
{
	labelClass: ClassReference("spark.components.Label");
	canDropLabels : ClassReference(null);
	canStagger : true;
	labelGap : 3;
	labelRotation : NaN;
	minorTickLength : 0;
	minorTickPlacement : "none";
	showLabels : true;
	showLine : true;
	tickLength : 3;
	tickPlacement : "outside";
	labelAlign : "center";
	verticalAxisTitleAlignment:"flippedVertical";
}

.verticalAxisStyle
{
	minorTickLength : 2;
	minorTickPlacement : "outside";
	tickLength : 5;
}

.blockNumericAxis
{
	minorTickLength : 0;
	minorTickPlacement : "cross";
	tickLength : 8;
}

.linedNumericAxis
{
	minorTickLength : 4;
	minorTickPlacement : "outside";
	tickLength : 8;
}

.dashedNumericAxis
{
	minorTickLength : 4;
	minorTickPlacement : "outside";
	showLine : false;
	tickLength : 8;
}
.blockCategoryAxis
{
	minorTickLength : 0;
	minorTickPlacement : "none";
	tickLength : 0;
	tickPlacement : "cross";
}

.hangingCategoryAxis
{
	minorTickLength : 0;
	minorTickPlacement : "cross";
	tickLength : 4;
}

.dashedCategoryAxis
{
	minorTickPlacement : "none";
	tickLength : 0;
	tickPlacement : "cross";
}

GridLines
{
	gridDirection : "horizontal";
	horizontalShowOrigin : true;
	horizontalTickAligned : true;
	verticalShowOrigin : false;
	verticalTickAligned: true;
}

.horizontalGridLines
{
	gridDirection : "vertical";
	horizontalShowOrigin : false;
	horizontalTickAligned : true;
	verticalShowOrigin : true;
	verticalTickAligned: true;
}

.bothGridLines
{
	gridDirection : "both";
	horizontalShowOrigin : true;
	horizontalTickAligned: true;
	verticalShowOrigin : true;
	verticalTickAligned: true;
}

/*
//-------------------------------
//  LegendItem
//-------------------------------
*/

LegendItem
{
	fill: #000000;
	fontWeight: "bold";
	fontSize: 10;
}

/*
//-------------------------------
//  Legend
//-------------------------------
*/

Legend
{
	borderStyle: "none";
	horizontalGap: 20;
	maintainAspectRatio: true;
	paddingBottom: 5;
	paddingLeft: 5;
	paddingRight: 5;
	paddingTop: 5;
	verticalGap: 7;
}


/*
//-------------------------------
//  DataTip
//-------------------------------
*/

charts|DataTip
{
	backgroundColor: #FFFFFF;
}
