.form{max-width:48rem;margin-inline:auto;display:grid;gap:var(--space-5)}
.form fieldset{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-5);background:var(--color-surface);margin:0;display:grid;gap:var(--space-4)}
.form legend{font-weight:600;font-size:1.05rem;padding:0 .5rem;color:var(--color-primary-dark)}

.form-grid{display:grid;gap:var(--space-4);grid-template-columns:1fr}
@media (min-width:640px){.form-grid--2{grid-template-columns:1fr 1fr}}
.input-group{display:flex;flex-direction:column;gap:.4rem}
.input-group label{font-weight:500;font-size:.95rem}
.input-group .req{color:var(--color-danger);margin-left:.15rem}
.input-group .hint{font-size:.85rem;color:var(--color-muted)}
.input-group input[type=text],
.input-group input[type=email],
.input-group input[type=tel],
.input-group input[type=number],
.input-group input[type=url],
.input-group select,
.input-group textarea{
  width:100%;padding:.7rem .85rem;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);font-size:1rem;min-height:48px;transition:border-color .15s,box-shadow .15s;font-family:inherit
}
.input-group textarea{min-height:7rem;resize:vertical}
.input-group input:focus,
.input-group select:focus,
.input-group textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-soft);outline:none}
.input-group input:invalid:not(:placeholder-shown),
.input-group select:invalid:not(:placeholder-shown),
.input-group textarea:invalid:not(:placeholder-shown){border-color:var(--color-danger)}
.input-group .err{font-size:.85rem;color:var(--color-danger);min-height:1.2em}

.choice-group{display:grid;gap:.5rem}
.choice-group label{display:flex;align-items:flex-start;gap:.6rem;padding:.6rem .8rem;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;font-size:.97rem;background:var(--color-surface);min-height:48px;line-height:1.4;transition:border-color .15s,background .15s}
.choice-group label:hover{border-color:var(--color-primary);background:var(--color-bg)}
.choice-group input{margin-top:.18rem;flex-shrink:0;width:1.1rem;height:1.1rem;accent-color:var(--color-primary)}
.choice-group input:checked + span,
.choice-group label:has(input:checked){border-color:var(--color-primary);background:var(--color-primary-soft)}
.choice-grid{display:grid;gap:.5rem;grid-template-columns:repeat(auto-fit,minmax(min(10rem,100%),1fr))}

.form-progress{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:var(--space-4);padding:0;list-style:none}
.form-progress li{flex:1;min-width:7rem;padding:.55rem .75rem;border-radius:var(--radius-sm);background:var(--color-surface);border:1px solid var(--color-border);font-size:.85rem;color:var(--color-muted);display:flex;align-items:center;gap:.5rem}
.form-progress li::before{content:counter(progressstep);counter-increment:progressstep;width:1.4rem;height:1.4rem;border-radius:50%;background:var(--color-border);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.78rem;flex-shrink:0}
.form-progress{counter-reset:progressstep}
.form-progress li[aria-current="step"]{background:var(--color-primary-soft);border-color:var(--color-primary);color:var(--color-primary-dark);font-weight:600}
.form-progress li[aria-current="step"]::before{background:var(--color-primary)}
.form-progress li[data-done="true"]::before{background:var(--color-primary)}

.form-step[hidden]{display:none}
.form-actions{display:flex;flex-wrap:wrap;gap:var(--space-3);justify-content:space-between;align-items:center;padding-top:var(--space-3);border-top:1px solid var(--color-border)}
.form-summary{display:grid;gap:.5rem;padding:var(--space-4);background:var(--color-surface-alt);border-radius:var(--radius-sm);font-size:.95rem}
.form-summary dt{font-weight:600;color:var(--color-primary-dark)}
.form-summary dd{margin:0 0 .5rem 0}

[role="alert"],[aria-live]{margin-top:var(--space-4)}

/* Honeypot trap: visually hidden, off-screen, not in tab order. Bots that
   auto-fill text inputs by name will fill it; humans never see it. */
.hp-trap{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
