/* CSS specific to the live ranges div associated with
   the RangeView typescript class in src/range-view.ts. */

:root {
  --range-y-axis-width: 18ch;
  --range-position-width: 1.5ch;
  --range-block-border: 6px;
  --range-instr-border: 3px;
  --range-position-border: 1px;
  --range-flipped-position-height: 1em;
}

.range-bold {
  font-weight: bold;
  color: black;
}

#ranges {
  font-family: monospace;
  min-height: auto;
  overflow: hidden;
}

#resizer-ranges {
  height: 10px;
}

.range-title-div {
  box-sizing: border-box;
  padding: 2ch 2ch 2ch 2ch;
  white-space: nowrap;
  overflow: auto;
}

.range-title {
  text-decoration: underline;
  font-weight: bold;
  font-size: large;
  display: inline-block;
}

.range-title-help {
  margin-left: 2ch;
  width: 1ch;
  padding: 0 0.25ch;
  border: 1px dotted black;
  color: slategray;
  display: inline-block;
}

label.range-toggle-setting {
  text-align: right;
  float: right;
}

input.range-toggle-show,
input.range-toggle-setting {
  vertical-align: middle;
}

.range-toggle-form {
  display: inline;
}

.range-header-label-x {
  text-align: center;
  margin-left: 13ch;
}

.range-header-label-y {
  width: 11ch;
  float: left;
  white-space: pre-wrap;
  word-wrap: break-word;
  margin-left: 6ch;
  margin-top: 4ch;
}

.range-y-axis {
  display: inline-block;
  width: var(--range-y-axis-width);
  overflow: hidden;
  white-space: nowrap;
  vertical-align: top;
}

.range-header {
  display: flex;
  overflow: hidden;
  height: 8ch;
  margin-left: var(--range-y-axis-width);
}

.range-position-labels,
.range-register-labels {
  background-color: lightgray;
}

#ranges.not_flipped .range-register-labels,
#ranges.flipped .range-position-labels {
  float: right;
}

#ranges.not_flipped .range-position-labels,
#ranges.flipped .range-register-labels {
  margin-top: auto;
}

#ranges.flipped .range-register-labels {
  border-right: 2px solid white;
}

#ranges.not_flipped .range-registers {
  float: right;
  overflow: hidden;
  text-align: right;
}

#ranges.not_flipped .range-positions-header,
#ranges.not_flipped .range-instruction-ids,
#ranges.not_flipped .range-block-ids,
#ranges.flipped .range-registers,
#ranges.flipped .range-registers-type {
  overflow: hidden;
  white-space: nowrap;
}

#ranges .range-positions-header,
#ranges .range-instruction-ids,
#ranges .range-block-ids,
#ranges.flipped .range-registers,
#ranges.flipped .range-registers-type {
  display: grid;
  grid-gap: 0;
}

#ranges.not_flipped .range-registers-type {
  width: 0ch;
}

.range-type-header {
  display: inline-block;
  text-align: center;
}

.range-type-header::after {
  float: right;
}

#ranges.not_flipped .range-reg {
  width: 13ch;
  text-align: right;
}

#ranges.not_flipped .range-reg::after {
  content: ":";
}

#ranges.flipped .range-reg {
  display: inline-block;
  text-align: center;
}

#ranges.flipped .range-registers .range-reg {
  white-space: pre-line;
}

.range-grid {
  overflow: auto;
  display: inline-block;
  white-space: nowrap;
}

.range-block-id {
  display: inline-block;
  text-align: center;
}

.range-instruction-id {
  display: inline-block;
  text-align: center;
}

.range-position {
  display: inline-block;
  text-align: center;
  z-index: 1;
}

#ranges.not_flipped .range-position {
  color: transparent;
}

.range-transparent,
.range-position.range-empty,
#ranges.flipped .range-position.range-empty {
  color: transparent;
}

#ranges.flipped .range-interval-text {
  writing-mode: horizontal-tb;
}

#ranges.flipped .range-interval-wrapper {
  writing-mode: vertical-lr;
}

#ranges.flipped .range-registers,
#ranges.flipped .range-registers-type,
#ranges.flipped .range-grid,
#ranges.flipped .range-positions-group  {
  display: inline-grid;
  grid-gap: 0;
}

#ranges.flipped .range-grid {
  writing-mode: vertical-lr;
  grid-template-rows: repeat(var(--range-num-registers, 0), calc(var(--range-position-width) + (2 * var(--range-position-border))));
}

#ranges.flipped .range-registers,
#ranges.flipped .range-registers-type {
  grid-template-columns: repeat(var(--range-num-registers, 0), calc(var(--range-position-width) + (2 * var(--range-position-border))));
}

#ranges.flipped .range-position-labels {
  display: grid;
  grid-gap: 0;
  writing-mode: vertical-lr;
  grid-template-rows: repeat(3, calc(5.5ch + (2 * var(--range-position-border))));
  border-bottom: 2px solid white;
}

#ranges.flipped .range-interval-wrapper,
#ranges.flipped .range-grid .range-positions {
  grid-template-rows: calc(var(--range-position-width) + (2 * var(--range-position-border)));
}

.range-block-id:hover,
.range-instruction-id:hover,
.range-reg:hover,
.range-position:hover {
  background-color: rgba(0, 0, 255, 0.10);
}

