/* 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-lint-markers;
@external .CodeMirror-lint-tooltip;
@external .CodeMirror-overlayscroll-horizontal;
@external .CodeMirror-overlayscroll-vertical;
@external .CodeMirror-scrollbar-filler;
@external .cm-tab;
@external .cm-searching;
@external .cm-trailingspace;
@external .unifiedLineNumber;

/* 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,
.activeLine .unifiedLineNumber {
  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;
}

.CodeMirror-lint-markers {
  width: 250px;
}

.CodeMirror-lint-tooltip {
  background-color: infobackground;
  border: 1px solid black;
  border-radius: 4px 4px 4px 4px;
  color: infotext;
  font-family: monospace;
  font-size: 10pt;
  overflow: hidden;
  padding: 2px 5px;
  position: fixed;
  white-space: pre;
  white-space: pre-wrap;
  z-index: 100;
  max-width: 600px;
  opacity: 0;
  transition: opacity .4s;
  -moz-transition: opacity .4s;
  -webkit-transition: opacity .4s;
  -o-transition: opacity .4s;
  -ms-transition: opacity .4s;
}
