:root{--ink:#111111;--ink-70:#3a3a3a;--ink-50:#6b6b6b;--ink-30:#a8a8a8;--ink-10:#f0f0f0;--hair:#e4e4e4;--surface:#f6f6f6;--bg:#f2f2f4;--blue:#1e4fe0;--danger:#b91c1c}*{box-sizing:border-box;margin:0;padding:0}#root,body,html{height:100%;font-family:var(--font-open-sans),system-ui,sans-serif;color:var(--ink);background:#ffffff;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mono{font-family:var(--font-ibm-plex-mono),ui-monospace,monospace}button{font-family:inherit}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.topbar{height:56px;border-bottom:1px solid var(--hair);justify-content:space-between;padding:0 20px;flex-shrink:0;background:#fff;gap:16px}.topbar,.topbar-title{display:flex;align-items:center}.topbar-title{font-size:13px;font-weight:500;letter-spacing:-.1px;color:var(--ink-70);gap:10px;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.topbar-title .brand{color:var(--blue);font-weight:700;letter-spacing:-.6px;font-size:15px}.topbar-title .sep{width:1px;height:16px;background:var(--hair);flex-shrink:0}.topbar-actions{display:flex;gap:8px;flex-shrink:0}.btn{font-size:13px;font-weight:500;padding:8px 14px;border-radius:6px;border:1px solid transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease;line-height:1;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.btn-primary{background:var(--ink);color:#fff;border-color:var(--ink)}.btn-primary:hover{background:#000}.btn-ghost{background:#fff;color:var(--ink);border-color:var(--hair)}.btn-ghost:hover{border-color:var(--ink-30);background:var(--ink-10)}.icon-btn{background:transparent;color:var(--ink-50);border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;width:24px;height:24px;transition:all .15s ease;flex-shrink:0}.icon-btn:hover{background:#fef2f2;color:var(--danger)}.icon-btn:focus-visible{outline:2px solid var(--ink);outline-offset:1px}.main{flex:1 1;display:grid;grid-template-columns:440px 1fr;min-height:0;overflow:hidden}@media (max-width:1023px){.main{grid-template-columns:1fr;grid-template-rows:auto 1fr}}.editor{overflow-y:auto;border-right:1px solid var(--hair);background:#fff}@media (max-width:1023px){.editor{border-right:none;border-bottom:1px solid var(--hair);max-height:55vh}}.section{padding:22px 24px;border-bottom:1px solid var(--hair)}.section:last-child{border-bottom:none}.section-label{font-family:var(--font-ibm-plex-mono),monospace;font-size:10px;letter-spacing:1.6px;text-transform:uppercase;color:var(--ink-50);font-weight:500;margin-bottom:16px}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field:last-child{margin-bottom:0}.field-label{font-size:12px;color:var(--ink-50);font-weight:500}.field-row{display:grid;grid-gap:10px;gap:10px}.field-row-2{grid-template-columns:1fr 1fr}.field-row-qty-rate{grid-template-columns:90px 1fr 1fr}.input,.select,.textarea{font-size:13.5px;color:var(--ink);padding:9px 12px;border:1px solid var(--hair);border-radius:6px;background:#fff;width:100%;transition:border-color .15s ease,box-shadow .15s ease;outline:none;line-height:1.4;font-family:var(--font-open-sans),sans-serif}.input.is-mono{font-family:var(--font-ibm-plex-mono),monospace;font-size:12.5px;letter-spacing:.1px}.input:hover:not(:focus),.select:hover:not(:focus),.textarea:hover:not(:focus){border-color:var(--ink-30)}.input:focus,.select:focus,.textarea:focus{border-color:var(--ink)}.textarea{resize:vertical;min-height:64px;line-height:1.55;font-family:var(--font-open-sans),sans-serif}.input-money,.input-num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-align:right}.input[type=number]::-webkit-inner-spin-button,.input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.input[type=number]{-moz-appearance:textfield}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%236b6b6b' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.item-card{border:1px solid var(--hair);border-radius:8px;padding:14px;margin-bottom:10px;background:#fff;transition:border-color .15s ease}.item-card:hover{border-color:var(--ink-30)}.item-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;gap:8px}.item-index{font-family:var(--font-ibm-plex-mono),monospace;font-size:10px;letter-spacing:1.6px;color:var(--ink-30);font-weight:500}.item-amount{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:13px;color:var(--ink);font-weight:600;margin-left:auto;margin-right:4px}.add-item-btn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;padding:10px;background:transparent;border:1px dashed var(--hair);border-radius:8px;color:var(--ink-50);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.add-item-btn:hover{border-color:var(--ink);color:var(--ink);background:var(--ink-10)}.preview-bg{background:var(--bg);overflow-y:auto;padding:32px 16px 80px}.paper{background:#fff;width:100%;max-width:780px;margin:0 auto;padding:48px 52px 40px;box-shadow:0 2px 24px rgba(0,0,0,.06),0 0 0 1px rgba(0,0,0,.04);font-size:10pt;line-height:1.5;color:var(--ink)}@media (max-width:640px){.paper{padding:32px 28px 28px}.preview-bg{padding:16px 10px 60px}}.inv-header{display:flex;justify-content:space-between;align-items:flex-start;padding-bottom:22px;border-bottom:1.2px solid var(--ink);gap:16px}.inv-logo{font-family:var(--font-open-sans),sans-serif;font-size:26pt;font-weight:700;letter-spacing:-1.8px;color:var(--blue);line-height:1;overflow-wrap:anywhere}.inv-logo-sub{font-family:var(--font-ibm-plex-mono),monospace;margin-top:8px;font-size:8pt;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-50);font-weight:400}.inv-doc-title{text-align:right;flex-shrink:0}.inv-doc-title h1{font-family:var(--font-open-sans),sans-serif;font-size:32pt;font-weight:300;letter-spacing:7px;color:var(--ink);text-transform:uppercase;line-height:1;margin:0}.inv-doc-title .ref{font-family:var(--font-ibm-plex-mono),monospace;margin-top:12px;font-size:9pt;color:var(--ink-50);letter-spacing:.3px}.inv-doc-title .ref strong{color:var(--ink);font-weight:500;margin-left:4px}.inv-meta{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:16px;gap:16px;margin:18px 0 22px}.inv-meta-cell{min-width:0}.inv-meta-cell:last-child{text-align:right}.inv-meta-label{font-size:8pt;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-50);font-weight:500;margin-bottom:6px}.inv-meta-label,.inv-meta-value{font-family:var(--font-ibm-plex-mono),monospace}.inv-meta-value{font-size:10pt;color:var(--ink);font-weight:400;letter-spacing:.1px;overflow-wrap:anywhere}.inv-parties{display:grid;grid-template-columns:1fr 1fr;grid-gap:48px;gap:48px;padding-top:18px;padding-bottom:22px;border-top:.5px solid var(--hair)}@media (max-width:520px){.inv-parties{grid-template-columns:1fr;gap:20px}.inv-meta{grid-template-columns:repeat(2,1fr)}}.inv-party{min-width:0}.inv-party-label{font-family:var(--font-ibm-plex-mono),monospace;font-size:8pt;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-50);font-weight:500;margin-bottom:10px}.inv-party-name{font-size:13pt;font-weight:600;color:var(--ink);margin-bottom:6px;letter-spacing:-.2px}.inv-party-address,.inv-party-name{font-family:var(--font-open-sans),sans-serif;overflow-wrap:anywhere}.inv-party-address{font-size:10pt;color:var(--ink-70);line-height:1.55;white-space:pre-line}.inv-party-meta{margin-top:10px;font-size:9pt;color:var(--ink-50);display:flex;flex-wrap:wrap;gap:6px}.inv-party-meta .k{font-size:8pt;letter-spacing:1.2px;text-transform:uppercase}.inv-party-meta .k,.inv-party-meta .v{font-family:var(--font-ibm-plex-mono),monospace;font-weight:500}.inv-party-meta .v{color:var(--ink)}.inv-items-header{display:grid;grid-template-columns:36px 1fr 60px 100px 110px;grid-gap:8px;gap:8px;padding:10px 0;border-top:1.2px solid var(--ink);border-bottom:.5px solid var(--hair);font-family:var(--font-ibm-plex-mono),monospace;font-size:8pt;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-50);font-weight:500}@media (max-width:640px){.inv-items-header{grid-template-columns:28px 1fr 48px 72px 84px;font-size:7.5pt;gap:6px}}.inv-item{display:grid;grid-template-columns:36px 1fr 60px 100px 110px;grid-gap:8px;gap:8px;padding:14px 0;border-bottom:.5px solid var(--hair);align-items:flex-start}@media (max-width:640px){.inv-item{grid-template-columns:28px 1fr 48px 72px 84px;gap:6px}}.inv-item-num{font-family:var(--font-ibm-plex-mono),monospace;color:var(--ink-30);font-size:10pt;padding-top:2px}.inv-item-desc{min-width:0;padding-right:12px}.inv-item-title{font-size:11.5pt;font-weight:600;color:var(--ink);margin-bottom:4px;letter-spacing:-.1px}.inv-item-body,.inv-item-title{font-family:var(--font-open-sans),sans-serif;overflow-wrap:anywhere}.inv-item-body{font-size:9.5pt;color:var(--ink-50);line-height:1.5;white-space:pre-line}.inv-item-qty{font-family:var(--font-ibm-plex-mono),monospace;font-size:10pt;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.inv-item-amount,.inv-item-qty,.inv-item-rate{color:var(--ink);padding-top:2px;text-align:right}.inv-item-amount,.inv-item-rate{font-family:var(--font-open-sans),sans-serif;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:10.5pt;overflow-wrap:anywhere}.inv-item-amount{font-weight:600}.inv-totals{display:flex;justify-content:flex-end;margin-top:20px}.inv-totals-inner{width:50%;min-width:260px}@media (max-width:520px){.inv-totals-inner{width:100%}}.inv-totals-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0;font-size:10pt;color:var(--ink-70);gap:10px}.inv-totals-row .label{letter-spacing:.2px}.inv-totals-row .label,.inv-totals-row .val{font-family:var(--font-open-sans),sans-serif}.inv-totals-row .val{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--ink);text-align:right;overflow-wrap:anywhere}.inv-totals-row.grand{margin-top:6px;padding-top:14px;padding-bottom:4px;border-top:1.2px solid var(--ink)}.inv-totals-row.grand .label{font-family:var(--font-ibm-plex-mono),monospace;text-transform:uppercase;font-size:9pt;letter-spacing:1.8px;font-weight:500;color:var(--ink-50)}.inv-totals-row.grand .val{font-family:var(--font-open-sans),sans-serif;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--ink);font-size:20pt;font-weight:700;letter-spacing:-.6px}.inv-totals-row.grand .val .ccy{font-size:10pt;font-weight:500;margin-left:6px;letter-spacing:.3px}.inv-totals-row.grand .val .ccy,.inv-vat-note{font-family:var(--font-open-sans),sans-serif;color:var(--ink-50)}.inv-vat-note{margin-top:8px;text-align:right;font-size:8.5pt}.inv-payment{margin-top:30px;padding:22px 24px;background:var(--surface)}.inv-payment-label{font-family:var(--font-ibm-plex-mono),monospace;font-size:8pt;letter-spacing:1.6px;text-transform:uppercase;color:var(--ink-50);font-weight:500;margin-bottom:14px}.inv-payment-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px 40px;gap:12px 40px}@media (max-width:520px){.inv-payment-grid{grid-template-columns:1fr;gap:10px}}.pay-row{display:flex;flex-direction:column;min-width:0}.pay-row.full{grid-column:1/-1}.pay-row .k{font-family:var(--font-ibm-plex-mono),monospace;color:var(--ink-50);font-size:8pt;letter-spacing:1.2px;text-transform:uppercase;margin-bottom:3px;font-weight:500}.pay-row .v{color:var(--ink);font-weight:500;overflow-wrap:anywhere}.pay-row .v.is-name{font-family:var(--font-open-sans),sans-serif;font-size:10pt}.pay-row .v.is-code{font-family:var(--font-ibm-plex-mono),monospace;font-size:10pt;letter-spacing:.2px}.inv-footer{margin-top:22px;padding-top:12px;border-top:.5px solid var(--hair);display:flex;justify-content:space-between;font-size:8.5pt;color:var(--ink-50);gap:16px;flex-wrap:wrap}.inv-footer .note{font-family:var(--font-open-sans),sans-serif;flex:1 1;min-width:200px}.inv-footer .note .ref{color:var(--ink)}.inv-footer .note .ref,.inv-footer .page{font-family:var(--font-ibm-plex-mono),monospace}.inv-footer .page{text-align:right;letter-spacing:.3px;white-space:nowrap}@media print{@page{size:A4;margin:0}#root,.app,body,html{height:auto;overflow:visible;background:#fff}.editor,.topbar{display:none!important}.main{display:block}.preview-bg{background:#fff;padding:0;overflow:visible}.paper{max-width:none;margin:0;padding:15mm 18mm 12mm;box-shadow:none;font-size:9.5pt}.inv-logo{font-size:22pt;letter-spacing:-1.6px}.inv-doc-title h1{font-size:28pt;letter-spacing:6px}.inv-meta-value{font-size:9pt}.inv-party-name{font-size:11.5pt}.inv-party-address{font-size:9pt}.inv-items-header{font-size:7pt}.inv-item,.inv-items-header{grid-template-columns:32px 1fr 55px 95px 110px}.inv-item{padding:14px 0}.inv-item-title{font-size:10.5pt}.inv-item-body{font-size:8.5pt}.inv-item-amount,.inv-item-qty,.inv-item-rate{font-size:9.5pt}.inv-totals-row{font-size:9pt}.inv-totals-row.grand .val{font-size:18pt}.inv-payment{margin-top:30px;padding:20px 22px}}.topbar-nav{display:flex;align-items:center;gap:4px}.topbar-nav a{font-size:13px;color:var(--ink-50);text-decoration:none;padding:6px 10px;border-radius:6px}.topbar-nav a:hover{color:var(--ink);background:var(--ink-10)}.topbar-nav a.active{color:var(--ink);font-weight:600}.page-wrap{max-width:960px;margin:0 auto;padding:32px 24px;width:100%}.page-scroll{overflow-y:auto;height:calc(100vh - 56px);background:#fff}.page-title{font-size:20px;font-weight:700;letter-spacing:-.3px;margin-bottom:20px}.table{width:100%;border-collapse:collapse}.table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-50);font-weight:600;padding:8px 10px}.table td,.table th{border-bottom:1px solid var(--hair)}.table td{padding:10px;font-size:13px;vertical-align:middle}.table tr.rowlink{cursor:pointer}.table tr.rowlink:hover td{background:var(--surface)}.table .num{text-align:right}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg)}.login-card{background:#fff;border:1px solid var(--hair);border-radius:10px;padding:32px;width:360px;box-shadow:0 8px 30px rgba(17,17,17,.06)}.login-brand{color:var(--blue);font-weight:700;letter-spacing:-.6px;font-size:22px;margin-bottom:4px}.login-sub{font-size:12px;color:var(--ink-50);margin-bottom:24px}.form-error{color:var(--danger);font-size:12.5px;margin-top:10px}.notice{background:var(--surface);border:1px solid var(--hair);border-radius:8px;padding:14px 16px;font-size:13px;margin:14px 0}.notice strong.mono{font-size:14px;-webkit-user-select:all;-moz-user-select:all;user-select:all}.badge{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;background:var(--ink-10);color:var(--ink-70)}.badge.off{background:#fdecec;color:var(--danger)}.card{border:1px solid var(--hair);border-radius:10px;padding:20px;margin-bottom:16px;background:#fff}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.card-title{font-weight:600;font-size:14px}.actions-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.spacer{flex:1 1}.dirty-dot{width:8px;height:8px;border-radius:50%;background:var(--blue);display:inline-block;margin-left:6px}.muted{color:var(--ink-50)}.directory{flex:1 1;display:grid;grid-template-columns:300px 1fr;min-height:0;overflow:hidden}.directory-list{overflow-y:auto;border-right:1px solid var(--hair);background:#fff;display:flex;flex-direction:column;align-items:stretch}.directory-head{padding:24px 20px 14px}.dir-new{margin:0 20px 16px}.dir-new.is-selected{border-color:var(--ink);background:var(--ink-10)}.dir-row{display:flex;flex-direction:column;gap:2px;align-items:flex-start;text-align:left;width:100%;padding:12px 20px;border:none;border-top:1px solid var(--hair);background:#fff;cursor:pointer;font-size:13.5px;flex-shrink:0}.dir-row:last-child{border-bottom:1px solid var(--hair)}.dir-row:hover{background:var(--surface)}.dir-row.is-selected{background:var(--ink-10)}.dir-row:focus-visible{outline:2px solid var(--ink);outline-offset:-2px}.dir-row-title{font-weight:600;display:flex;align-items:center;gap:8px}.dir-row-sub{font-size:12px}.dir-empty{padding:4px 20px 16px;font-size:13px}.directory-detail{overflow-y:auto;background:#fff}.directory-detail-inner{max-width:720px;margin:0 auto;padding:32px 24px;width:100%}@media (max-width:1023px){.directory{grid-template-columns:1fr;grid-template-rows:auto 1fr}.directory-list{border-right:none;border-bottom:1px solid var(--hair);max-height:40vh}}