/* One-line border-box sizes S/M/L. Long labels and zoom may grow; no clipping. */
.erp-theme .btn,
.erp-theme :is(.erp-workspace-tabs, .pw-tasks) :is(button, a),
.erp-theme :is(.erp-pagination-pages, .pagination-pages) > :is(a, span),
.erp-theme :is(.page-link, .btn-close, .erp-workspace-tab-scroll) {
  --erp-control-size: var(--erp-control-m);
  --erp-control-font: var(--erp-text-body);
  --erp-control-line: 1.25rem;
  --erp-control-pad-y: .3125rem;
  --erp-control-pad-x: .75rem;
  --erp-control-icon: var(--erp-icon-m);
  box-sizing: border-box;
  min-height: var(--erp-control-size);
  height: auto;
  padding: var(--erp-control-pad-y) var(--erp-control-pad-x);
  font-family: var(--erp-font-sans);
  font-size: var(--erp-control-font);
  line-height: var(--erp-control-line);
  border-radius: var(--erp-radius);
  vertical-align: middle;
}
/* Do not apply display:flex to [hidden], Bootstrap .d-none or dropdown-only controls. */
.erp-theme :where(.btn:not([hidden]):not(.d-none), .page-link:not([hidden]):not(.d-none)) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--erp-space-1);
}
.erp-theme :is(.btn-sm, .erp-control-sm),
.erp-theme .btn-group-sm > .btn,
.erp-theme :is(.erp-pagination-pages, .pagination-pages) > :is(a, span),
.erp-theme .pagination-sm .page-link,
.erp-theme :is(.erp-workspace-tabs, .pw-tasks) :is(button, a) {
  --erp-control-size: var(--erp-control-s);
  --erp-control-font: var(--erp-text-compact);
  --erp-control-line: var(--erp-control-s-line);
  --erp-control-pad-y: var(--erp-control-s-pad-y);
  --erp-control-pad-x: var(--erp-control-s-pad-x);
  --erp-control-icon: var(--erp-icon-s);
}
.erp-theme :is(.btn-lg, .erp-control-lg),
.erp-theme .btn-group-lg > .btn,
.erp-theme .pagination-lg .page-link,
.erp-theme .global-help-launch {
  --erp-control-size: var(--erp-control-l);
  --erp-control-font: var(--erp-text-large);
  --erp-control-line: var(--erp-control-l-line);
  --erp-control-pad-y: var(--erp-control-l-pad-y);
  --erp-control-pad-x: var(--erp-control-l-pad-x);
  --erp-control-icon: var(--erp-icon-l);
}
.erp-theme :is(.form-control, .form-select, .input-group-text) {
  box-sizing: border-box;
  min-height: var(--erp-control-size);
  padding: var(--erp-control-pad-y) var(--erp-control-pad-x);
  font: 400 var(--erp-control-font)/var(--erp-control-line) var(--erp-font-sans);
  color: var(--erp-color-text);
  background-color: var(--erp-color-surface);
  border-color: var(--erp-color-input-border);
  border-radius: var(--erp-radius);
}
.erp-theme :is(.form-control-sm, .form-select-sm),
.erp-theme .input-group-sm > :is(.form-control, .form-select, .input-group-text, .btn) {
  --erp-control-size: var(--erp-control-s);
  --erp-control-font: var(--erp-text-compact);
  --erp-control-line: var(--erp-control-s-line);
  --erp-control-pad-y: var(--erp-control-s-pad-y);
  --erp-control-pad-x: var(--erp-control-s-pad-x);
}
.erp-theme :is(.form-control-lg, .form-select-lg),
.erp-theme .input-group-lg > :is(.form-control, .form-select, .input-group-text, .btn) {
  --erp-control-size: var(--erp-control-l);
  --erp-control-font: var(--erp-text-large);
  --erp-control-line: var(--erp-control-l-line);
  --erp-control-pad-y: var(--erp-control-l-pad-y);
  --erp-control-pad-x: var(--erp-control-l-pad-x);
}
.erp-theme textarea.form-control { min-height: 3.25rem; }
.erp-theme textarea.form-control[rows="3"] { min-height: 4.5rem; }
.erp-theme select[multiple] { min-height: 4.5rem; }
.erp-theme .form-control::placeholder { color: var(--erp-color-muted); opacity: 1; }
.erp-theme :is(.form-control, .form-select):disabled { background-color: var(--erp-color-muted-surface); color: var(--erp-color-muted); }
.erp-theme .form-control[readonly] { background-color: var(--erp-color-muted-surface); border-style: dashed; }
.erp-theme :is(.form-control, .form-select):is(.is-invalid, [aria-invalid="true"]),
.erp-theme .was-validated :is(.form-control, .form-select):invalid { border-color: var(--erp-color-danger); }
.erp-theme :is(.invalid-feedback, .errorlist, .required) { color: var(--erp-color-danger-text); }
.erp-theme .form-label { color: var(--erp-color-text); font-weight: 500; }
.erp-theme input:is([type="checkbox"], [type="radio"]) { accent-color: var(--erp-color-primary); }
.erp-theme .form-check-input:checked,
.erp-theme .form-check-input:indeterminate { background-color: var(--erp-color-primary); border-color: var(--erp-color-primary); }
.erp-theme .form-check-input:not(:checked):not(:indeterminate) { background-color: var(--erp-color-surface); border-color: var(--erp-color-input-border); }
.erp-theme .btn-close,
.erp-theme .erp-workspace-tab-scroll { min-width: var(--erp-control-s); min-height: var(--erp-control-s); width: var(--erp-control-s); height: var(--erp-control-s); padding: 0; }
.erp-theme .btn-close { background-size: .875rem; }
.erp-theme .header-actions > button,
.erp-theme .system-task-menu > button,
.erp-theme .user-button { height: auto; min-height: var(--erp-control-m); }
.erp-theme .btn :is(.bi, svg) { flex-shrink: 0; font-size: var(--erp-control-icon, var(--erp-icon-m)); }
.erp-theme .btn svg, .erp-theme .btn .spinner-border { width: var(--erp-control-icon, var(--erp-icon-m)); height: var(--erp-control-icon, var(--erp-icon-m)); flex-shrink: 0; }
/* Preserve native summary marker, Bootstrap input-group corner and display contracts. */
.erp-theme .input-group > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.erp-theme .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.invalid-tooltip) { border-top-left-radius: 0; border-bottom-left-radius: 0; }

