/* Tradesman Pro — Forge palette: Charcoal + Electric Yellow + White */
*{box-sizing:border-box;margin:0;padding:0}
:root{
  --brand:#FFC107;
  --brand-dk:#E6A800;
  --brand-lt:#FFF8E1;
  --ink:#1E1E20;
  --ink2:#52524E;
  --ink3:#909088;
  --surface:#FFFFFF;
  --surface2:#F0EEE8;
  --surface3:#E4E0D8;
  --border:#DDDBD4;
  --border2:#C8C4BC;
  --chrome:#141416;
  --chrome2:#1E1E22;
  --chrome3:#2A2A2E;
  --green:#2A9E50;
  --green-lt:#EEFAF2;
  --red:#CC2828;
  --red-lt:#FFF0F0;
  --blue:#1A4A8A;
  --blue-lt:#EAF0FA;
  --r:10px;--rl:14px;--rxl:20px;
  --ff:"Montserrat","Helvetica Neue","Arial",system-ui,sans-serif;
  --fm:"Montserrat","Helvetica Neue",sans-serif
}
body{font-family:var(--ff);background:var(--surface2);color:var(--ink);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;overflow:hidden;height:100vh;height:100dvh}
.shell{display:flex;flex-direction:column;height:100vh;height:100dvh;width:100%;background:var(--surface2)}

/* TOPBAR */
.topbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px 11px;background:var(--chrome);flex-shrink:0;position:sticky;top:0;z-index:20}
.logo{display:flex;align-items:center;gap:9px;flex-shrink:0}
.logo-icon{width:26px;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;overflow:hidden;border:none;background:var(--brand)}
.logo-icon svg{width:13px;height:13px;stroke:var(--chrome);stroke-width:2.5;fill:none;stroke-linecap:round}
.logo-icon img{display:block;border:none;outline:none;width:18px;height:18px;object-fit:contain}
.logo-text{font-size:14px;font-weight:900;letter-spacing:-.5px;color:#FFF;text-transform:uppercase;white-space:nowrap}
.logo-text span{color:var(--brand)}
.offline-badge{display:none;font-size:10px;font-weight:700;background:rgba(245,200,0,.15);color:var(--brand);border:1px solid rgba(245,200,0,.3);padding:2px 7px;border-radius:20px;letter-spacing:.04em}
.offline-badge.show{display:inline-block}
.topbar-right{display:flex;align-items:center;gap:8px}
.lang-toggle{display:flex;background:var(--chrome3);border-radius:20px;padding:2px}
.lang-btn{padding:3px 12px;border-radius:16px;font-size:11px;font-weight:800;border:none;cursor:pointer;font-family:var(--ff);color:rgba(255,255,255,.4);background:none;transition:all .15s;letter-spacing:.04em;text-transform:uppercase}
.lang-btn.active{background:var(--brand);color:var(--chrome)}
.plan-pill{font-size:10px;font-weight:800;padding:3px 10px;border-radius:20px;cursor:pointer;letter-spacing:.04em;text-transform:uppercase}
.plan-pill.free{background:transparent;color:var(--brand);border:1.5px solid var(--brand)}
.plan-pill.pro{background:var(--brand);color:var(--chrome)}

/* LAYOUT */
.content{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:calc(84px + env(safe-area-inset-bottom));position:relative;z-index:1}
.screen{display:none}.screen.active{display:block;animation:fadeUp .15s ease;scroll-margin-top:0}
@keyframes fadeUp{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}

/* BOTTOM NAV */
.bottomnav{flex-shrink:0;background:var(--chrome);border-top:none;display:flex;align-items:stretch;z-index:200;padding-bottom:env(safe-area-inset-bottom);position:fixed;bottom:0;left:0;right:0;width:100%;min-height:56px}
.bn{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:10px 4px 12px;border:none;background:none;cursor:pointer;font-family:var(--ff);color:rgba(255,255,255,.3);font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;transition:color .15s}
.bn.active{color:var(--brand)}
.bn svg{width:24px;height:24px;stroke-width:1.7;stroke:currentColor;fill:none;stroke-linecap:round;stroke-linejoin:round}
.bn-fab{width:50px;height:50px;background:var(--brand);border-radius:50%;display:flex;align-items:center;justify-content:center;margin-top:-15px;border:3px solid var(--chrome)}
.bn-fab svg{width:22px;height:22px;stroke:var(--chrome);fill:none;stroke-linecap:round;stroke-width:2.5}

/* TYPOGRAPHY */
.ph{padding:20px 18px 6px}
.pt{font-size:24px;font-weight:900;letter-spacing:-.8px;line-height:1.2;color:var(--ink)}
.ps{font-size:15px;color:var(--ink3);margin-top:3px}
.section-header{display:flex;justify-content:space-between;align-items:center;padding:14px 18px 8px}
.section-title{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink3)}
.section-link{font-size:13px;color:var(--brand-dk);font-weight:700;cursor:pointer}

/* CARDS */
.card{background:var(--surface);border-radius:var(--rl);margin:10px 18px;overflow:hidden;border-bottom:3px solid var(--surface3)}
.ch{padding:12px 16px 0;font-size:12px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ink3)}
.cb{padding:12px 16px 16px}.cb.tight{padding:0}

