@mixin theme() {
  .dynamic-grid-drag-handle-container {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 24px;
    height: 24px;

    .drag-handle {
      opacity: 0;
      font-size: 1.5rem;
      cursor: grab;
      transition: 300ms;
      display: flex;
      align-items: center;
      justify-content: center;
      color: var(--dg-drag-handle-color);

      .drag-handle-content {
        display: contents;
      }

      &:active {
        cursor: grabbing;
      }
    }
  }
  .dynamic-grid {
  }

  .dynamic-grid-body .cdk-drag-placeholder {
    border: 2px solid var(--dg-drag-placeholder-accent);
  }

  :root .dynamic-grid-body .cdk-drag-placeholder:not(.dynamic-grid-row) {
    position: absolute;
    z-index: 999;
    top: 0;
    left: 0;

    width: 100%;
    height: 100%;

    background-color: var(--dg-drag-placeholder-bg);

    * {
      opacity: 0;
    }
  }

  .dynamic-grid-row {
    position: relative;
  }

  .drop-selector-up,
  .drop-selector-down {
    position: absolute;
    left: 0;

    display: none;

    width: 100%;
    height: 50%;
  }

  .drop-selector-up {
    top: -1px;
  }

  .drop-selector-down {
    bottom: -1px;
  }

  .dynamic-grid-row.drag-active {
    .drop-selector-up,
    .drop-selector-down {
      z-index: 1;
      display: block;
    }

    .drop-selector-up:hover {
      border-top: 2px solid var(--dg-drag-placeholder-accent);
    }

    .drop-selector-down:hover {
      border-bottom: 2px solid var(--dg-drag-placeholder-accent);
    }
  }

  .dynamic-grid-drag-placeholder {
    display: table-row;
    opacity: 0.3;
    cursor: grabbing;

    .dynamic-grid-drag-placeholder-row {
      background: var(--dg-drag-placeholder-bg);
    }
  }

  .dynamic-grid-drag-preview {
    padding: 12px;
    cursor: grabbing;
    background: var(--dg-drag-preview-bg);
  }
}
