:root{--bg:#fff;--bg-soft:#f7f7f5;--bg-hover:#f2f2ef;--line:#e6e6e1;--line-strong:#d5d5cf;--ink:#1a1a1a;--ink-2:#5c5c58;--ink-3:#8e8e88;--brand:#e8590c;--brand-soft:#fdf0e8;--ok:#2f7d4f;--ok-soft:#eaf4ee;--warn:#b26a00;--warn-soft:#fdf3e2;--danger:#b3261e;--danger-soft:#fbeceb;--radius:10px;--mono:ui-monospace,SFMono-Regular,Menlo,monospace}*{box-sizing:border-box;margin:0;padding:0}body,html{background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit}.shell{display:flex;min-height:100vh}.side{width:208px;flex:0 0 208px;border-right:1px solid var(--line);padding:26px 16px;position:-webkit-sticky;position:sticky;top:0;height:100vh;display:flex;flex-direction:column}.brand{padding:0 8px 22px}.brand-mark{font-size:15px;font-weight:600;letter-spacing:.02em}.brand-mark span{color:var(--brand)}.brand-sub{font-size:11.5px;color:var(--ink-3);margin-top:3px;letter-spacing:.04em}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:block;padding:8px 10px;border-radius:7px;color:var(--ink-2);font-size:13.5px;transition:background .12s}.nav a:hover{background:var(--bg-hover);color:var(--ink)}.nav a.active{background:var(--brand-soft);color:var(--brand);font-weight:500}.side-foot{margin-top:auto;font-size:11.5px;color:var(--ink-3);padding:0 10px;line-height:1.7}.main{flex:1 1;min-width:0;padding:34px 40px 60px;max-width:1180px}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:26px}.head h1{font-size:20px;font-weight:600;letter-spacing:.01em}.head p{font-size:13px;color:var(--ink-3);margin-top:4px}.head-actions{display:flex;gap:8px;flex:0 0 auto}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;padding:0 14px;border:1px solid var(--line-strong);background:#fff;color:var(--ink);border-radius:8px;font-size:13px;cursor:pointer;white-space:nowrap;transition:background .12s,border-color .12s}.btn:hover{background:var(--bg-hover)}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn-primary:hover{background:#d24f08;border-color:#d24f08}.btn-ghost{border-color:transparent;color:var(--ink-2)}.btn-ghost:hover{background:var(--bg-hover)}.btn-sm{height:28px;padding:0 10px;font-size:12.5px}.card{border:1px solid var(--line);border-radius:var(--radius);background:#fff}.card-head{padding:16px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:12px}.card-head h2{font-size:14px;font-weight:600}.card-body{padding:18px}.card-body.tight{padding:0}.stats{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:12px;gap:12px;margin-bottom:26px}.stat{border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px}.stat-label{font-size:12px;color:var(--ink-3);letter-spacing:.02em}.stat-value{font-size:26px;font-weight:600;margin-top:4px;letter-spacing:-.01em}.stat-value small{font-size:12px;font-weight:400;color:var(--ink-3);margin-left:4px}.stat.accent .stat-value{color:var(--brand)}.table{width:100%;border-collapse:collapse;font-size:13.5px}.table th{text-align:left;font-weight:500;color:var(--ink-3);font-size:12px;padding:10px 16px;background:#fcfcfa;white-space:nowrap}.table td,.table th{border-bottom:1px solid var(--line)}.table td{padding:12px 16px;vertical-align:middle}.table tr:last-child td{border-bottom:none}.table tr:hover td{background:#fcfcfa}.table .no{font-family:var(--mono);font-size:12.5px;color:var(--ink-2)}.table .num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.table .name{font-weight:500}.table .sub{font-size:12px;color:var(--ink-3)}.right{text-align:right}.tag{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;font-size:12px;white-space:nowrap}.tag-draft{background:var(--bg-hover);color:var(--ink-2)}.tag-sent{background:var(--brand-soft);color:var(--brand)}.tag-signed{background:var(--ok-soft);color:var(--ok)}.tag-archived{background:#eef1f6;color:#46536b}.tag-void{background:var(--danger-soft);color:var(--danger)}.form{display:grid;grid-gap:18px;gap:18px}.grid2{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:12.5px;color:var(--ink-2)}.field .hint{font-size:11.5px;color:var(--ink-3)}.input,.select,.textarea{width:100%;height:36px;padding:0 11px;border:1px solid var(--line-strong);border-radius:8px;background:#fff;font-size:13.5px;font-family:inherit;color:var(--ink)}.textarea{height:auto;padding:9px 11px;resize:vertical;min-height:76px}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.seg{border:1px solid var(--line-strong);border-radius:8px;overflow:hidden;background:#fff}.seg,.seg label{display:inline-flex}.seg label{align-items:center;height:34px;padding:0 14px;font-size:13px;cursor:pointer;color:var(--ink-2);border-right:1px solid var(--line-strong)}.seg label:last-child{border-right:none}.seg input{display:none}.seg label:has(input:checked){background:var(--brand-soft);color:var(--brand);font-weight:500}.tabs{display:flex;gap:3px}.tabs a{padding:6px 12px;border-radius:7px;font-size:13px;color:var(--ink-2)}.tabs a:hover{background:var(--bg-hover);color:var(--ink)}.tabs a.on{background:var(--brand-soft);color:var(--brand);font-weight:500}input[type=checkbox],input[type=radio]{accent-color:var(--brand)}.form-foot{display:flex;gap:10px;justify-content:flex-end;padding-top:6px;border-top:1px solid var(--line);margin-top:4px}.detail-grid{display:grid;grid-template-columns:1fr 320px;grid-gap:18px;gap:18px;align-items:start}.kv{display:grid;grid-template-columns:118px 1fr;grid-gap:10px 14px;gap:10px 14px;font-size:13.5px}.kv dt{color:var(--ink-3);font-size:12.5px}.kv dd{color:var(--ink)}.timeline{list-style:none;display:flex;flex-direction:column;gap:0}.timeline li{position:relative;padding:0 0 18px 20px;border-left:1px solid var(--line)}.timeline li:last-child{border-left-color:transparent;padding-bottom:0}.timeline li:before{content:"";position:absolute;left:-4px;top:6px;width:7px;height:7px;border-radius:50%;background:var(--line-strong)}.timeline li.hot:before{background:var(--brand)}.tl-title{font-size:13px}.tl-time{font-size:11.5px;color:var(--ink-3);margin-top:2px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.notice{border:1px solid var(--line);border-left:3px solid var(--brand);background:var(--brand-soft);border-radius:8px;padding:12px 14px;font-size:13px;color:#7a3206}.notice.neutral{border-left-color:var(--line-strong);background:var(--bg-soft);color:var(--ink-2)}.notice.ok{border-left-color:var(--ok);background:var(--ok-soft);color:#24573a}.notice.warn{border-left-color:var(--warn);background:var(--warn-soft);color:#6b4100}.empty{padding:44px 20px;text-align:center;color:var(--ink-3);font-size:13px}.rowbar{gap:10px;margin-bottom:16px;flex-wrap:wrap}.rowbar,.rowbar form{display:flex;align-items:center}.rowbar form{gap:8px}.rowbar .input{width:220px;height:32px;font-size:13px}.rowbar .select{width:auto;height:32px;font-size:13px}.divider{height:1px;background:var(--line);margin:22px 0}.muted{color:var(--ink-3);font-size:12.5px}.strong{font-weight:500}code{font-family:var(--mono);font-size:12.5px;background:var(--bg-soft);padding:1px 5px;border-radius:4px}.main:has(.login-page),.main:has(.portal-page){padding:0;max-width:none}.login-page,.portal,.portal-page{min-height:100vh;background:#f6f5f1}.login-page,.portal{max-width:480px;margin:0 auto;padding:0 18px 96px}@media (min-width:900px){.portal-page{background:#eceae4}.login-page,.portal{background:#fff;box-shadow:0 0 0 1px var(--line);padding-left:24px;padding-right:24px}}.btn-block{width:100%}.p-top{height:54px;display:flex;align-items:center;justify-content:space-between;gap:12px}.p-brand{font-size:15px;font-weight:600;letter-spacing:.02em}.p-avatar,.p-brand span{color:var(--brand)}.p-avatar{width:32px;height:32px;border-radius:50%;background:var(--brand-soft);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600}.p-avatar.big{width:52px;height:52px;font-size:20px}.p-back{width:32px;height:32px;border-radius:50%;background:#fff;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:20px;line-height:1;color:var(--ink-2);padding-bottom:2px}.p-top-title{font-size:15px;font-weight:600}.p-logout{font-size:12.5px;color:var(--ink-3)}.p-hero{padding:16px 2px 20px}.p-hello{font-size:24px;font-weight:600;letter-spacing:-.01em}.p-hero-sub{margin-top:6px;color:var(--ink-3);font-size:13px}.p-alert{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#fff7ed;border:1px solid #f5d8bd;border-radius:12px;padding:13px 14px;margin-bottom:18px}.p-alert b{display:block;font-size:13.5px;color:#8a3c06;font-weight:600}.p-alert span{display:block;font-size:11.5px;color:#a86534;margin-top:2px}.p-alert-arrow{font-size:20px;color:#c0763c}.p-section-title{display:flex;align-items:baseline;justify-content:space-between;padding:4px 2px 12px;font-size:14px;font-weight:600}.p-count{font-size:11.5px;color:var(--ink-3);font-weight:400}.p-list{display:flex;flex-direction:column;gap:12px}.p-card{position:relative;display:block;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;transition:border-color .15s,box-shadow .15s}.p-card:active{border-color:var(--line-strong)}.p-card-top{display:flex;align-items:center;justify-content:space-between}.p-card-date{font-size:11.5px;color:var(--ink-3);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.p-card-title{font-size:16px;font-weight:600;margin-top:10px;line-height:1.4}.p-card-meta{font-size:12.5px;color:var(--ink-3);margin-top:4px}.p-card-foot{display:flex;align-items:center;justify-content:space-between;margin-top:12px;padding-top:12px;border-top:1px dashed var(--line);font-size:12px;color:var(--ink-3)}.p-no{font-family:var(--mono)}.p-amount{font-size:14px;font-weight:600;color:var(--ink);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.p-card-cta{margin-top:10px;text-align:right;font-size:13px;font-weight:500;color:var(--brand)}.p-empty{background:#fff;border:1px dashed var(--line-strong);border-radius:14px;padding:40px 20px;text-align:center}.p-empty-mark{font-size:22px;color:var(--line-strong)}.p-empty p{margin-top:10px;font-size:14px;font-weight:500}.p-empty span{display:block;margin-top:4px;font-size:12px;color:var(--ink-3)}.p-tabbar{position:fixed;left:0;right:0;bottom:0;z-index:20;max-width:480px;margin:0 auto;height:58px;background:hsla(0,0%,100%,.96);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--line);display:flex;padding-bottom:env(safe-area-inset-bottom)}.p-tabbar a{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;font-size:11.5px;color:var(--ink-3)}.p-tabbar a.on{color:var(--brand);font-weight:500}.p-tab-dot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.35}.p-tabbar a.on .p-tab-dot{opacity:1}.p-foot{text-align:center;font-size:11px;color:var(--ink-3);padding:26px 0 8px;line-height:1.8}.p-status-hero{padding:6px 2px 18px}.p-status-hero h1{font-size:22px;font-weight:600;margin-top:12px;line-height:1.35}.p-status-sub{font-size:12.5px;color:var(--ink-3);margin-top:6px}.p-refresh{display:inline-flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}.p-refresh button{background:none;border:none;padding:0;font-size:12px;color:var(--brand);cursor:pointer}.p-refresh button:disabled,.p-refresh em{color:var(--ink-3)}.p-refresh em{font-style:normal;font-size:11.5px}.p-card-block{background:#fff;border:1px solid var(--line);border-radius:14px;padding:4px 16px;margin-bottom:12px}.p-block-title{font-size:13px;font-weight:600;padding:14px 0 4px}.p-row{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:12px 0;border-bottom:1px solid #f2f2ee;font-size:13.5px}.p-row:last-child{border-bottom:none}.p-row span{color:var(--ink-3);flex:0 0 auto}.p-row b{font-weight:500;text-align:right;word-break:break-all}.p-money{color:var(--brand);font-size:16px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.p-steps{list-style:none;padding:6px 0 14px}.p-steps li{display:flex;gap:12px;padding:9px 0;position:relative}.p-steps li:not(:last-child):after{content:"";position:absolute;left:4px;top:24px;bottom:-4px;width:1px;background:var(--line)}.p-step-dot{width:9px;height:9px;border-radius:50%;margin-top:5px;background:var(--line-strong);flex:0 0 auto;position:relative;z-index:1}.p-steps li.hot .p-step-dot{background:var(--brand)}.p-steps b{display:block;font-size:13px;font-weight:500}.p-steps em{display:block;font-style:normal;font-size:11.5px;color:var(--ink-3);margin-top:2px}.p-note{font-size:12.5px;color:var(--ink-2);line-height:1.8;padding:4px 0 10px}.p-link{display:block;font-size:13px;color:var(--brand);padding:4px 0 14px}.p-bottom-bar{position:fixed;left:0;right:0;bottom:0;z-index:30;max-width:480px;margin:0 auto;display:flex;gap:10px;padding:10px 18px calc(10px + env(safe-area-inset-bottom));background:hsla(0,0%,100%,.97);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--line)}.p-bottom-bar .btn{height:44px;flex:1 1;border-radius:10px;font-size:15px}.p-bottom-bar.done{justify-content:center}.p-done-text{font-size:13px;color:var(--ok)}.p-btn-ghost{flex:0 0 104px!important}.p-error{background:var(--danger-soft);color:var(--danger);line-height:1.6}.p-error,.p-success{border-radius:10px;padding:10px 12px;font-size:12.5px;margin:0 0 12px}.p-success{background:var(--ok-soft);color:#24573a}.p-profile-head{display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:14px}.p-profile-name{font-size:16px;font-weight:600}.p-profile-sub{font-size:12.5px;color:var(--ink-3);margin-top:3px}.p-form{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px 16px}.p-field{display:flex;flex-direction:column;gap:7px;margin-bottom:16px}.p-field label{font-size:12.5px;color:var(--ink-2);display:flex;align-items:center;gap:8px}.p-field em{font-style:normal;font-size:11px;color:var(--ink-3);line-height:1.6}.p-field .input{height:42px;font-size:15px;border-radius:9px}.p-badge{font-size:10.5px;color:var(--ok);border-radius:4px;padding:1px 6px}.p-badge,.p-verified{background:var(--ok-soft)}.p-verified{display:flex;align-items:center;gap:8px;color:#24573a;border-radius:9px;padding:10px 12px;font-size:12.5px;margin-bottom:16px}.p-verified span{font-weight:700}.p-dev{color:var(--brand)!important}.p-submit{height:44px;border-radius:10px;font-size:15px;margin-top:4px}.p-privacy{font-size:11px;color:var(--ink-3);line-height:1.7;margin-top:14px}.login-page{min-height:100vh;display:flex;flex-direction:column;padding-top:52px}.login-head{text-align:center;padding:0 8px 24px}.login-brand{font-size:13px;font-weight:600;letter-spacing:.08em;color:var(--ink-3)}.login-brand span{color:var(--brand)}.login-head h1{font-size:26px;font-weight:600;margin-top:20px;letter-spacing:-.01em}.login-head p{font-size:13px;color:var(--ink-3);margin-top:8px}.login-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:22px 18px}.btn-wechat{display:flex;align-items:center;justify-content:center;gap:8px;height:46px;border-radius:10px;background:#07c160;color:#fff;font-size:15px;font-weight:500}.btn-wechat:active{background:#06ad56}.login-or{display:flex;align-items:center;gap:12px;color:var(--ink-3);font-size:11.5px;margin:20px 0}.login-or:after,.login-or:before{content:"";height:1px;flex:1 1;background:var(--line)}.login-form{display:flex;flex-direction:column;gap:14px}.login-form .input{height:44px;font-size:15px;border-radius:9px}.code-row{display:flex;gap:8px}.code-row .input{flex:1 1;min-width:0}.code-btn{height:44px;min-width:100px;border-radius:9px;font-size:12.5px}.login-submit{height:46px;border-radius:10px;font-size:15px;margin-top:2px}.login-dev{background:#fff7ed;border:1px solid #f5d8bd;border-radius:9px;padding:10px 12px;font-size:12.5px;color:#8a3c06}.login-dev b{font-size:15px;letter-spacing:.12em;font-family:var(--mono)}.login-dev span{display:block;font-size:10.5px;color:#a86534;margin-top:3px}.login-tip{font-size:12px;color:var(--ink-3)}.login-error{background:var(--danger-soft);color:var(--danger);border-radius:9px;padding:10px 12px;font-size:12.5px;line-height:1.6}.login-note{line-height:1.7;margin-top:16px}.login-foot,.login-note{font-size:11px;color:var(--ink-3)}.login-foot{text-align:center;padding:26px 0 20px;line-height:1.8;margin-top:auto}