/*
 * Horizon V15 — form/button balance system.
 * Final geometry authority for all Horizon surfaces. Loaded after V13.
 * Keeps small/default/large controls proportional and prevents icon/text drift.
 */
body.horizon {
  --hz-control-xs: 30px;
  --hz-control-sm: 34px;
  --hz-control-md: 42px;
  --hz-control-lg: 50px;
  --hz-control-radius-sm: 8px;
  --hz-control-radius-md: 9px;
  --hz-control-radius-lg: 11px;
  --hz-control-font-sm: 12.5px;
  --hz-control-font-md: 13.5px;
  --hz-control-font-lg: 14.5px;
}

body.horizon *,
body.horizon *::before,
body.horizon *::after { box-sizing: border-box; }

/* Field rhythm */
body.horizon :is(.form-group,.form-field,.admin-form-group,.hz-auth-field,.profile-form-field-v3,.tcb-field,.captcha-field,.filter-item) {
  min-width: 0 !important;
  max-width: 100% !important;
}
body.horizon form :is(.form-group,.form-field,.admin-form-group,.hz-auth-field,.profile-form-field-v3,.tcb-field,.captcha-field) > label,
body.horizon .filter-item > label,
body.horizon label.form-label {
  display: flex !important;
  align-items: center !important;
  min-height: 20px !important;
  margin: 0 0 7px !important;
  font-size: 12.5px !important;
  font-weight: 650 !important;
  line-height: 20px !important;
}
body.horizon :is(.form-text,.help-block,small.form-text,.form-group > small,.form-field > small,.admin-form-group > small) {
  margin-top: 6px !important;
  font-size: 11.5px !important;
  line-height: 17px !important;
}

/* Default control = 42px. Padding + line-height exactly fit the box. */
body.horizon :is(
  input.form-control:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]):not([type=color]),
  select.form-control,select.form-select,.custom-select,
  .dataTable-input,.dataTable-selector,.date-input,.readonly-input,.profile-control-v3,.captcha-control
) {
  width: 100% !important;
  min-width: 0 !important;
  height: var(--hz-control-md) !important;
  min-height: var(--hz-control-md) !important;
  padding: 9px 12px !important;
  border-width: 1px !important;
  border-style: solid !important;
  border-color: var(--hz-input,var(--hz-border)) !important;
  border-radius: var(--hz-control-radius-md) !important;
  font-family: inherit !important;
  font-size: var(--hz-control-font-md) !important;
  font-weight: 450 !important;
  line-height: 22px !important;
  vertical-align: middle !important;
}
body.horizon textarea.form-control,
body.horizon textarea.form-select,
body.horizon textarea.captcha-control {
  width: 100% !important;
  min-width: 0 !important;
  height: auto !important;
  min-height: 104px !important;
  padding: 10px 12px !important;
  border-width: 1px !important;
  border-style: solid !important;
  border-color: var(--hz-input,var(--hz-border)) !important;
  border-radius: var(--hz-control-radius-md) !important;
  font-family: inherit !important;
  font-size: var(--hz-control-font-md) !important;
  line-height: 1.5 !important;
  resize: vertical !important;
}
body.horizon select:is(.form-control,.form-select,.custom-select,.dataTable-selector) {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  line-height: 40px !important;
}

/* Explicit compact controls. */
body.horizon :is(
  input.form-control-sm:not([type=checkbox]):not([type=radio]),
  select.form-control-sm,select.form-select-sm,.input-sm,.select-sm
) {
  height: var(--hz-control-sm) !important;
  min-height: var(--hz-control-sm) !important;
  padding: 6px 10px !important;
  border-radius: var(--hz-control-radius-sm) !important;
  font-size: var(--hz-control-font-sm) !important;
  line-height: 20px !important;
}
body.horizon select:is(.form-control-sm,.form-select-sm,.select-sm) {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  line-height: 32px !important;
}
body.horizon textarea.form-control-sm { min-height: 84px !important; padding: 8px 10px !important; font-size: var(--hz-control-font-sm) !important; }

