/*
Copyright 2025 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
Copyright 2023 New Vector Ltd

SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/

.container {
  --size: 20px;

  display: grid;
  inline-size: var(--size);
  block-size: var(--size);
}

.input,
.ui {
  box-sizing: border-box;
  grid-area: 1/1;
  inline-size: var(--size);
  block-size: var(--size);
}

.input {
  opacity: 0;
  margin: 0;
  cursor: pointer;
}

.ui {
  pointer-events: none;
  border-radius: 4px; /* TODO: Ought to be a token */
  border: 1px solid;
  border-color: var(--cpd-color-border-interactive-primary);

  /** Default, rest state */
  color: transparent;
}

.ui svg {
  inline-size: var(--size);
  block-size: var(--size);

  /* compensate for the parent border */
  margin: -1px;
}

.input:checked + .ui {
  color: var(--cpd-color-icon-on-solid-primary);
  background-color: var(--cpd-color-bg-accent-rest);
  border-color: var(--cpd-color-bg-accent-rest);
}

.input:focus-visible + .ui {
  outline: 2px solid var(--cpd-color-border-focused);
  outline-offset: 1px;
}

.input[disabled] + .ui {
  border-color: var(--cpd-color-border-disabled);
  background: var(--cpd-color-bg-canvas-disabled);
}

.input[readonly] {
  pointer-events: none;
}

.input[readonly] + .ui {
  border-color: var(--cpd-color-border-interactive-secondary);
  background: var(--cpd-color-bg-subtle-secondary);
}

.input[disabled]:checked + .ui {
  border-color: var(--cpd-color-bg-action-primary-disabled);
  background: var(--cpd-color-bg-action-primary-disabled);
}

.input[readonly]:checked + .ui {
  color: var(--cpd-color-icon-secondary);
}

@media (hover) {
  .input:not([disabled], [readonly], :checked):hover + .ui {
    color: var(--cpd-color-icon-quaternary);
    border-color: var(--cpd-color-bg-accent-hovered);

    /** TODO: have the shadow in the design tokens */
    box-shadow: 0 1.2px 2.4px 0 rgb(0 0 0 / 15%);
  }

  .input:not([disabled], [readonly]):checked:hover + .ui {
    border-color: var(--cpd-color-bg-accent-hovered);
    background: var(--cpd-color-bg-accent-hovered);
  }

  .input[data-invalid]:not([disabled], [readonly]):checked:hover + .ui {
    border-color: var(--cpd-color-bg-critical-hovered);
    background: var(--cpd-color-bg-critical-hovered);
  }
}

.input[data-invalid]:not([disabled], :checked, [readonly]) + .ui {
  border-color: var(--cpd-color-border-critical-primary);
}

.input[data-invalid]:not([disabled], [readonly]):checked + .ui {
  background-color: var(--cpd-color-bg-critical-primary);
  border-color: var(--cpd-color-bg-critical-primary);
}
