:root{color-scheme:light;--brand:#2864dc;--brand-dark:#1f50ba;--brand-soft:#edf3ff;--ink:#1c2534;--ink-2:#4d596c;--muted:#718096;--canvas:#fff;--surface:#fff;--subtle:#f8f9fb;--surface-band:#f4f7fb;--line:#e0e5ec;--line-strong:#c8d0dc;--success:#16805a;--success-soft:#eaf7f1;--warning:#9a6108;--warning-soft:#fff5df;--danger:#bd3c3c;--danger-soft:#fff0ef;--info:#20778f;--info-soft:#eaf6f8;--sidebar:224px;--topbar:56px;--radius:7px;--shadow:0 22px 64px rgba(24,34,51,.2);--font:"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif}
*{box-sizing:border-box;letter-spacing:0}html,body,#app{margin:0;width:100%;height:100%;min-width:320px;overflow:hidden}body{background:var(--canvas);color:var(--ink);font:13px/1.5 var(--font);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:disabled,input:disabled,select:disabled{cursor:not-allowed;opacity:.68}:focus-visible{outline:2px solid #86a9fa;outline-offset:2px}svg{width:18px;height:18px;display:block;flex:none}h1,h2,h3,p{margin-top:0}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:8px;background:#cfd5df;background-clip:padding-box}
.shell{height:100dvh;display:grid;grid-template-columns:var(--sidebar) minmax(0,1fr);grid-template-rows:var(--topbar) minmax(0,1fr);overflow:hidden;background:#fff}.sidebar{grid-row:1/3;display:flex;flex-direction:column;min-height:0;padding:10px;border-right:1px solid var(--line);background:var(--subtle)}.brand{height:44px;padding:0 8px;display:flex;align-items:center;gap:10px}.brand-mark{width:30px;height:30px;border-radius:7px;display:grid;place-items:center;background:var(--brand);color:#fff;font-weight:700}.brand strong{font-size:14px;white-space:nowrap}.nav{flex:1;min-height:0;overflow:auto;padding-top:8px}.nav h2{margin:13px 10px 5px;color:var(--muted);font-size:10px;font-weight:600}.nav button{width:100%;height:39px;margin:2px 0;padding:0 10px;border:0;border-radius:5px;background:transparent;color:var(--ink-2);display:flex;align-items:center;gap:10px;text-align:left}.nav button:hover{background:#f0f3f7}.nav button.active{background:var(--brand-soft);color:var(--brand-dark);font-weight:700}.role-panel{padding:10px 8px 4px;border-top:1px solid var(--line)}.role-panel span{display:block;margin-bottom:5px;color:var(--muted);font-size:10px}.role-panel select{width:100%;height:36px;padding:0 9px;border:1px solid var(--line-strong);border-radius:5px;background:#fff}
.topbar{grid-column:2;display:flex;align-items:center;gap:10px;padding:0 18px;border-bottom:1px solid var(--line);background:#fff}.module-tab{height:36px;padding:0 15px;border-bottom:2px solid var(--brand);display:flex;align-items:center;color:var(--brand-dark);font-weight:700}.global-search{width:min(430px,40vw);height:36px;margin-left:12px;padding:0 10px;border:1px solid var(--line);border-radius:5px;background:var(--subtle);display:flex;align-items:center;gap:7px;color:var(--muted)}.global-search input{width:100%;border:0;outline:0;background:transparent}.top-spacer{flex:1}.notification-btn{position:relative}.notification-btn b{position:absolute;right:2px;top:1px;min-width:15px;height:15px;padding:0 4px;border-radius:8px;background:var(--danger);color:#fff;font-size:9px;line-height:15px}.user-name{color:var(--brand-dark);font-weight:400;white-space:nowrap}.topbar .logout-btn{width:32px;height:32px;color:var(--ink-2)}.mobile-menu{display:none}
.viewport{grid-column:2;min-width:0;min-height:0;overflow:auto;background:#fff}.page{min-height:100%;background:#fff}.page-head{min-height:66px;padding:13px 22px;border-bottom:1px solid var(--line);background:var(--surface-band);display:flex;align-items:center;gap:16px;position:sticky;top:0;z-index:8}.page-head h1{margin:0;font-size:20px}.head-actions{margin-left:auto;display:flex;gap:8px}.content{max-width:1800px;margin:0 auto;padding:16px 22px 30px;background:#fff}
.btn{height:36px;padding:0 12px;border:1px solid var(--line-strong);border-radius:5px;background:#fff;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-weight:600;white-space:nowrap}.btn:hover:not(:disabled){background:#f0f3f7}.btn.primary{border-color:var(--brand);background:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-dark)}.btn.danger{border-color:#dfb5b9;color:var(--danger)}.btn.ghost{border-color:transparent;background:transparent;color:var(--ink-2)}.btn.small{height:30px;padding:0 9px;font-size:11px}.icon-btn{width:36px;height:36px;padding:0;border:0;border-radius:5px;background:transparent;display:grid;place-items:center}.icon-btn:hover{background:#f0f3f7}.icon-btn.compact{width:30px;height:30px;border:1px solid var(--line-strong);border-left:0;border-radius:0 5px 5px 0;background:#fff}.button-pair{display:flex}.button-pair .btn{border-radius:5px 0 0 5px}
.filters{margin-bottom:14px;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-band);display:grid;grid-template-columns:2fr repeat(6,minmax(105px,1fr)) auto auto;gap:8px}.filters.compact-filters{grid-template-columns:2fr 1fr 1fr auto auto;max-width:900px}.filters input,.filters select,.ledger-controls select,.toolbar select{width:100%;height:36px;padding:0 9px;border:1px solid var(--line-strong);border-radius:5px;background:#fff}.toolbar{margin-bottom:12px;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-band);display:flex;flex-wrap:wrap;gap:8px}.toolbar select{width:150px}.inline-search{width:min(380px,100%);height:36px;padding:0 9px;border:1px solid var(--line-strong);border-radius:5px;background:#fff;display:flex;align-items:center;gap:7px}.inline-search input{width:100%;border:0;outline:0}.metric-strip{margin-bottom:14px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);border-radius:6px;overflow:hidden}.metric-strip.three{grid-template-columns:repeat(3,minmax(0,1fr))}.metric{min-height:64px;padding:10px 13px;border-right:1px solid var(--line);background:#fff}.metric:last-child{border-right:0}.metric small{display:block;color:var(--muted);font-size:10px}.metric strong{display:block;margin-top:4px;font-size:19px}
.table-wrap{width:100%;overflow:auto;border:1px solid var(--line);border-radius:6px;background:#fff}.data-table{width:100%;min-width:900px;border-collapse:separate;border-spacing:0}.data-table th,.data-table td{height:46px;padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;white-space:nowrap}.data-table th{height:38px;background:var(--surface-band);color:var(--ink-2);font-size:10px;font-weight:600;position:sticky;top:0;z-index:2}.data-table th.confirm-focus{background:var(--brand-soft);color:var(--brand-dark);font-weight:700;box-shadow:inset 0 -2px 0 #a9c1f5}.data-table tbody tr:last-child td{border-bottom:0}.data-table tbody tr:hover td{background:#fafcff}.data-table td strong,.data-table td small{display:block}.data-table td small{color:var(--muted);font-size:10px}.project-table{min-width:1500px}.config-table{min-width:700px}.edit{border-radius:5px}.edit .data-table{min-width:1450px}.edit input,.edit select{width:100%;min-width:108px;height:32px;padding:0 6px;border:1px solid var(--line-strong);border-radius:4px;background:#fff}.edit td{height:44px;padding:5px 7px}.link-btn{min-height:30px;padding:0 4px;border:0;background:transparent;color:var(--brand-dark);font-weight:400}.link-btn:hover{text-decoration:underline}.empty{min-height:170px;display:grid;place-items:center;color:var(--muted)}
.status{min-height:22px;padding:2px 7px;border-radius:4px;display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:700}.status:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}.status.neutral{background:#edf0ef;color:#5e6a67}.status.success{background:var(--success-soft);color:var(--success)}.status.warning{background:var(--warning-soft);color:var(--warning)}.status.danger{background:var(--danger-soft);color:var(--danger)}.status.info{background:var(--info-soft);color:var(--info)}
.tabs{margin-bottom:14px;border-bottom:1px solid var(--line);display:flex;overflow:auto}.tabs button{height:42px;padding:0 14px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--ink-2);white-space:nowrap}.tabs button.active{border-bottom-color:var(--brand);color:var(--brand-dark);font-weight:700}.tabs button b{margin-left:5px;padding:1px 5px;border-radius:8px;background:#e3e7ee;font-size:9px}.ledger-controls{margin-bottom:12px;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-band);display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ledger-controls>select{width:100px}.segmented{display:flex;padding:3px;border-radius:5px;background:#e9edf3}.segmented button{height:30px;padding:0 12px;border:0;border-radius:4px;background:transparent}.segmented button.active{background:#fff;color:var(--brand-dark);font-weight:700;box-shadow:0 1px 3px rgba(24,34,51,.12)}.ledger-controls .inline-search{margin-left:auto}.annual-wrap{max-height:560px}.annual-ledger{min-width:1840px}.annual-ledger th,.annual-ledger td{text-align:center}.annual-ledger .sticky-col{position:sticky;z-index:4;text-align:left;background:#fff}.annual-ledger th.sticky-col{z-index:6;background:var(--surface-band)}.project-col{left:0;width:190px;min-width:190px}.order-col{left:190px;width:190px;min-width:190px;box-shadow:3px 0 5px rgba(24,34,51,.05)}.income-cell{width:96px;min-height:46px;padding:4px;border:1px solid transparent;border-radius:4px;background:transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.income-cell:hover{border-color:var(--line-strong)}.income-cell strong{font-size:11px}.income-cell small{font-size:9px}.income-cell.overdue{background:var(--warning-soft);color:var(--warning)}.income-cell.confirmed{background:var(--success-soft);color:var(--success)}.income-history{min-width:1580px}.plan-cell strong,.plan-cell small{display:block}.plan-cell small{color:var(--muted);font-size:10px}
.overlay{position:fixed;inset:0;z-index:40;background:rgba(24,34,51,.34);display:flex;justify-content:flex-end}.drawer{width:min(80vw,calc(100vw - 24px));height:100%;background:#fff;box-shadow:var(--shadow);display:grid;grid-template-rows:auto minmax(0,1fr) auto;animation:slide .18s ease-out;transition:width .18s ease}.drawer.wide{width:min(80vw,calc(100vw - 24px))}@keyframes slide{from{transform:translateX(25px);opacity:.5}to{transform:none;opacity:1}}.drawer-head{min-height:64px;padding:9px 14px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}.drawer-head h2{margin:0;font-size:16px}.drawer-head small{display:block;color:var(--muted);font-size:10px}.drawer-body{min-height:0;overflow:auto;padding:16px}.drawer-actions{min-height:62px;padding:10px 16px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}.section{margin-bottom:18px}.section:last-child{margin-bottom:0}.section h3{margin:0 0 9px;font-size:13px}.section-head{min-height:38px;display:flex;align-items:center;gap:8px}.section-head h3{margin:0}.section-head>.btn,.section-head>.button-pair{margin-left:auto}.form-grid,.contract-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 12px}.contract-fields{grid-column:1/-1}.field{min-width:0;display:block}.field.wide{grid-column:span 2}.field.full{grid-column:1/-1}.field>span{display:block;margin-bottom:4px;color:var(--ink-2);font-size:10px;font-weight:600}.required-mark{margin-left:2px;color:var(--danger);font:inherit}.field input,.field select,.field textarea{width:100%;border:1px solid var(--line-strong);border-radius:5px;background:#fff}.field input,.field select{height:36px;padding:0 8px}.field textarea{min-height:66px;padding:8px;resize:vertical}.field small{display:block;margin-top:4px;color:var(--muted)}.field input[readonly],.field textarea[readonly]{background:var(--subtle)}.change-reason{margin-bottom:14px;padding:10px;border:1px solid #e6cb91;border-radius:5px;background:var(--warning-soft)}.amount-check{margin-top:7px;padding:8px 10px;border-radius:5px;background:var(--success-soft);color:var(--success);font-size:11px}.amount-check.error{background:var(--danger-soft);color:var(--danger)}.detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;overflow:hidden;border:1px solid var(--line);background:#fff}.detail{min-height:62px;padding:9px 10px;background:#fff;box-shadow:1px 0 0 var(--line),0 1px 0 var(--line)}.detail small{display:block;color:var(--muted);font-size:10px}.detail strong{display:block;margin-top:4px;overflow-wrap:anywhere}.business-note{margin-bottom:12px;padding:10px 12px;border-left:3px solid var(--info);border-radius:4px;background:var(--info-soft);color:#22576a}.business-note.danger{border-color:var(--danger);background:var(--danger-soft);color:var(--danger)}.notification{padding:10px 0;border-bottom:1px solid var(--line)}.notification:last-child{border:0}.notification p{margin:3px 0;color:var(--ink-2)}.notification time{color:var(--muted);font-size:10px}
.toast-region{position:fixed;right:18px;bottom:18px;z-index:70;display:grid;gap:8px}.toast{min-width:250px;max-width:360px;padding:10px 12px;border:1px solid var(--line);border-left:3px solid var(--success);border-radius:5px;background:#fff;box-shadow:var(--shadow)}.toast.error{border-left-color:var(--danger)}.toast strong,.toast small{display:block}.toast small{margin-top:2px;color:var(--ink-2)}
.split-overlay{z-index:45}.product-edit-table{min-width:2300px}.acceptance-plan-table{min-width:1480px}.plan-product-cell{min-width:190px;vertical-align:middle;background:#fff}.plan-product{display:grid;grid-template-columns:minmax(0,1fr) 30px;align-items:center;gap:3px 8px}.plan-product strong,.plan-product small{grid-column:1;overflow-wrap:anywhere}.plan-product small{color:var(--muted)}.plan-product .icon-btn{grid-column:2;grid-row:1/3;width:30px;height:30px}.invoice-plan-table{min-width:1200px}.compact-plan-empty{min-height:48px}.split-table{min-width:620px}.split-table tfoot th{background:#fff;border-top:1px solid var(--line);font-size:11px}.header-with-help{display:inline-flex;align-items:center;gap:4px}.tooltip-button{position:relative;width:22px;height:22px;padding:0;border:0;background:transparent;color:var(--brand-dark);display:inline-grid;place-items:center}.tooltip-button svg{width:15px;height:15px}.tooltip-button:after{content:attr(data-tooltip);position:absolute;left:50%;top:calc(100% + 7px);z-index:20;width:320px;padding:9px 10px;border:1px solid var(--line-strong);border-radius:5px;background:#fff;color:var(--ink);box-shadow:0 8px 24px rgba(24,34,51,.16);font-size:11px;font-weight:400;line-height:1.6;text-align:left;white-space:pre-line;transform:translateX(-50%);opacity:0;pointer-events:none}.tooltip-button:hover:after,.tooltip-button:focus-visible:after{opacity:1}.edit input.invalid{border-color:var(--danger);background:var(--danger-soft)}.amount-check-host,.invoice-check-host{display:grid;gap:6px}.amount-check{display:flex;justify-content:space-between;gap:12px}.compact-empty{min-height:90px}
.contract-key-fields{margin-bottom:14px}.field.confirm-field{padding:6px 8px 8px;border-radius:4px;background:var(--brand-soft);box-shadow:inset 0 -2px 0 #a9c1f5}.field.confirm-field>span{color:var(--brand-dark)}.split-drawer{width:min(50vw,calc(100vw - 24px))}.edit .split-table{min-width:600px}.split-table th:first-child{width:44%}.split-table th:nth-child(2),.split-table th:nth-child(3){width:24%}.split-table th:last-child{width:8%}.split-table input,.split-table select{min-width:0}.split-choice{display:flex;align-items:center;gap:6px}.split-choice select{min-width:72px;flex:1}.split-status-button{width:32px;height:32px;padding:0;border:1px solid transparent;border-radius:5px;display:grid;place-items:center;flex:0 0 32px}.split-status-button svg{width:16px;height:16px}.split-status-button.complete{border-color:#9bd5bf;background:var(--success-soft);color:var(--success)}.split-status-button.complete:hover{background:#d9f1e6}.split-status-button.pending{border-color:#e6cb91;background:var(--warning-soft);color:var(--warning)}.split-status-button.pending:hover{background:#f9e8bf}
.login-page{height:100dvh;display:grid;place-items:center;padding:24px;background:var(--surface-band)}.login-panel,.state-panel{width:min(390px,100%);padding:30px;border:1px solid var(--line);border-radius:7px;background:#fff;box-shadow:0 18px 55px rgba(24,34,51,.12)}.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:28px}.login-panel h1,.state-panel h1{font-size:22px}.login-panel .field{margin-bottom:14px}.login-submit{width:100%;margin-top:8px}.form-error{min-height:20px;margin:0;color:var(--danger);font-size:11px}.state-panel{text-align:center}.state-panel>svg{width:44px;height:44px;margin:0 auto 16px;color:var(--danger)}.state-panel p{color:var(--ink-2)}
@media(max-width:1200px){:root{--sidebar:190px}.filters{grid-template-columns:repeat(4,minmax(0,1fr))}.filters input:first-child{grid-column:span 2}.content{padding:14px 16px 26px}.page-head{padding:12px 16px}.form-grid,.contract-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){:root{--topbar:54px}.shell{display:block;height:100dvh;padding-top:var(--topbar)}.sidebar{position:fixed;left:0;top:var(--topbar);bottom:0;z-index:30;width:min(260px,85vw);transform:translateX(-102%);box-shadow:var(--shadow);transition:transform .18s}.sidebar.open{transform:none}.topbar{position:fixed;left:0;right:0;top:0;z-index:25;height:var(--topbar);padding:0 8px}.mobile-menu{display:grid}.module-tab{padding:0 8px}.global-search{display:none}.user-name{max-width:58px;overflow:hidden;text-overflow:ellipsis}.viewport{height:calc(100dvh - var(--topbar))}.page-head{min-height:60px;padding:10px 12px;position:static}.page-head h1{font-size:18px}.content{padding:12px 10px 24px}.filters,.filters.compact-filters{grid-template-columns:1fr 1fr}.filters input:first-child{grid-column:1/-1}.filters .btn{width:100%}.toolbar .inline-search,.toolbar select{width:100%;flex:1 1 100%}.metric-strip,.metric-strip.three{grid-template-columns:1fr}.metric{border-right:0;border-bottom:1px solid var(--line)}.metric:last-child{border-bottom:0}.ledger-controls{align-items:stretch}.ledger-controls .inline-search{width:100%;margin-left:0}.annual-wrap,.table-wrap{border-left:0;border-right:0;border-radius:0}.drawer,.drawer.wide{width:100%}.drawer-head{min-height:58px;padding:8px}.drawer-body{padding:12px 10px}.drawer-actions{min-height:58px;padding:9px 10px;justify-content:flex-start;overflow:auto}.form-grid,.contract-fields,.detail-grid{grid-template-columns:1fr}.field.wide{grid-column:auto}.section-head{flex-wrap:wrap}.section-head>.btn,.section-head>.button-pair{margin-left:auto}.tabs{margin-left:-10px;margin-right:-10px;padding:0 5px}.toast-region{left:10px;right:10px;bottom:10px}.toast{min-width:0;max-width:none}.login-page{padding:14px}.login-panel,.state-panel{padding:24px 20px}}
@media(max-width:420px){.filters,.filters.compact-filters{grid-template-columns:1fr}.filters input:first-child{grid-column:auto}.topbar .btn{padding:0 7px}.notification-btn{width:32px}.page-head .btn{height:34px;padding:0 9px}}