/* Explicit large controls. */
body.horizon :is(
  input.form-control-lg:not([type=checkbox]):not([type=radio]),
  select.form-control-lg,select.form-select-lg,.input-lg,.select-lg
) {
  height: var(--hz-control-lg) !important;
  min-height: var(--hz-control-lg) !important;
  padding: 12px 15px !important;
  border-radius: var(--hz-control-radius-lg) !important;
  font-size: var(--hz-control-font-lg) !important;
  line-height: 24px !important;
}
body.horizon select:is(.form-control-lg,.form-select-lg,.select-lg) {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  line-height: 48px !important;
}
body.horizon textarea.form-control-lg { min-height: 132px !important; padding: 12px 15px !important; font-size: var(--hz-control-font-lg) !important; }

/* Checkbox/radio: box and label share the same baseline. */
body.horizon .form-check,
body.horizon .hz-auth-check {
  display: flex !important;
  align-items: center !important;
  gap: 9px !important;
  min-height: 22px !important;
  padding-left: 0 !important;
}
body.horizon :is(.form-check-input,input[type=checkbox],input[type=radio]) {
  position: static !important;
  flex: 0 0 18px !important;
  width: 18px !important;
  height: 18px !important;
  min-width: 18px !important;
  min-height: 18px !important;
  margin: 0 !important;
  vertical-align: middle !important;
}
body.horizon .form-check-label { margin: 0 !important; line-height: 20px !important; }

/* Generic buttons: same 42px visual height as default inputs. */
body.horizon :is(
  .btn,.btn-save,.save-btn,.submit-btn,.add-btn,.btn-gradient,.btn-login,.btn-reset,.login-do-btn,
  .hz-button,.hz-primary-button,.hz-auth-submit,.hz-auth-social,.profile-btn-v3,.tcb-btn,.captcha-btn,
  .filter-btn,.admin-overview__button,.renew-pay-button,.captcha-primary-action,.btn-outline-glass,.btn-back,.btn-cancel-edit,.btn-renew,.copy-btn,.btn-copy,
  .btn-success-full,.btn-danger-full,.btn-info-full,.btn-warning-full,.btn-secondary-full,.btn-edit-sm,.btn-delete-sm,.theme-preview button,.actions button.secondary
):not(.btn-icon):not(.hz-icon-button):not(.action-icon):not(.captcha-copy-action):not(.captcha-icon-btn):not(.tcb-icon-btn):not(.btn-tool):not(.btn-close) {
  position: static !important;
  inset: auto !important;
  transform: none !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  vertical-align: middle !important;
  min-width: 0 !important;
  min-height: var(--hz-control-md) !important;
  height: var(--hz-control-md) !important;
  padding: 0 15px !important;
  border-width: 1px !important;
  border-style: solid !important;
  border-radius: var(--hz-control-radius-md) !important;
  gap: 7px !important;
  font-family: inherit !important;
  font-size: 13px !important;
  font-weight: 650 !important;
  line-height: 1.2 !important;
  text-align: center !important;
  text-decoration: none !important;
  white-space: nowrap !important;
}

/* Compact buttons/actions = 34px. */
body.horizon :is(
  .btn-sm,.btn-gradient-sm,.hz-small-button,.btn-edit-sm,.btn-delete-sm,.admin-action-btn,.table-action-btn
):not(.btn-icon):not(.hz-icon-button):not(.action-icon) {
  min-height: var(--hz-control-sm) !important;
  height: var(--hz-control-sm) !important;
  padding: 0 10px !important;
  border-radius: var(--hz-control-radius-sm) !important;
  gap: 5px !important;
  font-size: 12px !important;
  line-height: 1.2 !important;
}