/* FIELDS */
.f{margin-bottom:13px}.f:last-child{margin-bottom:0}
.f label{display:block;font-size:14px;font-weight:700;color:var(--ink2);margin-bottom:5px;letter-spacing:.02em}
.f input,.f select,.f textarea{width:100%;font-family:var(--ff);font-size:15px;padding:11px 13px;border:1.5px solid var(--border2);border-radius:var(--r);background:var(--surface);color:var(--ink);outline:none;transition:border-color .15s,box-shadow .15s;-webkit-appearance:none;appearance:none}
.f input:focus,.f select:focus,.f textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(245,200,0,.15)}
.f textarea{resize:vertical;min-height:68px}
.f select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7'%3E%3Cpath d='M1 1l4.5 5L10 1' stroke='%23909088' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}
.r2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
.rv{font-size:13px;font-weight:800;color:var(--brand-dk);font-family:var(--fm)}
.range-wrap input[type=range]{width:100%;accent-color:var(--brand);cursor:pointer;margin:6px 0 2px}
.rl-row{display:flex;justify-content:space-between;font-size:13px;color:var(--ink3)}

/* BUTTONS */
.btn{width:100%;padding:14px;border:none;border-radius:var(--r);font-family:var(--ff);font-size:16px;font-weight:800;cursor:pointer;transition:all .15s;display:flex;align-items:center;justify-content:center;gap:8px;letter-spacing:-.1px}
.btn-p{background:var(--brand);color:var(--chrome)}.btn-p:hover{background:var(--brand-dk)}.btn-p:active{transform:scale(.98)}
.btn-s{background:var(--surface2);color:var(--ink);border:1.5px solid var(--border2)}.btn-s:hover{background:var(--surface3)}
.btn-pro{background:var(--blue);color:white}
.btn-g{background:none;color:var(--brand-dk);border:1.5px solid rgba(200,160,0,.4);font-size:15px;padding:10px}.btn-g:hover{background:var(--brand-lt)}
.btn-d{background:var(--red-lt);color:var(--red);border:1px solid rgba(204,40,40,.2);font-size:15px;font-weight:700;border-radius:var(--r);cursor:pointer;font-family:var(--ff);padding:11px}
.btn-sm{padding:8px 14px;font-size:14px;font-weight:700;width:auto;border-radius:8px}

/* HOME HERO */
.hero{background:var(--chrome);padding:20px 18px 18px;color:white}
.hero-greet{font-size:12px;color:var(--brand);font-weight:700;letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px;transition:opacity 600ms ease}
.hero-title{font-size:26px;font-weight:900;letter-spacing:-1px;margin-bottom:18px;color:#FFF;line-height:1}
.hero-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.hstat{background:var(--chrome3);border-radius:8px;padding:12px 10px;min-width:0;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;cursor:pointer;transition:background .15s}.hstat:active{background:var(--chrome2)}
.hstat-l{font-size:10px;color:rgba(255,255,255,.75);font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin-bottom:5px;line-height:1.2;min-height:24px}
.hstat-v{font-size:22px;font-weight:900;color:var(--brand);letter-spacing:-.5px;font-family:var(--ff);margin-top:auto}
.qa-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:12px 18px 4px}
.qa{background:var(--surface);border-radius:var(--rl);padding:18px 16px;cursor:pointer;transition:all .15s;display:flex;flex-direction:column;gap:8px;border-bottom:3px solid var(--surface3)}
@keyframes tpPulse{0%,100%{box-shadow:0 0 0 0 rgba(245,200,0,.5)}60%{box-shadow:0 0 0 10px rgba(245,200,0,0)}}
.tp-pulse{animation:tpPulse 1.8s ease-in-out infinite}
@keyframes tpPulseWrap{0%,100%{box-shadow:0 0 0 0 rgba(245,200,0,.4)}60%{box-shadow:0 0 0 14px rgba(245,200,0,0)}}
.tp-pulse-wrap{animation:tpPulseWrap 1.8s ease-in-out infinite;border-radius:var(--rl)}
/* QA card accent hover — each card matches its icon color */
.qa-yellow:hover,.qa-yellow:active{border-bottom-color:var(--brand)}
.qa-blue:hover,  .qa-blue:active  {border-bottom-color:var(--blue)}
.qa-green:hover, .qa-green:active  {border-bottom-color:var(--green)}
.qa-red:hover,   .qa-red:active    {border-bottom-color:var(--red)}
.qa-sm{padding:10px 8px;gap:5px;border-radius:var(--r)}
.qa-sm .qa-lb{font-size:11px;font-weight:800;letter-spacing:-.1px}
.qa-sm .qa-ic{width:26px;height:26px;border-radius:6px}
.qa-sm .qa-ic svg{width:13px;height:13px}
.qa-ic{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center}
.qa-ic svg{width:16px;height:16px;stroke-width:2.2;fill:none;stroke-linecap:round}
.qa-lb{font-size:22px;font-weight:900;letter-spacing:-.5px;color:var(--ink);line-height:1.1}
.qa-sb{font-size:13px;color:var(--ink3)}

