/* Shared focus contract. Only focus paint is overridden; control sizes stay intact.
 * Important declarations in this layer take precedence over legacy page outlines,
 * including dialogs and select popups mounted outside their original page. */
:root {
  --vseok-focus-border: var(--premium-blue-600, #0068df);
  --vseok-focus-glow: none;
  --vseok-focus-error-border: var(--premium-red-700, #a72e38);
  --vseok-focus-error-glow: none;
}

@layer vseok-focus {
  /* One existing border; borderless actions retain an underline for keyboard focus. */
  :focus-visible {
    outline: none !important;
    outline-offset: 0 !important;
    border-color: var(--vseok-focus-border) !important;
    box-shadow: none !important;
    text-decoration: underline;
    text-underline-offset: 3px;
  }
  .cn-close:focus-visible {
    background-color: #dbeafe !important;
    color: #1f57b7 !important;
  }

  /* Text fields highlight the existing border, without a second hard ring. */
  :is(input:not([type=checkbox],[type=radio],[type=range],[type=button],[type=submit],[type=reset],[type=image],[type=file],[type=color]),
      select, textarea, [contenteditable=true], .vseok-select-control):focus,
  .vseok-select-control[aria-expanded=true] {
    outline: none !important;
    outline-offset: 0 !important;
    border-color: var(--vseok-focus-border) !important;
    box-shadow: var(--vseok-focus-glow) !important;
    text-decoration: none;
  }

  /* Search input and icon share one frame. Never focus the inner input twice. */
  :is(.global-search, .decision-search, .chat-directory-search, .mail-search,
      .sourcing-queue-search, .counterparty-smart-search, .user-directory-search,
      .vseok-select-search, .wh-search, [data-focus-field]):focus-within {
    outline: none !important;
    outline-offset: 0 !important;
    border-color: var(--vseok-focus-border) !important;
    box-shadow: var(--vseok-focus-glow) !important;
  }

  :is(.global-search, .decision-search, .chat-directory-search, .mail-search,
      .sourcing-queue-search, .counterparty-smart-search, .user-directory-search,
      .vseok-select-search, .wh-search, [data-focus-field]) :is(input, textarea):focus {
    outline: none !important;
    border-color: transparent !important;
    box-shadow: none !important;
    background-color: transparent !important;
  }

  /* Borderless fields use a background cue without adding another frame. */
  :is(.decision-search, .chat-directory-search):focus-within,
  :is(.chat-compose-line textarea, [contenteditable=true]):focus {
    box-shadow: none !important;
    background-color: #eaf2ff !important;
  }

  /* Controls whose visible frame is a label, rather than the native input. */
  .item-type-fieldset input:focus-visible + label,
  .item-type-option:has(input:focus-visible),
  input[type=file]:focus-visible + .request-file-selection {
    outline: none !important;
    outline-offset: 0 !important;
    border-color: var(--vseok-focus-border) !important;
    box-shadow: none !important;
  }

  :is(input, select, textarea, .vseok-select-control)[aria-invalid=true],
  .field-invalid :is(input, select, textarea, .vseok-select-control),
  .counterparty-smart-search.has-validation-error {
    --vseok-focus-border: var(--vseok-focus-error-border);
    --vseok-focus-glow: var(--vseok-focus-error-glow);
  }

  :is(.sourcing-case-card, .sourcing-invoice-row):has(.sourcing-case-card-link:focus-visible) {
    outline: none !important;
    border-color: var(--vseok-focus-border) !important;
    box-shadow: var(--vseok-focus-glow) !important;
  }
  :is(.sourcing-case-card, .sourcing-invoice-row) .sourcing-case-card-link:focus-visible {
    box-shadow: none !important;
  }

  /* High-contrast mode uses the existing border and the keyboard underline. */
  @media (forced-colors: active) {
    :focus-visible,
    :is(input:not([type=checkbox],[type=radio],[type=range],[type=button],[type=submit],[type=reset],[type=image],[type=file],[type=color]),
        select, textarea, [contenteditable=true], .vseok-select-control):focus,
    :is(.global-search, .decision-search, .chat-directory-search, .mail-search,
        .sourcing-queue-search, .counterparty-smart-search, .user-directory-search,
        .vseok-select-search, .wh-search, [data-focus-field]):focus-within,
    :is(.sourcing-case-card, .sourcing-invoice-row):has(.sourcing-case-card-link:focus-visible) {
      outline: none !important;
      border-color: Highlight !important;
      box-shadow: none !important;
    }
    :is(.global-search, .decision-search, .chat-directory-search, .mail-search,
        .sourcing-queue-search, .counterparty-smart-search, .user-directory-search,
        .vseok-select-search, .wh-search, [data-focus-field]) :is(input, textarea):focus {
      outline: none !important;
    }
  }
}
