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

@import "bower_components/bootstrap/less/bootstrap";
@import "bower_components/font-awesome/less/font-awesome";

@import "bower_components/snippet-ss/less/force";
@import "bower_components/snippet-ss/less/effects";
@import "bower_components/snippet-ss/less/no";
@import "bower_components/snippet-ss/less/background";

// Prerequisites
@import "colors";
@import "shared";

@import "tooltip";

// Components
@import "tab-n-refresh";
@import "dags-page-search";
@import "queries-page-search";
@import "table-controls";
@import "error-bar";
@import "caller-info";
@import "date-formatter";
@import "em-swimlane";
@import "em-tooltip";
@import "em-swimlane-vertex-name";
@import "em-table.less";
@import "em-table-facet-panel.less";
@import "em-table-status-cell";
@import "query-timeline";
@import "home-table-controls";
@import "em-progress";
@import "em-breadcrumbs";
@import "pagination-ui.less";
@import "progress-cell.less";
@import "search-ui.less";
@import "status-cell.less";
@import "variables.less";

// Modals
@import "column-selector";
@import "zip-download-modal";

// Pages
@import "page-layout";
@import "details-page";
@import "swimlane-page";
@import "vertex-configs-page";

// Helpers
@import "txt";
