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

.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;
}