/* Large buttons = 50px. */
body.horizon :is(.btn-lg,.btn-large,.hz-button-lg) {
  min-height: var(--hz-control-lg) !important;
  height: var(--hz-control-lg) !important;
  padding: 0 20px !important;
  border-radius: var(--hz-control-radius-lg) !important;
  gap: 9px !important;
  font-size: 14px !important;
  line-height: 1.2 !important;
}
body.horizon .btn-block { width: 100% !important; }

/* Button icons never alter the line box or push text off-centre. */
body.horizon :is(
  .btn,.btn-save,.save-btn,.submit-btn,.add-btn,.btn-gradient,.btn-gradient-sm,.btn-login,.btn-reset,.login-do-btn,
  .hz-button,.hz-small-button,.hz-primary-button,.hz-auth-submit,.hz-auth-social,.profile-btn-v3,.tcb-btn,.captcha-btn,
  .filter-btn,.admin-overview__button,.renew-pay-button,.captcha-primary-action,.btn-outline-glass,.btn-back,.btn-cancel-edit,.btn-renew,.copy-btn,.btn-copy,.btn-edit-sm,.btn-delete-sm,.theme-preview button,.actions button.secondary
) > :is(i,svg) {
  position: static !important;
  inset: auto !important;
  transform: none !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex: 0 0 16px !important;
  width: 16px !important;
  height: 16px !important;
  min-width: 16px !important;
  margin: 0 !important;
  font-size: 15px !important;
  line-height: 16px !important;
  vertical-align: middle !important;
  color: currentColor !important;
}
body.horizon :is(.btn-sm,.btn-gradient-sm,.hz-small-button,.btn-edit-sm,.btn-delete-sm,.admin-action-btn,.table-action-btn) > :is(i,svg) {
  flex-basis: 14px !important;
  width: 14px !important;
  height: 14px !important;
  min-width: 14px !important;
  font-size: 13px !important;
  line-height: 14px !important;
}
body.horizon :is(.btn-lg,.btn-large,.hz-button-lg) > :is(i,svg) {
  flex-basis: 18px !important;
  width: 18px !important;
  height: 18px !important;
  min-width: 18px !important;
  font-size: 17px !important;
  line-height: 18px !important;
}

/* Icon-only buttons: default and compact variants remain perfect squares. */
body.horizon :is(.captcha-icon-btn) {
  position: static !important;
  inset: auto !important;
  transform: none !important;
  display: inline-grid !important;
  place-items: center !important;
  flex: 0 0 var(--hz-control-md) !important;
  width: var(--hz-control-md) !important;
  min-width: var(--hz-control-md) !important;
  height: var(--hz-control-md) !important;
  min-height: var(--hz-control-md) !important;
  padding: 0 !important;
  border-radius: var(--hz-control-radius-md) !important;
  line-height: 1 !important;
}
body.horizon :is(.btn-icon,.hz-icon-button,.action-icon,.captcha-copy-btn.captcha-copy-action,.tcb-icon-btn,.btn-sm.btn-icon,.btn-sm.hz-icon-button) {
  display: inline-grid !important;
  place-items: center !important;
  flex: 0 0 var(--hz-control-sm) !important;
  width: var(--hz-control-sm) !important;
  min-width: var(--hz-control-sm) !important;
  height: var(--hz-control-sm) !important;
  min-height: var(--hz-control-sm) !important;
  padding: 0 !important;
  border-radius: var(--hz-control-radius-sm) !important;
  line-height: 1 !important;
}
body.horizon :is(.btn-icon,.hz-icon-button,.captcha-copy-action,.captcha-icon-btn,.tcb-icon-btn,.action-icon) > :is(i,svg) {
  position: static !important;
  inset: auto !important;
  transform: none !important;
  display: block !important;
  width: 16px !important;
  height: 16px !important;
  margin: 0 !important;
  font-size: 15px !important;
  line-height: 16px !important;
  color: currentColor !important;
}