/* JOB ROWS */
.jr{display:flex;align-items:center;gap:11px;padding:13px 16px;border-top:1px solid var(--surface2);cursor:pointer;transition:background .1s;background:var(--surface)}
.jr:first-child{border-top:none}
.jr:hover,.jr:active{background:var(--surface2)}
.ja{width:34px;height:34px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;flex-shrink:0}
.ji{flex:1;min-width:0}
.jn{font-size:17px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.3px;color:var(--ink)}
.jm{font-size:14px;color:var(--ink3);margin-top:2px}
.jrr{text-align:right;flex-shrink:0}
.jamt{font-size:16px;font-weight:800;font-family:var(--fm);color:var(--ink);letter-spacing:-.5px}
.jpr{font-size:11px;color:var(--green);margin-top:1px;font-weight:700}
.bdg{display:inline-block;font-size:10px;font-weight:700;padding:2px 7px;border-radius:4px;letter-spacing:.04em;text-transform:uppercase}
.bdg.estimate{background:var(--brand-lt);color:#8A6800}
.bdg.scheduled{background:#FFF0E8;color:#C04A00}
.bdg.complete{background:var(--green-lt);color:var(--green)}
.bdg.inv{background:#F0ECF8;color:#5A2A8A;margin-left:3px}
.bdg-paid{display:inline-block;font-size:10px;font-weight:700;padding:2px 7px;border-radius:4px;letter-spacing:.04em;text-transform:uppercase;margin-left:3px}
.bdg-paid.paid{background:var(--green-lt);color:var(--green)}
.bdg-paid.unpaid{background:var(--red-lt);color:var(--red)}
.filter-row{display:flex;gap:6px;padding:10px 18px 0}
.filter-btn{padding:9px 6px;border-radius:6px;font-size:13px;font-weight:800;border:1.5px solid var(--border2);background:var(--surface);color:var(--ink2);cursor:pointer;font-family:var(--ff);text-align:center;transition:all .12s}
.filter-btn.active{background:var(--ink);color:var(--brand);border-color:var(--ink)}
.sort-pill{padding:7px 4px;border-radius:6px;font-size:11px;font-weight:700;border:1px solid var(--border2);background:var(--surface);color:var(--ink3);cursor:pointer;font-family:var(--ff);text-align:center;transition:all .12s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sort-pill.active{background:var(--surface2);color:var(--ink);border-color:var(--ink2);font-weight:800}
#sort-smart.active{background:var(--brand);color:var(--chrome);border-color:var(--brand)}

/* PRICE BOX */
.pbox{background:var(--surface2);border-radius:var(--r);padding:13px}
.prow{display:flex;justify-content:space-between;align-items:center;padding:3px 0;font-size:14px}
.prow .pl{color:var(--ink2)}.prow .pv{font-family:var(--fm);font-weight:700}
.prow.ptotal{border-top:2px solid var(--brand);margin-top:8px;padding-top:10px;font-size:16px;font-weight:800}
.prow.ptotal .pv{color:var(--ink)}
.prow.pprofit .pv{color:var(--green);font-size:13px;font-weight:700}
.zip-hint{font-size:12px;padding:6px 10px;border-radius:6px;margin-top:5px;display:none;font-weight:600}
.zip-hint.show{display:block}
.zip-hint.premium{background:var(--green-lt);color:var(--green)}
.zip-hint.standard{background:var(--surface3);color:var(--ink2)}
.zip-hint.budget{background:#FFF8EC;color:#7A5000}

/* STATS */
.stat-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:0 18px;margin:12px 0}
.stat{background:var(--surface);border-radius:var(--r);padding:13px 12px;border-bottom:3px solid var(--surface3)}
.stat-l{font-size:10px;color:var(--ink3);font-weight:700;text-transform:uppercase;letter-spacing:.07em;margin-bottom:4px}
.stat-v{font-size:20px;font-weight:900;font-family:var(--fm);letter-spacing:-.5px;color:var(--ink)}
.stat-v.g{color:var(--green)}
.stat-v.r{color:var(--red)}

/* EXPENSES */
.ei{display:flex;align-items:center;gap:10px;padding:12px 16px;border-top:1px solid var(--surface2);background:var(--surface)}
.ei:first-child{border-top:none}
.edot{width:8px;height:8px;border-radius:2px;flex-shrink:0}
.einfo{flex:1;min-width:0}
.edesc{font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink)}
.emeta{font-size:11px;color:var(--ink3)}
.eamt{font-size:14px;font-weight:800;font-family:var(--fm);color:var(--red)}
.etag{display:inline-block;font-size:9px;font-weight:700;padding:1px 5px;border-radius:3px;margin-left:4px;vertical-align:middle;letter-spacing:.04em;text-transform:uppercase}
.etag.scan{background:var(--blue-lt);color:var(--blue)}
.etag.cat{background:var(--green-lt);color:var(--green)}
.overhead-box{background:var(--chrome);border-radius:var(--r);padding:12px 16px;margin:10px 18px;display:flex;justify-content:space-between;align-items:center}
.overhead-total{font-size:20px;font-weight:900;font-family:var(--fm);color:var(--brand)}

/* SCAN */
.scan-drop{border:2px dashed var(--border2);border-radius:var(--rl);padding:26px 16px;text-align:center;cursor:pointer;transition:border-color .2s;position:relative;margin:0 18px 12px}
.scan-drop:hover{border-color:var(--brand)}
.scan-drop input{display:none}
.scan-ic{width:48px;height:48px;background:var(--brand-lt);border-radius:10px;display:flex;align-items:center;justify-content:center;margin:0 auto 10px;border:2px solid rgba(200,160,0,.2)}
.scan-ic svg{width:22px;height:22px;stroke:var(--brand-dk);stroke-width:2.2;fill:none;stroke-linecap:round}
.scan-t{font-size:15px;font-weight:800;margin-bottom:3px;color:var(--ink)}
.scan-s{font-size:12px;color:var(--ink2)}
.scan-preview{width:100%;max-height:130px;object-fit:contain;border-radius:var(--r);margin-bottom:10px}
.scan-result{background:var(--surface2);border-radius:var(--r);padding:13px}
.scan-line{display:flex;justify-content:space-between;font-size:13px;padding:4px 0;border-top:1px solid var(--border)}
.scan-line:first-child{border-top:none}
.scan-line:last-child{font-weight:800;font-size:14px;padding-top:10px;border-top:2px solid var(--brand)}
.spin-wrap{display:flex;align-items:center;gap:10px;padding:16px 18px;background:var(--surface2);border-radius:var(--r);margin:0 18px}
.spinner{width:18px;height:18px;border:2px solid var(--border2);border-top-color:var(--brand);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes pulseBorder{0%,100%{box-shadow:0 0 0 0 rgba(245,200,0,.5)}50%{box-shadow:0 0 0 6px rgba(245,200,0,0)}}
@keyframes pulseNewJob{0%,100%{box-shadow:0 0 0 0 rgba(245,200,0,.6),0 2px 8px rgba(0,0,0,.08)}60%{box-shadow:0 0 0 8px rgba(245,200,0,0),0 2px 8px rgba(0,0,0,.08)}}
.qa-pulse{animation:pulseNewJob 1.8s ease-in-out infinite;border:2px solid var(--brand) !important;}
.qa-pulse{animation:pulseBorder 1.8s ease-in-out 3;border-color:var(--brand)!important;}
.mileage-box{background:var(--chrome);border-radius:var(--r);padding:14px 16px;margin:0 0 12px}
.mile-val{font-size:22px;font-weight:900;font-family:var(--fm);color:var(--brand);margin-top:4px}
.mile-rate{font-size:11px;color:rgba(255,255,255,.4);font-weight:600}

/* SMS */
.sms-demo{background:var(--surface2);border-radius:var(--rl);padding:16px;margin-bottom:12px}
.sms-bubble{background:var(--surface);border:1.5px solid var(--border);border-radius:14px 14px 14px 4px;padding:12px 14px;font-size:14px;line-height:1.5;margin-bottom:10px;color:var(--ink)}
.sms-bubble.out{background:var(--ink);color:var(--brand);border-radius:14px 14px 4px 14px;border:none}
.sms-from{font-size:10px;font-weight:700;color:var(--ink3);text-transform:uppercase;letter-spacing:.07em;margin-bottom:6px}
.sms-ir{display:flex;gap:8px;align-items:center}
.sms-ir input{flex:1;font-family:var(--ff);font-size:14px;padding:11px 13px;border:1.5px solid var(--border2);border-radius:var(--r);background:var(--surface);color:var(--ink);outline:none}
.sms-ir input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(245,200,0,.15)}
.sms-send{width:42px;height:42px;flex-shrink:0;background:var(--brand);border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center}
.sms-send svg{width:15px;height:15px;stroke:var(--chrome);fill:var(--chrome);stroke-width:2;stroke-linecap:round}
.parsed-card{background:var(--green-lt);border:1.5px solid rgba(42,158,80,.25);border-radius:var(--r);padding:12px;margin-top:10px}
.parsed-title{font-size:11px;font-weight:700;color:var(--green);text-transform:uppercase;letter-spacing:.07em;margin-bottom:8px}
.parsed-row{display:flex;gap:8px;font-size:13px;padding:2px 0}
.parsed-label{color:var(--green);font-weight:700;min-width:80px;flex-shrink:0}
.lang-note{background:var(--brand-lt);border:1.5px solid rgba(200,160,0,.3);border-radius:var(--r);margin:0 18px 10px;padding:11px 14px;font-size:13px;color:var(--ink2);font-weight:600}
.exbtn{display:flex;align-items:center;gap:12px;padding:14px 16px;border-top:1px solid var(--surface2);cursor:pointer;transition:background .1s;background:var(--surface)}
.exbtn:first-child{border-top:none}.exbtn:hover,.exbtn:active{background:var(--surface2)}
.exic{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.exic svg{width:18px;height:18px;stroke-width:2.2;fill:none;stroke-linecap:round}
.exinfo{flex:1}.ext{font-size:14px;font-weight:700;color:var(--ink)}.exs{font-size:12px;color:var(--ink3);margin-top:1px}
.pw{background:var(--surface);border:1.5px solid var(--blue-lt);border-radius:var(--rl);padding:20px 18px;margin:0 18px 12px;text-align:center}
.pw-icon{font-size:28px;margin-bottom:8px}.pw-title{font-size:16px;font-weight:800;margin-bottom:5px;color:var(--ink)}
.pw-sub{font-size:13px;color:var(--ink2);margin-bottom:14px;line-height:1.6}
.feat-list{text-align:left;margin-bottom:14px;padding:0}
.feat-list li{font-size:13px;color:var(--ink2);padding:4px 0 4px 18px;list-style:none;position:relative;line-height:1.4}
.feat-list li::before{content:"✓";position:absolute;left:0;color:var(--green);font-weight:800}
.pro-tag{display:inline-flex;align-items:center;gap:3px;background:var(--brand-lt);color:#8A6800;font-size:10px;font-weight:800;padding:2px 7px;border-radius:4px;margin-left:5px;letter-spacing:.04em;text-transform:uppercase;vertical-align:middle}
.pro-only{display:none}
.modal-bg{display:none;position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:300;align-items:flex-end;justify-content:center;touch-action:none}
/* Full-screen onboarding override */
#onboarding-modal{background:var(--surface) !important;align-items:flex-start;justify-content:flex-start;padding:0;z-index:99999}
#onboarding-modal.open{animation:none !important;background:var(--surface) !important}
#onboarding-modal #ob-inner{border-radius:0;max-height:100vh;height:100vh;width:100vw;max-width:100vw;padding:0;display:flex;flex-direction:column;justify-content:center;overflow-y:auto;background:var(--surface) !important;color:var(--ink) !important}
#onboarding-modal #ob-step1,
#onboarding-modal #ob-step2,
#onboarding-modal #ob-step3{background:var(--surface) !important;color:var(--ink) !important;min-height:100vh;width:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center}
/* onboarding always light — removed dark mode override */
.modal-bg.open{display:flex}
.modal-bg.modal-center{align-items:center;padding:16px}
.modal-bg.modal-center .modal{border-radius:var(--rxl);max-height:90vh;width:100%}
.modal-bg.modal-center .mhandle{display:none}
.modal{background:var(--surface);border-radius:var(--rxl) var(--rxl) 0 0;width:100%;max-width:430px;padding:20px 18px;max-height:92vh;overflow-y:auto;padding-bottom:calc(20px + env(safe-area-inset-bottom));touch-action:pan-y}
.mhandle{width:40px;height:4px;background:var(--border2);border-radius:2px;margin:0 auto 16px}
.mt{font-size:20px;font-weight:900;letter-spacing:-.5px;margin-bottom:3px;color:var(--ink);font-family:var(--fh)}
.ms{font-size:13px;color:var(--ink3);margin-bottom:16px}
.dr{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-top:1px solid var(--surface2);font-size:14px}
.dr:first-child{border-top:none}
.dl{color:var(--ink2);font-size:13px}
.dv{font-weight:700;font-family:var(--fm);font-size:13px;text-align:right;max-width:60%;color:var(--ink)}
.success-view{text-align:center;padding:40px 20px}
.sc{width:64px;height:64px;background:var(--brand-lt);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;border:3px solid var(--brand)}
.sc svg{width:26px;height:26px;stroke:var(--brand-dk);stroke-width:3;fill:none;stroke-linecap:round}
.stitle{font-size:22px;font-weight:900;letter-spacing:-.6px;margin-bottom:6px;color:var(--ink)}
.smsg{font-size:14px;color:var(--ink2);margin-bottom:24px;line-height:1.6}
.empty{text-align:center;padding:32px 16px;color:var(--ink3)}
.empty-t{font-size:15px;font-weight:700;color:var(--ink2);margin:8px 0 4px}
.empty-s{font-size:12px}
.pdf-preview{background:var(--surface2);border-radius:var(--r);padding:16px;font-family:var(--ff)}
.pdf-co{font-size:16px;font-weight:900;color:var(--ink);text-transform:uppercase;letter-spacing:-.5px}
.pdf-co span{color:var(--brand-dk)}
.pdf-sh{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--ink3);margin:10px 0 5px}
.pdf-row{display:flex;justify-content:space-between;font-size:13px;padding:2px 0;color:var(--ink)}
.pdf-total{background:var(--ink);color:var(--brand);border-radius:var(--r);padding:11px 14px;display:flex;justify-content:space-between;font-weight:900;font-size:16px;margin-top:8px;letter-spacing:-.3px}
.pdf-sig{border-top:2px dashed var(--border2);margin-top:12px;padding-top:10px;font-size:11px;color:var(--ink3);line-height:1.6}
.pdf-num{font-size:11px;color:var(--ink3);font-family:var(--fm)}
.math-box{background:var(--surface2);border-radius:var(--r);padding:12px;margin-bottom:14px;text-align:center}
.math-label{font-size:10px;color:var(--ink3);font-weight:800;margin-bottom:3px;letter-spacing:.07em;text-transform:uppercase}
.mr{display:flex;gap:8px;margin-bottom:8px;align-items:center}
.mr input{flex:1;font-family:var(--ff);font-size:14px;padding:10px 12px;border:1.5px solid var(--border2);border-radius:var(--r);background:var(--surface);color:var(--ink);outline:none}
.mr input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(245,200,0,.15)}
.mr .rm{background:none;border:1.5px solid var(--border2);border-radius:8px;padding:9px 10px;color:var(--ink3);cursor:pointer;font-size:13px;flex-shrink:0}
.cust-select-wrap{background:var(--brand-lt);border:1.5px solid rgba(200,160,0,.3);border-radius:var(--r);padding:10px 12px;margin-bottom:14px}
.info-box{background:var(--surface2);border-radius:var(--r);padding:10px 12px}
/* SmartSort */
.complexity-pill{display:inline-block;font-size:10px;font-weight:800;padding:2px 7px;border-radius:4px;letter-spacing:.04em;text-transform:uppercase}
.complexity-pill.low{background:var(--green-lt);color:var(--green)}
.complexity-pill.medium{background:var(--brand-lt);color:#8A6800}
.complexity-pill.high{background:var(--red-lt);color:var(--red)}

/* Profile / onboarding additions */
#onboarding-modal .modal{border-radius:0;background:transparent;max-width:100vw;width:100vw}
.ob-trade-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:6px}
.ob-trade-btn{padding:5px 4px;border:1.5px solid var(--border2);border-radius:var(--r);font-size:11px;font-weight:700;background:var(--surface);color:var(--ink);cursor:pointer;font-family:var(--ff);text-align:center;transition:all .15s;line-height:1.3;outline:none}
.ob-trade-btn.selected{background:var(--brand);color:var(--chrome);border-color:var(--brand)}
.visibility-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}

/* Topbar icon buttons */
.topbar-icon-btn{background:none;border:none;cursor:pointer;padding:8px;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;border-radius:6px;transition:background .15s}
.topbar-icon-btn:hover{background:rgba(255,255,255,.1)}
.topbar-icon-btn:active{background:rgba(255,255,255,.15)}

/* Settings screen */
#sc-settings .exbtn{background:var(--surface);border-top:1px solid var(--surface2)}
#sc-settings .exbtn:first-child{border-top:none}

/* Payment method buttons */
.pay-method-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:12px 8px;border:1.5px solid var(--border2);border-radius:var(--rl);background:var(--surface);cursor:pointer;font-family:var(--ff);font-size:13px;font-weight:700;color:var(--ink);transition:all .15s}
.pay-method-btn.active{border-color:var(--brand);background:var(--brand-lt);color:var(--brand-dk)}
.pay-method-btn:hover{border-color:var(--border2);background:var(--surface2)}

/* Hours picker buttons */
.hrs-btn{padding:9px 4px;background:var(--surface);border:1.5px solid var(--border2);border-radius:var(--r);font-family:var(--ff);font-size:12px;font-weight:700;color:var(--ink2);cursor:pointer;transition:all .15s;text-align:center}
.hrs-btn:hover{border-color:var(--brand);color:var(--ink)}
.hrs-btn.selected{background:var(--brand);border-color:var(--brand);color:var(--chrome);font-weight:900}

@keyframes bannerIn{from{opacity:0;transform:translateX(-50%) translateY(-10px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}

/* Top jobs horizontal scroll */
#top-jobs-panel::-webkit-scrollbar{display:none}
#top-jobs-panel{scrollbar-width:none}

/* ═══════════════════════════════════════════════════════════
   ANIMATION SYSTEM v1
   ═══════════════════════════════════════════════════════════ */

/* ── 1. BOTTOM SHEET ENTRANCE ────────────────────────────── */
@keyframes sheetUp {
  from { transform: translateY(100%); opacity: 0; }
  to   { transform: translateY(0);    opacity: 1; }
}
@keyframes fadeInBg {
  from { background: rgba(0,0,0,0); }
  to   { background: rgba(0,0,0,.65); }
}
.modal-bg.open {
  animation: fadeInBg 220ms ease forwards;
}
.modal-bg.open .modal {
  animation: sheetUp 280ms cubic-bezier(0.32, 0.72, 0, 1) forwards;
}

/* Centered modals (onboarding, upgrade) fade+scale in instead of sliding */
@keyframes modalPopIn {
  from { opacity: 0; transform: scale(.95) translateY(6px); }
  to   { opacity: 1; transform: scale(1)   translateY(0); }
}
.modal-bg.modal-center.open .modal {
  animation: modalPopIn 240ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

/* ── 2. BUTTON PRESS FEEDBACK ────────────────────────────── */
.btn:active          { transform: scale(.97); }
.btn-p:active        { transform: scale(.97); background: var(--brand-dk); }
.btn-s:active        { transform: scale(.97); }
.btn-g:active        { transform: scale(.97); }
.btn-d:active        { transform: scale(.97); }
.qa:active           { transform: scale(.98); opacity: .92; }
.jr:active           { background: var(--surface2); }
.exbtn:active        { background: var(--surface2); }
.pay-method-btn:active { transform: scale(.96); }
.hrs-btn:active      { transform: scale(.95); }

/* ── MODAL CLOSE ANIMATION ─────────────────────────────── */
@keyframes sheetDown {
  from { transform: translateY(0); opacity: 1; }
  to   { transform: translateY(100%); opacity: 0; }
}
@keyframes fadeOutBg {
  from { background: rgba(0,0,0,.65); }
  to   { background: rgba(0,0,0,0); }
}
.modal-bg.closing {
  animation: fadeOutBg 200ms ease forwards;
  pointer-events: none;
}
.modal-bg.closing .modal {
  animation: sheetDown 220ms cubic-bezier(0.4, 0, 1, 1) forwards;
}

/* ── BANNER OUT ANIMATION ──────────────────────────────── */
@keyframes bannerOut {
  from { opacity: 1; transform: translateX(-50%) translateY(0); }
  to   { opacity: 0; transform: translateX(-50%) translateY(-12px); }
}
.save-banner-out {
  animation: bannerOut 240ms ease forwards !important;
}

/* ── ONBOARDING STEP TRANSITIONS ───────────────────────── */
@keyframes obSlideIn {
  from { opacity: 0; transform: translateX(40px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes obSlideOut {
  from { opacity: 1; transform: translateX(0); }
  to   { opacity: 0; transform: translateX(-40px); }
}
@keyframes obSlideInReverse {
  from { opacity: 0; transform: translateX(-40px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes obSlideOutReverse {
  from { opacity: 1; transform: translateX(0); }
  to   { opacity: 0; transform: translateX(40px); }
}

/* ── 3. INPUT FOCUS (enhance existing) ───────────────────── */
.f input, .f select, .f textarea {
  transition: border-color .18s, box-shadow .18s, padding .15s;
}
.f input:focus, .f select:focus, .f textarea:focus {
  border-color: var(--brand);
  box-shadow: 0 0 0 3px rgba(245,200,0,.15);
  padding-top: 12px;
  padding-bottom: 12px;
}

/* ── 4. TOGGLE SMOOTHING ─────────────────────────────────── */
#pricing-mode-toggle button,
#ob-lang-en, #ob-lang-es {
  transition: background .18s, color .18s, transform .12s !important;
}
#pricing-mode-toggle button:active,
#ob-lang-en:active, #ob-lang-es:active {
  transform: scale(.93);
}

/* ── 5. VOICE BREATHING RING ─────────────────────────────── */
@keyframes voiceBreathe {
  0%, 100% { transform: scale(1);    box-shadow: 0 0 0 0 rgba(245,200,0,.4); }
  50%       { transform: scale(1.04); box-shadow: 0 0 0 8px rgba(245,200,0,0); }
}
#voice-btn.listening {
  animation: voiceBreathe 1.6s ease-in-out infinite;
}
@keyframes voicePulse {
  0%, 100% { opacity: 1; }
  50%       { opacity: .4; }
}
#voice-pulse { animation: voicePulse 1s ease-in-out infinite; }

/* ── 6. JOB CARD PAID FLASH ──────────────────────────────── */
@keyframes paidFlash {
  0%   { background: var(--surface); }
  30%  { background: rgba(100,200,100,.18); }
  100% { background: var(--surface); }
}
@keyframes borderToGreen {
  0%   { border-left-color: var(--red); }
  100% { border-left-color: var(--green); }
}
.jr.just-paid {
  animation: paidFlash 800ms ease forwards;
}
.jr.just-paid .jr-lb {
  animation: borderToGreen 400ms ease 200ms forwards;
}

/* ── 7. SKELETON LOADING ─────────────────────────────────── */
@keyframes shimmer {
  0%   { background-position: -300px 0; }
  100% { background-position:  300px 0; }
}
.skeleton {
  border-radius: 6px;
  background: linear-gradient(90deg,
    var(--surface2) 25%,
    var(--surface3) 50%,
    var(--surface2) 75%
  );
  background-size: 600px 100%;
  animation: shimmer 1.4s ease-in-out infinite;
}
.skeleton-job {
  height: 72px;
  border-radius: var(--r);
  margin: 0;
  border-top: 1px solid var(--surface2);
}
.skeleton-job:first-child { border-top: none; }

/* ── 8. FIRST JOB CONFETTI ───────────────────────────────── */
@keyframes confettiFall {
  0%   { transform: translateY(-20px) rotate(0deg);   opacity: 1; }
  100% { transform: translateY(110vh) rotate(720deg); opacity: 0; }
}
.confetti-piece {
  position: fixed;
  width: 8px;
  height: 8px;
  border-radius: 2px;
  pointer-events: none;
  z-index: 9999;
  animation: confettiFall linear forwards;
}

/* ── 9. STAT TILE NUMBER COUNTER ─────────────────────────── */
.hstat-v {
  transition: transform .15s;
}
.hstat-v.bump {
  animation: statBump 350ms cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes statBump {
  0%   { transform: scale(1); }
  50%  { transform: scale(1.18); }
  100% { transform: scale(1); }
}

/* ── 10. SAVE BANNER POLISH ──────────────────────────────── */
@keyframes bannerIn {
  from { opacity:0; transform:translateX(-50%) translateY(-14px) scale(.95); }
  to   { opacity:1; transform:translateX(-50%) translateY(0)     scale(1); }
}
@keyframes bannerOut {
  from { opacity:1; transform:translateX(-50%) translateY(0)     scale(1); }
  to   { opacity:0; transform:translateX(-50%) translateY(-8px)  scale(.97); }
}
.save-banner-out {
  animation: bannerOut 250ms ease forwards !important;
}

/* ── 11. SCREEN FADE (safe — no slide) ───────────────────── */
@keyframes screenFadeIn {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.screen.active {
  animation: screenFadeIn 180ms ease forwards;
}

/* ── 12. COLLECTION / GHOST PULSE ────────────────────────── */
@keyframes alertPulseRed {
  0%, 100% { box-shadow: 0 0 0 0 rgba(204,40,40,.5); }
  60%       { box-shadow: 0 0 0 7px rgba(204,40,40,0); }
}
.alert-pulse {
  animation: alertPulseRed 2.2s ease-in-out infinite;
}

/* ── SPANISH OVERFLOW PROTECTION ─────────────────────────────── */
/* Tight buttons that must never clip in any language */
#qs-toggle-btn,
#qs-save-btn,
#sms-parse-btn {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

/* New/Returning square buttons — text can wrap, center it */
#qs-new-btn span,
#qs-ret-btn span {
  display: block;
  text-align: center;
  word-break: break-word;
  hyphens: auto;
  line-height: 1.2;
}

/* Status buttons — small text wraps rather than clips */
#md-btn-estimate span,
#md-btn-scheduled span,
#md-btn-complete span {
  display: block;
  text-align: center;
  word-break: break-word;
  font-size: 10px;
  line-height: 1.2;
}

/* Pricing pills — shrink font if needed */
#pricing-mode-toggle button {
  min-width: 0;
  white-space: nowrap;
  font-size: 10px !important;
  padding: 3px 8px !important;
}

/* Voice + SMS paste buttons — text should never clip */
#voice-btn,
#sms-paste-btn {
  white-space: nowrap;
}

/* Collections button label */
#mon-cs-label {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 140px;
  display: inline-block;
}

/* ── TIGHT SECTION BUTTON OVERFLOW PROTECTION ─────────────────── */
#h-awaiting-all,
#h-awaiting-sub,
.section-link {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 120px;
  display: inline-block;
}

/* ── APPLE PWA / APP STORE POLISH ─────────────────────────────── */
/* Remove blue tap flash on iOS */
* { -webkit-tap-highlight-color: transparent; }
/* Prevent long-press callout on buttons/images */
button, img, a { -webkit-touch-callout: none; }
/* Prevent horizontal scroll bleed */
body, html { overflow-x: hidden; max-width: 100vw; }
/* Notch / Dynamic Island safe area for content */
.content { padding-bottom: max(4px, env(safe-area-inset-bottom)); }
/* Status bar area — top padding for standalone mode */
@media (display-mode: standalone) {
  .hero { padding-top: max(14px, env(safe-area-inset-top)); }
}

/* ── SCROLL POSITION RELIABILITY ──────────────────────────────── */
/* Ensure content resets properly when switching screens */
.content:focus { outline: none; }
/* Modal inner scroll always starts at top when opened */
.modal { scroll-behavior: auto; }


/* ── TABLET / DESKTOP LAYOUT ─────────────────────────────────────
   App stays at phone width on wider screens — centered.
   Prevents the wide-layout stretch on iPad and desktop. */
@media (min-width: 600px) {
  body {
    background: #0D0D0D;
  }

  /* App shell centered on desktop */
  .shell {
    max-width: 480px;
    margin: 0 auto;
  }

  /* Screens stay phone-width */
  .screen {
    max-width: 480px;
    margin: 0 auto;
  }

  /* Bottom nav centered on desktop */
  .bottomnav {
    max-width: 480px;
    left: 50%;
    transform: translateX(-50%);
    right: auto;
    width: 480px;
  }

  /* Modals centered */
  .modal-bg {
    justify-content: center;
  }

  .modal-bg > div,
  .modal-bg > form {
    max-width: 480px;
    width: 100%;
  }
}

@keyframes tp-spin{to{transform:rotate(360deg)}}

/* ── ONBOARDING HARDCODED COLORS — cannot be overridden by JS theme ── */
#onboarding-modal input { color: var(--ink) !important; }
#onboarding-modal button { color: inherit; }
#ob-s1-title, #ob-s2-title, #ob-name, #ob-wordmark { color: #0A0A0A !important; }

/* ── FORM SCROLL FIX — prevent cursor jump during scroll ───── */
/* Inputs inside modals should not capture scroll-intended touches */
.modal input, .modal textarea, .modal select {
  touch-action: pan-y;
}
/* Prevent accidental text selection during scroll */
.modal label, .modal .f, .modal div:not([contenteditable]) {
  -webkit-user-select: none;
  user-select: none;
}
.modal input, .modal textarea {
  -webkit-user-select: text;
  user-select: text;
}

/* ── BRANDED AI LOADING ANIMATION ──────────────────────── */
@keyframes tpPulse {
  0%, 100% { transform: scale(1); opacity: 0.8; }
  50% { transform: scale(1.15); opacity: 1; }
}
@keyframes tpDotBounce {
  0%, 80%, 100% { transform: translateY(0); }
  40% { transform: translateY(-6px); }
}
.tp-ai-loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 32px 20px;
  text-align: center;
}
.tp-ai-loading .tp-ai-mark {
  width: 48px; height: 48px;
  background: var(--brand);
  border-radius: 14px;
  display: flex; align-items: center; justify-content: center;
  font-size: 18px; font-weight: 900; color: var(--chrome);
  font-family: var(--ff);
  animation: tpPulse 1.6s ease-in-out infinite;
  margin-bottom: 16px;
}
.tp-ai-loading .tp-ai-msg {
  font-size: 15px; font-weight: 800; color: var(--ink);
  margin-bottom: 4px; letter-spacing: -.2px;
}
.tp-ai-loading .tp-ai-sub {
  font-size: 13px; color: var(--ink3); line-height: 1.5;
}
.tp-ai-dots {
  display: flex; gap: 4px; margin-top: 16px;
}
.tp-ai-dots span {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--brand); display: block;
  animation: tpDotBounce 1.2s ease-in-out infinite;
}
.tp-ai-dots span:nth-child(2) { animation-delay: .15s; }
.tp-ai-dots span:nth-child(3) { animation-delay: .3s; }
/* Photo thumbnail in bulk import */
.bulk-photo-thumb {
  width: 80px; height: 80px; border-radius: 12px;
  object-fit: cover; border: 2px solid var(--brand);
  margin: 12px auto; display: block;
}
