/* Generic form engine (src/lib/forms.js + public/js/forms.js). Themes tune it with --jf-* variables. */
.jf{--jf-accent:var(--brand,#075B7B);--jf-line:#b9c7cd;--jf-err:#a31b1b;--jf-ok:#0b6b3a;max-width:760px;margin:1.5rem auto}
.jf .hp{position:absolute;inset-inline-start:-9999px;width:1px;height:1px;overflow:hidden}
.jf-progress{display:flex;gap:.5rem;list-style:none;margin:0 0 1.6rem;padding:0;flex-wrap:wrap}
.jf-progress li{display:flex;align-items:center;gap:.45rem;color:#555;font-weight:600}
.jf-pnum{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;border:2px solid var(--jf-line);background:#fff}
.jf-progress li.current,.jf-progress li[aria-current=step]{color:var(--jf-accent)}
.jf-progress li.current .jf-pnum,.jf-progress li[aria-current=step] .jf-pnum{background:var(--jf-accent);border-color:var(--jf-accent);color:#fff}
.jf-progress li.done .jf-pnum{background:var(--jf-ok);border-color:var(--jf-ok);color:#fff}
.jf-progress li:not(:last-child)::after{content:"";width:28px;height:2px;background:var(--jf-line);margin-inline-start:.4rem}
.jf-step[hidden],.jf-cond[hidden]{display:none}
.jf-field{margin:0 0 1.1rem}
.jf-field label,.jf-field legend,.jf-sig-label{display:block;font-weight:600;margin-bottom:.3rem}
.jf-field fieldset{border:0;margin:0;padding:0;min-width:0}
.jf input[type=text],.jf input[type=email],.jf input[type=tel],.jf input[type=date],.jf select,.jf textarea{width:100%;padding:.7rem .8rem;border:1px solid var(--jf-line);border-radius:4px;font:inherit;background:#fff;color:#111}
.jf input[type=file]{width:100%;padding:.5rem;border:1px dashed var(--jf-line);border-radius:4px;background:#fafcfd}
.jf textarea{resize:vertical;min-height:110px}
.jf [aria-invalid=true]{border-color:var(--jf-err);background:#fff8f8}
.jf-opts{display:flex;flex-wrap:wrap;gap:.4rem 1.4rem}
.jf-opt{display:flex;align-items:flex-start;gap:.5rem;font-weight:400!important;cursor:pointer}
.jf-opt input{width:20px;height:20px;margin-top:.2rem;flex:none}
.jf-check{margin-bottom:.4rem}
.jf-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0 1.2rem}
.jf-html{margin:0 0 1rem}.jf-html p{margin:0 0 .5rem}
.field-err{color:var(--jf-err);font-weight:600;margin:.3rem 0 0;font-size:.95rem}
.help{font-size:.9rem;color:#555;margin:.3rem 0 0}.req{color:var(--jf-err)}
.jf-sig canvas{width:100%;max-width:600px;height:auto;aspect-ratio:3/1;border:1px solid var(--jf-line);border-radius:4px;background:#fff;touch-action:none;display:block}
.jf-sig .btn{margin-top:.5rem}
.jf-repeater{margin:0 0 1.2rem}.jf-row{border:1px solid var(--jf-line);border-radius:6px;padding:1rem;margin-bottom:.8rem;background:#fafcfd}
.jf-row-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.8rem;font-weight:700}
.jf-nav{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:1.4rem}
.jf-nav .btn,.jf .btn{cursor:pointer}
.jf .btn-ghost{background:transparent;color:var(--jf-accent);border-color:var(--jf-accent)}
.jf .btn-sm{padding:.4rem .9rem;font-size:.9rem}
.jf-status{margin-top:1rem;font-weight:700;outline:0}.jf-status.ok{color:var(--jf-ok);background:#e4f5ea;border:1px solid #9fd6b4;padding:1rem;border-radius:6px}.jf-status.err{color:#7d1212;background:#fdecec;border:1px solid #e5a3a3;padding:1rem;border-radius:6px}
.jf.busy{opacity:.65;pointer-events:none}
.alert.err{padding:1rem;border:1px solid #e5a3a3;background:#fdecec;color:#7d1212;border-radius:6px}