/* Composite controls: one outer border, all inner cells exactly 40px high. */
body.horizon .input-group {
  display: flex !important;
  flex-flow: row nowrap !important;
  align-items: stretch !important;
  width: 100% !important;
  min-width: 0 !important;
  height: var(--hz-control-md) !important;
  min-height: var(--hz-control-md) !important;
  gap: 0 !important;
  overflow: hidden !important;
  border: 1px solid var(--hz-input,var(--hz-border)) !important;
  border-radius: var(--hz-control-radius-md) !important;
  background: var(--hz-surface) !important;
  box-shadow: 0 1px 2px var(--hz-shadow) !important;
}
body.horizon .input-group > :is(input,.form-control,.form-select,select,.custom-file) {
  flex: 1 1 0 !important;
  width: auto !important;
  min-width: 0 !important;
  height: 40px !important;
  min-height: 40px !important;
  margin: 0 !important;
  padding: 9px 12px !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}
body.horizon .input-group > :is(.input-group-prepend,.input-group-append) {
  display: flex !important;
  align-items: stretch !important;
  flex: 0 0 auto !important;
  margin: 0 !important;
}
body.horizon .input-group :is(button,.btn,.input-group-text) {
  position: static !important;
  inset: auto !important;
  transform: none !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex: 0 0 auto !important;
  min-width: 40px !important;
  width: auto !important;
  height: 40px !important;
  min-height: 40px !important;
  margin: 0 !important;
  padding: 0 11px !important;
  border-top: 0 !important;
  border-right: 0 !important;
  border-bottom: 0 !important;
  border-left: 1px solid var(--hz-input,var(--hz-border)) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  line-height: 1 !important;
}
body.horizon .input-group :is(button,.btn,.input-group-text) > :is(i,svg) {
  width: 16px !important;
  height: 16px !important;
  min-width: 16px !important;
  margin: 0 !important;
  line-height: 16px !important;
}
body.horizon .input-group-sm { height: var(--hz-control-sm) !important; min-height: var(--hz-control-sm) !important; border-radius: var(--hz-control-radius-sm) !important; }
body.horizon .input-group-sm > :is(input,.form-control,.form-select,select,.custom-file),
body.horizon .input-group-sm :is(button,.btn,.input-group-text) { height: 32px !important; min-height: 32px !important; }
body.horizon .input-group-sm :is(button,.btn,.input-group-text) { min-width: 32px !important; padding-inline: 8px !important; }
body.horizon .input-group-lg { height: var(--hz-control-lg) !important; min-height: var(--hz-control-lg) !important; border-radius: var(--hz-control-radius-lg) !important; }
body.horizon .input-group-lg > :is(input,.form-control,.form-select,select,.custom-file),
body.horizon .input-group-lg :is(button,.btn,.input-group-text) { height: 48px !important; min-height: 48px !important; }
body.horizon .input-group-lg :is(button,.btn,.input-group-text) { min-width: 48px !important; padding-inline: 13px !important; }

/* Auth/profile composite fields use exactly the same geometry. */
body.horizon :is(.hz-auth-control,.profile-input-v3,.admin-input-suffix) {
  min-height: var(--hz-control-md) !important;
  height: var(--hz-control-md) !important;
  border-radius: var(--hz-control-radius-md) !important;
  overflow: hidden !important;
}
body.horizon .hz-auth-control,
body.horizon .hz-auth-control.has-action { grid-template-columns: 40px minmax(0,1fr) 40px !important; }
body.horizon .hz-auth-control:not(.has-action) { grid-template-columns: 40px minmax(0,1fr) !important; }
body.horizon :is(.hz-auth-control,.profile-input-v3) > i:first-child,
body.horizon :is(.hz-auth-control-action,.profile-password-toggle-v3),
body.horizon .admin-input-suffix > span {
  height: 40px !important;
  min-height: 40px !important;
  align-self: stretch !important;
}
body.horizon form .hz-auth-control > input,
body.horizon .hz-auth-control > input.form-control,
body.horizon .profile-input-v3 > input.form-control,
body.horizon .admin-input-suffix > :is(input,.form-control) {
  height: 40px !important;
  min-height: 40px !important;
  margin: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}

