/**
 * Vertical and horizontal divider lines to visualise nesting in
 * StreamField and InlinePanel.
 */

$guide-line-default-color: theme('colors.border-furniture');
$stroke-width: 1px;

@mixin guide-line-vertical() {
  // 3px dash height, 3px space, 1px dash width.
  background-size: $stroke-width 6px;
  background-repeat: repeat-y;
  background-image: linear-gradient(
    to bottom,
    var(--guide-line-color, $guide-line-default-color) 50%,
    rgba(255, 255, 255, 0) 0%
  );

  @media (forced-colors: active) {
    border-inline-start: $stroke-width dashed
      var(--guide-line-color, CanvasText);
    background: none;
  }
}

@mixin guide-line-vertical-stop() {
  &::after {
    content: '';
    display: inline-block;
    width: 9px;
    height: $stroke-width;
    position: relative;
    top: theme('spacing.[2.5]');
    inset-inline-start: calc(-1 * (var(--nesting-indent) - $stroke-width));
    transform: translateX(calc(var(--w-direction-factor) * -50%));
    border-bottom: $stroke-width solid
      var(--guide-line-color, $guide-line-default-color);
  }
}

@mixin guide-line-horizontal() {
  min-height: $stroke-width;
  // 3px dash width, 3px space, $stroke-width dash height.
  background-size: 6px $stroke-width;
  background-repeat: repeat-x;
  background-image: linear-gradient(
    to right,
    var(--guide-line-color, $guide-line-default-color) 50%,
    rgba(255, 255, 255, 0) 0%
  );

  // Guide lines are always shown in forced-colors mode, as it’s
  // not possible to have transparent borders there.
  @media (forced-colors: active) {
    border-top: $stroke-width dashed var(--guide-line-color, CanvasText);
    background: none;
  }
}

// More visible guide line for nested panels in the currently-active DOM tree.
@mixin guide-line-nested() {
  &:is(:hover, :focus-within) {
    --guide-line-color: theme('colors.icon-primary');

    @media (forced-colors: active) {
      --guide-line-color: Highlight;
    }
  }

  // Avoid highlighting descendant panels.
  &:is(:hover, :focus-within) .w-panel:not(:hover, :focus-within),
  // For browsers supporting :has, avoid highlighting parent panels.
  &:has(.w-panel:is(:hover, :focus-within)) {
    --guide-line-color: #{$guide-line-default-color};

    @media (forced-colors: active) {
      --guide-line-color: CanvasText;
    }
  }
}
