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

/*
 * Main colors.
 */
$border-color: #ddd;
$border-hor-color: #ddd;

// From BS3.
$brand-primary: #428bca;
$brand-success: #5cb85c;
$brand-info: #5bc0de;
$brand-warning: #f0ad4e;
$brand-danger: #d9534f;

// Form control colors.
$form-control-border-color: #eee;
$form-control-addon-border-color: #e6e6e6;
$form-control-addon-background-color: #e6e6e6;

$color-table-sort: rgb(107, 164, 202);

$color-slack: #4d394b;
$color-slack2: #303e4c;
$color-slack3: #544539;
$color-slack4: #4d5250;
$color-slack5: #187e82;
$color-slack6: #f8f8fa;
$color-border: #e7e7e7;
$color-magnolia: #F9F7ED;
$color-grey-blue: #6B7F99;

$background-color: #fff;
$foreground-color: #333;

// Flat colors.
$color-turquoise: #1abc9c;
$color-emerald: #2ecc71;
$color-river: #3498db;
$color-amethyst: #9b59b6;
$color-asphalt: #34495e;
$color-sea: #16a085;
$color-nephritis: #27ae60;
$color-travis-passing: #00c800;
$color-belize: #2980b9;
$color-wisteria: #8e44ad;
$color-midnight: #2C3E50;
$color-sunflower: #ffd20f;
$color-orange: #F39C12;
$color-carrot: #E67E22;
$color-pumpkin: #D35400;
$color-alizarin: #E74C3C;
$color-pomegranate: #C0392B;
$color-cloud: #ECF0F1;
$color-silver: #BDC3C7;
$color-concrete: #95A5A6;
$color-asbestos: #7F8C8D;
$color-dream: #C5D5EE;
$color-blue: #428BCA;
$color-mustard: #CAC542;
$color-pink: #CA428B;
$color-beige:#CA8142;
$color-beta: #FC664C;
$color-peach: #ff6530;
$color-blue2: #337ab7;
$color-neon-green: #a4fb05;

// Table border colors.
$tbl-border-color: #eee;
$tbl-border-hor-color: #eee;
$tbl-hdr-bgcolor: lighten($color-river, 40%);

.color-turquoise { color: $color-turquoise }
.color-emerald { color: $color-emerald }
.color-river { color: $color-river }
.color-amethyst { color: $color-amethyst }
.color-asphalt { color: $color-asphalt }
.color-sea { color: $color-sea }
.color-nephritis { color: $color-nephritis }
.color-belize { color: $color-belize }
.color-wisteria { color: $color-wisteria }
.color-midnight { color: $color-midnight }
.color-sunflower { color: $color-sunflower }
.color-orange { color: $color-orange }
.color-carrot { color: $color-carrot }
.color-pumpkin { color: $color-pumpkin }
.color-alizarin { color: $color-alizarin }
.color-pomegranate { color: $color-pomegranate }
.color-cloud { color: $color-cloud }
.color-silver { color: $color-silver }
.color-concrete { color: $color-concrete }
.color-asbestos { color: $color-asbestos }
.color-dream { color: $color-dream }

.color-danger { color: $brand-danger }
.color-info { color: $brand-info }
.color-success { color: $brand-success }
.color-primary { color: $brand-primary }
.color-warning { color: $brand-warning }

.bg-danger { background-color: $brand-danger }
.bg-info { background-color: $brand-info }
.bg-success { background-color: $brand-success }
.bg-primary { background-color: $brand-primary }
.bg-warning { background-color: $brand-warning }

.color-000 { color: #000 }
.color-111 { color: #111 }
.color-222 { color: #222 }
.color-333 { color: #333 }
.color-444 { color: #444 }
.color-555 { color: #555 }
.color-666 { color: #666 }
.color-777 { color: #777 }
.color-888 { color: #888 }
.color-999 { color: #999 }
.color-aaa { color: #aaa }
.color-bbb { color: #bbb }
.color-ccc { color: #ccc }
.color-ddd { color: #ddd }
.color-eee { color: #eee }
.color-fff { color: #fff }

.bg-turquoise { background-color: $color-turquoise }
.bg-emerald { background-color: $color-emerald }
.bg-river { background-color: $color-river }
.bg-amethyst { background-color: $color-amethyst }
.bg-asphalt { background-color: $color-asphalt }
.bg-sea { background-color: $color-sea }
.bg-nephritis { background-color: $color-nephritis }
.bg-belize { background-color: $color-belize }
.bg-wisteria { background-color: $color-wisteria }
.bg-midnight { background-color: $color-midnight }
.bg-sunflower { background-color: $color-sunflower }
.bg-orange { background-color: $color-orange }
.bg-carrot { background-color: $color-carrot }
.bg-pumpkin { background-color: $color-pumpkin }
.bg-alizarin { background-color: $color-alizarin }
.bg-pomegranate { background-color: $color-pomegranate }
.bg-cloud { background-color: $color-cloud }
.bg-silver { background-color: $color-silver }
.bg-concrete { background-color: $color-concrete }
.bg-asbestos { background-color: $color-asbestos }

