input.html
<div class="field">
  <input class="input" type="text" value="text field">
</div>
<div class="field">
  <input disabled class="input" type="text" value="disabled text field">
</div>

<div class="field">
  <input class="input" type="text" placeholder="address@domain.com">
</div>
<div class="field">
  <input class="input" type="date">
</div>
<div class="field">
  <input class="input" type="password" placeholder="password field">
</div>
<div class="field">
  <input class="input" type="number" placeholder="number field">
</div>
<div class="field">
  <input class="input" type="file">
</div>

<div class="field">
  <textarea class="input" cols="30" rows="10"></textarea>
</div>

<div class="field">
  <input class="input error" type="text" value="invalid value">
</div>

<div class="field">
  <div class="input">Fake input</div>
</div>

<div class="field">
  <div class="input -disabled">Fake disabled input</div>
</div>
index.scss
.input {
  background-color: var(--accent-gray-50);
  border-radius: var(--root-border-radius);
  border: 2px solid var(--accent-color);
  color: var(--color-gray-800);
  display: inline-block;
  padding: .5em 1em;
  width: 100%;

  @layer TemporaryLayerToRefactorAwayLater {
    --accent-color: var(--color-gray-500);
  }

  &:focus {
    --accent-color: inherit;
    outline: none;
  }

  &::placeholder {
    color: var(--color-gray-400);
  }

  &[aria-disabled="true"],
  &[disabled],
  &.-disabled {
    color: var(--root-color-inactive);
    cursor: initial;
    pointer-events: none;
    user-select: none;
  }

  &:is(textarea) {
    display: block;
    resize: vertical;
  }

  /* Normalize date input padding to match others. */
  &[type=date] {
    padding: calc(.5em - 1px) 1em;
  }


  /* Normalize file input padding to match others. */
  &[type=file] {
    padding: calc(.5em - 3px) 1em;
  }
}