/* ************************************* */
/*             CSS Reset                 */
/* ************************************* */
h1,
h2,
div,
p,
span,
ol,
ul,
li,
a,
button,
svg,
strong,
kbd,
code {
  all: unset;
  box-sizing: border-box !important;
}

div {
  display: block;
}

*::before,
*::after {
  all: unset;
}

/* ************************************* */
/*      Base styling of Tippy.js         */
/* ************************************* */

.tippy-box[data-animation="fade"][data-state="hidden"] {
  opacity: 0;
}

[data-tippy-root] {
  max-width: calc(100vw - 10px);
}

/* High contrast mode. */
@media (forced-colors: active) {
  [data-tippy-root] {
    border: 2px solid transparent;
    border-radius: 5px;
  }
}

.tippy-arrow {
  width: 16px;
  height: 16px;
  color: #333;

  &::before {
    position: absolute;
    content: "";
    border-color: transparent;
    border-style: solid;
  }
}

.tippy-box[data-placement^="top"] .tippy-arrow {
  bottom: 0;
}

.tippy-box[data-placement^="top"] .tippy-arrow::before {
  bottom: -7px;
  left: 0;
  border-width: 8px 8px 0;
  border-top-color: initial;
  transform-origin: center top;
}

.tippy-box[data-placement^="bottom"] .tippy-arrow {
  top: 0;
}

.tippy-box[data-placement^="bottom"] .tippy-arrow::before {
  top: -7px;
  left: 0;
  border-width: 0 8px 8px;
  border-bottom-color: initial;
  transform-origin: center bottom;
}

.tippy-box[data-placement^="left"] .tippy-arrow {
  right: 0;
}

.tippy-box[data-placement^="left"] .tippy-arrow::before {
  right: -7px;
  border-width: 8px 0 8px 8px;
  border-left-color: initial;
  transform-origin: center left;
}

.tippy-box[data-placement^="right"] .tippy-arrow {
  left: 0;
}

.tippy-box[data-placement^="right"] .tippy-arrow::before {
  left: -7px;
  border-width: 8px 8px 8px 0;
  border-right-color: initial;
  transform-origin: center right;
}

.tippy-content {
  position: relative;
  z-index: 1;
  padding: 5px 9px;
}

/* ************************************* */
/*        Custom theme for Sa11y         */
/* ************************************* */
.tippy-box[data-theme~="sa11y-theme"][role="tooltip"] {
  box-sizing: border-box !important;

  &[data-animation="fade"][data-state="hidden"] {
    opacity: 0;
  }

  &[data-inertia][data-state="visible"] {
    transition-timing-function: cubic-bezier(0.54, 1.5, 0.38, 1.11);
  }
}

/* Minimum width for annotations. */
[role="dialog"] {
  min-width: 300px;
  text-align: start;
  word-wrap: break-word;
}

[role="tooltip"] {
  min-width: 185px;
  text-align: center;
}

/* More visible panel tooltips. */
.tippy-box[data-theme~="sa11y-panel"] {
  border: 1px solid var(--sa11y-panel-bg-splitter);
  box-shadow: var(--sa11y-box-shadow);
}

/* Annotation tooltip boxshadows. */
.tippy-box[data-theme~="sa11y-theme"]:not([data-theme~="sa11y-panel"]) {
  box-shadow:
    0 0 20px 4px rgb(154 161 177 / 15%),
    0 4px 80px -8px rgb(36 40 47 / 25%),
    0 4px 4px -2px rgb(91 94 105 / 15%) !important;
}

