/* Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed 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.
 */

@external .CodeMirror;
@external .CodeMirror-lines;
@external .CodeMirror-linenumber;
@external .CodeMirror-overlayscroll-horizontal;
@external .CodeMirror-overlayscroll-vertical;
@external .cm-tab;
@external .cm-searching;
@external .cm-trailingspace;

/* Reduce margins around CodeMirror to save space. */
.CodeMirror-lines {
  padding: 0;
}
.CodeMirror pre {
  padding: 0;
  line-height: normal;
}

/* Minimum scrollbar bubble size even on large files. */
.CodeMirror-overlayscroll-horizontal div {
  min-width: 25px;
}
.CodeMirror-overlayscroll-vertical div {
  min-height: 25px;
}

/* Stack the scrollbar so annotations can receive clicks. */
.CodeMirror-overlayscroll-vertical {
  z-index: inherit;
}
.CodeMirror-overlayscroll-horizontal div,
.CodeMirror-overlayscroll-vertical div {
  background-color: rgba(128, 128, 128, 0.50);
  z-index: 8;
}

/* Highlight current line number in the line gutter. */
.activeLine .CodeMirror-linenumber {
  background-color: #bcf !important;
  color: #000;
}

.showTabs .cm-tab:before {
  position: absolute;
  content: "\00bb";
  color: #f00;
}

.cm-searching {
  background-color: #ffa !important;
}

.cm-trailingspace {
  background-color: red !important;
}

/* Line length margin displayed at NN columns to provide
 * a visual guide for length of any single line of code.
 */
.margin {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 0;
  border-right: 1px dashed #ffa500;
  z-index: 2;
  cursor: text;
}
