/* Generated by theme-source/generate-theme.py. Do not edit. */
/* Shared web control treatment. Existing sizes, layouts and event handlers stay with consumers. */
:root {
  --digilayn-primary-soft: color-mix(in srgb, var(--digilayn-primary) 12%, var(--digilayn-surface));
  --digilayn-control-radius: 12px;
}

/* Compose these roles with an existing button/link layout, including dynamic Tailwind controls. */
:is(.digilayn-button, .app-download-btn, .spotlight-primary, .spotlight-secondary,
    .primary-button, .btn-primary, .btn-secondary, .btn-danger, .btn-warn, .btn-success) {
  border-radius: var(--digilayn-control-radius);
  font-weight: 700;
  text-decoration: none;
  transition: background-color .18s ease, border-color .18s ease, box-shadow .18s ease;
}

:is(a, button).digilayn-button {
  min-height: 44px;
  box-shadow: none;
}

:is(.digilayn-button-primary, .app-download-btn.primary, .spotlight-primary, .primary-button,
    .btn-primary, a.bg-digilayn-primary, button.bg-digilayn-primary) {
  background-color: var(--digilayn-primary);
  color: var(--digilayn-on-primary);
  border-color: transparent;
  box-shadow: none;
}

:is(.digilayn-button-secondary, .app-download-btn.secondary, .spotlight-secondary, .btn-secondary) {
  background-color: var(--digilayn-surface-container-high);
  color: var(--digilayn-on-surface);
  border: 1px solid var(--digilayn-outline-variant);
  box-shadow: none;
}

:is(.digilayn-button-primary, .app-download-btn.primary, .spotlight-primary, .primary-button, .btn-primary):hover:not(:disabled) {
  background-color: color-mix(in srgb, var(--digilayn-primary) 92%, var(--digilayn-on-primary));
  color: var(--digilayn-on-primary);
  box-shadow: none;
}

:is(.digilayn-button-secondary, .app-download-btn.secondary, .spotlight-secondary, .btn-secondary):hover:not(:disabled) {
  background-color: var(--digilayn-surface-container-highest);
  color: var(--digilayn-on-surface);
  border-color: var(--digilayn-outline);
  box-shadow: none;
}

/* Filled colour roles always carry their corresponding foreground, including generated markup. */
:is(a, button).bg-digilayn-success { color: var(--digilayn-on-success); }
:is(a, button).bg-digilayn-error { color: var(--digilayn-on-error); }
:is(a, button).bg-digilayn-warning { color: var(--digilayn-on-warning); }
:is(a, button).bg-digilayn-info { color: var(--digilayn-on-info); }
:is(a, button).bg-digilayn-tertiary { color: var(--digilayn-on-tertiary); }

/* Selected marketplace filters must outrank the neutral Tailwind backgrounds on the same control. */
html .category-pill.active {
  background-color: var(--digilayn-primary);
  color: var(--digilayn-on-primary);
  border-color: transparent;
}

:is(.digilayn-button, .app-download-btn, .spotlight-primary, .spotlight-secondary,
    .primary-button, .btn):focus-visible {
  outline: 3px solid var(--digilayn-primary);
  outline-offset: 3px;
}

/* Body-copy links keep their existing treatment; inputs get one consistent focus cue. */
:where(input:not([type="checkbox"]):not([type="radio"]), select, textarea):focus-visible {
  outline: 2px solid var(--digilayn-primary);
  outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
  :is(.digilayn-button, .app-download-btn, .spotlight-primary, .spotlight-secondary, .primary-button, .btn) {
    transition: none;
  }
}