/* Tooltip content */
.tippy-box[data-theme~="sa11y-theme"] {
  position: relative;
  display: block;
  padding: 8px;
  font-family: var(--sa11y-font-face);
  font-size: var(--sa11y-normal-text);
  font-weight: normal;
  line-height: 22px;
  color: var(--sa11y-panel-primary);
  letter-spacing: normal;
  background-color: var(--sa11y-panel-bg);
  border-radius: 4px;
  outline: 0;
  transition-property: transform, visibility, opacity;
  -webkit-font-smoothing: auto;

  pre code {
    display: block;
    overflow: auto;
    white-space: pre-wrap;
  }

  code {
    font-family: monospace;
    font-size: calc(var(--sa11y-normal-text) - 1px);
    font-weight: 500;
  }

  pre,
  code,
  kbd {
    padding: 1.6px 4.8px;
    line-height: 22px;
    color: var(--sa11y-panel-primary);
    letter-spacing: normal;
    background-color: var(--sa11y-panel-badge);
    border-radius: 3.2px;
    -webkit-font-smoothing: auto;
  }

  .tippy-content {
    padding: 5px 9px;
  }

  sub,
  sup {
    font-size: var(--sa11y-small-text);
  }

  ul {
    position: relative;
    padding: 0;
    margin: 0;
    margin-block: 0 0;
  }

  li {
    display: list-item;
    padding-bottom: 5px;
    margin: 5px 10px 0 20px;
  }

  a {
    font-weight: 500;
    color: var(--sa11y-hyperlink);
    text-decoration: underline;
    cursor: pointer;

    &:hover,
    &:focus {
      text-decoration: none;
    }
  }

  strong {
    font-weight: 600;
  }

  hr {
    height: 1px;
    padding: 0;
    margin: 10px 0;
    background: var(--sa11y-panel-bg-splitter);
    border: none;
    opacity: 1;
  }

  button.close-btn {
    margin-inline-start: 10px;
    margin-bottom: 10px;
  }

  button#suggest-size,
  button#suggest {
    position: relative;
    padding: 0.2rem;
    cursor: pointer;
    transition:
      background-color 0.2s,
      color 0.2s;

    &::after {
      position: absolute;
      inset: -10px -5px -14px;
      content: "";
    }

    &:hover,
    &:focus-visible {
      color: #000 !important;
      background-color: #fff !important;
    }
  }

  /* Dismiss buttons */
  .dismiss-group {
    margin-top: 5px;

    button {
      display: inline-block;
      padding: 4px 8px;
      margin: 10px 5px 5px 0;
      margin-inline-end: 15px;
      color: var(--sa11y-panel-primary);
      cursor: pointer;
      background: var(--sa11y-panel-bg-secondary);
      border: 2px solid var(--sa11y-button-outline);
      border-radius: 5px;

      &:hover,
      &:focus {
        background: var(--sa11y-shortcut-hover);
      }
    }
  }

  /* For contrast badge */
  .good-icon {
    display: inline-block;
    width: 14px;
    height: 14px;
    margin-bottom: -2.5px;
    background: var(--sa11y-good-text);
    mask: var(--sa11y-good-svg) center no-repeat;
  }

  /* Link icon */
  .link-icon {
    display: inline-block;
    width: 16px;
    height: 16px;
    margin-bottom: -3.5px;
    background: var(--sa11y-panel-primary);
    mask: var(--sa11y-link-icon-svg) center no-repeat;
  }

  .error {
    .badge {
      color: var(--sa11y-error-text);
      background: var(--sa11y-error);
    }

    .colour {
      color: var(--sa11y-red-text);
    }

    .link-icon {
      background: var(--sa11y-error-text);
    }
  }

  .warning {
    .badge {
      color: var(--sa11y-panel-bg);
      background: var(--sa11y-yellow-text);
    }

    .colour {
      color: var(--sa11y-yellow-text);
    }

    .link-icon {
      background: var(--sa11y-panel-bg);
    }
  }

  /* ************************************* */
  /*                Arrows                 */
  /* ************************************* */
  &[data-placement^="top"] .tippy-arrow::before {
    border-top-color: var(--sa11y-panel-bg);
  }

  &[data-placement^="bottom"] .tippy-arrow::before {
    border-bottom-color: var(--sa11y-panel-bg);
  }

  &[data-placement^="left"] .tippy-arrow::before {
    border-left-color: var(--sa11y-panel-bg);
  }

  &[data-placement^="right"] .tippy-arrow::before {
    border-right-color: var(--sa11y-panel-bg);
  }

  @media (forced-colors: active) {
    &[data-placement^="top"] .tippy-arrow::before,
    &[data-placement^="bottom"] .tippy-arrow::before,
    &[data-placement^="left"] .tippy-arrow::before,
    &[data-placement^="right"] .tippy-arrow::before {
      forced-color-adjust: none;
    }

    .tippy-arrow {
      z-index: -1;
    }
  }
}

/* Tooltip focus styles */
/* A) Default styles */
.tippy-box[data-theme~="sa11y-theme"] {
  a:focus,
  input:focus,
  button:focus,
  button:active,
  [tabindex="-1"]:focus {
    outline: 0;
    box-shadow: 0 0 0 5px var(--sa11y-focus-color);
  }
}

/* B) Remove default focus styles for mouse users ONLY if :focus-visible is supported. */
.tippy-box[data-theme~="sa11y-theme"] {
  input:focus:not(:focus-visible),
  a:focus:not(:focus-visible),
  button:focus:not(:focus-visible),
  [tabindex="-1"]:focus:not(:focus-visible) {
    outline: 0;
    box-shadow: none;
  }
}

/* C) :focus-visible supported */
.tippy-box[data-theme~="sa11y-theme"] {
  a:focus-visible,
  button:focus-visible,
  input:focus-visible,
  [tabindex="-1"]:focus-visible {
    outline: 0;
    box-shadow: 0 0 0 5px var(--sa11y-focus-color);
  }
}

/* High contrast focus styles */
@media screen and (forced-colors: active) {
  .tippy-box[data-theme~="sa11y-theme"] {
    .error-icon,
    .link-icon,
    .hidden-icon {
      filter: invert(1);
    }

    a:focus,
    button:focus,
    [tabindex="-1"]:focus {
      outline: transparent solid 3px !important;
    }
  }
}