/* Select2 / Choices / DataTables controls match the same baseline. */
body.horizon .select2-container--default .select2-selection--single {
  height: var(--hz-control-md) !important;
  min-height: var(--hz-control-md) !important;
  border-radius: var(--hz-control-radius-md) !important;
}
body.horizon .select2-container--default .select2-selection--single .select2-selection__rendered {
  height: 40px !important;
  padding: 0 36px 0 12px !important;
  line-height: 40px !important;
}
body.horizon .select2-container--default .select2-selection--single .select2-selection__arrow {
  top: 1px !important;
  right: 7px !important;
  width: 28px !important;
  height: 40px !important;
}
body.horizon .select2-container--default .select2-selection--multiple { min-height: var(--hz-control-md) !important; border-radius: var(--hz-control-radius-md) !important; padding: 3px 6px !important; }
body.horizon .dataTables_wrapper :is(input[type=search],select) { min-height: var(--hz-control-sm) !important; height: var(--hz-control-sm) !important; vertical-align: middle !important; }

/* Rows and action areas: controls sit on one baseline instead of floating by label/help height. */
body.horizon :is(.form-grid,.admin-form-grid,.filter-row,.tcb-form-grid,.captcha-form-grid,.admin-bank-row) {
  align-items: end !important;
}
body.horizon .form-actions,
body.horizon :is(.webhook-actions,.webhook-row-actions) {
  display: flex !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: 10px !important;
}
body.horizon .form-actions { justify-content: flex-end !important; }
body.horizon :is(.btn-group,.btn-toolbar) { align-items: stretch !important; }
body.horizon .btn-group > .btn { border-radius: 0 !important; margin-left: -1px !important; }
body.horizon .btn-group > .btn:first-child { margin-left: 0 !important; border-radius: var(--hz-control-radius-md) 0 0 var(--hz-control-radius-md) !important; }
body.horizon .btn-group > .btn:last-child { border-radius: 0 var(--hz-control-radius-md) var(--hz-control-radius-md) 0 !important; }

/* File controls and color pickers stay intentional instead of inheriting text-input padding. */
body.horizon input.form-control[type=file] { min-height: var(--hz-control-md) !important; height: auto !important; padding: 7px 10px !important; line-height: 24px !important; }
body.horizon input[type=color] { min-height: var(--hz-control-md); vertical-align: middle; }

/* Captcha token input and its two actions are one 42px row. */
body.client-app.horizon .captcha-api-page .captcha-token-row {
  grid-template-columns: minmax(0,1fr) var(--hz-control-md) var(--hz-control-md) !important;
  align-items: stretch !important;
}
body.client-app.horizon .captcha-api-page .captcha-token-row > :is(.captcha-control,.captcha-icon-btn) {
  height: var(--hz-control-md) !important;
  min-height: var(--hz-control-md) !important;
}

/* Legal notice settings textarea should be readable without becoming an oversized editor. */
body.horizon #legalNoticeContent { min-height: 92px !important; }

/* Narrow screens: actions may wrap text, but content remains vertically centred. */
@media (max-width: 575.98px) {
  body.horizon .form-actions { align-items: stretch !important; }
  body.horizon .form-actions > :is(button,.btn,a.btn,.btn-save) {
    width: 100% !important;
    max-width: 100% !important;
    height: auto !important;
    min-height: var(--hz-control-md) !important;
    padding-top: 9px !important;
    padding-bottom: 9px !important;
    white-space: normal !important;
  }
  body.horizon :is(.webhook-actions) > * { min-width: 0 !important; }
  body.horizon .input-group { overflow-x: auto !important; overflow-y: hidden !important; }
  body.horizon .input-group > :is(input,.form-control,.form-select,select) { min-width: 110px !important; }
}
