r:var(--mut);font-size:.88rem;margin:.25rem 0 0} .grid{display:grid;grid-template-columns:1fr 1fr;gap:.75rem} @media(max-width:720px){.grid{grid-template-columns:1fr}} label{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--mut);margin-bottom:.25rem} input,textarea,select{width:100%;padding:.55rem .65rem;border-radius:10px;border:1px solid var(--line);background:#120e0c;color:var(--tx);font:inherit} textarea{min-height:70px;resize:vertical} .card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:1rem;margin-bottom:.85rem} .row{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.75rem} button,.btn{appearance:none;border:1px solid var(--line);background:#3a2c22;color:var(--tx);padding:.55rem .9rem;border-radius:10px;font-weight:700;cursor:pointer} button.primary{background:linear-gradient(135deg,#e8a54b,#c47a28);color:#1a1205;border-color:transparent} table{width:100%;border-collapse:collapse;margin-top:.5rem;font-size:.92rem} th,td{border-bottom:1px solid var(--line);padding:.45rem .3rem;text-align:left} th{color:var(--mut);font-size:.72rem;text-transform:uppercase} .totals{text-align:right;margin-top:.75rem;font-size:1.05rem} .totals strong{color:var(--gold)} #preview{background:#fff;color:#111;border-radius:8px;padding:1.5rem;margin-top:1rem} #preview h2{margin:0 0 .25rem;font-size:1.2rem} #preview .meta{color:#555;font-size:.85rem;margin-bottom:1rem} #preview table{font-size:.9rem} #preview th{color:#666} footer{margin-top:1.5rem;color:var(--mut);font-size:.78rem} a{color:var(--gold)} .chip{display:inline-block;font-size:.7rem;padding:.2rem .5rem;border-radius:999px;border:1px solid var(--line);color:var(--ok)} /* polished QoL */ html { -webkit-text-size-adjust: 100%; } body { overflow-x: hidden; } main, .wrap { overflow-wrap: anywhere; word-wrap: break-word; } h1, h2, .sub, p, footer, label, td, th, .muted { overflow-wrap: anywhere; word-break: break-word; hyphens: auto; } .sub, .muted, p.sub { line-height: 1.55 !important; max-width: 62ch; white-space: normal !important; text-overflow: unset !important; overflow: visible !important; } .card, .term-frame { overflow: visible; } .term-frame { max-width: 100%; } canvas, img, video, svg { max-width: 100% !important; height: auto !important; } input, select, textarea, button, a.cta, button.cta { min-height: 44px; max-width: 100%; } pre, code { white-space: pre-wrap; overflow-x: auto; max-width: 100%; } .nf-benefits { display: grid; grid-template-columns: 1fr 1fr; gap: .65rem; margin: 1rem 0 1.25rem; } @media (max-width:560px){ .nf-benefits { grid-template-columns: 1fr; } } .nf-benefits .b { border: 1px solid color-mix(in srgb, var(--border, #24314d) 80%, transparent); border-radius: 12px; padding: .7rem .85rem; background: color-mix(in srgb, var(--card, #121a2b) 88%, #000 12%); font-size: .9rem; line-height: 1.45; } .nf-benefits .b strong { display:block; color: var(--accent, #f6b73c); margin-bottom: .2rem; font-size: .78rem; letter-spacing: .04em; text-transform: uppercase; } .nf-hubbar { display:flex; flex-wrap:wrap; gap:.55rem .85rem; align-items:center; margin: 1.25rem 0 .5rem; font-size: .85rem; } .nf-hubbar a { color: var(--accent2, var(--accent, #5ef0c0)); } .nf-hubbar .sep { opacity:.4; } /* diamond-fused titanium QoL */ html { -webkit-text-size-adjust: 100%; } body { overflow-x: hidden; } main, .wrap { overflow-wrap: anywhere; word-wrap: break-word; } h1, h2, .sub, p, footer, label, td, th, .muted { overflow-wrap: anywhere; word-break: break-word; hyphens: auto; } .sub, .muted, p.sub { line-height: 1.55 !important; max-width: 62ch; white-space: normal !important; text-overflow: unset !important; overflow: visible !important; } .card, .term-frame { overflow: visible; } .term-frame { max-width: 100%; } canvas, img, video, svg { max-width: 100% !important; height: auto !important; } input, select, textarea, button, a.cta, button.cta { min-height: 44px; max-width: 100%; } pre, code { white-space: pre-wrap; overflow-x: auto; max-width: 100%; } .nf-benefits { display: grid; grid-template-columns: 1fr 1fr; gap: .65rem; margin: 1rem 0 1.25rem; } @media (max-width:560px){ .nf-benefits { grid-template-columns: 1fr; } } .nf-benefits .b { border: 1px solid color-mix(in srgb, var(--border, #24314d) 80%, transparent); border-radius: 12px; padding: .7rem .85rem; background: color-mix(in srgb, var(--card, #121a2b) 88%, #000 12%); font-size: .9rem; line-height: 1.45; } .nf-benefits .b strong { display:block; color: var(--accent, #f6b73c); margin-bottom: .2rem; font-size: .78rem; letter-spacing: .04em; text-transform: uppercase; } .nf-hubbar { display:flex; flex-wrap:wrap; gap:.55rem .85rem; align-items:center; margin: 1.25rem 0 .5rem; font-size: .85rem; } .nf-hubbar a { color: var(--accent2, var(--accent, #5ef0c0)); } .nf-hubbar .sep { opacity:.4; }

ForgeBill

Build a simple invoice or estimate with line items, tax, and print-ready total.

Use freeFull core runs in your browser — no account required.
ProFree core · Northern Forge. One-time unlock on th. One-time unlock on this device.
Local-firstYour data stays in the browser unless you export it.

Invoice & estimate one-pager for freelancers. Print/PDF, local-only.

Free core · Northern Forge
DescriptionQtyRate
Subtotal: 0.00 · Tax: 0.00 · Total: 0.00