/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

:host {
  display: flex;
  width: 100%;
  --content-search-handoff-ui-background-color: Field;
  --content-search-handoff-ui-color: FieldText;
  --content-search-handoff-ui-fill: FieldText;
  --content-search-handoff-ui-caret-color: FieldText;
  --content-search-handoff-ui-border-width: 1px;
  --content-search-handoff-ui-unfocused-border-color: transparent;
  --content-search-handoff-ui-fakefocus-border-color: SelectedItem;
  --content-search-handoff-ui-fakefocus-box-shadow-inner: color-mix(in srgb, SelectedItem 25%, transparent);
  --content-search-handoff-ui-fakefocus-box-shadow-outer: color-mix(in srgb, SelectedItem 25%, transparent);
}

.fake-editable {
  height: 100%;
  opacity: 0;
  position: absolute;
  inset: 0;
}

.fake-editable:focus {
  outline: none;
  caret-color: transparent;
}

.fake-textbox {
  opacity: 0.54;
  text-align: start;
  -webkit-line-clamp: 1;
  overflow: hidden;
  margin-inline-start: var(--space-xsmall);

  /**
   * It's not clear to me why I need to do this, but for some reason I don't
   * inherit the font-size through the shadow DOM...
   */
  font-size: var(--font-size-root);
}

.search-handoff-button {
  position: relative;
  background: var(--content-search-handoff-ui-background-color) var(--newtab-search-icon) 16px center no-repeat;
  background-size: var(--size-item-medium);
  padding-inline-start: calc(2 * var(--space-xlarge));
  padding-inline-end: var(--space-small);
  padding-block: 0;
  width: 100%;
  box-shadow: var(--box-shadow-level-3);
  border: var(--content-search-handoff-ui-border-width) solid var(--content-search-handoff-ui-unfocused-border-color);
  border-radius: var(--border-radius-medium);
  color: var(--content-search-handoff-ui-color);
  -moz-context-properties: fill;
  fill: var(--content-search-handoff-ui-fill);

  &:dir(rtl) {
    background-position-x: right 16px;
  }
}

@keyframes caret-animation {
  to {
    visibility: hidden;
  }
}

.fake-caret {
  /* To replicate the default caret blink rate of 567ms (https://searchfox.org/mozilla-central/source/widget/cocoa/nsLookAndFeel.mm#397):
   - Multiply the blink time by 2 to cover both the visible and hidden states.
   - Use steps(2, start) to divide the animation into 2 phases:
     1. First 567ms (Step 1) → Caret is visible
     2. Next 567ms (Step 2) → Caret is hidden
  This gives a sharp ON/OFF effect instead of a smooth transition. */
  animation: caret-animation var(--caret-blink-time, 1134ms) steps(2, start) var(--caret-blink-count, infinite);
  background: var(--content-search-handoff-ui-caret-color);
  display: none;
  inset-inline-start: calc(2 * var(--space-xlarge));
  width: 1px;
  /**
   * We use the negative margin trick here to overlap the same area as the
   * fake-textbox.
   */
  height: 17px;
  margin-top: -17px;
}

:host([fakefocus]:not([disabled])) .search-handoff-button {
  border: var(--content-search-handoff-ui-border-width) solid var(--content-search-handoff-ui-fakefocus-border-color);
  box-shadow:
    0 0 0 2px var(--content-search-handoff-ui-fakefocus-box-shadow-inner),
    0 0 0 4px var(--content-search-handoff-ui-fakefocus-box-shadow-outer);

  .fake-caret {
    display: block;
  }
}

:host([disabled]) .search-handoff-button {
  opacity: 0.5;
}
