/* Shared form-feedback styles for the portal. Loaded beside portal.css on the
   auth pages; kept out of portal.css so its shared hash need not churn. */
.p-field-err{
  display:block; margin-top:6px;
  font:500 12px/1.45 var(--mono); color:var(--bad); letter-spacing:.01em;
}
.p-field.has-err input,
.p-field.has-err select{ border-color:rgba(255,138,128,.6); }
.p-consent.has-err{ outline:1px solid rgba(255,138,128,.5); outline-offset:6px; border-radius:3px; }
.p-consent.has-err .p-field-err{ margin-top:10px; }

.p-btn.is-loading{ position:relative; color:transparent !important; pointer-events:none; opacity:.9; }
.p-btn.is-loading::after{
  content:""; position:absolute; inset:0; margin:auto; width:16px; height:16px;
  border-radius:50%; border:2px solid rgba(11,17,21,.35); border-top-color:#0b1115;
  animation:p-spin .7s linear infinite;
}
@keyframes p-spin{ to{ transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce){
  .p-btn.is-loading{ color:inherit !important; }
  .p-btn.is-loading::after{ content:none; }
}
