/*
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: 50%;
  border: 1px solid;
  border-color: var(--cpd-color-border-interactive-primary);

  /* To align the ::after pseudo-element to the center of the radio button */
  display: flex;
  align-items: center;
  justify-content: center;
}

.ui::after {
  content: "";
  inline-size: 6px;
  block-size: 6px;
  border-radius: 50%;
  background: transparent;
  box-sizing: border-box;

  /* Additional style to ensure visibility in contrast-mode */
  border: 1px solid transparent;
  color: transparent;
}

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

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

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

.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] {
  cursor: not-allowed;
}

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

.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::after {
  background-color: var(--cpd-color-icon-secondary);
  border-color: var(--cpd-color-icon-secondary);
  color: unset;
}

@media (hover) {
  .input:not([disabled], [readonly], :checked):hover + .ui {
    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::after {
    background: var(--cpd-color-icon-quaternary);
    border-color: var(--cpd-color-icon-quaternary);
    color: unset;
  }

  .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], [readonly], :checked) + .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);
}
