.tx-field{display:flex;flex-direction:column;gap:var(--space-3);font-family:var(--font-sans)}
.tx-field__label{font-size:var(--size-sm);font-weight:var(--weight-semibold);color:var(--navy-700)}
.tx-field__req{color:var(--teal-700);margin-left:2px}
.tx-field__hint{font-size:var(--size-xs);color:var(--text-muted)}
.tx-field__error{font-size:var(--size-xs);color:var(--danger-700);display:flex;align-items:center;gap:var(--space-2)}

.tx-input,.tx-textarea,.tx-select__el{width:100%;font-family:var(--font-sans);font-size:var(--size-sm);color:var(--ink-900);background:var(--ink-0);border:var(--border-width) solid var(--border-default);border-radius:var(--radius-field);padding:0 var(--space-5);height:var(--field-height);transition:var(--transition-control)}
.tx-textarea{height:auto;padding:var(--space-4) var(--space-5);line-height:var(--leading-normal);resize:vertical;min-height:112px}
.tx-input::placeholder,.tx-textarea::placeholder{color:var(--ink-400)}
.tx-input:hover,.tx-textarea:hover,.tx-select__el:hover{border-color:var(--ink-400)}
.tx-input:focus,.tx-textarea:focus,.tx-select__el:focus{outline:none;border-color:var(--teal-600);box-shadow:var(--shadow-focus)}
.tx-input[disabled],.tx-textarea[disabled],.tx-select__el[disabled]{background:var(--ink-50);color:var(--ink-400);cursor:not-allowed}
.tx-input--invalid,.tx-textarea--invalid,.tx-select__el--invalid{border-color:var(--danger-600)}
.tx-input--invalid:focus{box-shadow:0 0 0 3px rgba(200,69,47,.28)}
.tx-input--sm{height:var(--field-height-sm);font-size:var(--size-xs)}
.tx-input-wrap{position:relative;display:flex;align-items:center}
.tx-input-wrap .tx-icon{position:absolute;color:var(--ink-400);pointer-events:none}
.tx-input-wrap--has-left .tx-icon:first-child{left:var(--space-4)}
.tx-input-wrap--has-left .tx-input{padding-left:42px}
.tx-input-wrap--has-right .tx-icon:last-child{right:var(--space-4)}
.tx-input-wrap--has-right .tx-input{padding-right:42px}

.tx-select{position:relative;display:block}
.tx-select__el{appearance:none;cursor:pointer;padding-right:40px}
.tx-select__chev{position:absolute;right:var(--space-4);top:50%;transform:translateY(-50%);color:var(--ink-500);pointer-events:none}

.tx-check{display:inline-flex;align-items:flex-start;gap:var(--space-4);cursor:pointer;font-size:var(--size-sm);color:var(--text-body);line-height:20px}
.tx-check input{position:absolute;opacity:0;width:0;height:0}
.tx-check__box{flex:none;width:20px;height:20px;border:var(--border-width-strong) solid var(--ink-300);border-radius:var(--radius-xs);background:var(--ink-0);display:grid;place-items:center;transition:var(--transition-control);margin-top:0}
.tx-check__box .tx-icon{opacity:0;color:var(--ink-0);transform:scale(.6);transition:opacity var(--dur-fast) var(--ease-standard),transform var(--dur-base) var(--ease-dot)}
.tx-check:hover .tx-check__box{border-color:var(--teal-600)}
.tx-check input:checked+.tx-check__box{background:var(--teal-600);border-color:var(--teal-600)}
.tx-check input:checked+.tx-check__box .tx-icon{opacity:1;transform:scale(1)}
.tx-check input:focus-visible+.tx-check__box{box-shadow:var(--shadow-focus)}
.tx-check--disabled{opacity:.45;cursor:not-allowed}

.tx-radio__box{border-radius:var(--radius-circle)}
.tx-radio__dot{width:8px;height:8px;border-radius:var(--radius-circle);background:var(--ink-0);opacity:0;transform:scale(.4);transition:opacity var(--dur-fast) var(--ease-standard),transform var(--dur-base) var(--ease-dot)}
.tx-check input:checked+.tx-radio__box .tx-radio__dot{opacity:1;transform:scale(1)}

.tx-switch{display:inline-flex;align-items:center;gap:var(--space-4);cursor:pointer;font-size:var(--size-sm)}
.tx-switch input{position:absolute;opacity:0;width:0;height:0}
.tx-switch__track{width:44px;height:24px;border-radius:var(--radius-pill);background:var(--ink-300);position:relative;transition:background-color var(--dur-base) var(--ease-standard);flex:none}
.tx-switch__thumb{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:var(--radius-circle);background:var(--ink-0);box-shadow:var(--shadow-xs);transition:transform var(--dur-base) var(--ease-dot)}
.tx-switch input:checked+.tx-switch__track{background:var(--teal-600)}
.tx-switch input:checked+.tx-switch__track .tx-switch__thumb{transform:translateX(20px)}
.tx-switch input:focus-visible+.tx-switch__track{box-shadow:var(--shadow-focus)}
.tx-switch--disabled{opacity:.45;cursor:not-allowed}
