/* NOVA OS platform: forms plus (steps, progress, star ratings, signatures, addresses, uploads with progress, payment
   totals). Built from the site's own tokens, with fallbacks so any client site looks right. Motion is short and
   switched off for reduced motion. Linked on pages that have a form (cms/publisher.js). */
.cms-form .sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.ff-step{border:0;margin:0 0 28px;padding:0;min-width:0}
.ff-step-title{padding:0;margin:0 0 18px;font-size:var(--fs-h3,1.35rem);font-weight:700;line-height:1.25}
.ff-step-h:focus{outline:none}.ff-step-h:focus-visible{outline:3px solid var(--focus,#2b6cff);outline-offset:4px;border-radius:4px}
.ff-step-n{display:block;font-size:var(--fs-small,.875rem);font-weight:600;color:var(--text-muted,#5b6170);letter-spacing:.02em;margin-bottom:2px}
.ff-js .ff-step{margin-bottom:0}
.ff-js .ff-progress:not([hidden]) ~ .ff-step .ff-step-n{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.ff-progress{margin:0 0 22px}
.ff-progress-text{margin:0 0 8px;font-weight:600;font-size:var(--fs-small,.9375rem)}
.ff-bar{height:6px;border-radius:999px;background:var(--bg-subtle,#eceef1);overflow:hidden}
.ff-bar span{display:block;height:100%;width:0;border-radius:inherit;background:var(--accent,#1f4fd8);transition:width .45s cubic-bezier(.2,.8,.2,1)}
.ff-nav{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:28px}
.ff-foot .ff-nav{margin-top:0}
.ff-nav button[hidden],.cms-form button[type=submit][hidden]{display:none}
.ff-nav .ff-back:not(.btn){min-height:48px;padding:12px 22px;border-radius:999px;border:2px solid currentColor;background:transparent;color:inherit;font:inherit;font-weight:600;cursor:pointer}
.ff-nav .ff-next:not(.btn){min-height:48px;padding:12px 24px;border-radius:999px;border:0;background:var(--accent,#1f4fd8);color:var(--on-accent,#fff);font:inherit;font-weight:600;cursor:pointer}
.ff-in{animation:ffIn .32s cubic-bezier(.2,.8,.2,1)}
@keyframes ffIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.ff-welcome{background:var(--bg-subtle,#eef3ff)!important;border-color:var(--accent,#1f4fd8)!important;color:var(--text,#16181c)!important}
/* star rating: works without JavaScript (the chosen star and the ones before it fill in) */
.ff-stars{display:flex;gap:4px;flex-wrap:wrap}
.ff-star{position:relative;display:inline-grid;place-items:center;width:44px;height:44px;font-size:30px;line-height:1;color:#b8bcc6;cursor:pointer;border-radius:8px}
.ff-star input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer}
.ff-star:has(input:focus-visible){outline:3px solid var(--focus,#2b6cff);outline-offset:1px}
.ff-stars:has(input:checked) .ff-star:has(~ .ff-star input:checked),.ff-star:has(input:checked){color:#c78a00}
@media (hover:hover){.ff-stars:hover .ff-star{color:#c78a00}.ff-stars .ff-star:hover ~ .ff-star{color:#b8bcc6}}
/* signature */
.ff-sig-pad{position:relative;margin:6px 0 10px}
.ff-sig-canvas{display:block;width:100%;height:160px;touch-action:none;background:var(--bg,#fff);color:var(--text,#16181c);border:1px solid #8a90a0;border-radius:var(--radius-sm,8px);cursor:crosshair}
.ff-sig-clear,.ff-btn-quiet{min-height:44px;padding:8px 4px;background:none;border:0;color:inherit;font:inherit;font-size:var(--fs-small,.9375rem);font-weight:600;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.ff-sig-or,.ff-sublabel{display:block;font-size:var(--fs-small,.9375rem);font-weight:600;margin:4px 0 6px}
/* address */
.ff-address{border:0;padding:0;margin:0;min-width:0}
.ff-addr{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px 16px}
.ff-addr>div{grid-column:span 6;min-width:0}
.ff-addr .ff-addr-city{grid-column:span 3}.ff-addr .ff-addr-region{grid-column:span 2}.ff-addr .ff-addr-postal{grid-column:span 1;min-width:7.5em}
.ff-addr input{width:100%;min-height:48px;padding:12px 14px;font:inherit;font-size:16px;color:var(--text,#16181c);background:var(--bg,#fff);border:1px solid #8a90a0;border-radius:var(--radius-sm,8px)}
@media (max-width:640px){.ff-addr .ff-addr-city,.ff-addr .ff-addr-region,.ff-addr .ff-addr-postal{grid-column:span 6}}
/* money */
.ff-money{position:relative}
.ff-money span{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--text-muted,#5b6170);pointer-events:none}
.ff-money input{padding-left:28px!important}
.ff-amount{font-size:var(--fs-lead,1.25rem);font-weight:700;margin:4px 0 0}
.ff-total{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:6px 16px;padding:16px 18px;border-radius:var(--radius-sm,8px);background:var(--bg-subtle,#f4f5f7)}
.ff-total .ff-label{margin:0}.ff-total-amt{margin:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px}
.ff-total output{font-size:var(--fs-lead,1.25rem);font-weight:800}
/* uploads */
.ff-files{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:8px}
.ff-files:empty{display:none}
.ff-upl{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;align-items:center;padding:10px 12px;border:1px solid var(--line,#d9dce1);border-radius:var(--radius-sm,8px)}
.ff-upl-name{font-weight:600;overflow-wrap:anywhere}
.ff-upl-meta{grid-column:1;font-size:var(--fs-small,.875rem);color:var(--text-muted,#5b6170)}
.ff-upl.bad{border-color:var(--danger,#b42318)}.ff-upl.bad .ff-upl-meta{color:var(--danger,#b42318)}
.ff-upl progress{grid-column:1/-1;width:100%;height:6px;accent-color:var(--accent,#1f4fd8)}
.ff-upl-x{grid-column:2;grid-row:1/span 2;min-height:44px;min-width:44px;padding:6px 10px;background:none;border:1px solid var(--line,#d9dce1);border-radius:999px;color:inherit;font:inherit;font-size:var(--fs-small,.875rem);cursor:pointer}
.ff-drop.drag{border-color:var(--accent,#1f4fd8);background:var(--bg-subtle,#f4f5f7)}
/* save and finish later */
.ff-save{margin-top:14px}
.ff-save-panel{margin-top:8px;padding:16px;border-radius:var(--radius-sm,8px);background:var(--bg-subtle,#f4f5f7);display:grid;gap:12px}
.ff-save-panel p{margin:0}
.ff-save-panel input{width:100%;min-height:48px;padding:10px 12px;font:inherit;font-size:16px;border:1px solid #8a90a0;border-radius:var(--radius-sm,8px);background:var(--bg,#fff);color:var(--text,#16181c)}
/* payment page */
.ffp{max-width:520px;margin:28px auto 0;text-align:left}
.ffp-lines{width:100%;border-collapse:collapse;margin:0 0 20px}
.ffp-lines th,.ffp-lines td{padding:10px 0;border-bottom:1px solid var(--line,#d9dce1);text-align:left;font-weight:400}
.ffp-lines td{text-align:right;white-space:nowrap}
.ffp-lines tfoot th,.ffp-lines tfoot td{font-weight:800;border-bottom:0}
.ffp-element{min-height:56px;margin:0 0 16px}
.ffp-test{padding:10px 14px;border-radius:var(--radius-sm,8px);background:#fff4d6;color:#4a3700}
.ffp-error{color:var(--danger,#b42318);margin:0 0 12px}
.ffp-pay{width:100%}
.ffp-safe{font-size:var(--fs-small,.875rem);color:var(--text-muted,#5b6170);margin-top:14px}
@media (prefers-reduced-motion:reduce){.ff-in{animation:none}.ff-bar span{transition:none}}
/* Before the script starts: hide what it will hide anyway, so the page doesn't jump. Only when scripts can run; if the
   script never starts, everything shows again after 4 seconds (the form still works as one long page). */
@media (scripting:enabled){
  .ff-pre{visibility:hidden;height:0;margin:0!important;padding:0!important;overflow:hidden;animation:ffPreShow 0s 4s forwards}
  .ff-multi .ff-progress[hidden]{display:block;visibility:hidden}
}
@keyframes ffPreShow{to{visibility:visible;height:auto;overflow:visible}}

/* Address suggestions (runtime/address-suggest.js): a popup under the street box; absolute, so nothing moves. */
.ffs-holder{position:relative}
.ffs-pop{position:absolute;z-index:30;left:0;right:0;top:100%;margin-top:4px;background:#fff;color:#16181c;border:1px solid #8a90a0;border-radius:var(--radius-sm,8px);box-shadow:0 12px 32px rgba(10,14,25,.18);overflow:hidden;animation:ffs-in .14s ease-out}
.ffs-pop[hidden]{display:none}
.ffs-list{list-style:none;margin:0;padding:4px;max-height:min(320px,50vh);overflow:auto}
.ffs-opt{display:block;min-height:48px;padding:12px 14px;border-radius:6px;font-size:16px;line-height:1.35;cursor:pointer}
.ffs-opt[aria-selected="true"]{background:#e8edff;color:#10182e;outline:2px solid #3a4fe0;outline-offset:-2px}
.ffs-main{font-weight:600}.ffs-sec{color:#4a5060}
.ffs-opt[aria-selected="true"] .ffs-sec{color:#2d3550}
.ffs-credit{margin:0;padding:6px 14px 8px;font-size:12px;line-height:1.3;color:#4a5060;text-align:right;border-top:1px solid #dfe2ea}
.ffs-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
@keyframes ffs-in{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.ffs-pop{animation:none}}
