*{box-sizing:border-box;margin:0;padding:0}
/* the brand colours (--ink … --indigo) are in app/brand.css, written from app/brand.js */
:root{--border:#e8e5dc;--border2:#d4d0c4;--r:12px}
body{font-family:'Syne',sans-serif;background:var(--cream);color:var(--ink);min-height:100vh;overflow-x:hidden}
.hdr{background:var(--ink);padding:env(safe-area-inset-top,0px) max(1.5rem,env(safe-area-inset-right,0px)) 0 max(1.5rem,env(safe-area-inset-left,0px));display:flex;align-items:center;justify-content:space-between;height:calc(60px + env(safe-area-inset-top,0px));position:sticky;top:0;z-index:200;gap:10px}
.logo{display:flex;align-items:center;gap:8px;flex-shrink:0}
.logo-mark{width:30px;height:30px;background:var(--accent);border-radius:7px;display:flex;align-items:center;justify-content:center}
.logo-mark svg{width:16px;height:16px;fill:white}
.logo-text{color:white;font-size:17px;font-weight:800;letter-spacing:-.5px;white-space:nowrap}
.logo-text span{color:var(--accent)}
.test-badge{padding:1px 6px;border-radius:4px;background:#f59e0b;color:#1a1a1a;font-size:10px;font-weight:800;letter-spacing:.5px;line-height:16px;flex:none}
.hdr-btns{display:flex;gap:6px;align-items:center}
.btn{padding:7px 13px;border-radius:7px;border:none;cursor:pointer;font-family:'Syne',sans-serif;font-weight:700;font-size:12px;transition:all .15s;white-space:nowrap;line-height:1}
.btn-ghost{background:transparent;color:#bbb;border:1px solid #333}.btn-ghost:hover{background:#1e1c2e;color:white}
.btn-primary{background:var(--accent);color:white}.btn-primary:hover{background:#e85a25}
.btn-teal{background:var(--teal);color:white}.btn-teal:hover{background:#009e8c}
.btn-amber{background:var(--gold);color:#412402;font-weight:800}.btn-amber:hover{background:#e5a820}
.btn-indigo{background:var(--indigo);color:white}.btn-indigo:hover{background:#4338ca}
.btn-outline{background:transparent;color:var(--ink);border:1px solid var(--border2)}.btn-outline:hover{background:var(--border)}
.btn-red{background:var(--accent2);color:white}.btn-red:hover{background:#c0392b}
.btn-sm{padding:5px 10px;font-size:11px}
.btn-lg{padding:10px 20px;font-size:14px}
.shell{display:grid;grid-template-columns:215px 1fr;min-height:calc(100vh - 60px)}
.sidebar{background:var(--white);border-right:1px solid var(--border);padding:1.1rem .75rem;display:flex;flex-direction:column;gap:3px;position:sticky;top:60px;height:calc(100vh - 60px);overflow-y:auto}
.sb-sec{font-size:9px;font-weight:800;letter-spacing:1.8px;color:var(--ink3);text-transform:uppercase;margin:.9rem 0 4px 8px}
.nav-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:7px;cursor:pointer;font-size:13px;font-weight:600;color:var(--ink2);transition:all .12s;user-select:none}
.nav-item:hover{background:var(--cream)}
.nav-item.active{background:var(--ink);color:white}
.nc{margin-left:auto;font-size:10px;font-family:'DM Mono',monospace;background:rgba(0,0,0,.08);padding:2px 6px;border-radius:9px}
.nav-item.active .nc{background:var(--accent);color:white}
.ni{width:14px;height:14px;opacity:.65;flex-shrink:0;fill:currentColor}
.nav-item.active .ni{opacity:1}
.main{padding:1.75rem;overflow-y:auto;max-height:calc(100vh - 60px)}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:1.75rem}
.sc{background:var(--white);border:1px solid var(--border);border-radius:var(--r);padding:1rem 1rem .85rem;position:relative;overflow:hidden}
.sc::before{content:'';position:absolute;top:0;left:0;right:0;height:3px}
.sc.c-or::before{background:var(--accent)}.sc.c-te::before{background:var(--teal)}
.sc.c-in::before{background:var(--indigo)}.sc.c-re::before{background:var(--accent2)}
.sc-lbl{font-size:10px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3);margin-bottom:6px}
.sc-val{font-size:22px;font-weight:800;color:var(--ink);letter-spacing:-1px;font-family:'DM Serif Display',serif}
.sc-sub{font-size:11px;color:var(--ink3);margin-top:3px}
.toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.2rem;gap:10px;flex-wrap:wrap}
.tl-l{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.page-title{font-size:20px;font-weight:800;letter-spacing:-.4px}
.search{display:flex;align-items:center;gap:7px;background:var(--white);border:1px solid var(--border);border-radius:7px;padding:6px 10px;width:200px}
.search input{border:none;outline:none;font-family:'Syne',sans-serif;font-size:12px;color:var(--ink);background:transparent;width:100%}
.search input::placeholder{color:var(--ink3)}
.ftabs{display:flex;gap:3px;background:var(--white);border:1px solid var(--border);border-radius:7px;padding:3px}
.ft{padding:4px 12px;border-radius:5px;font-size:11px;font-weight:700;cursor:pointer;border:none;background:transparent;color:var(--ink3);transition:all .12s}
.ft.active{background:var(--ink);color:white}
.inv-table{background:var(--white);border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.t-head{display:grid;grid-template-columns:90px 1fr 115px 105px 125px 95px 70px;padding:0 1.2rem;background:var(--cream);border-bottom:1px solid var(--border);height:38px;align-items:center;gap:10px}
.th{font-size:10px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3)}
.inv-row{display:grid;grid-template-columns:90px 1fr 115px 105px 125px 95px 70px;padding:0 1.2rem;border-bottom:1px solid var(--border);min-height:58px;align-items:center;gap:10px;cursor:pointer;transition:background .1s}
.inv-row:last-child{border-bottom:none}
.inv-row:hover{background:#faf9ff}
.q-row{grid-template-columns:90px 1fr 115px 105px 125px 95px 115px!important}
.q-head{grid-template-columns:90px 1fr 115px 105px 125px 95px 115px!important}
.inv-num{font-family:'DM Mono',monospace;font-size:12px;font-weight:500;color:var(--accent)}
.q-num{color:var(--indigo)!important}
.cn-num{color:var(--accent2)!important}
.cl-name{font-size:13px;font-weight:700;color:var(--ink)}
.cl-email{font-size:11px;color:var(--ink3);margin-top:1px}
.amt{font-family:'DM Serif Display',serif;font-size:16px;color:var(--ink);white-space:nowrap}
.dt{font-size:12px;color:var(--ink2)}
.pill{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:20px;font-size:10px;font-weight:800;white-space:nowrap}
.pdot{width:5px;height:5px;border-radius:50%;flex-shrink:0}
.pill-note{display:block;font-size:9px;color:var(--ink3);margin-top:2px;line-height:1.3}
.paid{background:#e8f8f3;color:#00866a}.paid .pdot{background:#00b47a}
.pending{background:#fff8e6;color:#c07a00}.pending .pdot{background:var(--gold)}
.partpaid{background:#eef4ff;color:#1a56b0}.partpaid .pdot{background:#378add}
.overdue{background:#fef0ee;color:#c0392b}.overdue .pdot{background:var(--accent2)}
.draft{background:#f2f1f8;color:#5e5b8a}.draft .pdot{background:#9088c8}
.quote{background:#eef4ff;color:#1a56b0}.quote .pdot{background:#378add}
.accepted{background:#e8f8f3;color:#00866a}.accepted .pdot{background:#00b47a}
.declined{background:#fef0ee;color:#c0392b}.declined .pdot{background:var(--accent2)}
.credit{background:#fef0ee;color:#c0392b}.credit .pdot{background:var(--accent2)}
.row-acts{display:flex;gap:5px;opacity:0;transition:opacity .15s;align-items:center}
.inv-row:hover .row-acts{opacity:1}
.q-row .row-acts{opacity:1}
.ib{width:26px;height:26px;border-radius:6px;border:1px solid var(--border);background:var(--white);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .1s;flex-shrink:0}
.ib:hover{background:var(--cream);border-color:var(--border2)}
.ib svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:1.5}
.cvt-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 9px;background:#e8f8f3;color:#00866a;border:1px solid #9fe1cb;border-radius:6px;font-family:'Syne',sans-serif;font-size:10px;font-weight:800;cursor:pointer;transition:all .15s;white-space:nowrap}
.cvt-btn:hover{background:#00b47a;color:white;border-color:#00b47a}
.backdrop{position:fixed;inset:0;background:rgba(15,14,23,.55);z-index:300;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .2s;padding:max(1rem,env(safe-area-inset-top,0px)) max(1rem,env(safe-area-inset-right,0px)) max(1rem,env(safe-area-inset-bottom,0px)) max(1rem,env(safe-area-inset-left,0px))}
#exportModal{z-index:310}
#planModal{z-index:320} /* 06b: the plan sheet opens over the editor and its dialogs */
.backdrop.open{opacity:1;pointer-events:all}
.modal{background:var(--white);border-radius:14px;width:100%;max-width:920px;max-height:93vh;overflow-y:auto;transform:translateY(14px);transition:transform .2s;box-shadow:0 20px 60px rgba(15,14,23,.25)}
.backdrop.open .modal{transform:translateY(0)}
.modal-sm{max-width:500px}.modal-xl{max-width:1040px}.modal-lg{max-width:720px}
.mhdr{padding:1rem 1.6rem;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:var(--white);z-index:10}
.mtitle{font-size:15px;font-weight:800;letter-spacing:-.3px}
.mbody{padding:1.4rem 1.6rem}
.xbtn{width:32px;height:32px;border-radius:7px;border:1px solid var(--border);background:transparent;cursor:pointer;font-size:20px;color:var(--ink3);line-height:1;display:flex;align-items:center;justify-content:center}
.xbtn:hover{background:var(--cream)}
.fg{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-bottom:1rem}
/* 05e: a form grid's columns by class — an inline column count would beat the phone rule below */
.fg.fg-1{grid-template-columns:minmax(0,1fr)}.fg.fg-2{grid-template-columns:1fr 1fr}.fg.fg-3{grid-template-columns:1fr 1fr 1fr}
.frow{display:flex;flex-direction:column;gap:4px}
.frow.s2{grid-column:1/-1}
.frow.s3{grid-column:1/-1}
.flbl{font-size:10px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--ink3)}
/* the one input look: every form field and every line-item input (06g) */
.fi,.li,.mk-in{border:1px solid var(--border);border-radius:7px;color:var(--ink);background:var(--cream);outline:none;transition:border .15s}
.fi:focus,.li:focus,.mk-in:focus{border-color:var(--accent);background:var(--white)}
.fi{padding:8px 10px;font-family:'Syne',sans-serif;font-size:13px;width:100%}
select.fi{cursor:pointer}
textarea.fi{resize:vertical;min-height:56px}
.div{height:1px;background:var(--border);margin:.9rem 0}
/* Line items: header and rows share the columns of .li-grid (subgrid). The total column grows
   to fit the widest total; the last row's 6px spacing sits on .li-grid so it still collapses
   with the next block's margin, as before. */
.li-grid{display:grid;grid-template-columns:1fr minmax(44px,58px) minmax(80px,100px) minmax(44px,68px) max-content 26px;column-gap:6px;margin-bottom:6px}
#docLines{grid-column:1/-1;display:grid;grid-template-columns:subgrid}
.li-hdr{grid-column:1/-1;display:grid;grid-template-columns:subgrid;gap:6px;padding:6px 0;border-bottom:1px solid var(--border);margin-bottom:6px}
.li-hdr span{font-size:9px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3)}
.li-row{grid-column:1/-1;display:grid;grid-template-columns:subgrid;gap:6px;margin-bottom:6px;align-items:center}
#docLines>.li-row:last-child{margin-bottom:0}
.li-row.src-adj{display:grid}
.li{padding:6px 7px;font-family:'Syne',sans-serif;font-size:12px;width:100%}
.li-tot{font-family:'DM Mono',monospace;font-size:11px;padding:6px 7px;background:var(--cream);border-radius:6px;text-align:right;border:1px solid var(--border);white-space:nowrap}
.rb{width:24px;height:24px;border-radius:5px;border:1px solid var(--border);background:transparent;cursor:pointer;color:var(--ink3);font-size:15px;display:flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1}
.rb:hover{background:#fef0ee;color:var(--accent2);border-color:#f9c4c4}
.tots{background:var(--cream);border-radius:var(--r);padding:.9rem;margin-top:.7rem}
.trow{display:flex;justify-content:space-between;align-items:center;padding:4px 0;font-size:13px;color:var(--ink2)}
.trow.grand{border-top:1px solid var(--border2);margin-top:7px;padding-top:10px;font-size:17px;font-family:'DM Serif Display',serif;color:var(--ink)}
.mono{font-family:'DM Mono',monospace;font-size:12px}
.vat-row{display:flex;justify-content:space-between;align-items:center;padding:4px 0;font-size:13px;color:var(--ink2)}
.tog{width:32px;height:18px;border-radius:9px;background:var(--border2);position:relative;transition:background .2s;cursor:pointer;flex-shrink:0;border:none;outline:none;display:inline-block;vertical-align:middle}
.tog.on{background:var(--teal)}
.tog::after{content:'';position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:white;transition:transform .2s}
.tog.on::after{transform:translateX(14px)}
.tog-lbl{font-size:12px;font-weight:700;color:var(--ink3);vertical-align:middle;margin-left:5px}
.tog.on+.tog-lbl{color:var(--teal)}
.pw{display:flex;align-items:center;gap:3px;background:var(--white);border:1px solid var(--border);border-radius:6px;padding:2px 5px 2px 7px;transition:opacity .2s}
.pw.off{opacity:0;pointer-events:none}
.pi{width:38px;border:none;outline:none;font-family:'DM Mono',monospace;font-size:12px;color:var(--ink);background:transparent;text-align:right}
.ps{font-size:12px;color:var(--ink3);font-weight:700}
/* DOCUMENT PREVIEW */
.pv{background:white;border-radius:var(--r);padding:1.4rem;min-height:460px;border:1px solid var(--border)}
.pv-top-bar{height:6px;border-radius:6px 6px 0 0;margin:-1.4rem -1.4rem 1.2rem}
.pv-hdr{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1.2rem}
.pv-logo-img{width:52px;height:52px;border-radius:6px;object-fit:contain;border:1px solid var(--border)}
.pv-logo-ph{width:52px;height:52px;border-radius:6px;background:var(--cream);border:1px dashed var(--border2);display:flex;align-items:center;justify-content:center;font-size:9px;color:var(--ink3);text-align:center;line-height:1.3}
.pv-co{font-size:16px;font-weight:800;font-family:'DM Serif Display',serif;letter-spacing:-.4px;margin-top:5px}
.pv-sub{font-size:11px;color:var(--ink3);margin-top:1px;line-height:1.5}
.inv-badge{color:white;font-size:14px;font-weight:800;font-family:'DM Serif Display',serif;padding:6px 12px;border-radius:6px}
.pv-meta{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1.2rem;padding:1rem;background:var(--cream);border-radius:var(--r);border:1px solid var(--border)}
.pm-lbl{font-size:9px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:var(--ink3);margin-bottom:2px}
.pm-val{font-size:12px;font-weight:700}
.pm-party-sub{font-size:10px;color:var(--ink2);line-height:1.5;margin-top:2px;overflow-wrap:anywhere}
.pv-items{width:100%;border-collapse:collapse;margin-bottom:1rem}
.pv-items th{font-size:9px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3);padding:6px 8px;border-bottom:2px solid var(--border);text-align:left}
.pv-items th:last-child,.pv-items td:last-child{text-align:right}
.pv-items td{padding:6px 8px;font-size:11px;border-bottom:1px solid var(--border)}
.pv-tots{display:flex;flex-direction:column;gap:5px;align-items:flex-end}
.pt{display:flex;gap:16px;font-size:11px}
.pt.grand{font-size:15px;font-family:'DM Serif Display',serif;padding-top:7px;border-top:2px solid var(--ink)}
.pt-lbl{color:var(--ink3);min-width:68px;text-align:right}
.pt-val{font-weight:600;min-width:68px;text-align:right;font-family:'DM Mono',monospace}
.pv-bank{margin-top:1rem;padding-top:.75rem;border-top:1px solid var(--border);font-size:10px;color:var(--ink3);line-height:1.7}
.pv-bank strong{color:var(--ink2);font-size:10px}
/* LOGO UPLOAD */
.logo-upload-area{border:2px dashed var(--border);border-radius:var(--r);padding:1.1rem;text-align:center;cursor:pointer;position:relative;transition:all .2s}
.logo-upload-area:hover{border-color:var(--accent);background:#fff8f5}
.logo-upload-area input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.logo-preview{width:80px;height:80px;object-fit:contain;border-radius:6px;border:1px solid var(--border);margin:0 auto .5rem;display:block}
/* EXPORT OPTIONS */
.export-opts{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:1rem}
.export-opt{border:1px solid var(--border);border-radius:var(--r);padding:1rem;cursor:pointer;transition:all .15s;text-align:center}
.export-opt:hover{border-color:var(--accent);background:#fff8f5}
.export-opt.active{border-color:var(--accent);background:#fff3ed}
.export-opt-icon{font-size:24px;margin-bottom:.4rem}
.export-opt-label{font-size:12px;font-weight:700;color:var(--ink)}
.export-opt-sub{font-size:10px;color:var(--ink3);margin-top:2px}
/* CLIENTS VIEW */
.client-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}
.client-tools{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:.9rem}
.client-head{display:flex;align-items:center;gap:10px;margin-bottom:.75rem}.client-head .client-avatar{margin-bottom:0}.client-id{min-width:0}
.client-bal{font-weight:700;color:var(--ink2);font-family:'DM Mono',monospace;font-size:11px;overflow-wrap:anywhere}.client-bal.credit{color:var(--teal)}.client-bal.none{font-family:inherit;font-weight:500;color:var(--ink3)}
.client-acts{display:flex;gap:6px;flex-wrap:wrap;margin-top:.8rem}
.cl-merge{margin-top:1rem;padding-top:.8rem;border-top:1px solid var(--border)}.cl-merge-row{display:flex;gap:7px;margin-top:4px;flex-wrap:wrap}.cl-merge-row .fi{flex:1 1 200px;width:auto;min-width:0}
.stmt-ctl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.stmt-ctl .st-msg{grid-column:1/-1}
.stmt-fy{margin-top:.8rem;padding:.7rem .85rem;border:1px solid var(--border);border-radius:var(--r);background:var(--cream)}
@media(max-width:620px){.stmt-ctl{grid-template-columns:1fr}}
.st-table th,.st-table td{text-align:right;white-space:nowrap}.st-table th:nth-child(-n+3),.st-table td:nth-child(-n+3){text-align:left;white-space:normal;overflow-wrap:anywhere}
.st-cr{display:block;font-size:9px;font-weight:700;color:var(--teal);white-space:nowrap}
.st-sub td{font-size:10px;color:var(--ink3);border-bottom:1px dashed var(--border)}.st-open td,.st-close td{font-weight:700}
.st-note{font-size:10px;color:var(--ink3);line-height:1.5;margin:.4rem 0 1rem}.st-age th,.st-age td{text-align:right}.st-msg{font-size:11px;line-height:1.6;margin:.5rem 0 1rem;white-space:pre-line;overflow-wrap:anywhere}
.stmt-pv{overflow-x:auto}
.fi-date{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0}.fi-date .fi{flex:1 1 9.5em;min-width:min(100%,9.5em)}.fi-date-shown{flex:0 0 auto;font-size:11px;font-weight:700;color:var(--ink2);white-space:nowrap}
.fi-hint{font-size:10px;color:var(--ink3);line-height:1.45;margin-top:3px;overflow-wrap:anywhere}
.pay-acts{display:flex;gap:4px;align-items:center}.pay-editing{background:#f2f7ff}
.pay-btns{grid-column:1/-1;display:flex;gap:7px;flex-wrap:wrap}.pay-btns .btn{flex:1 1 160px}
.pay-edit-h{grid-column:1/-1;font-size:11px;font-weight:700;color:var(--indigo)}
.rp-doc{margin-top:.2rem}.rp-draft{display:inline-block;font-size:10px;font-weight:800;letter-spacing:1.2px;color:#c0392b;border:1.5px solid #c0392b;border-radius:4px;padding:2px 8px;margin-bottom:.6rem}
.rp-title{font-size:17px;font-weight:800;margin:.2rem 0 .3rem;overflow-wrap:anywhere}.rp-link{font-size:10px;color:var(--ink3);margin-bottom:.6rem}
.rp-sec{margin:0 0 1rem}.rp-h{font-size:11px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;border-bottom:1.5px solid var(--border);padding-bottom:4px;margin:0 0 .5rem;break-after:avoid;page-break-after:avoid}
.rp-sec p{font-size:11px;line-height:1.6;margin:0 0 .45rem;overflow-wrap:anywhere}.rp-sec ul{font-size:11px;line-height:1.6;margin:0 0 .45rem 1.1rem;padding:0}.rp-sec li{overflow-wrap:anywhere}
.rp-facts{width:100%;border-collapse:collapse}.rp-facts th{text-align:left;font-size:10px;color:var(--ink3);font-weight:700;width:34%;padding:3px 8px 3px 0;vertical-align:top}.rp-facts td{font-size:11px;padding:3px 0;overflow-wrap:anywhere}
.rp-table{width:100%;border-collapse:collapse;margin:0}.rp-table th{font-size:9px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;color:var(--ink3);text-align:left;padding:5px 6px;border-bottom:1.5px solid var(--border)}.rp-table td{font-size:11px;padding:5px 6px;border-bottom:1px solid var(--border);overflow-wrap:anywhere;vertical-align:top}.rp-table tr{break-inside:avoid;page-break-inside:avoid}
.rp-num{text-align:right;white-space:nowrap}.rp-res{white-space:nowrap;font-weight:700}.rp-pass{color:#00866a}.rp-fail{color:#c0392b}.rp-na{color:var(--ink3)}
.rp-find{border:1px solid var(--border);border-radius:6px;padding:.55rem .7rem;margin-bottom:.6rem;break-inside:avoid;page-break-inside:avoid}
.rp-fh{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;margin-bottom:.3rem}.rp-ref{font-weight:800;font-size:12px}.rp-floc{font-size:11px;font-weight:700;overflow-wrap:anywhere;min-width:0}
.rp-sev{font-size:9px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;padding:2px 7px;border-radius:10px;background:#f2f1f8;color:#5e5b8a}.rp-sev-high{background:#fff1e6;color:#b4530a}.rp-sev-urgent{background:#fef0ee;color:#c0392b}.rp-sev-low{background:#e8f8f3;color:#00866a}
.rp-fl{font-size:11px;line-height:1.55;overflow-wrap:anywhere}.rp-fk{font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:var(--ink3)}
.rp-photos{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:.4rem}.rp-fig{margin:0;break-inside:avoid;page-break-inside:avoid;min-width:0}.rp-img{display:block;width:100%;height:auto;max-height:260px;object-fit:contain;background:#f6f5f1;border-radius:4px}.rp-fig figcaption{font-size:10px;color:var(--ink3);margin-top:3px;line-height:1.4;overflow-wrap:anywhere}
.dn-pod{break-before:avoid}.dn-pod .rp-photos{grid-template-columns:repeat(3,1fr)}.dn-pod .rp-img{max-height:170px}
.rp-missing{display:flex;align-items:center;justify-content:center;min-height:60px;font-size:10px;color:var(--ink3);background:#f6f5f1}
.rp-signs{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;break-inside:avoid;page-break-inside:avoid}.rp-sign{min-width:0}.rp-sig-img{display:block;max-width:100%;height:56px;object-fit:contain;object-position:left bottom}
.rp-sig-typed{font-family:'Playfair Display',serif;font-style:italic;font-size:20px;min-height:40px;display:flex;align-items:flex-end;overflow-wrap:anywhere}.rp-sig-line{border-top:1px solid #0f0e17;margin:3px 0}.rp-sig-name{font-size:11px;font-weight:700;overflow-wrap:anywhere}.rp-sig-role{font-size:10px;color:var(--ink3);overflow-wrap:anywhere}
.final{background:#e8f8f3;color:#00866a}.final .pdot{background:#00b47a}
.rp-how{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:11px;color:var(--ink2);margin-bottom:.6rem}.rp-how span{flex:1 1 200px;min-width:0}
.op-note{font-size:11px;color:var(--ink2);margin-top:.5rem;line-height:1.5;overflow-wrap:anywhere}
.rp-body{margin-top:.2rem}.rp-ed-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.9px;color:var(--ink3);margin-bottom:.6rem}
.rp-store{font-size:10px;font-weight:500;text-transform:none;letter-spacing:0;color:var(--ink3);overflow-wrap:anywhere}
.rp-sec-ed{border:1px solid var(--border);border-radius:var(--r);padding:.7rem .75rem;margin-bottom:.7rem;display:flex;flex-direction:column;gap:6px;min-width:0}
.rp-sec-top{display:flex;gap:6px;align-items:center;min-width:0}.rp-sec-top .fi{flex:1 1 auto;min-width:0}.rp-heading{font-weight:700}
.rp-kind{font-size:9px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--ink3);white-space:nowrap}
.rp-guide{font-size:11px;color:var(--ink3);font-style:italic;line-height:1.45;overflow-wrap:anywhere}
.rp-row{display:grid;gap:6px;align-items:center;min-width:0}.rp-row .fi{min-width:0}.rp-facts-row{grid-template-columns:minmax(0,2fr) minmax(0,3fr) 26px}.rp-check-row{grid-template-columns:minmax(0,3fr) minmax(0,2fr) minmax(0,3fr) 26px}.rp-works-row{grid-template-columns:minmax(0,4fr) minmax(0,1fr) minmax(0,1fr) 26px}
.rp-grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px}
.rp-finding-ed,.rp-sign-ed{border-top:1px dashed var(--border);padding-top:6px;display:flex;flex-direction:column;gap:6px;min-width:0}.rp-fe-h{display:flex;justify-content:space-between;align-items:center;font-size:12px}
.rp-thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px}.rp-thumb{position:relative;display:flex;flex-direction:column;gap:3px;min-width:0}.rp-thumb-img{display:block;width:100%;height:80px;object-fit:cover;border-radius:4px;background:var(--cream)}.rp-thumb .rb{position:absolute;top:2px;right:2px;background:#fff}
.rp-addphoto{align-self:flex-start;cursor:pointer}.rp-sig-ed{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.rp-sig-ed .rp-sig-img{height:44px}
.rp-add{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.rp-add .fi{width:auto;flex:1 1 160px;min-width:0}
.rp-tpls{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.rp-tpl{display:flex;flex-direction:column;gap:4px;text-align:left;padding:.75rem .85rem;border:1px solid var(--border);border-radius:var(--r);background:var(--white);cursor:pointer;font-family:inherit;min-width:0}.rp-tpl:hover{border-color:var(--teal)}.rp-tpl strong{font-size:13px}.rp-tpl span{font-size:11px;color:var(--ink3);line-height:1.45;overflow-wrap:anywhere}.rp-own{font-size:9px;color:var(--teal);text-transform:uppercase;letter-spacing:.6px}
.rp-te{border:1px solid var(--border);border-radius:var(--r);padding:.7rem;margin-bottom:.7rem;display:flex;flex-direction:column;gap:6px}.rp-te-row{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1.3fr) minmax(0,3fr) auto;gap:6px;align-items:center}.rp-te-btns{display:flex;gap:3px}
.rp-pad{display:block;width:100%;height:auto;aspect-ratio:3/1;border:1px dashed var(--border2);border-radius:var(--r);background:#fff;touch-action:none;cursor:crosshair}
@media(max-width:620px){.rp-check-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 26px}.rp-check-row>:nth-child(3){grid-column:1/3}.rp-works-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 26px}.rp-works-row>:first-child{grid-column:1/-1}.rp-te-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.rp-te-guide{grid-column:1/-1}.rp-grid2{grid-template-columns:1fr}}
.dx-body{display:flex;flex-direction:column;gap:10px}.dx-dates{display:grid;grid-template-columns:1fr 1fr;gap:8px}.dx-note{font-size:11px;color:var(--ink3);line-height:1.5}
.pay-panel{margin-top:1rem;border:1px solid var(--border);border-radius:var(--r);padding:.8rem .9rem}
.pay-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.9px;color:var(--ink3);margin-bottom:.5rem}
.pay-h .pill{text-transform:none;letter-spacing:0}
.pay-sum{font-size:12px;color:var(--ink2);line-height:1.5;margin-bottom:.5rem;overflow-wrap:anywhere}
.pay-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:8px;align-items:center;font-size:12px;padding:5px 0;border-top:1px solid var(--border)}
.pay-row .mono{font-family:'DM Mono',monospace;white-space:nowrap}.pay-row .pay-what{min-width:0;overflow-wrap:anywhere;color:var(--ink2)}
.pay-form{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:.6rem}.pay-form .frow{margin:0;min-width:0}.pay-form .pay-wide{grid-column:span 2}
.pay-form .btn{align-self:end}
@media(max-width:620px){.pay-form{grid-template-columns:1fr}.pay-form .pay-wide{grid-column:auto}}
.pay-note{font-size:11px;color:var(--ink3);line-height:1.5}
.client-card{background:var(--white);border:1px solid var(--border);border-radius:var(--r);padding:1.1rem;cursor:pointer;transition:all .15s}
.client-card:hover{border-color:var(--border2);box-shadow:0 2px 12px rgba(15,14,23,.07)}
.client-avatar{width:40px;height:40px;border-radius:50%;background:var(--ink);color:white;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;margin-bottom:.75rem;flex-shrink:0}
.client-name{font-size:14px;font-weight:700;color:var(--ink);margin-bottom:2px}
.client-email{font-size:12px;color:var(--ink3);margin-bottom:.5rem}
.client-stats{display:flex;flex-wrap:wrap;gap:.5rem 1rem;font-size:11px;color:var(--ink3)}
.client-stat-val{font-weight:700;color:var(--ink2)}
/* COLUMN MAPPER */
.map-table{width:100%;border-collapse:collapse;margin-bottom:1rem}
.map-table th{font-size:10px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--ink3);padding:8px 10px;border-bottom:2px solid var(--border);text-align:left;background:var(--cream)}
.map-table td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:middle;font-size:13px}
.map-table tr:last-child td{border-bottom:none}
.map-sel{padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-family:'Syne',sans-serif;font-size:12px;color:var(--ink);background:var(--cream);outline:none;cursor:pointer;width:100%}
.map-sel:focus{border-color:var(--teal)}
.map-match{font-size:10px;font-weight:700;padding:2px 7px;border-radius:10px}
.map-match.ok{background:#e8f8f3;color:#00866a}
.map-match.skip{background:var(--cream);color:var(--ink3)}
.map-desc{font-size:11px;color:var(--ink3);margin-top:2px}
/* MISC */
.dz{border:2px dashed var(--border);border-radius:var(--r);padding:1.5rem;text-align:center;cursor:pointer;transition:all .2s;position:relative}
.dz:hover,.dz.over{border-color:var(--teal);background:#f0fbf9}
.dz input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.dz p{color:var(--ink3);font-size:11px;margin-top:4px}
.dz strong{display:block;font-size:13px;color:var(--ink);margin-bottom:2px}
.chips{display:flex;flex-wrap:wrap;gap:4px;justify-content:center;margin-top:8px}
.chip{background:var(--white);border:1px solid var(--border);border-radius:20px;padding:2px 8px;font-size:10px;font-weight:700;color:var(--ink3);font-family:'DM Mono',monospace}
.mktbl-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r);margin-bottom:.7rem;max-height:320px;overflow-y:auto}
.mktbl{width:100%;border-collapse:collapse;font-size:12px}
.mktbl thead{position:sticky;top:0;z-index:2;background:var(--cream)}
.mktbl th{padding:7px 9px;text-align:left;font-size:9px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3);border-bottom:2px solid var(--border);white-space:nowrap}
.mktbl th:last-child{text-align:right}
.mktbl td{padding:6px 9px;border-bottom:1px solid var(--border);color:var(--ink)}
.mktbl tr:last-child td{border-bottom:none}
.mktbl tr:hover td{background:#faf9ff}
.mk-in{width:58px;padding:3px 5px;font-family:'DM Mono',monospace;font-size:11px;text-align:right}
.mk-tot{font-family:'DM Mono',monospace;font-weight:500;text-align:right;white-space:nowrap}
.mk-sum{display:flex;justify-content:flex-end;gap:1.5rem;padding:.6rem .9rem;background:var(--ink);border-radius:0 0 var(--r) var(--r);color:white;font-size:12px}
.ms-lbl{color:#9999bb;font-size:9px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;margin-bottom:1px}
.ms-val{font-family:'DM Serif Display',serif;font-size:15px}
.gm-bar{display:flex;align-items:center;gap:9px;background:var(--cream);border-radius:7px;padding:.6rem .85rem;margin-bottom:.7rem;flex-wrap:wrap}
.gm-bar label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.7px;color:var(--ink3)}
.gm-bar input{width:56px;padding:4px 7px;border:1px solid var(--border);border-radius:5px;font-family:'DM Mono',monospace;font-size:13px;text-align:center;outline:none;color:var(--ink);background:var(--white)}
.tabs{display:flex;border-bottom:2px solid var(--border);margin-bottom:1rem}
.tab{padding:7px 15px;font-size:12px;font-weight:700;color:var(--ink3);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .15s}
.tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.tab:hover:not(.active){color:var(--ink)}
.tp{display:none}.tp.active{display:block}
.prog{height:3px;background:var(--border);border-radius:2px;overflow:hidden;margin:6px 0}
.prog-fill{height:100%;background:var(--teal);border-radius:2px;transition:width .4s ease;width:0}
.empty{text-align:center;padding:2.5rem 1.5rem}
.empty-ico{width:52px;height:52px;background:var(--cream);border-radius:12px;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem}
.empty h3{font-size:16px;font-weight:800;letter-spacing:-.3px;margin-bottom:.35rem}
.empty p{font-size:13px;color:var(--ink3);margin-bottom:1.1rem;max-width:340px;margin-left:auto;margin-right:auto;line-height:1.6}
.empty-acts{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.dd-wrap{position:relative}
.dd-menu{display:none;position:absolute;right:0;top:calc(100% + 5px);background:var(--white);border:1px solid var(--border);border-radius:9px;padding:4px;min-width:185px;z-index:400;box-shadow:0 8px 24px rgba(15,14,23,.16)}
.dd-menu.open{display:block}
.dd-item{display:block;width:100%;text-align:left;padding:7px 10px;border:none;background:none;font-family:'Syne',sans-serif;font-size:12px;font-weight:600;cursor:pointer;border-radius:5px;color:var(--ink)}
.dd-item:hover{background:var(--cream)}
.dd-item.danger{color:var(--accent2)}.dd-item.danger:hover{background:#fef0ee}
.dd-sep{height:1px;background:var(--border);margin:3px 0}
.notif{position:fixed;bottom:1.5rem;right:1.5rem;background:var(--ink);color:white;padding:.75rem 1.2rem;border-radius:var(--r);font-size:13px;font-weight:600;transform:translateY(90px);transition:transform .3s cubic-bezier(.34,1.56,.64,1);z-index:500;display:flex;align-items:center;gap:8px;box-shadow:0 8px 28px rgba(15,14,23,.28);max-width:300px}
.notif.show{transform:translateY(0)}
.nd{width:7px;height:7px;border-radius:50%;background:var(--teal);flex-shrink:0}
.li.li-bad,.mk-in.li-bad{border-color:var(--accent2);background:#fff1f0}
.notif.err{background:var(--accent2)}
.codes-tog{display:flex;align-items:center;gap:4px;font-size:10px;font-weight:700;color:var(--ink3);cursor:pointer;white-space:nowrap;margin-right:4px}
.li-pack{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;margin-top:1px;min-width:0}
.li-costnote{font-size:9px;color:var(--ink3);font-style:italic;overflow-wrap:anywhere;min-width:0}
.li-packbtn{background:none;border:0;padding:0;font:inherit;font-size:9px;font-weight:700;color:var(--indigo);cursor:pointer;text-decoration:underline;white-space:nowrap}
.pk-from{font-size:12px;color:var(--ink2);margin-bottom:.8rem;overflow-wrap:anywhere}
.pk-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pk-set{border:1px solid var(--border);border-radius:var(--r);padding:.7rem .85rem .85rem;min-width:0}
.pk-set legend{font-size:10px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--ink2);padding:0 4px}
.pk-switch{display:flex;gap:6px;align-items:flex-start;font-size:12px;color:var(--ink2);margin-bottom:.6rem;line-height:1.4}
.pk-sent{grid-column:1/-1;font-size:13px;line-height:1.55;color:var(--ink);overflow-wrap:anywhere}
.pk-choice .pk-v{font-size:13px}
.pk-row{display:flex;flex-direction:column;gap:3px;margin-bottom:.55rem;min-width:0}
.pk-hint{font-size:11px;color:var(--ink2);line-height:1.5;overflow-wrap:anywhere}
.pk-hint .btn{margin:3px 6px 0 0}
.pk-out{margin-top:.9rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:8px}
.pk-out .pk-err{grid-column:1/-1;background:#fff1f0;border:1px solid #f3b4b9;border-radius:var(--r);padding:.6rem .8rem;font-size:12px;color:#8a1c26}
.pk-res{background:var(--cream);border:1px solid var(--border);border-radius:var(--r);padding:.55rem .7rem;min-width:0}
.pk-res .pk-l{font-size:9px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--ink3)}
.pk-res .pk-v{font-size:14px;font-weight:700;font-family:'DM Mono',monospace;overflow-wrap:anywhere}
.pk-res .pk-s{font-size:10px;color:var(--ink3);overflow-wrap:anywhere}
.pk-use{margin-top:.9rem;display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}
.pk-use .pk-row{flex:1 1 200px;margin:0}
.pk-use .pk-note{flex-basis:100%;font-size:11px;color:var(--ink3)}
@media(max-width:520px){.pk-grid{grid-template-columns:1fr}}
.li-code{font-size:9px;color:var(--ink3);font-family:'DM Mono',monospace;margin-top:1px;overflow-wrap:anywhere}
.doc-warn{margin-top:.75rem;background:#fff8e6;border:1px solid #f7b731;border-radius:var(--r);padding:.7rem .9rem;font-size:12px;color:#5a3d00;line-height:1.55}
.imp-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:.8rem;font-size:12px;color:var(--ink2)}
.imp-bar .map-sel{width:auto;min-width:240px}
.imp-basis{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:.8rem;font-size:12px;color:var(--ink2)}
.imp-basis .map-sel{width:auto;min-width:160px;max-width:100%}
.imp-basis .map-desc{flex:1 1 220px;min-width:0}
.imp-doccheck{display:flex;flex-direction:column;gap:4px;margin-bottom:.8rem;font-size:12px;line-height:1.5}
.imp-doccheck .ok{color:var(--teal)}.imp-doccheck .bad{color:#8a1c26}
.imp-err{background:#fff1f0;border:1px solid #f3b4b9;border-radius:var(--r);padding:.7rem .9rem;font-size:12px;color:#8a1c26;line-height:1.6;margin-bottom:.8rem}
.map-match.bad{background:#fff1f0;color:#c0392b}
.mktbl tr.imp-skip td{background:#fff8e6;color:var(--ink3)}
.mktbl tr.imp-fail td{background:#fff1f0}
.imp-flag{font-size:10px;font-weight:700;color:#c0392b;white-space:nowrap}
/* 03c: the line preview fits its card — headings wrap; on narrow screens each row stacks, labelled */
.imp-prev th{white-space:normal}
.imp-prev td{overflow-wrap:anywhere}
@media(max-width:900px){
  .imp-prev thead{display:none}
  .imp-prev tr{display:block;border-bottom:1px solid var(--border);padding:4px 0}
  .imp-prev td{display:flex;justify-content:space-between;align-items:baseline;gap:10px;border-bottom:none;padding:2px 9px;text-align:right;white-space:normal}
  .imp-prev td::before{content:attr(data-lbl);font-size:9px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--ink3);text-align:left;flex:0 0 auto;font-family:'Syne',sans-serif}
  .imp-prev td:empty{display:none}
  .imp-prev .imp-flag{white-space:normal}
}
.imp-sum{display:flex;align-items:center;gap:10px;justify-content:flex-end;flex-wrap:wrap;font-size:12px;color:var(--ink2)}
.imp-total{font-family:'DM Mono',monospace;font-weight:600;color:var(--ink)}
.cvt-hint{margin-top:.5rem;font-size:11px;color:var(--teal);font-weight:700}
.info-box{background:#eef4ff;border:1px solid #c7d7f8;border-radius:var(--r);padding:.85rem 1rem;font-size:12px;color:#1a3a7a;line-height:1.65;margin-bottom:1rem}
.info-box strong{font-weight:800}
@media print{
  .hdr,.sidebar,.toolbar,.row-acts,.backdrop{display:none!important}
  .shell{display:block!important}
  .main{max-height:none!important;overflow:visible!important;padding:0!important}
  .inv-table{display:none!important}
  #printDoc{display:block!important}
  body{background:white!important}
}
#printDoc{display:none}
@media(max-width:860px){
  .shell{grid-template-columns:1fr}.sidebar{display:none}
  .stats{grid-template-columns:1fr 1fr}
  .t-head,.inv-row{grid-template-columns:78px 1fr 100px 72px!important;gap:7px;padding:0 .9rem}
  .fg{grid-template-columns:1fr}.frow.s2,.frow.s3{grid-column:1}
  .mbody{padding:1rem}.modal{border-radius:12px}
  .export-opts{grid-template-columns:1fr}
}
@media(max-width:520px){
  .hdr{padding:env(safe-area-inset-top,0px) max(.9rem,env(safe-area-inset-right,0px)) 0 max(.9rem,env(safe-area-inset-left,0px))}.main{padding:1rem}
  .stats{grid-template-columns:1fr}
  .hdr-btns .btn{padding:5px 8px;font-size:10px}
}
/* Adds an even 30px to the editor so the vertically centred modal keeps its pixel alignment. */
.mk-all{display:flex;align-items:center;justify-content:flex-end;gap:7px;margin:2px 0 8px;padding-bottom:1px;font-size:11px;color:var(--ink3)}
.mk-all-lbl{font-weight:700}
.trow.mk-margin{font-size:11px;color:var(--ink3)}
.fi-sub{margin-top:6px}
.trow.doc-note{font-size:11px;color:var(--ink3)}
.amt-note{display:block;font-family:'Syne',sans-serif;font-size:10px;font-weight:600;color:var(--ink3);margin-top:2px}
.src-desc{font-size:12px;color:var(--ink);overflow:hidden;text-overflow:ellipsis}
.src-by{display:block;font-size:10px;color:var(--ink3)}
.src-left,.src-rate{font-size:12px;font-family:'DM Mono',monospace;color:var(--ink2)}
.src-left{text-align:center}.src-rate{text-align:right}
.src-done{font-size:10px;font-weight:700;color:var(--ink3);text-align:center}
.li-row.src-row-done{opacity:.55}
/* 02d: a list amount's credit note wraps inside its own cell */
.amt-note{white-space:normal}
/* 02d: per-currency totals beside the default currency's */
.sc-other{font-size:11px;color:var(--ink2);margin-top:2px;font-family:'DM Mono',monospace}
.sc-other:empty{display:none}
.client-stat-other{font-size:10px;color:var(--ink3);font-family:'DM Mono',monospace;margin-top:1px}
.gm-cur{width:auto;min-width:130px}
/* 02d: the currency picker (opens from any select[data-cur]) */
.cur-pick{position:fixed;z-index:600;display:none;background:var(--white);border:1px solid var(--border2);border-radius:9px;box-shadow:0 10px 30px rgba(15,14,23,.2);padding:6px}
.cur-pick.open{display:block}
.cur-q{margin-bottom:6px}
.cur-list{max-height:260px;overflow-y:auto}
.cur-sec{font-size:9px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3);padding:6px 6px 3px}
.cur-opt{display:grid;grid-template-columns:44px 1fr auto;gap:8px;align-items:baseline;width:100%;text-align:left;padding:6px;border:none;background:none;border-radius:5px;cursor:pointer;font-family:'Syne',sans-serif;font-size:12px;color:var(--ink)}
.cur-opt.on,.cur-opt:hover{background:var(--cream)}
.cur-opt.sel .cur-code{color:var(--accent)}
.cur-code{font-family:'DM Mono',monospace;font-weight:500}
.cur-name{min-width:0;overflow-wrap:anywhere}
.cur-sym{font-family:'DM Mono',monospace;color:var(--ink3)}
.cur-none{padding:8px 6px;font-size:12px;color:var(--ink3)}
/* 02d sweep fixes: long names, numbers and amounts wrap inside their own box */
.cl-name,.cl-email,.inv-num,.client-name,.client-email,.pv-co,.pv-sub,.pm-val,.pv-items td,.pv-bank,.src-desc,.mtitle{overflow-wrap:anywhere}
.inv-row>*{min-width:0}
.client-card>div:first-child>div:last-child{min-width:0}
.client-stats>div{min-width:0}
@media(max-width:860px){
 /* other two-column screens (Design): form above its preview; the document editor keeps its pane (05k) */
 .ed-cols:not(.ed-doc){grid-template-columns:minmax(0,1fr)!important}
 /* list rows stack: number and status / client / dates / amount and actions */
 .t-head{display:none}
 .inv-row,.q-row{grid-template-columns:minmax(0,1fr) auto!important;row-gap:4px;padding:.7rem .9rem!important;align-items:start}
 .inv-row>:nth-child(1){grid-area:1/1}
 .inv-row>:nth-child(6){grid-area:1/2;justify-self:end}
 .inv-row>:nth-child(2){grid-area:2/1/3/3}
 .inv-row>:nth-child(3){grid-area:3/1}
 .inv-row>:nth-child(4){grid-area:4/1}
 .inv-row>:nth-child(5){grid-area:5/1}
 .inv-row>:nth-child(7){grid-area:5/2;justify-self:end;align-self:end}
 .dt[data-lbl]::before{content:attr(data-lbl) ' ';color:var(--ink3)}
}
@media(max-width:520px){
 .hdr{height:auto;min-height:calc(60px + env(safe-area-inset-top,0px));flex-wrap:wrap;padding:calc(.6rem + env(safe-area-inset-top,0px)) max(.9rem,env(safe-area-inset-right,0px)) .6rem max(.9rem,env(safe-area-inset-left,0px));row-gap:8px}
 .hdr-btns{flex-wrap:wrap;justify-content:flex-end}
 .ed-btns{flex-wrap:wrap}
 .ed-btns>.btn{flex:1 1 auto}
 /* line items: description on its own row, then the numbers, then the total */
 .pv-meta{grid-template-columns:minmax(0,1fr)}
 .pv-hdr{flex-direction:column-reverse;gap:.6rem}
}
.src-rate{white-space:nowrap}
/* Amounts in the preview never break mid-number: the number columns do not wrap */
.pv-items td:not(:first-child),.pv-items th,.pt-val,.pm-amt{white-space:nowrap;overflow-wrap:normal}
@media(max-width:520px){.pv-items th,.pv-items td{padding:6px 4px}}
/* 02b: storage status */
.store-banner{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:1rem;padding:.7rem .9rem;border-radius:var(--r);font-size:12px;line-height:1.55;background:#fff8e6;border:1px solid #f7b731;color:#5a3d00}
.store-banner.err{background:#fff1f0;border-color:#f3b4b9;color:#8a1c26}
.store-banner.remind{background:#eef4ff;border-color:#c7d7f8;color:#1a3a7a}
.store-banner-acts{display:flex;gap:6px;flex-wrap:wrap}
.dd-note{padding:4px 10px 6px;font-size:10px;color:var(--ink3)}
.store-info{font-size:12px;color:var(--ink2);line-height:1.7}
/* 03: document design (one renderer; classic adds nothing) */
.doc-design.doc-body{font-family:var(--doc-body)}
.doc-design.doc-head .pv-co,.doc-design.doc-head .inv-badge,.doc-design.doc-head .pt.grand{font-family:var(--doc-head)}
.pv-logo-row{margin-bottom:1rem}
.pv-logo-right{margin-bottom:8px}
.pv-hdr-img{display:block;width:100%;height:auto;max-height:140px;object-fit:contain;object-position:left top;margin-bottom:1.1rem}
.pv-foot{margin-top:1rem;padding-top:.6rem;border-top:1px solid var(--border);font-size:10px;color:var(--ink3);line-height:1.6;overflow-wrap:anywhere}
.pv-foot-img{display:block;width:100%;height:auto;max-height:110px;object-fit:contain}
/* 03 sweep (real fonts): the line toolbar wraps on phones; the preview's item table stacks
   each line (description, then quantity × rate and amount) so no amount is cut or broken */
@media(max-width:520px){
 .li-tools,.li-tools>div{flex-wrap:wrap;row-gap:6px;column-gap:6px}
 .pv .pv-items thead{display:none}
 .pv .pv-items tr{display:grid;grid-template-columns:auto minmax(0,1fr) auto;column-gap:8px;border-bottom:1px solid var(--border)}
 .pv .pv-items td{border-bottom:0}
 .pv .pv-items td:first-child{grid-column:1/-1;padding-bottom:0}
 .pv .pv-items td:nth-child(2){text-align:left!important}
 .pv .pv-items td:nth-child(2)::after{content:' \00d7'}
 /* 05h: a delivery note without prices: description, then the quantity alone */
 .pv .pv-noprice tr{grid-template-columns:minmax(0,1fr)}
 .pv .pv-noprice td:nth-child(2)::after{content:none}
}
/* 03b: statement tables stack as labelled rows on phones */
@media(max-width:520px){
 .pv .st-table thead,.pv .st-age thead tr:last-child{display:none}
 .pv .st-table tr,.pv .st-age tr{display:block;border-bottom:1px solid var(--border);padding:3px 0}
 .pv .st-table td,.pv .st-age td{display:flex;justify-content:space-between;gap:10px;padding:2px 4px;text-align:right!important;white-space:normal}
 .pv .st-table td:empty{display:none}
 .pv .st-table td[data-lbl]::before,.pv .st-age td[data-lbl]::before{content:attr(data-lbl);font-size:9px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--ink3);text-align:left;flex:0 0 auto}
 .pv .st-table td:nth-child(2)::after{content:none}
 .pv .st-table td:first-child{padding-bottom:2px}
}
.li-grid .li-tot{min-width:78px}
.loc-row{padding:.6rem 0 .8rem;border-bottom:1px dashed var(--border);margin-bottom:.6rem}
.loc-def{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink2);padding-top:6px}
/* 03: Settings → Document design */
.dz-sec{padding:.75rem 0;border-bottom:1px solid var(--border)}
.dz-sec:first-child{padding-top:0}
.dz-h{font-size:12px;font-weight:800;margin-bottom:.5rem}
.dz-note{font-size:11px;color:var(--ink3);margin-top:.35rem;line-height:1.5}
.dz-inline{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.dz-inline .fi{width:auto;flex:1 1 160px;min-width:0}
.dz-inline input[type=color]{width:38px;height:32px;padding:2px;border:1px solid var(--border);border-radius:7px;background:var(--white)}
.fg.dz-3{grid-template-columns:repeat(3,minmax(0,1fr));margin-bottom:0}
.dz-file{position:relative;overflow:hidden;display:inline-flex;align-items:center}
.dz-file input{position:absolute;inset:0;opacity:0;cursor:pointer}
.dz-check{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink2);margin-top:.5rem}
.dz-fields{width:100%;border-collapse:collapse;font-size:12px}
.dz-fields th{font-size:9px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3);text-align:left;padding:4px 6px;border-bottom:1px solid var(--border)}
.dz-fields td{padding:4px 6px;border-bottom:1px solid var(--border);overflow-wrap:anywhere}
.dz-fields .map-sel{width:auto}
.design-pvbar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:10px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink3);flex-wrap:wrap}
.design-pvbar label{display:flex;align-items:center;gap:6px;text-transform:none;letter-spacing:0;font-weight:700;font-size:11px}
.design-pvbar .map-sel{width:auto}
.fg.dz-titles{grid-template-columns:repeat(2,minmax(0,1fr))} /* 06c: room for "Request for quotation" */
@media(max-width:520px){.fg.dz-3{grid-template-columns:minmax(0,1fr)}}
#designModal{z-index:320}
.q-row .row-acts{flex-wrap:wrap;row-gap:4px}
/* 04c: import from another app */
.gi-steps{display:flex;flex-wrap:wrap;gap:6px 14px;list-style:none;margin:0 0 .8rem;padding:0;font-size:12px;font-weight:700;color:var(--ink3)}.gi-steps li{display:flex;align-items:center;gap:6px}.gi-steps li span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;border:1.5px solid currentColor;font-size:11px}.gi-steps li.on{color:var(--ink)}.gi-steps li.done{color:var(--ink2)}
.gi-panel{display:flex;flex-direction:column;gap:10px}.gi-paste{width:100%;min-height:60px;font-family:inherit}.gi-nav{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;margin-top:6px}.gi-nav:has(> :only-child){justify-content:flex-end}
.gi-batches{margin-bottom:.6rem}.gi-batch{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px}.gi-why{color:var(--ink3);font-size:11px}
.gi-period{display:flex;flex-direction:column;gap:6px;margin-bottom:.6rem}.gi-opt{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px}.gi-from{width:auto;max-width:100%}
.gi-counts{width:100%;border-collapse:collapse;font-size:12px;margin-bottom:.5rem}.gi-counts td{padding:5px 6px;border-bottom:1px solid var(--border);vertical-align:top}.gi-counts td:nth-child(2){text-align:right;font-weight:700}.gi-q{display:flex;flex-direction:column;gap:6px}.gi-done{font-size:13px;line-height:1.5}
/* 05a: update and install notices — in the page flow under the header: they never cover anything */
.upd-bar{display:none;flex-wrap:wrap;align-items:center;gap:8px;margin:10px 1.5rem 0;background:var(--ink);color:var(--white);border-radius:var(--r);padding:10px 12px;font-size:13px}
.upd-bar.open{display:flex}.upd-bar .upd-txt{flex:1 1 220px;min-width:0;line-height:1.4}.upd-bar .btn-ghost{color:var(--white)}
@media(max-width:600px){.upd-bar{margin:8px 16px 0}}
.app-version{margin-top:4px}
.app-version .off-failed{color:#8a1c26;font-weight:600}
/* PHONE NAVIGATION: below 860 px the sidebar gives way to a bottom bar and its sheets (app/nav.js);
   the header keeps the logo, one "+ New" and the ⋯ menu. The bar sits under every window (editors
   and sheets are above it), the notice rises above it, and the page scrolls clear of it. Android's
   gesture area: the safe-area inset (the browser's, or the one the Android shell provides). */
:root{--sab:max(env(safe-area-inset-bottom,0px),var(--safe-area-inset-bottom,0px));--bnav-h:58px}
/* a hidden notice never takes a tap meant for what is under it */
.notif:not(.show){pointer-events:none}
.hdr-new,.dd-phone,.bnav{display:none}
.logo[data-act]{cursor:pointer}
.sheet-bd{align-items:flex-end;padding:0}
.sheet{background:var(--white);width:100%;max-width:560px;border-radius:16px 16px 0 0;padding:.35rem .4rem calc(.6rem + var(--sab));box-shadow:0 -10px 30px rgba(15,14,23,.2);transform:translateY(16px);transition:transform .2s}
.sheet-bd.open .sheet{transform:none}
.sheet-hd{display:flex;align-items:center;justify-content:space-between;padding:.45rem .6rem .35rem .9rem}
.sheet-title{font-size:14px;font-weight:800;color:var(--ink)}
.sheet-list{display:flex;flex-direction:column;padding-bottom:.2rem}
.sheet-item{display:flex;align-items:center;gap:12px;width:100%;min-height:48px;padding:0 .9rem;border:none;background:none;border-radius:10px;font-family:'Syne',sans-serif;font-size:15px;font-weight:600;color:var(--ink);text-align:left;cursor:pointer}
.sheet-item:hover{background:var(--cream)}
.sheet-item .ni{width:18px;height:18px}
.sheet-item.active{background:var(--cream);color:var(--accent)}.sheet-item.active .ni{opacity:1}
@media(max-width:860px){
  .hdr-wide{display:none}.hdr-new{display:inline-flex}.dd-phone{display:block}
  .bnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:250;background:var(--white);border-top:1px solid var(--border);padding:0 max(env(safe-area-inset-right,0px),0px) var(--sab) max(env(safe-area-inset-left,0px),0px);box-shadow:0 -4px 16px rgba(15,14,23,.06)}
  .bn-item{flex:1 1 0;min-width:0;height:var(--bnav-h);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:none;background:none;font-family:'Syne',sans-serif;font-size:11px;font-weight:700;color:var(--ink3);cursor:pointer;-webkit-tap-highlight-color:transparent}
  .bn-item .ni{width:20px;height:20px}
  .bn-lbl{max-width:100%;overflow-wrap:anywhere;text-align:center;line-height:1.1}
  .bn-item.active{color:var(--accent)}.bn-item.active .ni{opacity:1}
  .main{padding-bottom:calc(1.5rem + var(--bnav-h) + var(--sab))}
  .notif{bottom:calc(1rem + var(--bnav-h) + var(--sab))}
  /* hidden: wholly below the screen (not resting over the bar) */
  .notif:not(.show){transform:translateY(calc(100% + 1.5rem + var(--bnav-h) + var(--sab)))}
}
/* small phones (the shell sweep at 320 px): the phone header stays on one row, the ⋯ menu stays on
   screen, the status filters wrap instead of running off the edge */
@media(max-width:860px){
  .hdr{flex-wrap:nowrap}
  .logo{min-width:0;flex:0 1 auto}
  .dd-menu{max-width:calc(100vw - 24px)}
  /* 06a: the longer name — + New and ⋯ stay side by side and on screen; the name gives way (smaller,
     then "…" as a last resort), never the buttons (the emulator's 345 px WebView pushed them off) */
  .hdr-btns{flex:none;flex-wrap:nowrap}
  .logo-text{min-width:0;overflow:hidden;text-overflow:ellipsis}
  /* the TEST badge sits on the corner of the logo mark, not after the name, so the whole name fits */
  .logo{position:relative}
  .test-badge{position:absolute;left:-4px;bottom:-7px;padding:0 3px;font-size:8px;line-height:12px;letter-spacing:.3px;box-shadow:0 0 0 2px var(--ink)}
}
@media(max-width:520px){.ftabs{flex-wrap:wrap}}
@media(max-width:400px){.logo-text{font-size:15px}}
@media(max-width:360px){.logo-text{font-size:14px}.hdr{column-gap:6px;padding-left:max(.7rem,env(safe-area-inset-left,0px));padding-right:max(.7rem,env(safe-area-inset-right,0px))}.logo{gap:6px}.hdr-btns{gap:4px}}
@media(max-width:330px){.logo-text{font-size:12.5px}}
/* 05d: before the file chooser opens for a restore */
.restore-intro{font-size:14px;line-height:1.55;color:var(--ink);margin:0 0 1.1rem}
.restore-note{font-weight:700}
.restore-acts{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}
/* 05d export menu: the main ways out first; a secondary one smaller, across the row */
.export-opt-primary{border-color:var(--accent);background:#fff8f5}
.export-opt-primary .export-opt-label{color:var(--ink)}
.export-opt-secondary{grid-column:1/-1;padding:.55rem 1rem;display:flex;align-items:center;gap:10px;text-align:left}
.export-opt-secondary .export-opt-icon{margin:0;font-size:16px}
.export-opt-secondary .export-opt-sub{margin:0}

/* 05e PHONES (below 600 px): every form grid in Settings, the editors and the dialogs is one column;
   field labels in the body font, sentence case (the display font is for headings); fields at 16px
   (iPhone zooms into anything smaller). Desktop and tablet are unchanged. */
:root{--font-body:system-ui,-apple-system,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif}
@media(max-width:599.98px){
 .fg,.fg.fg-2,.fg.fg-3,.pay-form,.dx-dates,.pk-grid,.stmt-ctl,.rp-grid2,.export-opts{grid-template-columns:minmax(0,1fr)!important}
 .fg>*,.pay-form>*{grid-column:auto!important}
 .flbl{font-family:var(--font-body);font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--ink2)}
 .fi,.li,input:not([type=checkbox]):not([type=radio]):not([type=color]),select,textarea{font-size:16px}
}
/* 05g: line items as cards at 860 px and below (was 520), where each field shows its own label */
@media(max-width:860px){
 .li-grid{grid-template-columns:1fr 1fr 1fr 26px!important}
 .li-hdr>:first-child,.li-row>:first-child{grid-column:1/-1}
 .li-hdr>:nth-last-child(2),.li-row>:nth-last-child(2){grid-column:1/4}
 .li-grid.li-src{grid-template-columns:22px 1fr 1fr 1fr!important}
 /* 05k: the tick on a line of its own, its label beside the box; the description below it */
 .li-src .li-hdr>:first-child,.li-src .li-row>:first-child{grid-column:1/-1}
 .li-src .li-row:not(.src-adj)>.rl:first-child{flex-direction:row-reverse;justify-content:flex-end;align-items:center;gap:8px}
 .li-src .li-hdr>:nth-child(2),.li-src .li-row>:nth-child(2){grid-column:1/-1}
 .li-src .li-hdr>:nth-child(3),.li-src .li-row>:nth-child(3){grid-column:2}
 .li-src .li-hdr>:nth-last-child(1),.li-src .li-row>:nth-last-child(1){grid-column:2/-1}
 .li-src .li-hdr>:nth-last-child(2),.li-src .li-row>:nth-last-child(2){grid-column:auto}
 .li-row.src-adj{grid-template-columns:1fr 1fr!important}
 .li-row.src-adj>:first-child{grid-column:1/-1}
}
/* 05e: phones up to 440 px: the line's numbers on two columns, so a 9-digit amount fits —
   description; quantity | price; markup | total | delete */
@media(max-width:440px){
 .li-grid:not(.li-src){grid-template-columns:1fr 1fr 26px!important}
 .li-grid:not(.li-src) .li-hdr>:nth-child(4):not(:nth-last-child(2)),.li-grid:not(.li-src) .li-row>:nth-child(4):not(:nth-last-child(2)){grid-column:1}
 .li-grid:not(.li-src) .li-hdr>:nth-last-child(2),.li-grid:not(.li-src) .li-row>:nth-last-child(2){grid-column:2}
}
/* 05e: a select whose chosen value does not fit shows it in full beneath (dom.js fitSelects) */
.sel-full{font-size:12px;color:var(--ink2);line-height:1.4;margin-top:3px;overflow-wrap:anywhere}
/* 05e iPhone/iPad: fields at 16px everywhere there (Safari zooms into anything smaller, iPad too);
   the sheets keep clear of the rounded corners in landscape (the bar and the header: above) */
@supports(-webkit-touch-callout:none){.fi,.li,input:not([type=checkbox]):not([type=radio]):not([type=color]),select,textarea{font-size:16px}}
.sheet{padding-left:max(.4rem,env(safe-area-inset-left,0px));padding-right:max(.4rem,env(safe-area-inset-right,0px))}
/* 05e: phones — the column-matching table stacks: the field, its column choice at full width, the match */
@media(max-width:599.98px){
 .map-table thead{display:none}
 .map-table,.map-table tbody,.map-table tr,.map-table td{display:block;width:100%}
 .map-table tr{padding:8px 0;border-bottom:1px solid var(--border)}
 .map-table td{padding:2px 0;border:0}
}
/* 05g REPEATED ROWS: each field carries its own label (dom.js rowField/rowValue). Wider screens: the
   column headings show, the label is for screen readers only (desktop pixel-identical). 860 px and
   below: the headings are hidden and each label shows with its field, in the body font. */
.rl{display:contents}
.rl-t{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
@media(max-width:860px){
 .li-hdr,.mktbl thead{display:none!important}
 .rl{display:flex;flex-direction:column;gap:3px;min-width:0}
 .rl-t{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto;white-space:normal;font-family:var(--font-body);font-size:12px;font-weight:600;line-height:1.3;letter-spacing:0;text-transform:none;color:var(--ink2)}
 .li-row{align-items:end}
 /* supplier pricing: each item a card */
 .mktbl,.mktbl tbody{display:block}
 .mktbl tbody tr{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:10px;border-bottom:1px solid var(--border)}
 .mktbl tbody td{display:block;padding:0;border:0;min-width:0;text-align:left}
 .mktbl tbody td:nth-child(1){display:none}
 .mktbl tbody td:nth-child(2){grid-column:1/-1}
 .mktbl .mk-in{width:100%}
 .mktbl .mk-pct{display:none}
}
/* 05h: suppliers beside clients; links between documents; a delivery note's proof of delivery */
.client-also{font-size:11px;color:var(--ink3);margin:-.2rem 0 .6rem}
.supplier-also{font-size:12px;font-family:inherit}
.doc-links{margin-top:.8rem;padding:.6rem .75rem;border:1px solid var(--border);border-radius:8px;background:var(--cream);font-size:12px;line-height:1.55;color:var(--ink2)}
.doc-links .dl-h{font-weight:700;color:var(--ink);margin-right:4px}
.doc-links .dl-link{border:none;background:none;padding:0;font:inherit;color:var(--accent);text-decoration:underline;cursor:pointer}
.doc-links .dl-row+.dl-row{margin-top:.35rem}
.rp-body-below{margin-top:1rem}
.rcv-lines{display:flex;flex-direction:column;gap:6px;margin:.5rem 0}
.rcv-row{display:grid;grid-template-columns:minmax(0,1fr) 90px 90px;gap:8px;align-items:end}
@media(max-width:600px){.rcv-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.rcv-row>:first-child{grid-column:1/-1}}
.rcv-sub{font-size:11px;color:var(--ink3)}
.rcv-desc{font-size:12.5px;min-width:0}
.rcv-acts{display:flex;align-items:end;gap:8px;flex-wrap:wrap}
.rcv-acts .frow{margin:0}
.rp-fixed-h{font-weight:700;font-size:13px}
.pv-noprice th:last-child,.pv-noprice td:last-child{text-align:center}

/* 05k LIVE PREVIEW (engine/preview.js): 600 px and wider, a pane beside the editor (resizable,
   can be hidden); phones, a miniature docked above the bottom bar; full screen on a tap. */
.ed-doc{display:grid;grid-template-columns:minmax(0,1fr) var(--pv-w,minmax(0,1fr));gap:1.6rem}
.ed-main{min-width:0}
.ed-doc.pv-hidden{grid-template-columns:minmax(0,1fr) 0;gap:0}
.ed-doc.pv-hidden .ed-pane{visibility:hidden;overflow:hidden}
.ed-pane{position:sticky;top:calc(var(--pv-top,0px) + 8px);align-self:start;display:flex;min-width:0;height:min(calc(93vh - var(--pv-top,0px) - 3rem),1000px)}
.pv-resize{flex:0 0 10px;margin-left:-10px;cursor:col-resize;touch-action:none;background:linear-gradient(90deg,transparent 4px,var(--border2) 4px,var(--border2) 6px,transparent 6px)}
.pv-pane-in{flex:1;min-width:0;border:1px solid var(--border2);border-radius:var(--r);overflow:hidden;background:#fff}
.mhdr .pv-show{margin-left:auto;margin-right:8px}
#pvHost[data-mode=pane]{height:100%}
#pvHost[data-mode=dock]{position:fixed;z-index:420;background:#fff;border-radius:8px;box-shadow:0 6px 22px rgba(15,14,23,.35);visibility:hidden;touch-action:none}
#pvHost[data-mode=dock].pv-on{visibility:visible}
#pvHost[data-mode=dock].pv-kb,#pvHost[data-mode=dock].pv-toast{visibility:hidden}
#pvHost[data-mode=dock][data-corner=br]{right:12px;bottom:calc(var(--bnav-h) + var(--sab) + 10px)}
#pvHost[data-mode=dock][data-corner=bl]{left:12px;bottom:calc(var(--bnav-h) + var(--sab) + 10px)}
#pvHost[data-mode=dock][data-corner=tr]{right:12px;top:calc(env(safe-area-inset-top,0px) + 10px)}
#pvHost[data-mode=dock][data-corner=tl]{left:12px;top:calc(env(safe-area-inset-top,0px) + 10px)}
#pvHost[data-mode=dock][data-size=tab][data-corner$=r]{right:0;border-radius:6px 0 0 6px}
#pvHost[data-mode=dock][data-size=tab][data-corner$=l]{left:0;border-radius:0 6px 6px 0}
#pvHost[data-mode=full]{position:fixed;inset:0;z-index:950;background:#3a3940}
/* the editor keeps room so every field scrolls clear of the dock */
.pv-docked #docModal .mbody{padding-bottom:calc(1rem + var(--pv-pad-b,0px));padding-top:calc(1rem + var(--pv-pad-t,0px))}
.pv-docked #docModal .modal{scroll-padding-bottom:var(--pv-pad-b,0px);scroll-padding-top:var(--pv-pad-t,0px)}
@media(max-width:999.98px){.ed-doc{grid-template-columns:minmax(0,1.6fr) var(--pv-w,minmax(0,1fr))}}
@media(max-width:599.98px){.ed-doc{grid-template-columns:minmax(0,1fr)}.ed-pane{display:none}}
/* 05k: beside the pane the editor column is narrower: its buttons wrap rather than run under the pane
   (WebKit kept them on one line, past the column) */
.ed-doc .ed-btns{flex-wrap:wrap}
.ed-doc .ed-btns>.btn{white-space:nowrap}
/* 05l: goods received — a line received in full, and its "All" button */
.rcv-done{grid-column:span 2;font-size:11.5px;font-weight:700;color:#0f6e51;align-self:center;min-width:0;overflow-wrap:anywhere}
.rcv-done .rcv-link{font:inherit;letter-spacing:inherit;text-transform:none;color:inherit;background:none;border:0;padding:0;text-decoration:underline;cursor:pointer}
.rcv-rec{grid-template-columns:minmax(0,1fr) auto;align-items:start;border-radius:4px;transition:background-color .3s}
.rcv-rec.rcv-flash{background:#fff3c4}
.rcv-sum{min-width:0;overflow-wrap:anywhere;line-height:1.5}.rcv-date{font-weight:700}
.rcv-ln{display:inline-block;max-width:18em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.rcv-more>summary{cursor:pointer}.rcv-n{color:var(--ink2);text-decoration:underline}
.rcv-acts-row{display:flex;gap:6px;align-items:center}.rcv-edit-btn{padding:3px 9px}
.rcv-editing{display:block;border:1px solid var(--border2);border-radius:8px;background:#fff;padding:.6rem .7rem;margin:.4rem 0}
.rce-h{font-size:12.5px;font-weight:700;margin-bottom:.2rem}.rce-note{font-size:11.5px;color:var(--ink3);margin-bottom:.5rem}
.rce-line{margin:0 0 .45rem}.rce-line .fi{max-width:120px}
.rce-meta{display:flex;gap:8px;flex-wrap:wrap}.rce-meta .frow{margin:0;flex:1 1 140px;min-width:0}
.rce-btns{display:flex;gap:8px;justify-content:flex-end;margin-top:.6rem;flex-wrap:wrap}
.rcv-all{margin:.3rem 0 0 1rem;padding:0;font-size:12px}.rcv-all .rcv-ln{max-width:none;white-space:normal}
.rcv-all{align-self:end}
/* 05m: Send feedback — what is sent, shown before sending */
.fb-sent{margin:.8rem 0;border:1px solid var(--border2);border-radius:8px;padding:.6rem .75rem;background:#fff}
.fb-sent-h{font-size:10px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--ink2);margin-bottom:.4rem}
.fb-details{display:grid;grid-template-columns:auto minmax(0,1fr);gap:3px 10px;margin:0;font-size:12px}
.fb-details dt{color:var(--ink3);font-weight:700}
.fb-details dd{margin:0;color:var(--ink);overflow-wrap:anywhere}
/* 06b PLANS (Android app only) */
.plan-why{font-weight:600;color:var(--ink);margin:0 0 .4rem}
.plan-status,.plan-keep{font-size:13px;color:var(--ink2);line-height:1.5;margin:0 0 .8rem}
.plan-keep{margin:.8rem 0 0;color:var(--ink3)}
.plan-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:.7rem}
.plan-card{border:1px solid var(--border);border-radius:10px;padding:.8rem;display:flex;flex-direction:column;gap:.4rem;min-width:0}
.plan-card.plan-cur{border-color:var(--teal);box-shadow:0 0 0 1px var(--teal) inset}
.plan-hd{display:flex;align-items:center;justify-content:space-between;gap:.4rem;flex-wrap:wrap}
.plan-name{font-weight:700;font-size:15px}
.plan-tag{font-size:11px;border-radius:999px;padding:.1rem .5rem;background:var(--teal);color:#fff;white-space:nowrap}
.plan-more,.plan-later{font-size:12px;color:var(--ink3)}
.plan-list{margin:0;padding-left:1.1rem;font-size:13px;line-height:1.5;flex:1}
.plan-acts{display:flex;flex-direction:column;gap:.4rem;margin-top:.3rem}
.plan-acts .btn{min-height:44px;justify-content:center;white-space:normal}
.plan-price{font-weight:400;opacity:.9}
.plan-foot{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end;margin-top:.8rem}
.plan-foot .btn{min-height:44px}
/* 06b long lists: the first rows, then more as the list is scrolled */
.list-more{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:.8rem;padding:1rem;font-size:12px;color:var(--ink3);flex-wrap:wrap}
.list-more .btn{min-height:40px}
/* 06b addendum: automatic backup (Settings) and its failure banner */
.ab-box .store-info{line-height:1.6}
.ab-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.ab-acts .btn{min-height:40px}
.ab-err{margin-top:6px;padding:.45rem .6rem;border-radius:8px;background:#fde8ea;color:#8a1022;font-size:12px;line-height:1.5}
/* 06c SUPPLIER RFQ: the request review (each row beside its region on the page), suppliers, the price grid */
.rfq-req{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;font-size:12.5px;margin-bottom:.6rem}
.rfq-sum{font-size:13px;line-height:1.5;margin-bottom:.5rem}
.rfq-flag{margin:.25rem 0}.rfq-note{font-size:12px;color:var(--ink3);margin:.2rem 0}
.rfq-refused{font-size:14px;line-height:1.5;padding:.7rem .8rem}
.rfq-pages{display:flex;flex-wrap:wrap;gap:8px;align-items:end;margin:.6rem 0}.rfq-pages .fi{width:120px}
.rfq-rows{display:flex;flex-direction:column;gap:10px;margin:.6rem 0}
.rfq-row{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:10px;padding:8px;border:1px solid var(--border);border-radius:8px}
.rfq-row-flag{border-color:#e0a100;background:#fff9e8}
.rfq-crops{display:flex;flex-direction:column;gap:4px;min-width:0}
.rfq-crop{width:100%;height:auto;border:1px solid var(--border);background:#fff}
.rfq-cells{display:grid;grid-template-columns:60px minmax(0,1fr) 70px 80px 40px;gap:6px;align-items:start}
.rfq-l{display:flex;flex-direction:column;gap:3px;min-width:0}.rfq-lt{font-size:11px;font-weight:600;color:var(--ink2)}.rfq-cells textarea{resize:vertical;min-height:54px}
.rfq-rowflag{grid-column:1/-1;font-size:12px}
.rfq-acts,.rfq-tools,.rfq-out{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;margin:.6rem 0}
.rfq-out{justify-content:flex-start;align-items:end}.rfq-out .rfq-l{max-width:200px}
.rfq-addsup{display:flex;gap:6px;margin:.5rem 0}.rfq-addsup .fi{flex:1;min-width:0}
.rfq-sup{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.rfq-gwrap{overflow-x:auto;margin:.5rem 0}.rfq-grid{border-collapse:collapse;width:100%;font-size:12px}.rfq-grid td,.rfq-grid th{vertical-align:middle;padding:5px 6px;border-bottom:1px solid var(--border);text-align:left}.rfq-grid th{font-size:11px}.rfq-gdesc{min-width:160px;font-size:12px}
.rfq-cell{white-space:nowrap}.rfq-cell .rfq-price{width:90px;display:inline-block;margin-right:4px}
.rfq-chosen{background:#e6f4ef}
.pv-rfq .rfq-blank{border-bottom:1px solid var(--border)}
@media(max-width:700px){.rfq-row{grid-template-columns:minmax(0,1fr)}.rfq-cells{grid-template-columns:56px minmax(0,1fr) 64px}.rfq-desc{grid-column:1/-1;grid-row:2}}
@media(max-width:520px){
 .pv .pv-rfq tr{grid-template-columns:auto minmax(0,1fr) auto auto}
 .pv .pv-rfq td:first-child{grid-column:auto;padding-bottom:6px}
 .pv .pv-rfq td:nth-child(2)::after{content:none}
 .pv .pv-rfq td:last-child{display:none}
}
/* 06d: the restore's progress line (fixed at the top until the restore has finished; with the error if it fails) */
.restore-prog{position:fixed;top:calc(12px + env(safe-area-inset-top,0px));left:50%;transform:translateX(-50%);z-index:3000;display:flex;align-items:center;gap:10px;max-width:calc(100vw - 32px);padding:.6rem .9rem;border-radius:var(--r);background:#eef4ff;border:1px solid #c7d7f8;color:#1a3a7a;font-size:13px;line-height:1.5;box-shadow:0 4px 18px rgba(0,0,0,.12)}
.restore-prog.err{background:#fff1f0;border-color:#f3b4b9;color:#8a1c26}
.restore-prog[hidden],.restore-prog [hidden]{display:none}
/* 06g saved-name suggestions (app/suggest.js): beside the field, never over it; limited and scrolling */
.sug{position:fixed;z-index:3100;background:var(--white);border:1px solid var(--border2);border-radius:7px;box-shadow:0 6px 20px rgba(15,14,23,.18);overflow-y:auto;overscroll-behavior:contain;padding:3px 0;box-sizing:border-box}
.sug-opt{display:block;width:100%;text-align:left;background:none;border:0;padding:9px 12px;font-family:'Syne',sans-serif;font-size:14px;color:var(--ink);cursor:pointer;overflow-wrap:anywhere}
.sug-opt:hover,.sug-opt.on{background:var(--cream)}
/* 06h: a line with no price yet (an RFQ item with no supplier chosen); RFQ items named by count in a message */
.li-noprice{font-size:10px;font-weight:700;color:var(--accent2);margin-top:2px}
.li-noprice[hidden]{display:none}
.rfq-grid tr.rfq-open td{background:#fff4e5}
.rfq-useall{display:block;margin-top:4px;white-space:normal;text-align:left}
