@font-face{font-family:"Playfair Display";font-weight:800;font-style:normal;font-display:swap;src:url(fonts/playfair-display-latin-800-normal.woff2) format("woff2")}
:root{--brand-font:"Playfair Display",Georgia,"Times New Roman",serif}
:root{--bg:#f6f4f0;--card:#fff;--ink:#2a2420;--muted:#7a6f66;--accent:#8a5a2b;--accent-ink:#fff;--line:#e4ddd3;--late:#b3261e;--soon:#b26a00;--ok:#2e6b3a}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:17px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
main{max-width:760px;margin:0 auto;padding:16px}
h1{font-size:1.5rem;margin:.2em 0}
h2{font-size:1.1rem;margin:1.2em 0 .4em}
a{color:var(--accent)}
.muted{color:var(--muted)}.small{font-size:.85rem;font-weight:400}
.top{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;background:var(--accent);padding:10px 16px}
.top a,.top .link{color:#fff;text-decoration:none}
.brand{font-family:var(--brand-font);font-weight:800;font-size:1.15rem;text-transform:uppercase;letter-spacing:.1em}
.wordmark{font-family:var(--brand-font);font-weight:800;text-transform:uppercase;letter-spacing:.08em;font-size:1.7rem}
.top nav{display:flex;gap:4px;align-items:center;flex-wrap:wrap}
.top nav a,.top nav .link{padding:7px 12px;border-radius:8px;border-bottom:3px solid transparent;font-weight:500}
.top nav a:hover{background:rgba(255,255,255,.12)}
.top nav a.on{background:rgba(255,255,255,.22);border-bottom-color:#fff;font-weight:700}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;margin:12px 0}
.card.narrow{max-width:420px;margin:32px auto}
.card.off{opacity:.55}
.bar{display:flex;justify-content:space-between;align-items:center;gap:12px}
label{display:block;font-weight:600;margin:12px 0 0}
input,select,textarea{display:block;width:100%;margin-top:4px;padding:12px;font:inherit;border:1px solid #cfc5b8;border-radius:8px;background:#fff;color:var(--ink)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px}
.btn{display:inline-block;background:var(--accent);color:var(--accent-ink);border:0;border-radius:10px;padding:11px 18px;font:inherit;font-weight:600;text-decoration:none;cursor:pointer}
.btn.big{padding:14px 22px;margin-top:16px}
.btn.ghost{background:transparent;color:var(--accent);border:1px solid var(--accent)}
.btn.small{padding:6px 12px;font-size:.9rem}
button.link{background:none;border:0;padding:0;font:inherit;cursor:pointer;text-decoration:underline;color:var(--accent)}
button.danger,.danger{color:var(--late)}
form.inline{display:inline}
form.inline input{display:inline-block;width:auto;margin:0 6px 0 0;padding:6px 10px}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}
.filters input{flex:1 1 220px;margin:0}.filters select{flex:0 0 auto;width:auto;margin:0}
.list{display:flex;flex-direction:column;gap:10px}
.order{display:block;background:var(--card);border:1px solid var(--line);border-left:6px solid var(--line);border-radius:12px;padding:12px 14px;color:inherit;text-decoration:none}
.order.late{border-left-color:var(--late)}.order.soon{border-left-color:var(--soon)}
.order.week{border-left-color:#d4b106}.order.ok{border-left-color:var(--ok)}
.order.done,.order.closed{opacity:.75}
.badge{display:inline-block;border-radius:999px;padding:2px 10px;font-size:.82rem;font-weight:700;white-space:nowrap;background:#eee;color:#555}
.badge.late{background:#fbe5e3;color:var(--late)}
.badge.soon{background:#fde8cc;color:#a34f00}
.badge.week{background:#fff3bf;color:#7a5b00}
.badge.ok{background:#e3f1e6;color:var(--ok)}
.badge.done{background:#e6eee8;color:var(--ok)}
.order .row1{display:flex;justify-content:space-between;gap:8px;align-items:center}
.order .row2{color:var(--muted);margin:2px 0 6px}
.order .row3{display:flex;gap:14px;flex-wrap:wrap;font-size:.92rem}
.order .row4{display:flex;gap:14px;flex-wrap:wrap;font-size:.92rem;margin-top:6px;padding-top:6px;border-top:1px dashed var(--line)}
.order .bal.due strong{color:#a34f00}.order .bal.paid strong{color:var(--ok)}
.pill{background:#efe6da;color:var(--accent);border-radius:999px;padding:2px 10px;font-size:.8rem;font-weight:600;white-space:nowrap}
.pill.alt{background:#e6eee8;color:var(--ok)}
dl{display:grid;grid-template-columns:150px 1fr;gap:8px 12px;margin:12px 0}
dt{color:var(--muted)}dd{margin:0}
.pre{white-space:pre-wrap}
.note{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin:8px 0}
.note .meta{font-size:.85rem;color:var(--muted);margin-bottom:4px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0 12px}
.actions{display:flex;gap:10px;flex-wrap:wrap}
.flash{padding:12px 14px;border-radius:10px;margin:10px 0;font-weight:600}
.flash.ok{background:#e3f1e6;color:var(--ok)}.flash.error{background:#fbe5e3;color:var(--late)}
.statusform select{max-width:260px}
.useractions{margin-top:10px;display:flex;gap:10px;flex-wrap:wrap}
.dangerzone{margin:32px 0 8px;text-align:center}
input[type=file]{padding:10px;background:#faf7f2}
.filelist{list-style:none;margin:6px 0 0;padding:0;font-size:.9rem;color:var(--ok)}
.filelist[data-busy]::after{content:"Preparing photos…";color:var(--muted)}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:10px 0}
.gallery figure{margin:0;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column}
.gallery img,.gallery .doc{display:block;width:100%;aspect-ratio:1;object-fit:cover;background:#efe6da}
.gallery .doc{display:flex;flex-direction:column;gap:2px;align-items:center;justify-content:center;text-align:center;padding:8px;color:var(--accent);font-weight:700;font-size:1.5rem;text-decoration:none;word-break:break-all;line-height:1.2}
.gallery .doc small{font-size:.72rem;font-weight:400;color:var(--muted)}
.gallery a{text-decoration:none}
.gallery figcaption{padding:6px 8px;font-size:.85rem;display:flex;flex-direction:column;gap:2px}
.printbtns{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0 12px}
/* income page */
.bar2{display:flex;justify-content:space-between;align-items:center;gap:12px}
.bar2 select{width:auto;margin:0}
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:10px 0}
.tile{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.tile.big{grid-column:1/-1;background:var(--accent);border-color:var(--accent);color:#fff}
.tile .lbl{font-size:.82rem;opacity:.8}
.tile .val{font-size:1.25rem;font-weight:700;margin-top:2px;word-break:break-word}
.tile.big .val{font-size:2rem}
.basis{margin:6px 2px 14px}
.month{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 14px;margin:8px 0}
.month.future{opacity:.5}
.mhead{display:flex;align-items:baseline;gap:10px}
.mhead .mrev{margin-left:auto}
.meter{height:8px;background:#efe6da;border-radius:99px;margin:8px 0 2px;overflow:hidden}
.meter span{display:block;height:100%;background:var(--accent);border-radius:99px}
.month details{margin-top:6px}
.month summary{cursor:pointer;color:var(--accent);font-size:.9rem}
.morders{list-style:none;margin:8px 0 0;padding:0}
.morders li{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;padding:6px 0;border-top:1px dashed var(--line)}
.morders .amt{margin-left:auto;font-weight:600}
@media(max-width:420px){.tiles{grid-template-columns:1fr 1fr}.tile.big .val{font-size:1.7rem}.tile:last-child{grid-column:1/-1}}
.typerow{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:10px 14px;margin:8px 0}
.typerow form.inline input{min-width:0;width:11em}
.typerow>form.inline:first-child{flex:1 1 100%}
.btn.danger{color:var(--late);border-color:var(--late)}
/* printable documents */
.sheetpage{background:#e9e5de}
.toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;max-width:820px;margin:12px auto;padding:0 16px}
.warnbox{max-width:820px;margin:0 auto 12px;padding:10px 14px;border-radius:10px;background:#fff3bf;color:#7a5b00;font-weight:600}
.sheet{background:#fff;max-width:820px;margin:0 auto 24px;padding:32px 36px;border:1px solid var(--line);font-size:15px}
.sheet-head{display:flex;justify-content:space-between;gap:24px;border-bottom:2px solid #333;padding-bottom:14px;margin-bottom:18px}
.biz{font-family:var(--brand-font);font-size:1.5rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.doc-meta{text-align:right}
.doc-title{font-size:1.25rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.sheet h3{font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;color:#666;margin:18px 0 6px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:24px}
table.items,table.amounts{width:100%;border-collapse:collapse}
table.items th{text-align:left;font-size:.78rem;text-transform:uppercase;color:#666;border-bottom:1px solid #999;padding:6px 8px}
table.items td{padding:10px 8px;border-bottom:1px solid #ddd;vertical-align:top}
table.items td:first-child{width:30%;font-weight:600}
table.amounts{margin-top:22px}
table.amounts td{padding:8px}
table.amounts td.r{text-align:right;white-space:nowrap}
table.amounts tr.grand td{border-top:2px solid #333;font-weight:700;font-size:1.15rem}
.paid{margin-top:10px;text-align:right;color:var(--ok);font-weight:700;letter-spacing:.1em}
.sign{margin-top:44px}
.sigrow{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:56px}
.sigrow .line{border-top:1px solid #333;margin-bottom:4px}
.sheet-foot{margin-top:40px;padding-top:10px;border-top:1px solid #ccc;text-align:center;color:#555;font-size:.9rem;white-space:pre-wrap}
@media print{
  @page{size:A4;margin:14mm}
  .noprint,.warnbox{display:none!important}
  body,.sheetpage{background:#fff}
  .sheet{border:0;padding:0;max-width:none;margin:0}
}
@media(max-width:600px){.sheet{padding:18px}.sheet-head{flex-direction:column}.doc-meta{text-align:left}.two{grid-template-columns:1fr}}
@media(max-width:520px){dl{grid-template-columns:1fr}dt{margin-top:6px}}
/* inventory */
.navbadge{display:inline-block;min-width:1.4em;padding:0 6px;border-radius:999px;background:#fff;color:var(--late);font-size:.78rem;font-weight:700;text-align:center;line-height:1.5}
.ctxbanner{display:flex;flex-wrap:wrap;gap:8px 12px;justify-content:space-between;align-items:center;background:#fff3bf;color:#5c4400;border-radius:10px;padding:10px 14px;margin:8px 0}
.ctxbanner .btn{background:var(--accent)}
.qtybig{font-size:1.35rem;font-weight:800;white-space:nowrap}.qtybig small{font-size:.8rem;font-weight:400;color:var(--muted)}
.bigstock{font-size:2.2rem;font-weight:800;line-height:1.2}.bigstock span:not(.badge){font-size:1rem;font-weight:400;color:var(--muted)}
.bigstock .badge{vertical-align:middle;margin-left:6px}
.valuecard .valbig{font-size:1.6rem;font-weight:800}
.btn.use{background:var(--late)}.btn.recv{background:var(--ok)}
.actions .btn.big{flex:1 1 140px;text-align:center}
details>summary{cursor:pointer;color:var(--accent);margin-top:10px}
details.card>summary{margin-top:0}
.move.voided{opacity:.55}.move.voided strong{text-decoration:line-through}
.plus{color:var(--ok)}.minus{color:var(--late)}
.countrow{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;margin:8px 0}
.countin{display:flex;align-items:center;gap:6px}.countin input{width:7.5em;margin:0}
table.shop td:first-child{width:36%}
.blank{display:inline-block;width:5.5em;border-bottom:1px solid #333;height:1.1em}
/* projects / CRM */
.chips{display:flex;gap:6px;overflow-x:auto;padding:4px 0 8px;margin:4px 0;-webkit-overflow-scrolling:touch}
.chip{flex:0 0 auto;padding:6px 14px;border-radius:999px;background:var(--card);border:1px solid var(--line);color:var(--ink,#333);text-decoration:none;font-size:.92rem;font-weight:600}
.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}
.tiles.four{grid-template-columns:repeat(4,1fr)}
.tiles.money{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
a.tile{display:block;color:inherit;text-decoration:none}
a.tile:hover{border-color:var(--accent)}
.tile .sub{font-size:.8rem;color:var(--muted);margin-top:2px}.tile .sub.bad{color:var(--late);font-weight:700}
@media(max-width:700px){.tiles.four{grid-template-columns:repeat(2,1fr)}}
.funnel .fgroup{margin-top:10px;text-transform:uppercase;letter-spacing:.04em;font-size:.72rem}
.frow{display:grid;grid-template-columns:7.5em 1fr 2.2em;align-items:center;gap:8px;color:inherit;text-decoration:none;padding:2px 0}
.frow .meter{margin:0}.frow strong{text-align:right}
.meter.ord span{background:var(--ok)}
.conv{margin-top:12px}
.alist{list-style:none;margin:6px 0;padding:0}.alist li{padding:6px 0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center}
.alist li:last-child{border-bottom:0}
.card h3{margin:12px 0 4px;font-size:1rem}
.stagestrip{display:flex;gap:4px;overflow-x:auto;padding-bottom:6px}
.stagestrip .step{flex:1 0 auto;text-align:center;padding:5px 8px;border-radius:8px;background:#efe6da;color:var(--muted);font-size:.78rem;white-space:nowrap}
.stagestrip .step.ord{background:#e6eee8}
.stagestrip .step.now{background:var(--accent);color:#fff;font-weight:700}
.confirmform{background:#f6f1e9;border-radius:10px;padding:10px 12px;margin:8px 0}
.lostform{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end;margin-top:10px}.lostform label{flex:1 1 200px;margin:0}
.otherstage{margin-top:8px}
.matadd .actions{display:flex;gap:8px;flex-wrap:wrap}
table.mats{width:100%;border-collapse:collapse;margin-top:12px;font-size:.92rem}
table.mats th,table.mats td{padding:6px 4px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.estbox{background:#f6f1e9;border-radius:10px;padding:10px 14px;margin-top:14px}.estbox h3{margin-top:0}
.estbox.costbox{background:#eef2f6}
.warn{color:#7a4a00;background:#fff3bf;border-radius:8px;padding:6px 10px}
fieldset.markup{border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin:10px 0}
.selpreview .valbig{font-size:1.4rem;font-weight:800}
.btn.use{color:#fff}
.matwrap{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch}
.card{min-width:0}.stagebox,.card{max-width:100%}
.tiles.four .tile:last-child,.tiles.money .tile:last-child{grid-column:auto}
table.mats td:last-child{white-space:nowrap}
/* wide project page, materials table + inventory side panel */
main.wide{max-width:1240px}
.projtop,.projbottom{display:grid;grid-template-columns:1fr;gap:0 20px}
@media(min-width:1000px){.projtop,.projbottom{grid-template-columns:1fr 1fr;align-items:start}}
.matlayout{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:1000px){.matlayout{grid-template-columns:minmax(0,1fr) 300px;align-items:start}}
.matrow{display:flex;gap:12px;flex-wrap:wrap}
.matrow label{flex:1 1 140px;margin:0 0 8px}.matrow .f-item{flex:3 1 260px}
.unitsuffix{color:var(--accent);font-weight:700}
.matstatus{font-size:.88rem;color:var(--muted);margin:0 0 8px}
.matstatus.ok{color:var(--ok);font-weight:600}.matstatus.custom{color:#7a4a00;font-weight:600}
.matrow.custom{background:#fbf5e6;border-radius:10px;padding:8px 10px;margin-bottom:8px}
.invpanel{border:1px solid var(--line);border-radius:12px;background:#fcfaf6;padding:10px;max-height:560px;display:flex;flex-direction:column}
.invhead{display:flex;justify-content:space-between;margin-bottom:6px}
.invlist{overflow-y:auto;display:flex;flex-direction:column;gap:4px}
.invitem{display:block;width:100%;text-align:left;background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer;font:inherit;color:inherit}
.invitem:hover{border-color:var(--accent)}.invitem.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.invitem[hidden]{display:none}
.invitem .in{display:block;font-weight:600}.invitem .im{display:block;font-size:.8rem;opacity:.75}
@media(max-width:999px){.invpanel{max-height:260px}}
table.mats .num{text-align:right;white-space:nowrap}
table.mats td.acts{text-align:right}
table.mats tfoot td{border-top:2px solid #999;border-bottom:0;padding-top:8px}
table.mats tr.customrow td:first-child{font-weight:600}
.tag{background:#fff3bf;color:#7a4a00;border-radius:6px;padding:0 6px;font-size:.72rem;font-weight:700;vertical-align:middle}
.ratebox{display:flex;gap:4px;align-items:center;justify-content:flex-end}.ratebox input{width:5.5em;margin:0;padding:4px 6px}
table.mats td:first-child{width:auto}
[hidden]{display:none!important}
.projtop>div,.projbottom>div,.matlayout>*{min-width:0}
table.mats .ratebox{flex-wrap:nowrap}
table.mats .ratebox input{width:5.2em!important;max-width:5.2em;padding:4px 6px;margin:0}
table.mats th,table.mats td{padding:8px 6px}
table.mats td:first-child{min-width:9em}
.nowrap{white-space:nowrap}
/* expenses */
.addexp>summary{cursor:pointer;color:var(--ink);margin:0;padding:2px 0}
.expfilters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:12px 0}
.expfilters select,.expfilters input[type=search]{width:auto;flex:1 1 150px;margin:0}
.expfilters .chk{display:flex;gap:6px;align-items:center;margin:0;font-size:.9rem}.expfilters .chk input{width:auto;margin:0}
.expgroups{display:grid;grid-template-columns:1fr;gap:0 16px}
@media(min-width:800px){.expgroups{grid-template-columns:1fr 1fr}}
.grow{display:grid;grid-template-columns:minmax(7em,40%) 1fr auto;gap:10px;align-items:center;padding:3px 0;font-size:.92rem}
.grow .meter{margin:0}
.exptable tr.voided td{opacity:.5;text-decoration:line-through}.exptable tr.voided td:last-child{text-decoration:none}
.exptable .num{text-align:right;white-space:nowrap}
.exptable td:first-child{width:auto;font-weight:400}
.expsum{grid-template-columns:1fr}
.tile.big .sub{color:#fff;opacity:.85}
.expfilters .chk{white-space:nowrap}
.exptable td:first-child{width:5.5em}
.onlyphone{display:none}
@media(max-width:700px){.hidephone{display:none}.onlyphone{display:block}.exptable td,.exptable th{padding:8px 6px}}

/* income & expenses side by side */
.mhead{flex-wrap:wrap;gap:6px 14px}
.mhead .mfig{display:inline-flex;gap:5px;align-items:baseline;min-width:92px}
.mhead .mfig:first-of-type{margin-left:auto}
.mnet.neg strong{color:var(--bad,#b3261e)}
.month .meter.outbar span{background:#c98a3a}
.month .meter{margin-top:4px}
.ie2{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:6px}
.ie2>div{min-width:0}
.ie2 h4{margin:4px 0}
.tile.netneg .val{color:var(--bad,#b3261e)}
@media(max-width:700px){.ie2{grid-template-columns:1fr}.mhead .mfig:first-of-type{margin-left:0}}

/* cashbook signs + statement */
.pos{color:#1b6e3a;font-weight:600}.neg{color:#9a2b1f}
.row-actions{display:flex;gap:8px;flex-wrap:wrap}
.stmtbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0}
.stmtbar .grow{flex:1}
.balboxes{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin:10px 0}
.balbox .val.negbal{color:#9a2b1f}
.stmt th a{color:inherit;text-decoration:none;white-space:nowrap}
.stmt th a.on{color:var(--accent)}
.stmt td.num,.stmt th.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.stmt tr.move td{color:var(--muted,#777)}
.stmt tr.adj td{background:#fff6e0}
.stmt td.in{color:#1b6e3a}.stmt td.out{color:#9a2b1f}
.stmt .nowrap{white-space:nowrap}
.warnbox{background:#fff6e0;border:1px solid #e3c36b;border-radius:10px;padding:10px 14px;margin:10px 0}
@media print{header.top,.noprint,.filters,.chips{display:none!important}.card{border:0}}
.stmt{font-size:.93rem}
.stmt th,.stmt td{padding:7px 8px;vertical-align:top}
.stmt th:nth-child(2){width:34%}
.stmt td:nth-child(4){white-space:nowrap}
.stmt td:nth-child(8){max-width:240px;line-height:1.3}
.filters.noprint select,.filters.noprint input{min-width:0}
@media(min-width:900px){.filters.noprint select{flex:0 1 200px}.filters.noprint input[type=search]{flex:1 1 200px}}

/* quick entry */
.quick td{padding:4px 5px;vertical-align:top}
.quick input,.quick select{width:100%;min-width:0;padding:7px 8px;font-size:.95rem}
.quick th{white-space:nowrap}
.quick td:nth-child(1){min-width:128px}.quick td:nth-child(2){min-width:230px}.quick td:nth-child(3){min-width:96px}
.quick td:nth-child(4),.quick td:nth-child(5),.quick td:nth-child(6),.quick td:nth-child(7){min-width:130px}
.quick input.amt{text-align:right}
.quick select.guess{background:#fff6e0;border-color:#e3c36b}
.quick tr.bad td{background:#fdecea}
.qerr{color:#9a2b1f;margin-top:2px}
.qtop{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:8px}.qtop label{flex:0 1 220px}
.qfoot{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin:8px 0}
.qpaste textarea{width:100%}
.tiles.expsum{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
