:root{--bg:#f4f5f7;--card:#fff;--ink:#1f2a37;--ink-2:#55606e;--ink-3:#8b95a3;--line:#e3e6ea;--brand:#1f2a37;--gold:#b8894a;--danger:#c0392b;--ok:#2e7d5b;--radius:12px;--safe-b:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{background:var(--bg);color:var(--ink);-webkit-text-size-adjust:100%;margin:0;padding:0;font-family:Noto Sans TC,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang TC,Microsoft JhengHei,sans-serif;font-size:16px}#root{min-height:100vh}input,select,textarea,button{color:inherit;font-family:inherit;font-size:16px}input:focus,select:focus,textarea:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px #1f2a3714}.app{min-height:100vh;padding-bottom:calc(64px + var(--safe-b))}.app-preview{padding-bottom:0}.page{max-width:720px;margin:0 auto;padding:12px 14px 0}.spacer{height:90px}.hdr{justify-content:space-between;align-items:center;gap:10px;padding:10px 2px 14px;display:flex}.hdr h1{letter-spacing:.5px;margin:2px 0 0;font-size:24px}.hdr-sub{color:var(--ink-3);font-size:12px}.hdr-sticky{z-index:20;background:var(--bg);border-bottom:1px solid var(--line);padding:10px 0;position:sticky;top:0}.hdr-title{text-align:center;flex:1;line-height:1.2;overflow:hidden}.hdr-title b{white-space:nowrap;text-overflow:ellipsis;font-size:15px;display:block;overflow:hidden}.hdr-title small{color:var(--ink-3);font-size:11px}.status-sel{border:1px solid var(--line);background:#fff;border-radius:20px;padding:6px 8px;font-size:13px}.btn{cursor:pointer;color:var(--ink);background:#eceef1;border:0;border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:10px 14px;font-size:14px;font-weight:500;display:inline-flex}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5}.btn-primary{background:var(--brand);color:#fff}.btn-soft{color:var(--brand);background:#e8ecf1}.btn-ghost{color:var(--ink-2);background:0 0}.btn-lg{flex:1;padding:13px 20px;font-size:16px}.btn-danger-o{border:1px solid var(--danger);color:var(--danger);background:0 0;width:100%;margin-top:10px}.btn-row{gap:8px;display:flex}.icon-btn{color:var(--ink-3);cursor:pointer;background:0 0;border:0;padding:6px 8px;font-size:16px}.icon-btn.danger{color:var(--danger)}.stats{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px;display:grid}.stat{background:var(--card);border-radius:var(--radius);text-align:center;padding:10px}.stat b{font-size:20px;display:block}.stat .stat-money{color:var(--gold);font-size:15px}.stat span{color:var(--ink-3);font-size:11px}.toolbar{margin-bottom:8px}.search{border:1px solid var(--line);background:#fff;border-radius:10px;width:100%;padding:11px 12px}.chips{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.chips-scroll{-webkit-overflow-scrolling:touch;flex-wrap:nowrap;padding-bottom:4px;overflow-x:auto}.chips-scroll::-webkit-scrollbar{display:none}.chip{border:1px solid var(--line);color:var(--ink-2);white-space:nowrap;cursor:pointer;background:#fff;border-radius:20px;padding:6px 12px;font-size:13px}.chip.on{background:var(--brand);border-color:var(--brand);color:#fff}.swatch{cursor:pointer;border:2px solid #0000;border-radius:50%;width:30px;height:30px}.swatch.on{border-color:var(--gold);box-shadow:inset 0 0 0 2px #fff}.cards{flex-direction:column;gap:10px;display:flex}.card{background:var(--card);border-radius:var(--radius);overflow:hidden}.card-main{cursor:pointer;padding:12px 14px}.card-top{align-items:center;gap:8px;margin-bottom:6px;display:flex}.badge{color:var(--ink-2);background:#eceef1;border-radius:20px;padding:2px 8px;font-size:11px}.badge.b-已送出{color:#2b5f9e;background:#e6f0fb}.badge.b-已簽約{color:var(--ok);background:#e4f3ec}.badge.b-已結案{color:var(--gold);background:#f1ece4}.card-no{color:var(--ink-3);font-size:11px}.card-name{font-size:17px;font-weight:500}.card-type{color:var(--ink-3);border:1px solid var(--line);border-radius:4px;margin-left:6px;padding:1px 5px;font-size:11px}.card-addr{color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:12px;overflow:hidden}.card-bot{justify-content:space-between;align-items:baseline;margin-top:8px;display:flex}.card-amt{color:var(--brand);font-size:19px;font-weight:700}.card-meta{color:var(--ink-3);font-size:11px}.card-acts{border-top:1px solid var(--line);display:flex}.card-acts button{color:var(--ink-2);cursor:pointer;border:0;border-right:1px solid var(--line);background:0 0;flex:1;padding:11px 0;font-size:13px}.card-acts button:last-child{border-right:0}.card-acts .danger{color:var(--danger)}.empty{text-align:center;color:var(--ink-3);padding:40px 20px}.empty-i{font-size:42px}.empty-tip{margin-top:16px;font-size:12px}.empty-sm{text-align:center;color:var(--ink-3);padding:20px;font-size:14px}.sec{background:var(--card);border-radius:var(--radius);margin-bottom:10px;overflow:hidden}.sec-hdr{cursor:pointer;text-align:left;background:#fff;border:0;justify-content:space-between;align-items:center;width:100%;padding:14px;font-size:15px;font-weight:500;display:flex}.sec-hdr.static{cursor:default;border-bottom:1px solid var(--line)}.sec-arrow{color:var(--ink-3)}.sec-body{border-top:1px solid var(--line);padding:12px 14px 14px}.fieldset{margin-bottom:12px}.fieldset>label{color:var(--ink-3);margin-bottom:4px;font-size:12px;display:block}.fieldset input,.fieldset textarea,.fieldset select{border:1px solid var(--line);background:#fff;border-radius:9px;width:100%;padding:10px 11px}.fieldset textarea{resize:vertical;line-height:1.6}.input-wrap{align-items:center;display:flex;position:relative}.input-wrap input{border:1px solid var(--line);border-radius:9px;width:100%;padding:10px 11px}.suffix{color:var(--ink-3);pointer-events:none;font-size:12px;position:absolute;right:10px}.row2{grid-template-columns:1fr 1fr;gap:10px;display:grid}.hint{color:var(--ink-3);margin:-4px 0 12px;font-size:12px;line-height:1.6}.hint-box{color:#7a6034;background:#fff8ec;border:1px solid #f0e2c8;border-radius:10px;margin:0 0 12px;padding:10px 12px}.tmpl-box p{color:var(--ink-3);margin:0 0 8px;font-size:13px}.area{border:1px solid var(--line);border-radius:10px;margin-bottom:12px;overflow:hidden}.area-hdr{border-bottom:1px solid var(--line);background:#f7f8fa;align-items:center;gap:8px;padding:8px 8px 8px 12px;display:flex}.area-input{background:0 0;border:0;flex:1;min-width:0;padding:4px 0;font-size:15px;font-weight:500}.area-sum{color:var(--gold);font-size:13px;font-weight:500}.area-acts{gap:8px;padding:10px;display:flex}.area-acts .btn{flex:1;font-size:13px}.add-area{margin:8px 0 10px}.add-area .area-input{border:1px dashed var(--line);border-radius:9px;width:100%;padding:10px 11px;font-weight:400}.item{border-bottom:1px solid var(--line);padding:8px 10px}.item:last-of-type{border-bottom:0}.item.open{background:#fbfcfd}.item-top{align-items:center;gap:4px;display:flex}.item-name{background:0 0;border:0;flex:1;min-width:0;padding:4px 0;font-size:15px}.item-nums{align-items:center;gap:6px;margin-top:4px;display:flex}.numbox{border:1px solid var(--line);background:#fff;border-radius:8px;flex:1;align-items:center;gap:4px;min-width:0;padding:3px 6px;display:flex}.numbox span{color:var(--ink-3);white-space:nowrap;font-size:11px}.numbox input{text-align:right;background:0 0;border:0;width:100%;min-width:0;padding:5px 0}.numbox.wide{flex:1.4}.unit-sel{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 4px;font-size:13px}.item-amt{text-align:right;min-width:78px;font-size:14px;font-weight:600}.item-more{border-top:1px dashed var(--line);margin-top:10px;padding-top:10px}.item-tools{flex-wrap:wrap;gap:6px;display:flex}.item-tools button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:8px;padding:7px 10px;font-size:12px}.item-tools .danger{color:var(--danger);border-color:#f0cfca}.fee{border:1px solid var(--line);border-radius:10px;margin-bottom:10px;padding:10px}.fee-hdr{align-items:center;gap:8px;margin-bottom:8px;display:flex}.fee-label{background:0 0;border:0;flex:1;min-width:0;font-size:14px;font-weight:500}.fee-amt{font-size:14px;font-weight:600}.fee-amt.neg{color:var(--danger)}.fee-val{width:120px}.fee-val input{text-align:right;padding:6px 10px}.total-table{border-top:1px solid var(--line);margin-top:12px;padding-top:8px}.tl{color:var(--ink-2);justify-content:space-between;padding:5px 0;font-size:14px;display:flex}.tl.strong{color:var(--ink);border-top:1px solid var(--line);margin-top:4px;padding-top:8px;font-size:17px}.tl.strong b{color:var(--gold)}.pay-row{border-bottom:1px solid var(--line);align-items:center;gap:6px;padding:6px 0;display:flex}.pay-idx{color:var(--ink-3);white-space:nowrap;font-size:12px}.pay-name{background:0 0;border:0;border-bottom:1px solid #0000;flex:1;min-width:0;padding:6px 0}.pay-pct{border:1px solid var(--line);text-align:right;border-radius:7px;width:48px;padding:6px 4px}.pay-unit{color:var(--ink-3);font-size:12px}.pay-amt{text-align:right;min-width:74px;font-size:13px;font-weight:500}.pay-foot{color:var(--ink-2);justify-content:space-between;align-items:center;gap:8px;margin-top:10px;font-size:13px;display:flex}.warn{color:var(--danger)}.bottombar{left:0;right:0;bottom:calc(56px + var(--safe-b));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:1px solid var(--line);z-index:30;background:#fffffff5;align-items:center;gap:12px;max-width:720px;margin:0 auto;padding:10px 14px;display:flex;position:fixed}.bb-total{line-height:1.1}.bb-total span{color:var(--ink-3);font-size:11px;display:block}.bb-total b{color:var(--gold);font-size:19px}.tabbar{height:calc(56px + var(--safe-b));padding-bottom:var(--safe-b);border-top:1px solid var(--line);z-index:40;background:#fff;display:flex;position:fixed;bottom:0;left:0;right:0}.tab{color:var(--ink-3);cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;font-size:11px;display:flex}.tab.on{color:var(--brand);font-weight:500}.tab-i{font-size:19px;line-height:1}.sheet-wrap{z-index:60;background:#14192073;align-items:flex-end;display:flex;position:fixed;inset:0}.sheet{background:var(--bg);width:100%;max-width:720px;padding:12px 14px calc(12px + var(--safe-b));border-radius:16px 16px 0 0;flex-direction:column;max-height:88vh;margin:0 auto;display:flex}.sheet-hdr{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.sheet-sub{color:var(--ink-3);margin-left:8px;font-size:12px}.sheet>.search,.sheet>.chips,.sheet-hdr{flex:none}.sheet-body{-webkit-overflow-scrolling:touch;flex:1;overflow-y:auto}.pick-row{text-align:left;cursor:pointer;background:#fff;border:0;border-radius:10px;align-items:center;gap:10px;width:100%;margin-bottom:6px;padding:10px 12px;display:flex}.pick-row.picked{background:#eef6f1}.pick-main{flex:1;min-width:0}.pick-name{font-size:15px}.pick-spec{color:var(--ink-3);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.pick-cat{color:var(--ink-3);margin-top:2px;font-size:10px}.pick-right{text-align:right;white-space:nowrap}.pick-price{font-size:15px;font-weight:600}.pick-price small{color:var(--ink-3);font-size:11px;font-weight:400}.pick-range{color:var(--ink-3);font-size:10px}.pick-add{color:var(--brand);margin-top:2px;font-size:11px}.book{flex-direction:column;gap:6px;display:flex}.bk{background:#fff;border-radius:10px;overflow:hidden}.bk-row{cursor:pointer;align-items:center;gap:10px;padding:10px 12px;display:flex}.bk-main{flex:1;min-width:0}.bk-name{font-size:15px}.bk-spec{color:var(--ink-3);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.bk-cat{color:var(--ink-3);font-size:10px}.bk-price{text-align:right;white-space:nowrap;font-weight:600}.bk-price small{color:var(--ink-3);font-size:11px;font-weight:400}.bk-range{color:var(--ink-3);font-size:10px;font-weight:400}.bk-edit{border-top:1px solid var(--line);padding:0 12px 12px}.bk-edit label{color:var(--ink-3);margin-top:10px;font-size:12px;display:block}.bk-edit input,.bk-edit select{border:1px solid var(--line);border-radius:8px;width:100%;margin-top:3px;padding:9px 10px}.bk-edit-row{grid-template-columns:90px 1fr;gap:10px;display:grid}.page-foot{margin:16px 0}.logo-row{align-items:center;gap:12px;margin-bottom:14px;display:flex}.logo-box{border:1px dashed var(--line);background:#fafbfc;border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:84px;height:84px;display:flex;overflow:hidden}.logo-box.small{width:60px;height:60px}.logo-box img{object-fit:contain;max-width:100%;max-height:100%}.logo-box span{color:var(--ink-3);font-size:11px}.logo-acts{flex-wrap:wrap;gap:8px;display:flex}.preview{background:#55606e;min-height:100vh}.pv-bar{z-index:20;border-bottom:1px solid var(--line);background:#fff;align-items:center;gap:8px;padding:8px 10px;display:flex;position:sticky;top:0}.pv-total{color:var(--gold);flex:1;font-size:15px;font-weight:700}.pv-acts{gap:6px;display:flex}.pv-acts .btn{padding:9px 12px;font-size:13px}.pv-scroll{padding:10px;overflow-x:hidden}.pv-stage{position:relative}.pv-scaler{transform-origin:0 0;width:794px}.overlay{z-index:80;background:#1419208c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.overlay-box{text-align:center;background:#fff;border-radius:14px;padding:24px 30px}.overlay-box p{margin:12px 0 0;font-size:14px}.spinner{border:3px solid var(--line);border-top-color:var(--brand);border-radius:50%;width:30px;height:30px;margin:0 auto;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.measure-layer{visibility:hidden;pointer-events:none;position:fixed;top:0;left:-20000px}.pages{flex-direction:column;gap:14px;display:flex}.a4page{background:#fff;width:794px;height:1123px;position:relative;overflow:hidden;box-shadow:0 4px 16px #00000047}.a4inner{position:absolute;inset:40px 44px 70px}.a4footer{color:#98a1ad;border-top:1px solid #e3e6ea;justify-content:space-between;padding-top:6px;font-size:10px;display:flex;position:absolute;bottom:26px;left:44px;right:44px}.doc{color:#22303f;font-size:12px;line-height:1.5}.doc img{display:block}.run-header{color:#7b8593;box-sizing:content-box;border-bottom:1px solid;justify-content:space-between;height:26px;margin-bottom:12px;padding-bottom:6px;font-size:10px;display:flex}.doc-header{border-bottom:2px solid;justify-content:space-between;align-items:flex-start;margin-bottom:12px;padding-bottom:12px;display:flex}.dh-left{align-items:flex-start;gap:12px;max-width:60%;display:flex}.dh-logo{object-fit:contain;object-position:left center;flex-shrink:0;width:auto;max-width:132px;height:56px;max-height:56px}.dh-logo-fallback{color:#fff;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:56px;height:56px;font-size:18px;font-weight:700;display:flex}.dh-name{margin-bottom:3px;font-size:17px;font-weight:700}.dh-meta{color:#6a7482;font-size:10.5px;line-height:1.6}.dh-right{text-align:right}.dh-title{letter-spacing:6px;margin-bottom:6px;font-size:24px;font-weight:700}.info-box{background:#f6f7f9;border:1px solid #e3e6ea;border-radius:4px;margin-bottom:12px;padding:10px 12px}.info-grid{flex-wrap:wrap;display:flex}.fld{gap:6px;width:25%;padding:3px 0;font-size:11.5px;display:flex}.fld-wide{width:50%}.fld-wide2{width:75%}.fld-l{color:#8b95a3;white-space:nowrap}.fld-v{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.row{border-bottom:1px solid #eaedf0;align-items:stretch;font-size:11.5px;display:flex}.row-head{color:#fff;border-bottom:0;font-size:11.5px;font-weight:500}.row-head>div{padding:7px 6px}.row-item>div{padding:6px}.row-area{background:#f0f2f5;border-bottom:1px solid #dfe3e8}.row-area .area-name{color:#33404f;padding:5px 6px;font-size:11.5px;font-weight:700}.row-sub{background:#fafbfc;border-bottom:1px solid #dfe3e8;font-weight:600}.c-sub-label{text-align:right;color:#55606e;flex:1;padding:5px 6px;font-size:11px}.c-no{text-align:center;color:#98a1ad;white-space:nowrap;flex-shrink:0;width:38px}.row-head .c-no{font-size:10.5px}.c-name{flex:1;min-width:0}.c-unit{text-align:center;flex-shrink:0;width:40px}.c-qty{text-align:right;flex-shrink:0;width:48px}.c-price{text-align:right;flex-shrink:0;width:74px}.c-amt{text-align:right;flex-shrink:0;width:86px;padding:6px}.it-name{font-weight:500}.it-spec{color:#7b8593;margin-top:1px;font-size:10px}.totals{flex-direction:column;align-items:flex-end;margin-top:12px;display:flex}.tt{border-collapse:collapse;width:320px;font-size:12px}.tt td{border-bottom:1px solid #eaedf0;padding:5px 8px}.tt-num{text-align:right;font-variant-numeric:tabular-nums}.tt-grand td{color:#fff;border-bottom:0;padding:8px;font-size:14px;font-weight:700}.amt-words{color:#55606e;text-align:right;border-top:1px dashed #d7dce2;width:100%;margin-top:8px;padding-top:6px;font-size:11.5px}.per-ping{color:#8b95a3}.sec-title{border-left:3px solid;margin:14px 0 6px;padding-left:7px;font-size:12.5px;font-weight:700}.pay{border-collapse:collapse;width:100%;font-size:11.5px}.pay th{color:#55606e;text-align:left;background:#f0f2f5;border-bottom:1px solid #dfe3e8;padding:5px 8px;font-weight:500}.pay th:nth-child(3),.pay th:nth-child(4){text-align:right}.pay td{border-bottom:1px solid #eaedf0;padding:5px 8px}.bank{color:#55606e;margin-top:6px;font-size:11px}.tline{color:#4a5561;font-size:11px;line-height:1.75}.sign{gap:24px;margin-top:22px;display:flex}.sign-col{flex:1}.sign-label{color:#7b8593;margin-bottom:4px;font-size:11px}.sign-line{border:1px solid #d7dce2;border-radius:3px;align-items:center;height:62px;padding:0 8px;display:flex;position:relative}.sign-company{color:#33404f;font-size:11.5px}.stamp{object-fit:contain;opacity:.92;mix-blend-mode:multiply;pointer-events:none;width:auto;max-width:96px;max-height:58px;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.sign-date{color:#7b8593;margin-top:4px;font-size:10.5px}@media print{@page{size:A4;margin:0}body,.app-preview,.preview{background:#fff}.pv-bar,.tabbar,.bottombar,.overlay{display:none!important}.pv-scroll{padding:0;overflow:visible}.pv-stage{height:auto!important}.pv-scaler{width:794px!important;transform:none!important}.pages{gap:0}.a4page{box-shadow:none;page-break-after:always;break-after:page}.a4page:last-child{page-break-after:auto;break-after:auto}}@media (width<=380px){.item-amt{min-width:66px;font-size:13px}}.notice{color:#7a6034;text-align:center;background:#fff5e0;border-bottom:1px solid #f0dcb4;padding:9px 14px;font-size:12px;line-height:1.6}.sync-pill{color:#5b6672;background:#eef1f5;border-radius:999px;margin:2px 0 10px;padding:4px 12px;font-size:12px;display:inline-block}.sync-pill.sync-synced{color:#276b3c;background:#e6f4ea}.sync-pill.sync-syncing{color:#2b4a7a;background:#eaf1fb}.sync-pill.sync-error{color:#9a3434;background:#fdecec}.hint.err{color:#a33}.btn-line{color:#fff;background:#06c755;border:1px solid #06c755}.btn-line:disabled{opacity:.6}
