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

.column-selector {
  .message {
    position: absolute;
    font-size: 12px;
    padding: 1px;
    left: 15px;
  }

  .highlight {
    background-color: @bg-lite;
  }
  .per-io {
    color: @text-green;
  }

  .selection-list {
    border-bottom: 1px solid @border-color;

    .options {
      .force-scrollbar;

      max-height: 450px;
      overflow: auto;
    }

    .select-option, .filter-option {
      border-top: 1px dotted @border-color;
      padding: 5px 15px;

      .checkbox {
        display: inline-block;

        margin-right: 10px;
        float: left;
        vertical-align: middle;
      }
    }
    .filter-option {
      border: none;

      .form-group {
        display: inline-block;

        width: 100%;
        margin: 0px;
      }

      .select-all {
        display: inline-block;

        height: 15px;
        margin-top: 3px;
      }
    }
  }
}
.form-actions {
  padding: 10px;
  text-align: right;
}
