/* 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 .CodeMirror-scrollbar-filler;
@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;
}
/* Ensure the scrollbars are not too narrow */
.CodeMirror-overlayscroll-horizontal {
  min-height: 12px;
}
.CodeMirror-overlayscroll-vertical {
  min-width: 12px;
}
.CodeMirror-scrollbar-filler {
  min-height: 12px;
  min-width: 12px;
}
/* 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;
}

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

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