#ranges.not_flipped .range-position.range-header-element {
  border-bottom: 2px solid rgb(109, 107, 107);
}

#ranges.flipped .range-position.range-header-element {
  border-right: 2px solid rgb(109, 107, 107);
}

.range-type-header,
.range-block-id,
.range-instruction-id,
.range-reg,
.range-interval,
.range-position {
  position: relative;
  border: var(--range-position-border) solid rgb(109, 107, 107);
}

#ranges.not_flipped .range-block-id,
#ranges.not_flipped .range-instruction-id,
#ranges.not_flipped .range-interval,
#ranges.not_flipped .range-position {
  border-left: 0;
}

#ranges.flipped .range-block-id,
#ranges.flipped .range-instruction-id,
#ranges.flipped .range-interval,
#ranges.flipped .range-position {
  border-top: 0;
}

#ranges.not_flipped .range-block-ids > .range-block-id:first-child,
#ranges.not_flipped .range-instruction-ids > .range-instruction-id:first-child,
#ranges.not_flipped .range-positions > .range-position:first-child {
  border-left: var(--range-position-border) solid rgb(109, 107, 107);
}

#ranges.flipped .range-block-ids > .range-block-id:first-child,
#ranges.flipped .range-instruction-ids > .range-instruction-id:first-child,
#ranges.flipped .range-positions > .range-position:first-child {
  border-top: var(--range-position-border) solid rgb(109, 107, 107);
}

.range-position.range-interval-position {
  border: none;
}

#ranges.flipped .range-interval-position:first-child {
  padding-top: 0px;
}

#ranges.flipped .range-interval-position:last-child {
  padding-bottom: 0px;
}

.range-interval-text {
  position: absolute;
  padding-left: 0.5ch;
  z-index: 2;
  pointer-events: none
}

#ranges.flipped .range-interval-text {
  width: 1ch;
  overflow-wrap: break-word;
  white-space: normal;
  /* padding + border + 1ch + border + padding = width */
  padding-left: calc(((var(--range-position-width) - 1ch) / 2.0) - var(--range-position-border));
}

#ranges.flipped .range-interval-text-behind {
  overflow-wrap: normal;
}

#ranges.not_flipped .range-position.range-use {
  border-left: var(--range-instr-border) solid red;
}

#ranges.flipped .range-position.range-use {
  border-top: var(--range-instr-border) solid red;
}

#ranges.not_flipped .range-block-border,
#ranges.not_flipped .range-block-border.range-position.range-interval-position:last-child {
  border-right: var(--range-block-border) solid rgb(109, 107, 107);
}

#ranges.flipped .range-block-border,
#ranges.flipped .range-block-border.range-position.range-interval-position:last-child {
  border-bottom: var(--range-block-border) solid rgb(109, 107, 107);
}

#ranges.not_flipped .range-block-border.range-position.range-interval-position {
  border-right: var(--range-block-border) solid transparent;
}

#ranges.flipped .range-block-border.range-position.range-interval-position {
  border-bottom: var(--range-block-border) solid transparent;
}

#ranges.not_flipped .range-instr-border,
#ranges.not_flipped .range-instr-border.range-position.range-interval-position:last-child {
  border-right: var(--range-instr-border) solid rgb(109, 107, 107);
}

#ranges.flipped .range-instr-border,
#ranges.flipped .range-instr-border.range-position.range-interval-position:last-child {
  border-bottom: var(--range-instr-border) solid rgb(109, 107, 107);
}

#ranges.not_flipped .range-instr-border.range-position.range-interval-position {
  border-right: var(--range-instr-border) solid transparent;
}

#ranges.flipped .range-instr-border.range-position.range-interval-position {
  border-bottom: var(--range-instr-border) solid transparent;
}

.range,
.range-interval,
.range-interval-wrapper,
.range-positions {
  white-space: nowrap;
  display: inline-block;
}

.range-interval-wrapper,
.range-positions {
  display: grid;
  grid-gap: 0;
}

#ranges.not_flipped .range-instruction-ids,
#ranges.not_flipped .range-block-ids,
#ranges.not_flipped .range-positions {
  grid-template-columns: repeat(var(--range-num-positions, 0), calc(var(--range-position-width) + var(--range-block-border)));
}

#ranges.flipped .range-instruction-ids,
#ranges.flipped .range-block-ids,
#ranges.flipped .range-positions {
  writing-mode: vertical-lr;
  grid-template-columns: repeat(var(--range-num-positions, 0), calc(var(--range-flipped-position-height) + var(--range-block-border)));
}

#ranges.flipped .range-instruction-id {
  display: grid;
  grid-gap: 0;
  grid-template-rows: repeat(8, calc((var(--range-flipped-position-height) + var(--range-block-border)) / 2));
}

#ranges.flipped .range-instruction-id-number {
  grid-row: 4 / 5;
  height: 100%;
}

#ranges.flipped .range-block-id {
  display: grid;
  grid-gap: 0;
}

#ranges.flipped .range-block-id-number {
  height: 100%;
}

#ranges.flipped .range-header-element {
  writing-mode: horizontal-tb;
}

.range-interval {
  background-color: rgb(153, 158, 168);
}

#ranges.flipped .range-interval {
  display: block;
}

.range-hidden {
  display: none !important;
}

.range-positions-placeholder {
  width: 100%;
  border: var(--range-position-border) solid transparent;
  color: transparent;
}