/* ═══════════════════════════════════════════════════════════════════
   HFG SHARED TOOL UI — desktop form extras + mobile bubble fields + share
   overlay. Ported from the Rent vs. Buy refactor; copy VERBATIM.

   Link order: pon7ryr kit → hfg-base.css → hfg-mobile.css → hfg-report.css
   → hfg-tool-ui.css → app.css.

   Contains:
   • Desktop: native-checkbox restore, chevron spinner column (.spinrow/.spin),
     %/$ mode segment (.dp-tg), LO required note / auto-license tag / error box.
   • Mobile (#mv): labeled bubble fields with chevron spinner (the original
     NumField pattern), %/$ mini segment, select-in-bubble, toggle, checkbox
     row, MI AUTO badge, slider tick alignment helpers, LO validation, and the
     share-preview overlay (.shov/.sheet/.actions).
   ═══════════════════════════════════════════════════════════════════ */

/* ── DESKTOP FORM EXTRAS ── */
.submit-wrap{text-align:center;margin-top:10px;}
.chk{display:flex;align-items:flex-start;gap:8px;margin-top:7px;font-size:12px;color:var(--gray);font-weight:600;cursor:pointer;text-transform:none;letter-spacing:0;line-height:1.4;}
/* Restore the native checkbox: hfg-base's .inp-f input rule sets
   -webkit-appearance:none (right for text fields, erases the check glyph
   here). accent-color paints the checked state brand teal. */
.chk input[type=checkbox]{appearance:auto;-webkit-appearance:checkbox;width:16px;height:16px;min-width:16px;padding:0;margin-top:1px;border:none;border-radius:0;background:none;box-shadow:none;accent-color:var(--hfg-teal-dark);cursor:pointer;}
.chk i{font-style:italic;}
.chk-wide{margin-top:16px;font-size:12.5px;color:var(--text);}
.opt-tag{color:var(--gray);letter-spacing:.8px;font-size:10px;margin-left:6px;}

/* chevron spinner column next to an input (e.g. interest rate 1/8% steps).
   Hide the native number spinner on such inputs per tool:
   #rate::-webkit-inner-spin-button{-webkit-appearance:none;} etc. */
.spinrow{display:flex;gap:6px;align-items:stretch;}
.spinrow .inp-wrap{flex:1;min-width:0;}
.spin{display:flex;flex-direction:column;gap:1px;flex:0 0 auto;}
.spin button{width:30px;flex:1;min-height:16px;border:1px solid var(--gray-light);background:var(--white);color:var(--hfg-blue);display:grid;place-items:center;cursor:pointer;padding:0;}
.spin button:first-child{border-radius:9px 9px 0 0;border-bottom:none;}
.spin button:last-child{border-radius:0 0 9px 9px;}
.spin button:active{background:var(--gray-light);}

/* %/$ mode segment inside a field label (down payment) */
.dp-tg{display:inline-flex;margin-left:8px;background:var(--gray-light);border-radius:8px;padding:2px;gap:1px;vertical-align:middle;}
.dp-tg button{border:none;background:transparent;color:var(--gray);font-size:10px;font-weight:800;padding:2px 9px;border-radius:6px;cursor:pointer;font-family:inherit;line-height:1.2;}
.dp-tg button.on{background:var(--white);color:var(--hfg-blue);box-shadow:0 1px 2px rgba(7,36,56,.18);}

/* Loan Officer section (why-now pattern): required note, auto-license tag,
   validation error box shown above Generate when LO fields are incomplete */
.lo-note{margin-bottom:16px;}
.auto-lic{color:var(--hfg-teal-dark);font-size:9px;font-weight:700;letter-spacing:.5px;}
.lo-error{background:var(--red-pale);color:var(--red);border:1px solid rgba(192,57,43,.3);border-radius:10px;padding:11px 16px;font-size:13px;font-weight:600;margin-bottom:16px;max-width:560px;margin-left:auto;margin-right:auto;}
#lo-error{display:none;}

/* ═══════════ MOBILE (#mv) — dark-shell tokens only ═══════════ */

