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

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

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

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

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

DataTip
{
	backgroundColor: #FFFFFF;
}

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

BarSeries
{
	labelClass: ClassReference("mx.controls.Label");
	labelSizeLimit : 9;
}

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

BarChart
{
	labelClass: ClassReference("mx.controls.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("mx.controls.Label");
	labelSizeLimit : 9;
}

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

ColumnChart
{
	labelClass: ClassReference("mx.controls.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("mx.controls.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;
}