.erp-theme .form-select:not([multiple]) { padding-right: 2.25rem; }
.erp-theme .btn { font-weight:500; }
.erp-theme :is(.form-control, .form-select):focus { box-shadow:none; border-color:var(--erp-color-focus); }
.erp-theme .was-validated :is(.form-control, .form-select):valid,
.erp-theme :is(.form-control, .form-select).is-valid { border-color:var(--erp-color-success); }
.erp-theme .valid-feedback { color:var(--erp-color-success); }

/* Django's default widgets and handwritten controls may have no Bootstrap class.
   Keep native inline sizing/display and existing screen-specific rules. Hidden,
   file, color, range and choice inputs retain their separate native contracts.
   Shadow DOM pickers style their own controls; header and tab buttons are separate. */
.erp-theme :where(.erp-content :is(input, select, textarea, button):not([class]):not(
  [type="hidden"], [type="checkbox"], [type="radio"], [type="file"],
  [type="color"], [type="range"], [type="image"], [role="tab"]
)) {
  box-sizing: border-box;
  max-width: 100%;
  min-height: var(--erp-control-size);
  padding: var(--erp-control-pad-y) var(--erp-control-pad-x);
  font: 400 var(--erp-control-font)/var(--erp-control-line) var(--erp-font-sans);
  color: var(--erp-color-text);
  background-color: var(--erp-color-surface);
  border: 1px solid var(--erp-color-input-border);
  border-radius: var(--erp-radius);
  vertical-align: middle;
}
.erp-theme :where(.erp-content textarea:not([class])) { min-height: 3.25rem; }
.erp-theme :where(.erp-content textarea:not([class])[rows="3"], .erp-content select:not([class])[multiple]) { min-height: 4.5rem; }
.erp-theme :where(.erp-content :is(input, textarea):not([class]))::placeholder { color: var(--erp-color-muted); opacity: 1; }
.erp-theme :where(.erp-content :is(input, select, textarea):not([class]):not(
  [type="hidden"], [type="checkbox"], [type="radio"], [type="file"], [type="color"], [type="range"], [type="image"]
):focus) { border-color: var(--erp-color-focus); }
.erp-theme :where(.erp-content :is(input, textarea):not([class])[readonly]:not([type="hidden"])) {
  background-color: var(--erp-color-muted-surface);
  border-style: dashed;
}
.erp-theme :where(.erp-content :is(input, select, textarea, button):not([class]):not(
  [type="hidden"], [type="checkbox"], [type="radio"], [type="file"], [type="color"], [type="range"], [type="image"], [role="tab"]
):disabled) { background-color: var(--erp-color-muted-surface); color: var(--erp-color-muted); }
.erp-theme :where(.erp-content :is(input, select, textarea):not([class])[aria-invalid="true"]) { border-color: var(--erp-color-danger); }
.erp-theme :where(.erp-content :is(button, input[type="submit"], input[type="reset"], input[type="button"]):not([class]):not([role="tab"])) {
  font-weight: 500;
  cursor: pointer;
}
.erp-theme :where(.erp-content :is(button, input[type="submit"], input[type="reset"], input[type="button"]):not([class]):not([role="tab"]):enabled:hover) { background-color: var(--erp-color-hover); }
.erp-theme :where(.erp-content :is(button, input[type="submit"], input[type="reset"], input[type="button"]):not([class]):disabled) { cursor: default; }
.erp-theme :where(.erp-content input:not([class]):is([type="checkbox"], [type="radio"])) {
  width: var(--erp-checkbox-size);
  height: var(--erp-checkbox-size);
  vertical-align: middle;
}