/* labeled bubble fields with chevron spinner (original NumField pattern) */
#mv .fld{padding:12px 0 13px;border-top:1px solid var(--line);}
#mv .cbody .fld:first-child,#mv .cbody .row:first-child + .fld{border-top:0;}
#mv .cbody .fld:first-child{padding-top:4px;}
#mv .fld .fl{font-size:12.5px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:var(--mut);margin-bottom:7px;display:flex;align-items:center;justify-content:space-between;gap:10px;}
#mv .box{display:flex;align-items:center;gap:8px;background:var(--bg2);border:1px solid var(--line);border-radius:13px;padding:11px 13px;}
#mv .box.dim{opacity:.5;}
#mv .box .pre{font-size:17px;color:var(--mut);font-weight:700;flex:0 0 auto;}
#mv .box input{flex:1;min-width:0;background:transparent;border:none;outline:none;color:var(--ink);font-size:20px;font-weight:800;font-family:inherit;font-variant-numeric:tabular-nums;}
#mv .box input.txt{font-size:16px;font-weight:700;}
#mv .box input.txt::placeholder{color:var(--mut);font-weight:600;}
#mv .box .suf{font-size:15px;color:var(--mut);font-weight:700;flex:0 0 auto;}
#mv .spin{display:flex;flex-direction:column;gap:1px;flex:0 0 auto;}
#mv .spin button{width:30px;height:17px;border:1px solid var(--line);background:var(--panel);color:var(--ink2);display:grid;place-items:center;cursor:pointer;padding:0;}
#mv .spin button:first-child{border-radius:7px 7px 0 0;border-bottom:none;}
#mv .spin button:last-child{border-radius:0 0 7px 7px;}
#mv .spin button:active{background:var(--line);}

/* mini %/$ mode segment */
#mv .mseg{display:inline-flex;background:var(--bg2);border:1px solid var(--line);border-radius:16px;padding:2px;gap:1px;}
#mv .mseg button{border:none;background:transparent;color:var(--mut);font-size:11px;font-weight:800;padding:3px 11px;border-radius:12px;cursor:pointer;font-family:inherit;}
#mv .mseg button.on{background:var(--steel);color:#06243c;}

/* AUTO/MANUAL badge (e.g. mortgage insurance) */
#mv .auto{background:var(--bg2);color:var(--steel);font-size:10px;font-weight:800;letter-spacing:.5px;border-radius:20px;padding:3px 9px;cursor:pointer;border:1px solid var(--line);}
#mv .auto.off{color:var(--mut);}

/* toggle */
#mv .tg{width:50px;height:28px;border-radius:30px;background:var(--bg2);border:1px solid var(--line);position:relative;cursor:pointer;flex:0 0 auto;transition:background .15s;}
#mv .tg.on{background:var(--steel);border-color:var(--steel);}
#mv .tg .kn{position:absolute;top:2px;left:2px;width:22px;height:22px;border-radius:50%;background:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.25);transition:left .15s;}
#mv .tg.on .kn{left:24px;}

/* checkbox row */
#mv .chkrow{display:flex;gap:11px;align-items:flex-start;padding:12px 0;border-top:1px solid var(--line);cursor:pointer;}
#mv .chkrow .bx{width:22px;height:22px;border-radius:6px;border:2px solid var(--line);flex:0 0 auto;margin-top:1px;display:grid;place-items:center;background:var(--bg2);color:transparent;font-size:14px;font-weight:800;}
#mv .chkrow.on .bx{background:var(--steel);border-color:var(--steel);color:#06243c;}
#mv .chkrow .ct{font-size:14px;font-weight:700;color:var(--ink);line-height:1.4;}
#mv .chkrow .ct i{font-style:italic;color:var(--ink2);}

#mv .note{font-size:11.5px;color:var(--mut);line-height:1.5;margin:2px 2px 20px;}

/* slider card + tick labels aligned to the thumb's travel: the 11px /
   (100% − 22px) terms compensate for the 22px thumb. tk10/tk20 offsets are
   for a 1–30 range ((v−1)/29); recompute the factors for other ranges. */
#mv .rv-hz{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:15px 16px 12px;margin:14px 0;}
#mv .rv-hz .hh{display:flex;justify-content:space-between;align-items:baseline;}
#mv .rv-hz .hl{font-size:12px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--mut);}
#mv .rv-hz .hv{font-size:16px;font-weight:800;color:var(--ink);}
#mv .rv-hz input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:7px;border-radius:7px;margin:11px 0 6px;outline:none;cursor:pointer;background:var(--bg2);}
#mv .rv-hz input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;background:var(--steel);border:3px solid var(--ink);box-shadow:0 1px 4px rgba(0,0,0,.3);}
#mv .rv-hz .htk{position:relative;height:13px;margin-top:2px;font-size:11px;font-weight:700;color:var(--mut);}
#mv .rv-hz .htk span{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap;}
#mv .rv-hz .htk span:first-child{left:0;transform:none;}
#mv .rv-hz .htk .tk10{left:calc(11px + (100% - 22px) * 0.31034);}
#mv .rv-hz .htk .tk20{left:calc(11px + (100% - 22px) * 0.65517);}
#mv .rv-hz .htk span:last-child{left:100%;transform:translateX(-100%);}

