.ab-field{display:flex;flex-direction:column;gap:6px}
.ab-field__label{font-size:var(--fs-body-sm);font-weight:var(--weight-medium);color:var(--text-primary)}
.ab-field__req{color:var(--error-600);margin-left:2px}
.ab-field__hint{font-size:var(--fs-caption);color:var(--text-tertiary)}
.ab-field__error{display:flex;align-items:center;gap:5px;font-size:var(--fs-caption);color:var(--error-600)}
.ab-input,.ab-textarea,.ab-select__control{width:100%;font-family:var(--font-sans);font-size:var(--fs-body-sm);color:var(--text-primary);background:var(--surface-card);border:1px solid var(--border-default);border-radius:var(--radius-control);transition:var(--transition-control);-webkit-appearance:none;appearance:none}
.ab-input{height:40px;padding:0 var(--space-3)}
.ab-input--lg{height:48px;font-size:var(--fs-body)}
.ab-input--sm{height:32px;font-size:var(--fs-caption)}
.ab-textarea{padding:var(--space-3);line-height:1.55;resize:vertical;min-height:96px}
.ab-input::placeholder,.ab-textarea::placeholder{color:var(--text-disabled)}
.ab-input:hover,.ab-textarea:hover{border-color:var(--border-strong)}
.ab-input:focus,.ab-textarea:focus,.ab-select__control:focus{outline:none;border-color:var(--border-focus);box-shadow:0 0 0 3px var(--blue-100)}
.ab-input[disabled],.ab-textarea[disabled],.ab-select__control[disabled]{background:var(--surface-sunken);color:var(--text-disabled);cursor:not-allowed}
.ab-field--error .ab-input,.ab-field--error .ab-textarea,.ab-field--error .ab-select__control{border-color:var(--error-600)}
.ab-field--error .ab-input:focus{box-shadow:0 0 0 3px var(--error-50)}
.ab-input-wrap{position:relative;display:flex;align-items:center}
.ab-input-wrap .ab-icon{position:absolute;left:var(--space-3);color:var(--text-tertiary);pointer-events:none}
.ab-input-wrap--icon .ab-input{padding-left:38px}
.ab-input-wrap--trail .ab-input{padding-right:44px}
.ab-input-wrap__trail{position:absolute;right:6px;display:flex}
.ab-select{position:relative;display:flex;align-items:center}
.ab-select__control{height:40px;padding:0 34px 0 var(--space-3);cursor:pointer}
.ab-select__chev{position:absolute;right:var(--space-3);color:var(--text-tertiary);pointer-events:none}

.ab-check{display:flex;gap:var(--space-3);align-items:flex-start;cursor:pointer;padding:2px 0}
.ab-check input{appearance:none;-webkit-appearance:none;margin:0;flex:none;width:18px;height:18px;border:1px solid var(--border-strong);border-radius:var(--radius-xs);background:var(--surface-card);cursor:pointer;transition:var(--transition-control);position:relative;top:2px}
.ab-check input[type="radio"]{border-radius:50%}
.ab-check input:hover{border-color:var(--blue-400)}
.ab-check input:checked{background:var(--interactive-primary);border-color:var(--interactive-primary)}
.ab-check input[type="checkbox"]:checked::after{content:"";position:absolute;left:5px;top:2px;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(42deg)}
.ab-check input[type="radio"]:checked::after{content:"";position:absolute;left:4px;top:4px;width:8px;height:8px;border-radius:50%;background:#fff}
.ab-check input[disabled]{background:var(--surface-sunken);border-color:var(--border-default);cursor:not-allowed}
.ab-check__text{display:flex;flex-direction:column;gap:2px}
.ab-check__label{font-size:var(--fs-body-sm);color:var(--text-primary)}
.ab-check__desc{font-size:var(--fs-caption);color:var(--text-tertiary)}

.ab-switch{display:flex;align-items:flex-start;gap:var(--space-3);cursor:pointer}
.ab-switch__track{flex:none;width:36px;height:20px;border-radius:var(--radius-pill);background:var(--graphite-300);position:relative;transition:background-color var(--duration-fast) var(--ease-standard)}
.ab-switch__knob{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:var(--shadow-small);transition:transform var(--duration-fast) var(--ease-standard)}
.ab-switch input{position:absolute;opacity:0;width:0;height:0}
.ab-switch--on .ab-switch__track{background:var(--interactive-primary)}
.ab-switch--on .ab-switch__knob{transform:translateX(16px)}
.ab-switch--disabled{cursor:not-allowed;opacity:.55}
.ab-radiogroup{display:flex;flex-direction:column;gap:var(--space-2)}
