:root{--bg:#f2f4f7;--card:#fff;--ink:#1a1d26;--ink2:#4e5969;--ink3:#91959e;--line:#e6e8eb;--blue:#2660ff;--blue-soft:#edf2ff;--red:#fa4646;--red-soft:#fbedee;--amber:#b45309;--amber-soft:#fdf3e3;--mono:"SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--r:12px;--rs:7px}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font:14px/1.55 -apple-system,SF Pro Text,PingFang SC,Hiragino Sans GB,sans-serif}.num{font-family:var(--mono);font-variant-numeric:tabular-nums}.page{max-width:1080px;margin:0 auto;padding:24px 20px 64px}.page h1{margin:0 0 4px;font-size:24px;font-weight:600}.page .sub{color:var(--ink2);margin-bottom:20px;font-size:12.5px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);margin-bottom:14px;padding:16px 18px}.card h2{margin:0 0 10px;font-size:18px;font-weight:600}.btn{border-radius:var(--rs);border:1px solid var(--blue);background:var(--blue);color:#fff;cursor:pointer;padding:7px 16px;font-size:14px;display:inline-block}.btn.secondary{color:var(--blue);background:#fff}.btn:disabled{opacity:.5;cursor:not-allowed}.tag{background:var(--blue-soft);color:var(--blue);border-radius:10px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.tag.locked{background:var(--red-soft);color:var(--red)}pre.dump{background:var(--bg);border-radius:var(--rs);font:12px/1.6 var(--mono);white-space:pre-wrap;word-break:break-all;max-height:320px;padding:12px;overflow:auto}.topbar{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.brand{letter-spacing:.02em;font-size:16px;font-weight:700}.brand:first-letter{color:var(--blue)}.topbar-right{align-items:center;gap:10px;display:flex}.month-label{color:var(--ink2);font-size:13px;font-weight:600}.user-label{color:var(--ink3);font-size:12px}.tag-warn{background:var(--amber-soft);color:var(--amber)}.tag-danger{background:var(--red-soft);color:var(--red)}.tag-none{color:var(--ink3);background:#eff1f5}.shell-body{align-items:flex-start;gap:16px;display:flex}.main-col{flex:1;min-width:0}.sidenav{background:var(--card);border:1px solid var(--line);border-radius:var(--r);flex-direction:column;flex:none;gap:4px;width:168px;padding:10px;display:flex;position:sticky;top:16px}.sidenav.collapsed{width:54px}.sidenav.collapsed .nav-item{justify-content:center;padding:8px 0}.nav-item{cursor:pointer;text-align:left;border-radius:var(--rs);width:100%;color:var(--ink2);white-space:nowrap;background:0 0;border:none;align-items:center;gap:8px;padding:8px 10px;font-size:13px;display:flex;overflow:hidden}.nav-item.on{background:var(--blue-soft);color:var(--blue);font-weight:600}.nav-ico{text-align:center;flex:none;width:16px}.nav-toggle{border:none;border-top:1px solid var(--line);width:100%;color:var(--ink3);cursor:pointer;text-align:left;white-space:nowrap;background:0 0;margin-top:6px;padding:6px 10px 0;font-size:12px;overflow:hidden}.nav-toggle:hover{color:var(--blue)}.sidenav.collapsed .nav-toggle{text-align:center;padding:6px 0 0}.stepper{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:14px;display:flex}.st-wrap{align-items:center;gap:6px;display:inline-flex}.st-arrow{color:var(--ink3)}.st-p{cursor:pointer;color:var(--ink3);background:#f0f2f6;border:none;border-radius:999px;padding:5px 14px;font-size:13px;font-weight:600}.st-on{background:var(--blue);color:#fff}.st-done{color:#6d668f;background:#efedf5}.st-off{color:var(--ink3);background:#f0f2f6}.footer{border-top:1px solid var(--line);color:var(--ink3);flex-wrap:wrap;justify-content:space-between;gap:12px;margin-top:24px;padding-top:12px;font-size:12px;display:flex}.card-sub{color:var(--ink2);margin:0 0 12px;font-size:12.5px}.note-line{color:var(--ink3);margin-top:10px;font-size:12px}.badge{background:var(--bg);color:var(--ink3);border-radius:10px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-block}.badge-info{background:var(--blue-soft);color:var(--blue)}.badge-danger{background:var(--red-soft);color:var(--red)}.banner{border-radius:var(--rs);margin-bottom:12px;padding:10px 14px;font-size:13px}.banner-danger{background:var(--red-soft);color:var(--red)}.banner-warn{background:var(--amber-soft);color:var(--amber)}.banner-info{background:var(--blue-soft);color:var(--blue)}.matrix-wrap{margin-bottom:12px;overflow-x:auto}.matrix-table{border-collapse:separate;border-spacing:0;min-width:max-content}.matrix-sticky{z-index:1;background:var(--card);text-align:left;box-shadow:1px 0 0 var(--line);position:sticky;left:0}.matrix-cell{padding:0!important}.matrix-cell-btn{cursor:pointer;width:100%;font:inherit;color:inherit;text-align:right;background:0 0;border:none;border-radius:0;padding:6px 10px}.matrix-cell.has-value .matrix-cell-btn:hover{background:var(--blue-soft);color:var(--blue)}.matrix-cell.active .matrix-cell-btn{background:var(--blue);color:#fff}.matrix-total{font-weight:600}.matrix-foot td{border-top:2px solid var(--line)}.link-btn{cursor:pointer;color:var(--blue);font-size:inherit;background:0 0;border:none;padding:0 2px;font-weight:600;text-decoration:underline}.bar{border-top:1px solid var(--line);align-items:center;gap:10px;margin-top:14px;padding-top:14px;display:flex}.mini-table{border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:var(--rs);width:100%;margin-top:12px;font-size:13px;overflow:hidden}.mini-table th,.mini-table td{border-bottom:1px solid var(--line);text-align:left;padding:8px 12px}.mini-table th{color:var(--ink2);background:#fafbfc;font-weight:600}.mini-table tr:last-child td{border-bottom:none}.mini-table td.num{text-align:right}.metrics-row{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:14px;display:grid}.metric-card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:10px 12px}.metric-l{color:var(--ink3);font-size:11px}.metric-v{margin-top:2px;font-size:18px;font-weight:600}.metric-warn{border-color:var(--amber)}.metric-warn .metric-v{color:var(--amber)}.metric-danger{border-color:var(--red)}.metric-danger .metric-v{color:var(--red)}.month-row{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.month-input{border:1.5px solid var(--blue);border-radius:var(--rs);color:var(--ink);background:var(--card);padding:8px 12px;font-size:14px;font-weight:600}.version-list{border:1px solid var(--line);border-radius:var(--r);overflow:hidden}.version-list-head{border-bottom:1px solid var(--line);background:#fafbfc;padding:10px 14px;font-size:13px;font-weight:600}.version-row{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:10px 14px;font-size:13px;display:flex}.version-row:last-child{border-bottom:none}.version-id{min-width:90px;font-weight:600}.version-meta{color:var(--ink3);flex:1;font-size:12px}.version-new{background:#fafbfc}.config-step .metrics-row .metric-card{background:var(--card)}.policy-chips{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.policy-chip{border:1px solid var(--line);background:var(--card);color:var(--ink2);cursor:pointer;border-radius:999px;align-items:center;gap:5px;padding:5px 13px;font-size:12.5px;font-weight:600;display:inline-flex}.policy-chip:hover{border-color:var(--blue);color:var(--blue)}.policy-chip.on{background:var(--blue);border-color:var(--blue);color:#fff}.policy-chip .chip-icon{font-size:11px}.policy-info{padding:12px 16px}.policy-info-head{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:6px;display:flex}.policy-name{font-size:15px;font-weight:700}.policy-name-en{color:var(--ink3);font-size:12px}.policy-code{color:var(--ink3);font-size:11px}.policy-info .card-sub{margin-bottom:0}.filter-bar,.bulk-bar{background:var(--card);border:1px solid var(--line);border-radius:var(--r);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;padding:10px 14px;display:flex}.bulk-label{color:var(--ink2);font-size:12.5px;font-weight:600}.ms{position:relative}.ms-trigger{width:100%;height:28px;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:var(--rs);cursor:pointer;text-align:left;align-items:center;gap:6px;padding:0 8px;font-size:12.5px;display:flex}.ms-trigger:hover{border-color:var(--blue)}.ms.open .ms-trigger{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-soft)}.ms-placeholder{color:var(--ink3);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.ms-value{white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.ms-clear{color:var(--ink3);padding:0 2px;font-size:14px;line-height:1}.ms-clear:hover{color:var(--red)}.ms-arrow{color:var(--ink3);font-size:10px}.ms-panel{z-index:1000;background:var(--card);border:1px solid var(--line);border-radius:var(--rs);min-width:100%;padding:6px;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 6px 24px #1a1d261f}.ms-search{box-sizing:border-box;border:1px solid var(--line);border-radius:5px;outline:none;width:100%;height:26px;margin-bottom:4px;padding:0 8px;font-size:12.5px}.ms-search:focus{border-color:var(--blue)}.ms-actions{border-bottom:1px solid var(--line);gap:10px;margin-bottom:4px;padding:2px 4px 6px;display:flex}.ms-actions button{color:var(--blue);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px}.ms-list{max-height:260px;overflow-y:auto}.ms-item{color:var(--ink);cursor:pointer;white-space:nowrap;border-radius:5px;align-items:center;gap:8px;padding:5px 6px;font-size:12.5px;display:flex}.ms-item:hover{background:var(--blue-soft)}.ms-item input{accent-color:var(--blue);margin:0}.ms-mark{margin-left:auto;padding-left:10px;font-size:11px;font-weight:600}.ms-mark-full{color:var(--blue)}.ms-mark-partial{color:var(--ink3)}.ms-empty{text-align:center;color:var(--ink3);padding:12px;font-size:12px}.filter-spacer{flex:1}.grid-wrap{border-radius:var(--r);height:560px;margin-bottom:14px;overflow:hidden}.grid-wrap .num{font-family:var(--mono);font-variant-numeric:tabular-nums}.ag-theme-quartz .ag-cell.num{text-align:right}.num-readonly{color:var(--ink3)}.ag-theme-quartz .cell-draft{box-shadow:inset 3px 0 0 var(--blue);background:var(--blue-soft)!important}.ag-theme-quartz .cell-required-missing{box-shadow:inset 3px 0 0 var(--red);background:var(--red-soft)!important}.summary-bar .metrics-row{margin-bottom:0}.summary-bar .bar{margin-top:14px}.notify-stack{z-index:3000;pointer-events:none;flex-direction:column;gap:8px;display:flex;position:fixed;top:16px;left:50%;transform:translate(-50%)}.notify{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:var(--rs);color:var(--ink);max-width:560px;padding:9px 16px;font-size:13px;transition:opacity .2s;animation:.18s ease-out notify-in;box-shadow:0 4px 16px #1a1d261f}.notify-success{border-left-color:#16a34a}.notify-error{border-left-color:var(--red)}.notify-warning{border-left-color:var(--amber)}.notify-info{border-left-color:var(--blue)}.notify-out{opacity:0}@keyframes notify-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1}}.gp-section{margin-bottom:16px}.gp-title{color:var(--ink2);border-bottom:1px solid var(--line);margin-bottom:10px;padding-bottom:6px;font-size:12px;font-weight:600}.gp-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px 14px;display:grid}.gp-field{flex-direction:column;gap:4px;display:flex}.gp-label{color:var(--ink2);font-size:12px}.gp-tip{color:var(--ink3);cursor:help;margin-left:4px;font-size:11px}.section-title{color:var(--ink);border-top:1px solid var(--line);margin:18px 0 4px;padding-top:12px;font-size:14px;font-weight:600}.section-title:first-of-type{border-top:none;padding-top:0}.tree-indent{display:inline-block}.tree-indent-1{padding-left:16px}.tree-indent-2{color:var(--ink2);padding-left:32px}.tree-0 td{background:#fafbfc;font-weight:700}.tree-1 td{font-weight:600}.mini-table tr.row-unknown td{color:var(--amber)}.grid-ledger{height:460px}.trace-amount{-webkit-text-decoration:underline dotted var(--ink3);text-decoration:underline dotted var(--ink3);text-underline-offset:3px;cursor:help}.trace-tip{background:var(--card);border:1px solid var(--line);border-radius:var(--rs);max-width:460px;padding:10px 12px;box-shadow:0 6px 20px #1a1d2629}.trace-tip-title{margin-bottom:6px;font-size:12.5px;font-weight:700}.trace-tip-table{border-collapse:collapse;font-size:12px}.trace-tip-table td{vertical-align:top;padding:2px 8px 2px 0}.trace-tip-label{color:var(--ink2);white-space:nowrap;font-weight:600}.trace-tip-expr{color:var(--ink)}.trace-tip-value{text-align:right;white-space:nowrap}.trace-tip-meta{border-top:1px dashed var(--line);color:var(--ink3);margin-top:6px;padding-top:6px;font-size:11px}.trace-tip-empty{color:var(--ink3);font-size:12px}.bk-body{max-height:62vh;padding-right:4px;overflow-y:auto}.bk-section{margin-bottom:16px}.bk-title{color:var(--ink2);border-bottom:1px solid var(--line);margin:0 0 8px;padding-bottom:6px;font-size:12px;font-weight:600}.bk-row{border-radius:var(--rs);grid-template-columns:22px 108px 1fr;align-items:center;gap:8px;padding:5px 6px;display:grid}.bk-row:hover{background:#f7f8fa}.bk-row.has-err{background:var(--red-soft)}.bk-check{justify-content:center;display:flex}.bk-check input{accent-color:var(--blue);cursor:pointer;width:14px;height:14px;margin:0}.bk-check input:disabled{cursor:default}.bk-label{color:var(--ink);font-size:12.5px;font-weight:500}.bk-req{color:var(--red);margin-left:2px;font-style:normal}.bk-hint{color:var(--ink3);cursor:help;margin-left:4px;font-size:11px}.bk-control{min-width:0}.bk-err{color:var(--red);grid-column:3;margin-top:2px;font-size:11.5px}.bk-dates{align-items:center;gap:6px;width:100%;display:inline-flex}.bk-seg{border:1px solid var(--line);border-radius:5px;display:inline-flex;overflow:hidden}.bk-seg-btn{background:var(--card);color:var(--ink2);cursor:pointer;border:none;padding:5px 22px;font-size:12.5px}.bk-seg-btn+.bk-seg-btn{border-left:1px solid var(--line)}.bk-seg-btn.on{background:var(--blue);color:#fff;font-weight:600}.bk-seg-wrap{flex-direction:column;align-items:flex-start;gap:4px;display:inline-flex}.bk-capmode-warn{color:var(--amber);font-size:11.5px}.bk-file{align-items:center;gap:8px;max-width:100%;display:inline-flex}.bk-file-name{color:var(--ink);white-space:nowrap;text-overflow:ellipsis;max-width:320px;font-size:12.5px;overflow:hidden}.bk-foot-hint{text-align:left;color:var(--ink3);flex:1;align-self:center;font-size:12px}.cell-adj{background:var(--amber-soft)!important}.cell-pending{background:var(--blue-soft)!important}.adj-wrap{flex-direction:column;justify-content:center;line-height:1.3;display:inline-flex}.adj-old{color:var(--ink3);font-size:10.5px;text-decoration:line-through}.adj-new{color:var(--blue);font-weight:700}.adj-flag{color:var(--amber);align-items:center;gap:6px;font-weight:700;display:inline-flex}.pending-bar{align-items:center;gap:10px;display:flex}.pending-bar>span{flex:1}.mx-toggle{cursor:pointer;color:var(--blue);background:0 0;border:none;width:16px;padding:0 4px 0 0;font-size:12px}.mx-indent-1{margin-left:18px}.mx-indent-2{margin-left:40px}.mx-indent-3{color:var(--ink2);margin-left:62px}tr.mx-series td{background:#fafbfc;font-weight:600}tr.mx-customer td,tr.mx-model td{background:#fdfdfe}tr.mx-config td{color:var(--ink2)}tr.mx-config .matrix-cell-btn{font-weight:400}.att-foot{align-items:center;gap:12px;width:100%;display:flex}.att-dl{color:var(--blue);white-space:nowrap;font-size:13px;text-decoration:none}.att-dl:hover{text-decoration:underline}.att-drawer .hi-v5-drawer__header{padding:12px 20px}.att-drawer .hi-v5-drawer__footer{padding:10px 20px}.att-body{flex-direction:column;height:100%;display:flex}.att-meta{margin-bottom:4px}.att-meta-name{word-break:break-all;margin-bottom:2px;font-size:14px;font-weight:600}.att-meta-sub{margin-bottom:4px}.att-link{border:1px solid var(--line,#e5e7eb);word-break:break-all;-webkit-user-select:all;user-select:all;text-overflow:ellipsis;white-space:nowrap;background:#f6f7f9;border-radius:4px;max-height:26px;margin:0 0 6px;padding:2px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.att-preview{border:1px solid var(--line,#e5e7eb);background:#fafbfc;border-radius:6px;flex:1;width:100%;min-height:240px;margin:6px 0 0}.att-preview-img{object-fit:contain;cursor:zoom-in;background:#f6f7f9}.att-preview-none{color:var(--ink3);border-style:dashed;justify-content:center;align-items:center;font-size:13px;display:flex}.att-confirm{align-items:center;gap:10px;margin-top:10px;display:flex}.att-confirm>span{flex:1}.att-empty{text-align:center;padding:40px 0}.link-dim{color:var(--ink3);font-weight:400}.calc-report{border-left:3px solid var(--blue);margin:12px 0 0;padding:12px 16px}.calc-report .mini-table{margin-top:8px}.fb-fab{z-index:900;background:var(--blue);color:#fff;cursor:pointer;opacity:.92;border:none;border-radius:20px;padding:8px 14px;font-size:13px;transition:opacity .15s,transform .15s;position:fixed;bottom:20px;right:20px;box-shadow:0 4px 12px #2660ff59}.fb-fab:hover{opacity:1;transform:translateY(-1px)}.fb-form{flex-direction:column;gap:6px;display:flex}.fb-label{color:var(--ink);margin-top:6px;font-size:13px;font-weight:600}.fb-req{color:var(--red)}.fb-opt{color:var(--ink3);font-size:12px;font-weight:400}.fb-desc{box-sizing:border-box;resize:vertical;border:1px solid var(--line);border-radius:var(--rs);width:100%;color:var(--ink);padding:8px 10px;font-family:inherit;font-size:13px}.fb-desc:focus{border-color:var(--blue);outline:none}.fb-drop{border:1px dashed var(--line);border-radius:var(--rs);color:var(--ink3);cursor:pointer;background:#fafbfc;width:100%;padding:22px 12px;font-size:13px}.fb-drop:hover{border-color:var(--blue);color:var(--blue)}.fb-shot img{object-fit:contain;border:1px solid var(--line);border-radius:var(--rs);cursor:zoom-in;background:#f6f7f9;max-width:100%;max-height:320px;display:block}.fb-shot-bar{justify-content:space-between;align-items:center;margin-top:6px;display:flex}.md-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.md-head h2{margin-bottom:0}.md-head-ops{gap:8px;display:flex}.md-ops{white-space:nowrap}.md-ops .link-btn+.link-btn{margin-left:10px}.md-muted{color:var(--ink3);font-weight:400}.md-select{height:28px;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:var(--rs);padding:0 8px;font-size:12.5px}.md-select:focus{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-soft);outline:none}.md-file-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.md-preview{max-height:220px;overflow:auto}.md-preview .mini-table{margin-top:0}.md-filter{margin-bottom:12px}.md-danger-list{margin:6px 0 0;padding-left:18px}.md-fallback{border:1px dashed #d9d9d9;border-radius:8px;margin-bottom:12px}.md-fallback>summary{cursor:pointer;color:#666;-webkit-user-select:none;user-select:none;padding:10px 14px;font-size:13px}.ledger-step .filter-bar{flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0;display:flex}