/* LO section: select inside a bubble, required marker, validation error */
#mv .box select{flex:1;min-width:0;background:transparent;border:none;outline:none;color:var(--ink);font-size:16px;font-weight:700;font-family:inherit;-webkit-appearance:none;appearance:none;padding:0;}
#mv .box select:invalid,#mv .box select option[value=""]{color:var(--mut);}
#mv .box select option{background:var(--panel);color:var(--ink);}
#mv .fl .req{color:var(--red);letter-spacing:.5px;}
#mv .fl .auto-lic{color:var(--steel);font-size:10px;font-weight:800;letter-spacing:.5px;}
#mv .box.field-error{border-color:var(--red);}
#mv .lo-err{background:rgba(255,106,87,.14);border:1px solid rgba(255,106,87,.5);color:var(--red);font-size:12.5px;line-height:1.5;font-weight:700;border-radius:14px;padding:12px 14px;margin:0 0 12px;}

/* ── SHARE SHEET OVERLAY (ported from the tools-app ShareSheet) ── */
#mv .shov{position:fixed;inset:0;z-index:120;background:rgba(4,12,20,.74);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);display:flex;flex-direction:column;}
#mv .shov[hidden]{display:none;}
#mv .shov .shtop{padding:max(24px,calc(env(safe-area-inset-top) + 10px)) 16px 8px;display:flex;align-items:center;gap:6px;flex:0 0 auto;}
#mv .shov .shclose{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:var(--panel);color:var(--ink);font-size:22px;line-height:1;display:grid;place-items:center;cursor:pointer;flex:0 0 auto;}
#mv .shov .shttl{flex:1;text-align:center;color:var(--ink);font-size:15px;font-weight:800;padding-right:40px;}
#mv .shov .shscroll{flex:1;overflow:auto;padding:2px 16px 6px;}

#mv .sheet{background:var(--white);border-radius:20px;overflow:hidden;color:var(--rp-ink);box-shadow:0 24px 60px rgba(0,0,0,.45);max-width:560px;margin:0 auto;}
#mv .sheet .shead{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--gray-light);}
#mv .sheet .shead img{height:20px;width:auto;}
#mv .sheet .shead .prep{font-size:10px;color:var(--rp-mut);text-align:right;line-height:1.35;}
#mv .sheet .shead .prep b{color:var(--rp-ink);font-size:11px;}
#mv .sheet .sbody{padding:18px;}
#mv .sheet .kick{font-family:var(--mono);font-size:11px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--rp-lime);}
#mv .sheet .stitle{font-size:22px;font-weight:800;letter-spacing:-.5px;margin:4px 0 14px;}
#mv .sheet .shero{background:linear-gradient(150deg,var(--rp-grad1),var(--rp-grad2));color:var(--white);border-radius:14px;padding:18px;}
#mv .sheet .shero .hv{font-size:42px;font-weight:800;letter-spacing:-1.6px;line-height:1;font-variant-numeric:tabular-nums;}
#mv .sheet .shero .hl{font-size:12.5px;color:var(--rp-bestsub);margin-top:7px;line-height:1.4;}
#mv .sheet .srows{margin-top:6px;}
#mv .sheet .srow{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:11px 2px;border-bottom:1px solid var(--gray-light);font-size:13.5px;}
#mv .sheet .srow .l{color:var(--rp-ink2);}
#mv .sheet .srow .v{font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right;}
#mv .sheet .lo{display:flex;gap:12px;align-items:center;margin-top:16px;padding-top:15px;border-top:1px solid var(--gray-light);}
#mv .sheet .lo .av{width:44px;height:44px;border-radius:50%;background:var(--rp-grad2);color:var(--white);display:grid;place-items:center;font-weight:800;font-size:14px;flex:0 0 auto;}
#mv .sheet .lo .nm{font-weight:800;font-size:14.5px;}
#mv .sheet .lo .mt{font-size:11.5px;color:var(--rp-ink2);margin-top:1px;line-height:1.5;}
#mv .sheet .compliance{padding:13px 18px 16px;background:var(--paper);font-size:9.5px;line-height:1.45;color:var(--rp-comp);}

#mv .shov .actions{flex:0 0 auto;display:flex;gap:9px;padding:12px 16px max(26px,calc(env(safe-area-inset-bottom) + 12px));max-width:592px;margin:0 auto;width:100%;}
#mv .shov .actions button{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;background:var(--panel);border:1px solid var(--line);color:var(--ink);font-size:12px;font-weight:700;border-radius:14px;padding:12px 6px;cursor:pointer;font-family:inherit;}
#mv .shov .actions button.primary{background:var(--lime);border-color:var(--lime);color:#06243c;}
#mv .shov .actions button:active{transform:scale(.97);}
