use {box-sizing: content-box} for input elements

Since you're using relative units for the width need to make sure any padding is not included in the width measurement. content-box is the default in some browsers but it is frequently normalized to border-box in CSS frameworks.