:root{--c-primary: #4f46e5;--c-primary-strong: #4338ca;--c-primary-soft: #eef2ff;--c-primary-ghost: rgba(79, 70, 229, .14);--c-ok: #047857;--c-ok-bg: #d1fae5;--c-warn: #b45309;--c-warn-bg: #fef3c7;--c-danger: #b91c1c;--c-danger-bg: #fee2e2;--c-danger-border: #fca5a5;--n-50: #f9fafb;--n-100: #f3f4f6;--n-200: #e5e7eb;--n-300: #d1d5db;--n-400: #9ca3af;--n-500: #6b7280;--n-600: #4b5563;--n-700: #374151;--n-800: #1f2937;--n-900: #111827;--c-bg: #f4f5f8;--c-line: var(--n-200);--c-line-soft: #eef0f3;--fs-xs: 12px;--fs-sm: 13px;--fs-md: 14px;--fs-lg: 16px;--fs-xl: 18px;--fs-h1: 22px;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--r-full: 999px;--sh-sm: 0 1px 2px rgba(17, 24, 39, .06);--sh-md: 0 4px 14px rgba(17, 24, 39, .08);--sh-lg: 0 20px 50px rgba(0, 0, 0, .18)}*{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:-apple-system,Segoe UI,Microsoft YaHei,PingFang SC,sans-serif;background:linear-gradient(160deg,#f5f6fa,#eef1f7 55%,#f3f0fa);background-attachment:fixed;color:var(--n-800);line-height:1.7;font-size:var(--fs-md);-webkit-font-smoothing:antialiased}:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px;border-radius:var(--r-sm)}.wrap{max-width:880px;margin:0 auto;padding:40px 20px}.hero{background:linear-gradient(135deg,#312e81,#4f46e5 62%,#6366f1);color:#fff;border-radius:var(--r-lg);padding:var(--sp-6) var(--sp-6) var(--sp-5);margin-bottom:var(--sp-5);box-shadow:var(--sh-md);position:relative;overflow:hidden}.hero:after{content:"";position:absolute;right:-60px;top:-80px;width:220px;height:220px;border-radius:50%;background:#ffffff14;pointer-events:none}.hero h1{margin:0 0 var(--sp-1);font-size:var(--fs-h1)}.hero p{margin:0;opacity:.88;font-size:var(--fs-sm)}.panel{background:#fff;border:1px solid var(--c-line);border-radius:var(--r-lg);padding:var(--sp-5) var(--sp-6);margin-bottom:var(--sp-4);box-shadow:var(--sh-sm)}.panel h2{margin:0 0 var(--sp-3);font-size:var(--fs-lg)}.badge{display:inline-block;font-size:var(--fs-md);padding:4px 14px;border-radius:var(--r-full);background:var(--n-100);color:var(--n-600)}.badge-ok{background:var(--c-ok-bg);color:var(--c-ok)}.badge-warn{background:var(--c-warn-bg);color:var(--c-warn)}.badge-off{background:var(--c-danger-bg);color:var(--c-danger)}.badge-danger{background:var(--c-danger-bg);color:var(--c-danger);font-weight:600}.badge-muted{background:var(--n-100);color:var(--n-500)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--sp-3)}.grid-links .card{align-items:flex-start}.card-link{cursor:pointer}.card-link:hover{border-color:var(--c-primary, #6366f1);box-shadow:0 2px 10px #6366f11f;transform:translateY(-1px)}.card-link:focus-visible{outline:2px solid #6366f1;outline-offset:2px}.page-foot{margin:var(--sp-4) 2px 0;font-size:var(--fs-sm);color:var(--n-500)}.page-foot .card-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}.card{border:1px solid var(--c-line);border-radius:var(--r-md);padding:var(--sp-4) var(--sp-4);background:#fff;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;display:flex;flex-direction:column;gap:2px}.card b{display:flex;align-items:center;gap:8px;margin-bottom:var(--sp-1);font-size:15px;color:var(--n-800)}.card span{font-size:var(--fs-sm);color:var(--n-500)}.card:hover:not(.card-muted){transform:translateY(-2px);box-shadow:var(--sh-md);border-color:#c7d2fe}.card-muted{opacity:.55}.card-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--c-line);background:#fff;color:var(--n-700);border-radius:var(--r-sm);padding:8px 16px;font-size:var(--fs-md);cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease,box-shadow .15s ease;font-family:inherit;line-height:1.5}.btn:hover:not(:disabled){background:var(--n-50);border-color:var(--n-300)}.btn:active:not(:disabled){background:var(--n-100);transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:600}.btn-primary:hover:not(:disabled){background:var(--c-primary-strong);border-color:var(--c-primary-strong)}.btn-primary:active:not(:disabled){background:#3730a3}.btn-ghost{background:transparent;border-color:transparent;color:var(--n-600)}.btn-ghost:hover:not(:disabled){background:var(--n-100);border-color:transparent}.btn-ghost:active:not(:disabled){background:var(--n-200)}.btn-danger{color:var(--c-danger);border-color:var(--c-danger-border);background:#fff}.btn-danger:hover:not(:disabled){background:var(--c-danger-bg);border-color:var(--c-danger)}.btn-sm{padding:2px 10px;font-size:var(--fs-sm)}.btn-new,.btn-submit{width:auto;background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:600}.btn-new:hover:not(:disabled),.btn-submit:hover:not(:disabled){background:var(--c-primary-strong);border-color:var(--c-primary-strong)}.btn-submit{min-width:96px}.toolbar .btn-new{margin-left:auto}.btn-logout{color:var(--n-500);font-size:var(--fs-sm)}.btn-logout:hover:not(:disabled){color:var(--c-danger);background:var(--c-danger-bg)}.spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;display:inline-block;flex-shrink:0}.spinner-dark{border-color:var(--c-primary-ghost);border-top-color:var(--c-primary)}@keyframes spin{to{transform:rotate(360deg)}}.form-row{display:block;margin-bottom:var(--sp-4)}.form-row:where(>span:not([class])){display:block;font-size:var(--fs-sm);color:var(--n-600);margin-bottom:6px}.form-label{display:block;font-size:var(--fs-sm);color:var(--n-600);margin-bottom:6px}.form-row .form-label{display:block}.field-hint{display:block;font-size:var(--fs-xs);color:var(--n-400);margin-top:4px;font-weight:400}.form-row .field-hint{display:block}.form-row .check-row{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-md);color:var(--n-700);margin:0 18px 6px 0;cursor:pointer}.form-row .check-row span{display:inline;font-size:var(--fs-md);color:var(--n-700);margin:0}.form-row .check-row input{width:16px;height:16px;cursor:pointer;accent-color:var(--c-primary)}.check-list{display:flex;flex-wrap:wrap;gap:2px 0}.input{width:100%;padding:9px 12px;border:1px solid var(--n-300);border-radius:var(--r-sm);font-size:var(--fs-md);outline:none;background:#fff;color:var(--n-800);transition:border-color .15s ease,box-shadow .15s ease;font-family:inherit}.input::placeholder{color:var(--n-400)}.input:hover:not(:disabled):not(:focus){border-color:var(--n-400)}.input:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px var(--c-primary-ghost)}.input:disabled{background:var(--n-100);cursor:not-allowed}.input-error,.input[aria-invalid=true]{border-color:var(--c-danger-border)}textarea.input{resize:vertical;min-height:72px;line-height:1.6}.input-error:focus,.input[aria-invalid=true]:focus{border-color:var(--c-danger);box-shadow:0 0 0 3px #b91c1c1f}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}.form-grid .span2,.form-row.span2{grid-column:1 / -1}.login-page{min-height:100vh;display:grid;grid-template-columns:minmax(380px,5fr) minmax(380px,4fr)}.login-brand{background-image:linear-gradient(rgba(126,166,204,.1) 1px,transparent 1px),linear-gradient(90deg,rgba(126,166,204,.1) 1px,transparent 1px),radial-gradient(720px 420px at 88% -8%,rgba(53,110,168,.35),transparent 62%),linear-gradient(160deg,#0f2230,#123044 58%,#143a52);background-size:26px 26px,26px 26px,cover,cover;color:#fff;display:flex;align-items:center;justify-content:center;padding:var(--sp-6)}.login-brand-inner{max-width:420px}.login-logo{width:56px;height:56px;border-radius:16px;background:#ffffff24;border:1px solid rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;margin-bottom:var(--sp-5)}.login-brand h1{margin:0 0 var(--sp-2);font-size:30px;letter-spacing:.5px}.login-brand>.login-brand-inner>p{margin:0 0 var(--sp-5);font-size:var(--fs-lg);opacity:.92}.login-points{list-style:none;margin:0;padding:0}.login-points li{font-size:var(--fs-md);opacity:.85;padding:6px 0 6px 24px;position:relative}.login-points li:before{content:"";position:absolute;left:4px;top:14px;width:6px;height:6px;border-radius:50%;background:#a5b4fc}.login-side{display:flex;align-items:center;justify-content:center;padding:var(--sp-6) var(--sp-5)}.login-card{width:100%;max-width:380px;background:#fff;border:1px solid var(--c-line);border-radius:var(--r-lg);padding:34px 34px 26px;box-shadow:var(--sh-md)}.login-card h2{margin:0 0 4px;font-size:var(--fs-xl);color:var(--n-900)}.login-sub{margin:0 0 var(--sp-5);font-size:var(--fs-sm);color:var(--n-500)}.login-error{display:flex;align-items:center;gap:6px;background:var(--c-danger-bg);color:var(--c-danger);font-size:var(--fs-sm);border-radius:var(--r-sm);padding:9px 12px;margin:0 0 var(--sp-4)}.login-field{display:block;margin-bottom:var(--sp-4)}.login-field>span:not([class*=ant-]){display:block;font-size:var(--fs-sm);color:var(--n-600);margin-bottom:6px}.btn-login{margin-top:var(--sp-2);padding:10px 16px}.login-foot{margin:var(--sp-5) 0 0;font-size:var(--fs-xs);color:var(--n-400);text-align:center}.login-wrap{max-width:400px;margin:9vh auto 0;padding:0 20px}.login-hero{background:linear-gradient(135deg,#312e81,#4f46e5);color:#fff;border-radius:var(--r-lg) var(--r-lg) 0 0;padding:26px 26px 20px}.login-hero h1{margin:0 0 6px;font-size:var(--fs-h1)}.login-hero p{margin:0;font-size:var(--fs-sm);opacity:.9}.login-form{border-radius:0 0 var(--r-lg) var(--r-lg);border-top:none;padding:24px 26px}.layout{display:flex;height:100vh;overflow:hidden}.side{height:100vh}.layout-main{overflow-y:auto;height:100vh;min-width:0}.side{width:224px;flex-shrink:0;background:#fff;border-right:1px solid var(--c-line);display:flex;flex-direction:column}.side-brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:15px;color:var(--n-900);padding:var(--sp-4) var(--sp-4) var(--sp-3);border-bottom:1px solid var(--c-line-soft)}.side-logo{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,var(--c-primary),#6366f1);color:#fff;font-size:14px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.side-brand-text{letter-spacing:.3px}.side-nav{padding:var(--sp-2) var(--sp-3) var(--sp-5);overflow-y:auto;flex:1}.side-group-title{font-size:var(--fs-md);font-weight:700;color:var(--th-side-grp, var(--n-700));margin:var(--sp-5) var(--sp-2) 7px;letter-spacing:1px;padding:6px 10px;border-radius:var(--r-sm);background:var(--th-side-grp-bg, var(--n-100))}.side-group-title-first{margin-top:var(--sp-2)}button.side-group-toggle{display:flex;align-items:center;gap:7px;width:auto;background:none;border:none;cursor:pointer;font-family:inherit;padding:6px 10px;text-align:left;transition:background .15s ease,color .15s ease}button.side-group-toggle:hover{color:var(--th-side-text-hover, var(--n-800));background:var(--th-side-hover-bg, var(--n-200))}button.side-group-toggle .side-grp-arrow{margin-left:auto;font-size:11px;color:var(--th-side-text, var(--n-500));opacity:.85;transition:transform .18s ease;display:inline-flex}button.side-group-toggle[aria-expanded=true] .side-grp-arrow{transform:rotate(90deg)}.side-link{position:relative;display:flex;align-items:center;padding:9px 10px 9px 15px;border-radius:var(--r-sm);color:var(--n-600);text-decoration:none;font-size:var(--fs-md);margin-bottom:2px;transition:background .15s ease,color .15s ease}.side-link:hover{background:var(--n-100);color:var(--n-800)}.side-link.active{background:var(--c-primary-soft);color:var(--c-primary-strong);font-weight:600}.side-link.active:before{content:"";position:absolute;left:0;top:7px;bottom:7px;width:3px;border-radius:var(--r-full);background:var(--c-primary)}.side-loading{padding:var(--sp-2) 10px;font-size:var(--fs-sm);color:var(--n-400)}.side-group-items{margin-left:22px;padding-left:9px;border-left:1px solid var(--th-side-line, #E5E7EB)}.side-group-items .side-link{padding-left:10px}.side-foot{border-top:1px solid var(--c-line-soft);padding:var(--sp-3) var(--sp-4);display:flex;align-items:center;gap:10px}.avatar{width:34px;height:34px;border-radius:50%;background:var(--c-primary-soft);color:var(--c-primary-strong);font-weight:700;font-size:15px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.side-foot-user{min-width:0;display:flex;flex-direction:column;line-height:1.35}.side-foot-user b{font-size:var(--fs-sm);color:var(--n-800);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.side-foot-user i{font-style:normal;font-size:var(--fs-xs);color:var(--n-400)}.layout-main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{height:56px;background:#fff;border-bottom:1px solid var(--c-line);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:0 var(--sp-6);position:sticky;top:0;z-index:10}.topbar-title{margin:0;font-size:var(--fs-lg);font-weight:600;color:var(--n-900)}.topbar-right{display:flex;align-items:center;gap:var(--sp-3)}.topbar-user{font-size:var(--fs-md);color:var(--n-600)}.content{flex:1;padding:var(--sp-5) var(--sp-6);width:100%}.hint{font-size:var(--fs-sm);color:var(--n-500);margin:var(--sp-3) 0 0}.page-panel{padding:var(--sp-4) var(--sp-5) var(--sp-3)}.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-3)}.page-head h2{margin:0;font-size:var(--fs-lg)}.page-intro{margin:4px 0 0;font-size:var(--fs-sm);color:var(--n-500);max-width:640px}.page-error{display:block;margin:0 0 10px}.toolbar{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:nowrap}.toolbar-search{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:nowrap;min-width:0}.toolbar-search .input,.toolbar-search .ant-input{width:220px;padding:7px 10px}@media (max-width: 900px){.toolbar,.toolbar-search{flex-wrap:wrap}}.tbl-wrap{overflow:auto;max-height:calc(100vh - 285px);min-height:240px;background:#fff;border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-sm)}.tbl th:first-child,.tbl td:first-child{position:sticky;left:0;z-index:2}.tbl th:last-child,.tbl td:last-child{position:sticky;right:0;z-index:2}.tbl th:first-child,.tbl th:last-child{z-index:4}.tbl td:first-child,.tbl td:last-child{background:var(--th-card-bg, #fff)}.tbl th:first-child,.tbl th:last-child{background:var(--n-50)}.tbl tbody tr:nth-child(2n) td:first-child,.tbl tbody tr:nth-child(2n) td:last-child{background:#fcfcfd}.tbl tbody tr:hover td:first-child,.tbl tbody tr:hover td:last-child{background:var(--c-primary-soft)}[data-theme=c] .tbl tbody tr:nth-child(2n) td:first-child,[data-theme=c] .tbl tbody tr:nth-child(2n) td:last-child{background:var(--th-card-bg)}[data-theme=c] .tbl tbody tr:hover td:first-child,[data-theme=c] .tbl tbody tr:hover td:last-child{background:var(--th-tbl-hover, rgba(255,255,255,.04))}.tbl td:first-child,.tbl th:first-child{box-shadow:6px 0 8px -6px #0f172a2e}.tbl td:last-child,.tbl th:last-child{box-shadow:-6px 0 8px -6px #0f172a2e}[data-theme=c] .tbl td:first-child,[data-theme=c] .tbl th:first-child{box-shadow:6px 0 8px -6px #00000080}[data-theme=c] .tbl td:last-child,[data-theme=c] .tbl th:last-child{box-shadow:-6px 0 8px -6px #00000080}table.tbl{width:100%;border-collapse:collapse;font-size:var(--fs-md)}.tbl th,.tbl td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--c-line-soft);white-space:nowrap;vertical-align:middle}.tbl th{background:var(--n-50);color:var(--n-500);font-weight:600;font-size:var(--fs-sm);position:sticky;top:0;z-index:1;letter-spacing:.3px}.tbl tbody tr{transition:background .12s ease}.tbl tbody tr:nth-child(2n){background:#fcfcfd}.tbl tbody tr:hover{background:var(--c-primary-soft)}.tbl td.num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}.tbl-empty{text-align:center!important;color:var(--n-400);padding:30px 0!important;white-space:normal!important}.tbl-detail{white-space:normal!important;max-width:420px;color:var(--n-600)}code{background:var(--n-100);border-radius:4px;padding:1px 6px;font-size:var(--fs-sm)}.pager{display:flex;align-items:center;gap:var(--sp-3);justify-content:flex-end;padding:10px 4px 4px;font-size:var(--fs-sm);color:var(--n-500)}.empty{text-align:center;padding:44px 0 40px;color:var(--n-400);font-size:var(--fs-md)}.empty .empty-icon{width:44px;height:44px;margin:0 auto 10px;border-radius:50%;background:var(--n-100);display:flex;align-items:center;justify-content:center}.skeleton{display:block;height:14px;border-radius:4px;background:linear-gradient(90deg,var(--n-100) 25%,var(--n-200) 45%,var(--n-100) 65%);background-size:200% 100%;animation:shimmer 1.3s infinite linear}@keyframes shimmer{0%{background-position:120% 0}to{background-position:-80% 0}}.mask-star{letter-spacing:2px;color:var(--n-400);font-weight:700}.btn-badge{border:none;cursor:pointer;font-size:var(--fs-sm);padding:3px 12px;border-radius:var(--r-full);display:inline-block;font-family:inherit}.btn-badge:disabled{opacity:.55;cursor:not-allowed}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;z-index:50;overflow-y:auto;animation:fadeIn .15s ease}.modal{background:#fff;border-radius:var(--r-lg);width:620px;max-width:100%;padding:var(--sp-6) var(--sp-6);box-shadow:var(--sh-lg);animation:riseIn .18s ease}.modal-lg{width:760px}.modal h3{margin:0 0 var(--sp-4);font-size:var(--fs-lg);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;color:var(--n-900)}.role-code-tag{font-weight:400}.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:var(--sp-5)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes riseIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.perm-groups{border:1px solid var(--c-line);border-radius:var(--r-md);max-height:320px;overflow-y:auto;padding:10px 14px}.perm-menu{margin-bottom:var(--sp-2)}.perm-menu-title{font-weight:600}.perm-menu-title span{font-weight:600;color:var(--n-900)}.perm-sub{margin-left:20px;margin-top:4px}.perm-sub-title span{font-size:var(--fs-sm);color:var(--n-600)}.perm-codes{margin-left:40px;margin-top:2px;display:flex;flex-wrap:wrap;gap:2px 0}.perm-code{font-style:normal;font-size:11px;color:var(--n-400);background:var(--n-50);border-radius:4px;padding:0 5px;margin-left:6px}.mask-box{border:1px dashed #fde68a;background:#fffbeb;border-radius:var(--r-md);padding:10px 14px;margin-top:var(--sp-4)}.mask-box h4{margin:0 0 var(--sp-2);font-size:var(--fs-sm);color:var(--c-warn)}.side-link-off{color:#c3c7cf;cursor:not-allowed}.side-link-off:hover{background:transparent;color:#c3c7cf}.side-lock{font-size:11px;border:1px solid var(--c-line);border-radius:4px;padding:0 4px;margin-left:6px;color:var(--n-400);background:var(--n-50)}.toast{position:fixed;top:18px;left:50%;transform:translate(-50%);background:var(--n-900);color:#fff;padding:10px 18px;border-radius:var(--r-md);font-size:var(--fs-md);z-index:80;box-shadow:var(--sh-lg);animation:toastIn .2s ease;max-width:min(80vw,560px)}.toast-error{background:var(--c-danger)}@keyframes toastIn{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.lic-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--sp-4)}.lic-card{border:1px solid var(--c-line);border-radius:var(--r-lg);background:#fff;padding:var(--sp-4) var(--sp-5);transition:box-shadow .18s ease,transform .18s ease}.lic-card:hover{box-shadow:var(--sh-md);transform:translateY(-1px)}.lic-card-preview{background:var(--n-50)}.lic-card h3{margin:0;font-size:var(--fs-lg);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.lic-dates{font-size:var(--fs-sm);color:var(--n-500);margin:var(--sp-2) 0 4px}.lic-ops{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center;border-top:1px dashed var(--c-line-soft);padding-top:var(--sp-3);margin-top:var(--sp-3)}.lic-ops .input{width:auto;padding:6px 8px;font-size:var(--fs-sm)}.crash-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--c-bg);padding:var(--sp-5)}.crash-card{background:#fff;border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-md);padding:34px 38px;max-width:460px;text-align:center}.crash-icon{width:44px;height:44px;margin:0 auto var(--sp-3);border-radius:50%;background:var(--c-warn-bg);color:var(--c-warn);font-size:22px;font-weight:700;display:flex;align-items:center;justify-content:center}.crash-card h2{margin:0 0 var(--sp-2);font-size:var(--fs-xl);color:var(--n-900)}.crash-text{margin:0 0 var(--sp-2);font-size:var(--fs-md);color:var(--n-600)}.crash-detail{margin:0 0 var(--sp-4);font-size:var(--fs-xs);color:var(--n-400);background:var(--n-50);border-radius:var(--r-sm);padding:8px 10px;word-break:break-all;max-height:88px;overflow-y:auto}.crash-actions{display:flex;gap:10px;justify-content:center}.crash-actions .btn-primary{width:auto}@media (max-width: 600px){.grid{grid-template-columns:1fr 1fr}}@media (max-width: 900px){.login-page{grid-template-columns:1fr}.login-brand{padding:40px var(--sp-5) 28px}.login-brand-inner{max-width:480px}.login-points{display:none}.login-brand h1{font-size:var(--fs-h1)}}@media (max-width: 760px){.layout{flex-direction:column;height:100vh;height:100dvh}.side{width:100%;height:auto;max-height:45vh;overflow:hidden;flex-shrink:0;border-right:none;border-bottom:1px solid var(--c-line)}.side-nav{display:flex;flex-wrap:wrap;padding:var(--sp-2);overflow-y:auto}.side-group-title{width:100%;margin:var(--sp-2) 6px 2px}.side-group-title-first{margin-top:0}.side-link{margin-bottom:2px}.side-foot{display:none}.layout-main{height:auto;flex:1;min-height:0}.content{padding:var(--sp-4)}.topbar{padding:0 var(--sp-4)}.form-grid{grid-template-columns:1fr}}.login-logo img,.side-logo img{width:100%;height:100%;object-fit:cover;border-radius:inherit;display:block}.side-brand{min-width:0}.side-brand-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.brand-layout{display:grid;grid-template-columns:240px 1fr;gap:var(--sp-6);margin-top:var(--sp-4)}.brand-preview-card{border:1px solid var(--c-line);border-radius:var(--r-md);background:var(--n-50);padding:var(--sp-4);display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;align-self:start}.brand-preview-label{margin:0 0 6px;font-size:var(--fs-xs);color:var(--n-400);letter-spacing:1px}.brand-logo-lg{width:72px;height:72px;border-radius:16px;object-fit:cover;box-shadow:var(--sh-sm)}.brand-preview-name{margin:6px 0 0;font-weight:700;color:var(--n-900);word-break:break-all}.brand-preview-slogan{margin:0;font-size:var(--fs-sm);color:var(--n-500)}.brand-form .input-file{padding:7px 10px;background:var(--n-50);cursor:pointer}.brand-form .input-file:disabled{cursor:not-allowed}.brand-msg{margin:0 0 var(--sp-3);font-size:var(--fs-sm);border-radius:var(--r-sm);padding:8px 12px}.brand-msg-ok{background:var(--c-ok-bg);color:var(--c-ok)}.brand-msg-error{background:var(--c-danger-bg);color:var(--c-danger)}.brand-msg-info{background:var(--n-100);color:var(--n-600)}.brand-api-warn{display:block;margin:var(--sp-3) 0 0}.brand-actions{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}.btn-link{background:none;border:none;color:var(--c-primary);cursor:pointer;padding:0;font:inherit;font-size:var(--fs-xs);text-decoration:underline}.btn-link:hover:not(:disabled){color:var(--c-primary-strong)}.btn-link:disabled{color:var(--n-400);cursor:not-allowed;text-decoration:none}@media (max-width: 760px){.brand-layout{grid-template-columns:1fr}}.tab-bar{display:flex;gap:var(--sp-1);border-bottom:1px solid var(--c-line);margin-bottom:var(--sp-4)}.tab-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;font:inherit;font-size:var(--fs-md);color:var(--n-500);padding:8px 16px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;border-radius:var(--r-sm) var(--r-sm) 0 0;transition:color .15s ease,background .15s ease}.tab-btn:hover{color:var(--n-800);background:var(--n-50)}.tab-btn.active{color:var(--c-primary);border-bottom-color:var(--c-primary);font-weight:600}.tab-btn .tab-count{display:inline-block;min-width:20px;margin-left:6px;padding:0 6px;border-radius:var(--r-full);background:var(--n-100);color:var(--n-600);font-size:var(--fs-xs);text-align:center}.tab-btn.active .tab-count{background:var(--c-primary-soft);color:var(--c-primary-strong)}.toolbar select.input{width:auto;min-width:108px}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:60;animation:fadeIn .15s ease}.drawer{position:fixed;top:0;right:0;bottom:0;width:min(720px,94vw);background:#fff;z-index:61;box-shadow:var(--sh-lg);display:flex;flex-direction:column;animation:slideInRight .2s ease}@keyframes slideInRight{0%{transform:translate(28px);opacity:.4}to{transform:none;opacity:1}}.drawer-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-line-soft)}.drawer-head h3{margin:0;font-size:var(--fs-xl);display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.drawer-close{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;font-size:20px;line-height:1;color:var(--n-400);cursor:pointer;padding:9px 10px;border-radius:var(--r-sm)}.drawer-close:hover{color:var(--n-800);background:var(--n-100)}.drawer-close:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}.drawer-body{flex:1;overflow-y:auto;padding:var(--sp-4) var(--sp-5)}.drawer-foot{border-top:1px solid var(--c-line-soft);padding:var(--sp-3) var(--sp-5);display:flex;gap:var(--sp-2);justify-content:flex-end;align-items:center;flex-wrap:wrap}.drawer-foot .foot-hint{margin-right:auto;color:var(--n-500);font-size:var(--fs-sm)}.kv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:var(--sp-3) var(--sp-4);margin:0 0 var(--sp-4)}.kv{min-width:0}.kv dt{font-size:var(--fs-xs);color:var(--n-500)}.kv dd{margin:0;font-size:var(--fs-md);color:var(--n-800);font-weight:500;overflow-wrap:anywhere}.kv dd.num{font-variant-numeric:tabular-nums}.drawer h4.sec,.modal h4.sec,.ant-modal h4.sec,.ant-drawer h4.sec{margin:var(--sp-2) 0 var(--sp-3);font-size:var(--fs-md);color:var(--n-700);display:flex;align-items:center;gap:var(--sp-2)}.drawer h4.sec:before,.modal h4.sec:before,.ant-modal h4.sec:before,.ant-drawer h4.sec:before{content:"";width:3px;height:14px;border-radius:2px;background:var(--c-primary)}.line-editor{width:100%;border-collapse:collapse}.line-editor th{text-align:left;font-size:var(--fs-xs);color:var(--n-500);font-weight:500;padding:4px 6px;border-bottom:1px solid var(--c-line-soft);white-space:nowrap}.line-editor td{padding:4px 6px;border-bottom:1px dashed var(--c-line-soft)}.line-editor .input{width:100%;min-width:0}.line-editor td.cell-num{width:96px}.line-editor td.cell-item{min-width:180px}.line-editor td.cell-sub{color:var(--n-600, #6b7280);font-size:12px;padding-top:10px}.line-editor td.cell-amt{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--n-700)}.line-editor td.cell-op{width:34px;text-align:center}.line-editor tfoot td{padding:8px 6px 2px;border-bottom:none}.line-total{text-align:right;font-size:var(--fs-md);color:var(--n-800)}.line-total b{font-size:var(--fs-lg);color:var(--c-primary-strong);font-variant-numeric:tabular-nums}.line-del{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;color:var(--n-400);cursor:pointer;font-size:16px;line-height:1;padding:4px 6px;border-radius:var(--r-sm)}.line-del:hover{color:var(--c-danger);background:var(--c-danger-bg)}.line-del:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}tr.detail-row>td{background:var(--n-50);padding:var(--sp-3) var(--sp-4) var(--sp-4)}.act-box{margin-top:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-2)}.act-box .act-actions{display:flex;gap:var(--sp-2);justify-content:flex-end}.chain{display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center}.chain-node{background:var(--c-primary-soft);color:var(--c-primary-strong);border-radius:var(--r-full);padding:1px 10px;font-size:var(--fs-xs);white-space:nowrap}.chain-node.chain-off{background:var(--n-100);color:var(--n-500)}.chain-arrow{color:var(--n-400);font-size:var(--fs-xs)}@media (max-width: 760px){.toolbar{flex-wrap:wrap}.drawer{width:100vw}}.org-layout{display:grid;grid-template-columns:1fr;gap:var(--sp-5);align-items:start}.org-col{border:1px solid var(--c-line-soft);border-radius:var(--r-md);background:#fff;padding:var(--sp-3) var(--sp-4);min-width:0}.org-col-main{background:#fff}.org-col-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin-bottom:var(--sp-2)}.org-col-head h3{margin:0;font-size:var(--fs-md)}.org-tree{display:flex;flex-direction:column;gap:2px}.org-node{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);border:1px solid transparent;border-radius:var(--r-sm);background:transparent;padding:9px 10px;font-size:var(--fs-sm);color:var(--n-700)}.org-node:hover{background:var(--c-primary-soft)}.org-node-active{background:var(--c-primary-soft);border-color:var(--c-primary-ghost);color:var(--c-primary-strong);font-weight:600}.org-node-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.org-node-main{display:flex;align-items:center;justify-content:flex-start;gap:var(--sp-2);flex:1;min-width:0;text-align:left;border:none;background:transparent;padding:0;font:inherit;font-size:inherit;color:inherit;cursor:pointer}.org-node-code{color:var(--n-400);font-size:var(--fs-xs);flex:none}.org-node-ops{display:inline-flex;align-items:center;gap:4px;flex:none}.org-badges{display:inline-flex;gap:4px;flex:none}.org-tag{font-size:var(--fs-xs);line-height:1;padding:3px 7px;border-radius:var(--r-full);background:var(--n-100);color:var(--n-500);white-space:nowrap;min-width:46px;text-align:center}.org-tag-dept{background:var(--c-primary-ghost);color:var(--c-primary-strong)}.org-tag-ok{background:var(--c-ok-bg);color:var(--c-ok)}.org-tag-off{background:var(--c-danger-bg);color:var(--c-danger)}.org-empty{margin:0;padding:26px 10px;text-align:center;color:var(--n-400);font-size:var(--fs-sm)}@media (max-width: 760px){.org-layout{grid-template-columns:1fr}}.cell-duty{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}.dept-indent{display:inline-block}.tbl tr.row-active td{background:var(--c-primary-ghost)}.form-error{margin:8px 0;padding:8px 12px;border-radius:8px;background:var(--c-danger-bg);color:var(--c-danger);font-size:var(--fs-sm)}.form-ok{margin:8px 0;padding:8px 12px;border-radius:8px;background:var(--c-ok-bg);color:var(--c-ok);font-size:var(--fs-sm)}.crud-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.crud-table th{text-align:left;padding:8px 10px;background:var(--n-50);color:var(--n-500);font-weight:600;border-bottom:1px solid var(--c-line-soft)}.crud-table td{padding:8px 10px;border-bottom:1px solid var(--c-line-soft)}.crud-table tbody tr:hover{background:var(--n-50)}[data-theme=c] .crud-table th{background:var(--n-100)}[data-theme=c] .crud-table tbody tr:hover{background:#ffffff08}.search-select{position:relative}.search-select .ss-input{padding-right:34px}.search-select.ss-disabled{opacity:.8}.ss-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:20px;height:20px;padding:0;border:none;border-radius:var(--r-full);background:var(--n-100);color:var(--n-500);font-size:14px;line-height:20px;cursor:pointer;transition:background .15s ease,color .15s ease}.ss-clear:hover{background:var(--n-200);color:var(--n-800)}.ss-clear:active{background:var(--n-300)}.ss-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid var(--n-200);border-radius:var(--r-md);box-shadow:var(--sh-md);max-height:240px;overflow-y:auto;padding:4px;z-index:60;animation:fadeIn .12s ease}.ss-opt{display:flex;align-items:center;gap:6px;padding:7px 10px;border-radius:var(--r-sm);cursor:pointer;transition:background .12s ease}.ss-opt-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--n-800)}.ss-opt-sub{flex:none;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-xs);color:var(--n-500)}.ss-opt-check{flex:none;color:var(--c-primary);font-size:var(--fs-sm)}.ss-opt-hi{background:var(--c-primary-soft)}.ss-opt-hi .ss-opt-label{color:var(--c-primary-strong)}.ss-status{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 10px;text-align:center;font-size:var(--fs-sm);color:var(--n-500)}.ss-status-err{color:var(--c-danger)}.view-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}.view-grid .form-row{display:flex;flex-direction:column;gap:2px;padding:6px 0;border-bottom:1px dashed var(--c-line-soft)}.view-value{white-space:pre-wrap;word-break:break-word}.view-actions{display:flex;justify-content:flex-end;margin-top:var(--sp-3)}.view-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);padding:12px 16px;border:1px solid var(--c-line-soft);border-radius:var(--r-md);background:var(--th-card-2, #fbfbfa);margin-bottom:var(--sp-3)}.view-hero-main{min-width:0;display:flex;flex-direction:column;gap:4px}.view-hero-title{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;font-size:var(--fs-lg);font-weight:600;color:var(--n-900);line-height:1.35}.view-hero-sub{font-size:var(--fs-xs);color:var(--n-500);display:flex;align-items:center;gap:6px;flex-wrap:wrap}.view-hero-side{display:flex;align-items:center;gap:var(--sp-2);flex-shrink:0;padding-top:2px}.img-field{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap}.form-grid .img-field-row{grid-column:2;grid-row:span 3;align-self:start}@media (max-width: 760px){.form-grid .img-field-row{grid-column:1 / -1}}.img-preview{width:132px;height:132px;object-fit:cover;border-radius:12px;border:1px solid var(--c-line);background:var(--n-50)}.img-empty{width:132px;height:132px;border-radius:12px;border:1px dashed var(--n-300);display:flex;align-items:center;justify-content:center;color:var(--n-400);font-size:var(--fs-sm);background:var(--n-50)}.img-field-ops{display:flex;flex-direction:column;gap:6px;align-items:flex-start}.img-field .field-hint{flex-basis:100%;margin:0}.cell-name{display:inline-flex;align-items:center;gap:8px}.cell-thumb{width:26px;height:26px;border-radius:6px;object-fit:cover;border:1px solid var(--c-line-soft);flex:none}.view-hero-img{width:92px;height:92px;border-radius:10px;overflow:hidden;border:1px solid var(--c-line);flex:none}.view-hero-img .ant-image-img{width:100%;height:100%;object-fit:cover;display:block}.code-chip{font-size:var(--fs-xs);font-weight:500;color:var(--n-500);background:var(--n-100);border:1px solid var(--c-line-soft);border-radius:4px;padding:1px 7px;font-family:var(--th-mono, ui-monospace, Consolas, monospace)}.v-metrics{display:flex;flex-wrap:wrap;gap:0;border:1px solid var(--c-line-soft);border-radius:var(--r-md);background:var(--th-card-bg, #fff);overflow:hidden;margin-bottom:var(--sp-4)}.v-metric{flex:1 1 0;min-width:124px;padding:9px 14px;border-right:1px solid var(--c-line-soft)}.v-metric:last-child{border-right:0}.v-metric b{display:block;font-size:17px;font-weight:600;color:var(--n-900);line-height:1.3;font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-metric b .unit{font-size:var(--fs-xs);font-weight:500;color:var(--n-500);margin-left:3px}.v-metric span{display:block;font-size:var(--fs-xs);color:var(--n-500);margin-top:1px}.v-note{font-size:var(--fs-xs);color:var(--n-500);margin:-6px 0 var(--sp-4)}.tbl td.cell-sub{color:var(--n-500);font-size:var(--fs-xs)}.tbl .sub-line{display:block;color:var(--n-500);font-size:var(--fs-xs);font-weight:400;margin-top:2px}.tbl tfoot td{border-bottom:none;border-top:1px solid var(--c-line);background:var(--th-tbl-head, var(--n-50));color:var(--n-600);font-size:var(--fs-xs)}.col-dim{color:var(--n-400)}.foot-meta{margin-right:auto;color:var(--n-500);font-size:var(--fs-xs);display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chg-section{margin-top:var(--sp-5)}.chg-section h4.sec{margin-bottom:10px}.chg-notice{margin:0 0 10px}.chg-list{margin-top:10px;max-height:260px;overflow:auto;border:1px solid var(--n-200);border-radius:8px;background:#fff}.chg-batch{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--n-50);border-bottom:1px solid var(--n-200);font-size:var(--fs-xs);color:var(--n-500);font-variant-numeric:tabular-nums}.chg-batch b{font-weight:600;color:var(--n-600)}.chg-row{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--n-100);font-size:var(--fs-sm)}.chg-row:last-child{border-bottom:none}.chg-field{flex:none;min-width:76px;color:var(--n-600);font-weight:500}.chg-val{color:var(--n-800);overflow-wrap:anywhere}.chg-arrow{flex:none;color:var(--n-400)}.chg-row .btn{margin-left:auto;flex:none}.chg-empty{margin:0;padding:18px 0;text-align:center;color:var(--n-400);font-size:var(--fs-sm)}.chg-loading{margin:0;padding:14px 0;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--n-500);font-size:var(--fs-sm)}.flow-strip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px}.flow-step{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--n-500);padding:4px 12px;border-radius:999px;border:1px solid var(--c-line);background:#fff}.flow-step-now{color:#fff;background:#6366f1;border-color:transparent;font-weight:600}.flow-step-done{color:#16a34a;border-color:#16a34a}.flow-dot{width:8px;height:8px;border-radius:50%;background:currentColor;display:inline-block}.flow-arrow{font-style:normal;margin-left:8px;opacity:.5}.flow-next{font-size:var(--fs-sm);color:var(--n-500);margin-left:4px}.row-lack{background:#ef44440f}[data-theme] .side-logo{background:var(--th-side-logo-bg)}[data-theme] .avatar{background:var(--th-avatar-bg);color:var(--th-avatar-ink)}:root,:root[data-theme=a]{--c-primary: #1E5FA8;--c-primary-strong: #16497F;--c-primary-soft: #E9F1F9;--c-primary-ghost: rgba(30, 95, 168, .14);--c-ok: #0E7A4E;--c-ok-bg: #E3F3EB;--c-warn: #9A6200;--c-warn-bg: #FBF0DB;--c-danger: #B3362A;--c-danger-bg: #FAE7E4;--c-danger-border: #E4B6B0;--n-50: #F8FAFB;--n-100: #F0F3F6;--n-200: #DEE3E9;--n-300: #C9D1D9;--n-400: #8E9AA6;--n-500: #67737F;--n-600: #4E5A66;--n-700: #38424D;--n-800: #182028;--n-900: #10161D;--c-bg: #F2F4F6;--c-line: #DEE3E9;--c-line-soft: #E9EDF1;--th-side-bg: #FFFFFF;--th-side-line: #E9EDF1;--th-side-text: #4E5A66;--th-side-text-hover: #182028;--th-side-text-active: #16497F;--th-side-grp: #16497F;--th-side-grp-bg: #E9F1F9;--th-side-active-bg: #E9F1F9;--th-side-hover-bg: #F6F8FA;--th-side-logo-bg: #0F2230;--th-side-foot-line: #E9EDF1;--th-topbar-bg: #FFFFFF;--th-topbar-line: #E9EDF1;--th-topbar-title: #10161D;--th-avatar-bg: #E9F1F9;--th-avatar-ink: #16497F;--th-hero-bg: linear-gradient(160deg, #0F2230 0%, #123044 58%, #143A52 100%);--th-card-bg: #FFFFFF;--th-card-2: #F8FAFB;--th-line-row: #EEF1F4;--th-tbl-head: #F0F3F6;--th-tbl-hover: #F0F5FA;--th-tab-active: #16497F;--th-code-ink: #16497F;--th-mono: ui-monospace, "Cascadia Mono", Consolas, "SF Mono", Menlo, monospace}:root[data-theme=b]{--c-primary: #1F6A48;--c-primary-strong: #185739;--c-primary-soft: #E7F0E9;--c-primary-ghost: rgba(31, 106, 72, .16);--c-ok: #1F7A4A;--c-ok-bg: #E6F2E9;--c-warn: #96690F;--c-warn-bg: #F7EDD8;--c-danger: #B03A2E;--c-danger-bg: #F9E7E4;--c-danger-border: #E0B5AF;--n-50: #F6F0E3;--n-100: #EFEAE0;--n-200: #E7E0CE;--n-300: #D9D1BC;--n-400: #9A9E92;--n-500: #6E7166;--n-600: #575C4F;--n-700: #43473D;--n-800: #262B21;--n-900: #171A14;--c-bg: #FAF8F4;--c-line: #E7E0CE;--c-line-soft: #EFEAE0;--th-side-bg: #17382B;--th-side-line: rgba(237, 239, 232, .12);--th-side-text: #C9D6CC;--th-side-text-hover: #FFFFFF;--th-side-text-active: #FFFFFF;--th-side-grp: #CFE0D4;--th-side-grp-bg: rgba(231, 238, 233, .14);--th-side-active-bg: rgba(237, 239, 232, .1);--th-side-hover-bg: rgba(237, 239, 232, .07);--th-side-logo-bg: rgba(237, 239, 232, .1);--th-side-foot-line: rgba(237, 239, 232, .12);--th-topbar-bg: #FFFEFB;--th-topbar-line: #E7E0CE;--th-topbar-title: #262B21;--th-avatar-bg: #8C6D2F;--th-avatar-ink: #FFFFFF;--th-hero-bg: linear-gradient(150deg, #17382B 0%, #1C4433 100%);--th-card-bg: #FFFEFB;--th-card-2: #FCFAF3;--th-line-row: #EFEAE0;--th-tbl-head: #F6F0E3;--th-tbl-hover: #F6F1E7;--th-tab-active: #262B21;--th-code-ink: #185739;--th-mono: ui-monospace, "Cascadia Mono", Consolas, "SF Mono", Menlo, monospace}:root[data-theme=c]{--c-primary: #3FB6A8;--c-primary-strong: #57CCBE;--c-primary-soft: rgba(63, 182, 168, .13);--c-primary-ghost: rgba(63, 182, 168, .16);--c-ok: #46C79A;--c-ok-bg: rgba(70, 199, 154, .14);--c-warn: #E0A33E;--c-warn-bg: rgba(224, 163, 62, .14);--c-danger: #E5604F;--c-danger-bg: rgba(229, 96, 79, .14);--c-danger-border: rgba(229, 96, 79, .45);--n-50: #151A1F;--n-100: #171D23;--n-200: #20272E;--n-300: #2A333C;--n-400: #6D7883;--n-500: #97A1AC;--n-600: #C2CAD2;--n-700: #D5DCE2;--n-800: #E9EDF1;--n-900: #F2F4F6;--c-bg: #0F1216;--c-line: #20272E;--c-line-side: #1A2026;--c-line-soft: #1A2026;--th-side-bg: #0B0E11;--th-side-line: #1A2026;--th-side-text: #A8B2BC;--th-side-text-hover: #E9EDF1;--th-side-text-active: #7BD8CC;--th-side-grp: #7FC4B9;--th-side-grp-bg: rgba(63, 182, 168, .12);--th-side-active-bg: rgba(63, 182, 168, .1);--th-side-hover-bg: #171D23;--th-side-logo-bg: rgba(63, 182, 168, .13);--th-avatar-bg: rgba(63, 182, 168, .13);--th-avatar-ink: #7BD8CC;--th-side-foot-line: #1A2026;--th-topbar-bg: #0C1014;--th-topbar-line: #1A2026;--th-topbar-title: #F2F4F6;--th-hero-bg: linear-gradient(165deg, #090B0E 0%, #0C1014 55%, #10202A 100%);--th-card-bg: #13171B;--th-card-2: #171D23;--th-line-row: #1A2026;--th-tbl-head: #151A1F;--th-tbl-hover: #171D23;--th-field: #0C0F13;--th-tab-active: #7BD8CC;--th-code-ink: #6FCFC2;--th-mono: ui-monospace, "Cascadia Mono", Consolas, "SF Mono", Menlo, monospace}[data-theme] body{background:var(--c-bg)}[data-theme] .side{background:var(--th-side-bg);border-right-color:var(--th-side-line)}[data-theme] .side-brand{border-bottom-color:var(--th-side-line)}[data-theme] .side-brand-text{color:var(--th-side-text-active)}[data-theme] .side-group-title{color:var(--th-side-grp);background:var(--th-side-grp-bg)}[data-theme] .side-link{color:var(--th-side-text)}[data-theme] .side-link:hover{background:var(--th-side-hover-bg);color:var(--th-side-text-hover)}[data-theme] .side-link.active{background:var(--th-side-active-bg);color:var(--th-side-text-active)}[data-theme] .side-link.active:before{background:var(--c-primary)}[data-theme] .side-link-off{color:var(--n-400)}[data-theme] .side-lock{border-color:var(--th-side-line);background:transparent;color:var(--th-side-grp)}[data-theme] .side-foot{border-top-color:var(--th-side-line)}[data-theme] .side-foot-user b{color:var(--th-side-text-hover)}[data-theme] .side-foot-user i{color:var(--th-side-grp)}[data-theme] .topbar{background:var(--th-topbar-bg);border-bottom-color:var(--th-topbar-line)}[data-theme] .topbar-title{color:var(--th-topbar-title)}[data-theme] .topbar-user{color:var(--th-side-text)}[data-theme] .panel,[data-theme] .page-panel,[data-theme] .card,[data-theme] .lic-card,[data-theme] .tbl-wrap{background:var(--th-card-bg)}[data-theme] .tbl th{background:var(--n-50);color:var(--n-500)}[data-theme] .tbl tbody tr:nth-child(2n){background:transparent}[data-theme] .tbl tbody tr:hover{background:var(--th-tbl-hover)}[data-theme] .tab-btn.active{color:var(--th-tab-active);border-bottom-color:var(--c-primary)}[data-theme] .tab-btn.active .tab-count{background:var(--c-primary-soft);color:var(--c-primary-strong)}[data-theme] code{background:var(--n-100);color:var(--th-code-ink)}[data-theme] .input{background:var(--th-card-bg);color:var(--n-800);border-color:var(--n-300)}[data-theme] .input:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px var(--c-primary-ghost)}[data-theme] .btn{background:var(--th-card-bg);color:var(--n-700);border-color:var(--n-300)}[data-theme] .btn:hover:not(:disabled){background:var(--n-50);border-color:var(--n-400);color:var(--n-800)}[data-theme] .modal,[data-theme] .drawer{background:var(--th-card-bg)}[data-theme] .modal h3,[data-theme] .drawer-head h3{color:var(--n-900)}[data-theme] .modal-mask,[data-theme] .drawer-mask{background:#080b0e8c}[data-theme] .hero{background:var(--th-hero-bg)}[data-theme=c] .input::placeholder{color:#8b97a3}[data-theme=c] .tbl th,[data-theme=c] .tbl td{border-bottom-color:var(--c-line-soft)}[data-theme=c] .card b{color:var(--n-800)}[data-theme=c] .badge{background:var(--n-100);color:var(--n-600)}[data-theme=c] .page-intro,[data-theme=c] .hint{color:var(--n-500)}[data-theme=b] .login-brand{background:repeating-radial-gradient(1150px circle at -12% 112%,rgba(231,226,216,.05) 0,rgba(231,226,216,.05) 1px,transparent 1px,transparent 62px),linear-gradient(160deg,#142e23,#17382b 55%,#1c4433)}[data-theme=c] .login-brand{background:radial-gradient(rgba(120,190,180,.08) 1px,transparent 1.4px),linear-gradient(165deg,#101418,#121820 55%,#13202a);background-size:24px 24px,cover}.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--sp-3);margin-top:var(--sp-4)}.theme-card{position:relative;display:block;border:1.5px solid var(--c-line);border-radius:var(--r-md);background:var(--th-card-bg, #fff);padding:var(--sp-3);cursor:pointer;font-family:inherit;text-align:left;transition:border-color .15s ease,box-shadow .15s ease}.theme-card:hover{border-color:var(--c-primary);box-shadow:var(--sh-sm)}.theme-card.active{border-color:var(--c-primary);box-shadow:0 0 0 3px var(--c-primary-ghost)}.theme-card .theme-swatch{border-radius:calc(var(--r-md) - 3px);border:1px solid var(--c-line-soft);height:84px;display:flex;overflow:hidden}.theme-card .theme-swatch .sw-side{width:34%;display:flex;align-items:flex-end;padding:6px}.theme-card .theme-swatch .sw-side i{width:100%;height:7px;border-radius:3px;background:var(--sw-accent, var(--c-primary))}.theme-card .theme-swatch .sw-main{flex:1;padding:8px;display:flex;flex-direction:column;gap:6px}.theme-card .theme-swatch .sw-main i{height:7px;border-radius:3px;display:block}.theme-card .theme-swatch .sw-main i:nth-child(1){width:55%;background:var(--sw-primary, var(--c-primary))}.theme-card .theme-swatch .sw-main i:nth-child(2){width:80%;opacity:.35}.theme-card .theme-swatch .sw-main i:nth-child(3){width:68%;opacity:.25}.theme-card .theme-swatch .sw-main i:nth-child(4){width:40%;background:var(--sw-ok, var(--c-ok));opacity:.8}.theme-card .theme-name{display:flex;align-items:center;gap:6px;margin:10px 0 2px;font-weight:700;font-size:var(--fs-md);color:var(--n-800)}.theme-card .theme-desc{font-size:var(--fs-sm);color:var(--n-500);margin:0}.theme-card .theme-check{position:absolute;top:10px;right:10px;width:22px;height:22px;border-radius:50%;background:var(--c-primary);color:#fff;display:none;align-items:center;justify-content:center}.theme-card.active .theme-check{display:inline-flex}.theme-menu{position:absolute;top:calc(100% + 6px);right:0;width:264px;background:var(--th-card-bg, #fff);border:1px solid var(--c-line);border-radius:var(--r-md);box-shadow:var(--sh-lg);padding:6px;z-index:70;animation:fadeIn .15s ease}.theme-menu-head{font-size:var(--fs-xs);color:var(--n-400);padding:6px 10px 4px;letter-spacing:1px}.theme-opt{display:flex;align-items:center;gap:10px;width:100%;border:none;background:none;font:inherit;color:var(--n-700);padding:8px 10px;border-radius:var(--r-sm);cursor:pointer;text-align:left}.theme-opt:hover{background:var(--n-100);color:var(--n-900)}.theme-opt.active{background:var(--c-primary-soft);color:var(--c-primary-strong);font-weight:600}.theme-opt .theme-opt-dot{width:26px;height:26px;border-radius:7px;border:1px solid var(--c-line);flex-shrink:0}.theme-opt .theme-opt-name{display:block;font-size:var(--fs-md)}.theme-opt .theme-opt-desc{display:block;font-size:var(--fs-xs);color:var(--n-500);font-weight:400}.theme-opt .theme-opt-check{margin-left:auto;color:var(--c-primary);display:none}.theme-opt.active .theme-opt-check{display:inline-flex}.theme-anchor{position:relative}@media (max-width: 760px){.theme-grid{grid-template-columns:1fr}}[data-theme=c] body{color:var(--n-800)}[data-theme=c] .login-side{background:var(--c-bg)}[data-theme=c] .login-card{background:var(--th-card-bg);border-color:var(--c-line)}[data-theme=c] .login-card h2{color:var(--n-900)}[data-theme=c] .login-sub,[data-theme=c] .login-foot{color:var(--n-500)}[data-theme=c] .login-error{background:var(--c-danger-bg);color:var(--c-danger)}[data-theme=c] .input{background:#101418;color:var(--n-800)}[data-theme=c] .input:disabled{background:#1f252b}[data-theme=c] .btn{background:#1b2026;border-color:#2b333b;color:var(--n-600)}[data-theme=c] .btn:hover:not(:disabled){background:#1f252b;border-color:#3a434c;color:var(--n-800)}[data-theme=c] .btn-primary,[data-theme=c] .btn-new,[data-theme=c] .btn-submit{background:var(--c-primary);border-color:var(--c-primary);color:#0b1512;font-weight:700}[data-theme=c] .btn-primary:hover:not(:disabled),[data-theme=c] .btn-new:hover:not(:disabled),[data-theme=c] .btn-submit:hover:not(:disabled){background:var(--c-primary-strong);border-color:var(--c-primary-strong);color:#0b1512}[data-theme=a] .btn-new,[data-theme=a] .btn-primary,[data-theme=a] .btn-submit,[data-theme=b] .btn-new,[data-theme=b] .btn-primary,[data-theme=b] .btn-submit{background:var(--c-primary);border-color:var(--c-primary);color:#fff}[data-theme=a] .btn-new:hover:not(:disabled),[data-theme=a] .btn-primary:hover:not(:disabled),[data-theme=a] .btn-submit:hover:not(:disabled),[data-theme=b] .btn-new:hover:not(:disabled),[data-theme=b] .btn-primary:hover:not(:disabled),[data-theme=b] .btn-submit:hover:not(:disabled){background:var(--c-primary-strong);border-color:var(--c-primary-strong)}[data-theme=c] .btn-logout:hover:not(:disabled){background:var(--c-danger-bg);color:var(--c-danger)}[data-theme=c] .panel h2,[data-theme=c] .page-head h2{color:var(--n-900)}[data-theme=c] .page-foot,[data-theme=c] .tbl-empty,[data-theme=c] .mask-star,[data-theme=c] .empty{color:var(--n-500)}[data-theme=c] .empty .empty-icon{background:var(--n-100)}[data-theme=c] .skeleton{background:linear-gradient(90deg,#1b2026 25%,#232a32,#1b2026 65%);background-size:200% 100%}[data-theme=c] .kv dt{color:var(--n-500)}[data-theme=c] .kv dd{color:var(--n-800)}[data-theme=c] .org-col{background:var(--th-card-bg);border-color:var(--c-line-soft)}[data-theme=c] .perm-groups{border-color:var(--c-line)}[data-theme=c] .chg-list{background:var(--th-card-bg);border-color:var(--c-line)}[data-theme=c] .chg-batch{background:var(--n-50);border-bottom-color:var(--c-line)}[data-theme=c] .crash-card{background:var(--th-card-bg)}[data-theme=c] .brand-preview-card{background:var(--n-50)}[data-theme=c] .brand-msg-info{background:var(--n-100);color:var(--n-600)}[data-theme=c] .side-link-off{color:#5a636d}[data-theme=c] .toast{background:#e8eaed;color:#101417}[data-theme=c] .toast-error{background:var(--c-danger);color:#fff}[data-theme=c] .hero p{opacity:.9}[data-theme=c] .badge-ok{background:#46c79a24;color:#4ed0a4}[data-theme=c] .badge-warn{background:#e0a33e24;color:#e3aa4e}[data-theme=c] .badge-off,[data-theme=c] .badge-danger{background:#e5604f24;color:#e86857}[data-theme=c] .theme-card{background:var(--th-card-bg)}[data-theme=c] .theme-card .theme-name{color:var(--n-800)}[data-theme=c] .theme-card .theme-desc{color:var(--n-500)}[data-theme=c] .theme-menu{background:var(--th-card-bg);border-color:var(--c-line)}[data-theme=c] .theme-opt{color:var(--n-600)}[data-theme=c] .theme-opt:hover{background:#1f252b;color:var(--n-800)}[data-theme=c] .theme-opt.active{background:#3fb6a81f;color:#7bd8cc}[data-theme=c] .theme-opt .theme-opt-desc{color:var(--n-500)}[data-theme=b] .side-link.active:before{background:#decfa8}[data-theme=b] .avatar{background:#8c6d2f;color:#fff}[data-theme=b] code{color:#185739}.form-grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0 22px}.form-grid3 .span2v{grid-column:span 2}.tenant-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.info-divider{border-top:1px solid var(--c-line-soft);padding-top:14px;margin-top:18px}.info-val{font-size:var(--fs-md);color:var(--n-800);word-break:break-all}.info-table{width:100%;border-collapse:collapse}.info-table th{width:110px;text-align:left;font-weight:500;font-size:var(--fs-sm);color:var(--n-500);padding:9px 14px 9px 0;white-space:nowrap;border-bottom:1px solid var(--c-line-soft);vertical-align:top}.info-table td{font-size:var(--fs-md);color:var(--n-800);padding:9px 24px 9px 0;border-bottom:1px solid var(--c-line-soft);word-break:break-all}.info-table tr:last-child th,.info-table tr:last-child td{border-bottom:none}.mtabs-shell{display:flex;flex-direction:column;min-height:0;flex:1}.mtabs-bar{display:flex;align-items:center;gap:2px;padding:6px 10px 0;border-bottom:1px solid var(--c-line);background:var(--n-50);overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;flex-shrink:0}.mtab{display:inline-flex;align-items:center;gap:6px;max-width:200px;padding:7px 10px 7px 12px;border:1px solid transparent;border-bottom:none;border-radius:var(--r-sm) var(--r-sm) 0 0;font-size:var(--fs-sm);color:var(--n-500);background:transparent;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:background .12s ease,color .12s ease}.mtab:hover{color:var(--n-800);background:var(--n-100)}.mtab.active{color:var(--c-primary-strong);font-weight:600;background:#fff;border-color:var(--c-line);position:relative;top:1px}.mtab-title{overflow:hidden;text-overflow:ellipsis;max-width:140px}.mtab-close{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:4px;background:transparent;color:var(--n-400);font-size:13px;line-height:1;cursor:pointer;padding:0}.mtab-close:hover{background:var(--n-200);color:var(--n-800)}.mtab.active .mtab-close{color:var(--c-primary)}.mtab-more{margin-left:auto;flex-shrink:0;border:none;background:transparent;color:var(--n-400);font-size:var(--fs-xs);cursor:pointer;padding:4px 8px;border-radius:var(--r-sm)}.mtab-more:hover{color:var(--n-700);background:var(--n-100)}.mtab-panes,.mtab-pane{display:flex;flex-direction:column}.mtab-pane.pane-hidden{display:none}[data-theme=c] .mtabs-bar{background:var(--n-100);border-bottom-color:var(--c-line)}[data-theme=c] .mtab.active{background:var(--th-card-bg, #161B21)}[data-theme=b] .mtab.active{background:#fff}#root{width:calc(100% / var(--app-zoom, 1));min-height:calc(100% / var(--app-zoom, 1))}.user-menu-anchor{position:relative}.user-menu{position:fixed;top:52px;right:16px;min-width:180px;background:#fff;border:1px solid var(--n-200);border-radius:var(--r-md);box-shadow:var(--sh-md);padding:6px;z-index:90;animation:fadeIn .12s ease}.user-menu-head{padding:8px 12px 6px;border-bottom:1px solid var(--n-100);margin-bottom:4px}.user-menu-head b{display:block;font-size:var(--fs-md);color:var(--n-800)}.user-menu-head span{display:block;font-size:var(--fs-xs);color:var(--n-400);margin-top:2px}.user-menu-group-title{font-size:var(--fs-xs);color:var(--n-400);padding:6px 12px 2px;cursor:default;-webkit-user-select:none;user-select:none}.user-menu-item{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:8px 12px;border:none;background:none;border-radius:var(--r-sm);font:inherit;font-size:var(--fs-sm);color:var(--n-700);cursor:pointer;text-align:left}.user-menu-item:hover{background:var(--n-100);color:var(--n-900)}.user-menu-item.is-active{color:var(--c-primary);font-weight:600}.user-menu-item .um-check{width:14px;color:var(--c-primary);font-size:var(--fs-sm)}.user-menu-divider{border-top:1px solid var(--n-100);margin:4px 0}.user-menu-item.is-danger{color:var(--c-danger)}.user-menu-item.is-danger:hover{background:var(--c-danger-bg);color:var(--c-danger)}.topbar-user-chip{display:inline-flex;align-items:center;gap:8px;padding:4px 10px 4px 4px;border:1px solid var(--n-200);border-radius:999px;background:#fff;cursor:pointer;-webkit-user-select:none;user-select:none}.topbar-user-chip:hover{border-color:var(--n-300);box-shadow:var(--sh-sm)}.user-avatar{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--c-primary-soft);color:var(--c-primary-strong);font-size:var(--fs-sm);font-weight:600}.user-chip-name{font-size:var(--fs-sm);color:var(--n-800);font-weight:500;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-chip-caret{color:var(--n-400);font-size:10px}[data-theme=c] .topbar-user-chip{background:var(--th-card-bg, #161B21);border-color:var(--n-700)}[data-theme=c] .user-chip-name{color:var(--n-700)}.drawer-platform{width:560px;max-width:calc(100vw - 32px);max-height:calc(100vh - 80px);overflow-y:auto}.pf-block{border:1px solid var(--n-200);border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);margin-bottom:var(--sp-3)}.pf-block-title{font-size:var(--fs-sm);font-weight:600;color:var(--n-700);margin-bottom:var(--sp-2)}.pf-module-row{display:flex;align-items:center;justify-content:space-between;padding:6px 0;gap:8px}.pf-block-danger{border-color:var(--c-danger-border, #E4B6B0);background:var(--c-danger-bg, #FAE7E4)}.pf-block-danger .pf-block-title{color:var(--c-danger)}.row-muted td{opacity:.55}.flow-step-btn{cursor:pointer;background:transparent;border:none;font:inherit;color:inherit;padding:2px 4px;border-radius:4px}.flow-step-btn:hover{background:#6366f114;text-decoration:underline}.chart-empty{padding:34px 0;text-align:center;color:var(--n-400);font-size:13px}.chart-legend{list-style:none;margin:0;padding:0;font-size:13px;min-width:160px}.chart-legend li{display:flex;align-items:center;gap:8px;margin-bottom:6px;padding:2px 0}.chart-dot{width:10px;height:10px;border-radius:50%;display:inline-block;flex:none}.chart-legend b{margin-left:auto;font-weight:600}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px;margin:0 0 22px}.stat-card{background:var(--th-card-bg,#fff);border:1px solid var(--c-line,#e5e7eb);border-radius:var(--r-lg,12px);padding:18px 20px;box-shadow:var(--sh-sm,0 1px 2px rgba(0,0,0,.06));transition:transform .15s ease,box-shadow .15s ease;position:relative;overflow:hidden}.stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--c-primary);opacity:.85}.stat-card:hover{transform:translateY(-2px);box-shadow:var(--sh-md,0 4px 14px rgba(0,0,0,.08))}.stat-card span{display:block;font-size:13px;color:var(--n-500);font-weight:500}.stat-card b{display:block;font-size:26px;font-weight:700;margin-top:8px;color:var(--n-900);font-variant-numeric:tabular-nums;font-family:var(--th-mono,inherit)}.stat-card i{display:block;font-size:12px;color:var(--n-400);font-style:normal;margin-top:6px}.stat-card.muted:before{background:var(--n-400)}.stat-card.ok:before{background:var(--c-ok)}.stat-card.warn:before{background:var(--c-warn)}.stat-card.danger:before{background:var(--c-danger)}.chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:16px;margin-top:16px}.chart-panel{background:var(--th-card-bg,#fff);border:1px solid var(--c-line,#e5e7eb);border-radius:var(--r-lg,12px);padding:18px 20px;box-shadow:var(--sh-sm,0 1px 2px rgba(0,0,0,.06))}.chart-panel h3{margin:0 0 12px;font-size:15px;font-weight:600;color:var(--n-800);display:flex;align-items:center;gap:8px}.chart-panel h3:before{content:"";width:3px;height:14px;border-radius:2px;background:var(--c-primary)}.renewal-bar{margin:8px 10px 0;border:1px solid var(--line2, #c9cdd2);border-radius:4px;overflow:hidden}.renewal-bar.warn{border-color:#d9a441;background:#fdf6e7}.renewal-bar.expired{border-color:#c0564f;background:#f9e9e8}.renewal-bar-head{display:flex;justify-content:space-between;width:100%;padding:8px 10px;background:transparent;border:none;cursor:pointer;font-size:12.5px;font-weight:600;color:inherit}.renewal-bar.warn .renewal-bar-head{color:#7a5b17}.renewal-bar.expired .renewal-bar-head{color:#7c2d28}.renewal-caret{font-weight:400;opacity:.75}.renewal-bar-body{padding:0 10px 10px;font-size:12.5px;color:var(--ink2, #4a5158)}.renewal-bar-body p{margin:4px 0}.print-wrap{min-height:100vh;background:#eef0f2;padding:24px}.print-sheet{max-width:800px;margin:0 auto;background:#fff;padding:40px 48px;box-shadow:0 1px 4px #00000014}.print-head h1{text-align:center;font-size:22px;letter-spacing:2px;margin-bottom:4px}.print-head h2{text-align:center;font-size:18px;font-weight:600;margin:0 0 14px}.print-meta{display:flex;justify-content:space-between;font-size:13px;color:#333;border-bottom:2px solid #111;padding-bottom:8px}.print-party{display:flex;gap:24px;font-size:13px;padding:10px 0}.print-table{width:100%;border-collapse:collapse;font-size:13px}.print-table th,.print-table td{border:1px solid #444;padding:6px 8px}.print-table th{background:#f3f4f5;font-weight:600}.print-total{display:flex;justify-content:space-between;padding:12px 0 4px;font-size:14px;font-weight:600}.print-remark{font-size:13px;color:#333}.print-signs{display:flex;justify-content:space-between;margin-top:40px;font-size:13px}.print-foot{margin-top:24px;font-size:12px;color:#888;text-align:right}.print-actions{max-width:800px;margin:16px auto 0;display:flex;gap:12px;justify-content:center}.print-error{text-align:center;color:#b91c1c;padding:40px}.m-cards{display:flex;flex-direction:column;gap:10px}.m-cards-empty{color:var(--n-500);padding:18px 4px;display:flex;align-items:center;gap:8px}.m-card{border:1px solid var(--c-line);border-radius:12px;background:#fff;padding:12px 14px;box-shadow:0 1px 2px #1118270a}.m-card-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.m-card-title{font-weight:600;font-size:15px;color:var(--n-900)}.m-card-code{font-size:12px;color:var(--n-500);background:var(--n-100);border-radius:4px;padding:1px 6px}.m-card-body{margin-top:8px;display:flex;flex-direction:column;gap:4px}.m-kv{display:flex;gap:10px;font-size:13px;line-height:1.5}.m-k{color:var(--n-500);min-width:68px;flex-shrink:0}.m-v{color:var(--n-800);flex:1;word-break:break-word}.m-card-ops{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}.m-card-ops .btn{min-height:34px}@media print{.print-wrap{background:#fff;padding:0}.no-print{display:none!important}.print-sheet{box-shadow:none;max-width:none;padding:0}}.form-row .ant-select,.form-row .ant-select-single,.form-row .ant-auto-complete,.form-row .ant-input-affix-wrapper,.form-row .ant-input-number,.form-row .ant-picker,.line-editor .ant-select,.line-editor .ant-input-affix-wrapper,.line-editor .ant-input-number,.modal .ant-select,.modal .ant-input-affix-wrapper{width:100%}.dict-combo-dropdown.ant-select-dropdown{min-width:200px!important}.dict-combo-dropdown .ant-select-item-empty{padding:10px 12px;color:#8a9099}.toolbar-search.doc-search{gap:8px;flex-wrap:wrap}.toolbar-search.doc-search .ds-date{display:inline-flex;align-items:center;gap:4px}.toolbar-search.doc-search .ds-date .input,.toolbar-search.doc-search .ds-date input[type=date]{width:138px}.toolbar-search.doc-search .ds-date i{font-style:normal;font-size:var(--fs-xs);color:var(--n-400)}.tbl td.num,.tbl td.cell-num,.tbl td.cell-amt,.cell-num,.cell-amt,.stat-card b,.kv dd.num,.badge{font-variant-numeric:tabular-nums}.tbl td.num,.tbl td.cell-num,.tbl td.cell-amt,.stat-card b{font-family:var(--th-mono, inherit)}.tbl th{font-weight:600;letter-spacing:.02em}.tbl th,.line-editor th{background:var(--th-tbl-head, var(--n-50))}[data-theme] .stat-card{background:var(--th-card-2, #fbfbfa);border-color:var(--c-line, #d9d9d4)}[data-theme] .stat-card span,[data-theme] .stat-card i{color:var(--n-500, #878d95)}[data-theme=c] .stat-card b{color:var(--n-800)}.tbl td{border-bottom-color:var(--th-line-row, var(--c-line-soft))}[data-theme=c] .input,[data-theme=c] .ant-input,[data-theme=c] .ant-select-selector,[data-theme=c] .ant-picker{background:var(--th-field, #0C0F13)!important}.side-group-title{letter-spacing:.04em}.status-band{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 12px}.sb-item{display:inline-flex;align-items:baseline;gap:8px;border:1px solid var(--c-line);border-radius:var(--r-sm, 4px);background:var(--th-card-bg, #fff);padding:8px 14px;cursor:pointer;font:inherit;transition:border-color .15s ease,box-shadow .15s ease}.sb-item:hover{border-color:var(--n-300);box-shadow:0 1px 4px #0000000f}.sb-item:focus-visible{outline:2px solid var(--c-primary);outline-offset:1px}.sb-num{font-family:var(--th-mono, inherit);font-variant-numeric:tabular-nums;font-size:18px;font-weight:600;line-height:1}.sb-label{font-size:var(--fs-xs);color:var(--n-500)}.sb-warn .sb-num{color:var(--c-warn)}.sb-info .sb-num{color:var(--c-primary)}.sb-danger .sb-num{color:var(--c-danger)}.sb-item[data-zero] .sb-num,.sb-item[data-zero] .sb-label{color:var(--n-400)}[data-theme=c] .sb-item{background:var(--th-card-2, #171D23);border-color:var(--c-line)}[data-theme=c] .sb-item:hover{border-color:var(--n-300);box-shadow:none}[data-theme=a] .side:after{content:"";position:absolute;top:0;right:0;bottom:0;width:5px;background:repeating-linear-gradient(to bottom,transparent 0,transparent 23px,var(--c-line-soft) 23px,var(--c-line-soft) 24px);pointer-events:none;opacity:.8}[data-theme=a] .side{position:relative}[data-theme=a] .tbl th:before{content:"";display:inline-block;width:3px;height:3px;background:var(--n-300);margin-right:6px;vertical-align:2px}[data-theme=b] .flow-step-btn{position:relative;padding:2px 8px 2px 20px;border-radius:999px;background:var(--n-50);border:1px solid var(--c-line-soft)}[data-theme=b] .flow-step-btn:before{content:"";position:absolute;left:8px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:var(--c-primary)}[data-theme=b] .flow-step-btn:hover{background:var(--c-primary-soft);text-decoration:none}[data-theme=c] .topbar{border-bottom:1px solid var(--c-line);box-shadow:inset 0 -2px #3fb6a82e}[data-theme=c] .side-link.active:before{background:var(--c-primary);box-shadow:0 0 0 1px #3fb6a840}[data-theme=c] .badge{background:transparent;border:1px solid var(--n-300)}[data-theme=c] .input,[data-theme=c] .login-form .input,[data-theme=c] .login-card .input{color:var(--n-800)}[data-theme=c] .ant-input-password-icon{color:#97a1ac}.btn{white-space:nowrap;flex-shrink:0}.btn-link{white-space:nowrap}.toolbar-search{flex-wrap:wrap}.toolbar-search .input,.toolbar-search .ant-input{min-width:150px}.toolbar-search .ant-select{min-width:96px}.toolbar-search .ds-date{flex-shrink:0}.mtabs-bar{scrollbar-width:none}.mtabs-bar::-webkit-scrollbar{display:none}.mtabs-outer{position:relative;min-width:0;flex:1;display:flex;flex-direction:column}.mtabs-fade{position:absolute;top:0;right:0;bottom:1px;width:52px;z-index:1;background:linear-gradient(to right,transparent,var(--n-50) 78%);pointer-events:none;opacity:0;transition:opacity .15s ease}.mtabs-outer.has-more .mtabs-fade{opacity:1}[data-theme=b] .mtabs-fade{background:linear-gradient(to right,transparent,var(--n-50))}[data-theme=c] .mtabs-fade{background:linear-gradient(to right,transparent,var(--n-100))}.tbl-empty{line-height:1.6}[data-theme=c] .ss-opt-sub{color:var(--n-600)}[data-theme=c] .ss-menu,[data-theme=c] .user-menu,[data-theme=c] .drawer,[data-theme=c] .lic-card{background:var(--th-card-bg);border-color:var(--c-line)}[data-theme=c] .flow-step{background:var(--th-card-2);border-color:var(--c-line);color:var(--n-600)}[data-theme=c] .mask-box{background:#f59e0b14;border-color:#f59e0b66}.method-list{display:flex;flex-direction:column;gap:6px}.method-row{display:flex;gap:6px;align-items:center}.method-row input{flex:1}.method-row .line-del{flex:none}.item-select{display:flex;gap:6px;align-items:flex-start}.item-select>.search-select{flex:1;min-width:0}.item-select-add{flex:none;white-space:nowrap}.flag-row{display:flex;gap:14px;flex-wrap:wrap}.flag-item{display:flex;align-items:center;gap:4px;font-size:13px;cursor:pointer}.save-banner{padding:12px 14px;margin:0 0 12px;border-radius:8px;background:var(--c-ok-bg);color:var(--c-ok)}.save-banner-ok{font-weight:600}.save-banner-ask{margin-top:4px;font-size:13px;opacity:.85}[data-theme=c] .save-banner{background:#46c79a24;color:#4ed0a4}.so-lines{display:flex;flex-direction:column;gap:6px}.so-line{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--n-50);border:1px solid var(--n-200);border-radius:8px;padding:7px 12px;font:inherit;color:inherit;cursor:pointer}.so-line:hover{border-color:var(--n-600)}.so-line-done{opacity:.72;cursor:not-allowed;background:transparent}[data-theme=c] .so-line{background:var(--th-card-2, var(--n-50));border-color:var(--c-line, var(--n-200))}.so-line-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.so-line-qty{color:var(--n-600);font-size:12.5px}.ppa-panel{background:var(--n-50);border:1px solid var(--n-200);border-radius:10px;padding:12px 14px}.ppa-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.ppa-metrics{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}.ppa-metric{flex:1;min-width:130px;background:var(--panel, #fff);border:1px solid var(--n-200);border-radius:8px;padding:6px 10px}.ppa-metric b{display:block;font-size:11.5px;color:var(--n-600);font-weight:500}.ppa-metric span{font-size:14px;font-weight:600}.ppa-metric.ppa-red span{color:#b3423a}.ppa-badges{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}.ppa-tree{border-top:1px dashed var(--n-200);padding-top:8px;display:flex;flex-direction:column;gap:4px;max-height:300px;overflow-y:auto}.ppa-node{font-size:13px}.ppa-node.ppa-crit{border-left:3px solid #b3423a;padding-left:6px}.ppa-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ppa-tw{width:16px;display:inline-block;color:var(--n-600);background:none;border:0;cursor:pointer;padding:0}.ppa-name{min-width:120px}.ppa-qty{color:var(--n-600);font-size:12px}.ppa-crit-tag{color:#b3423a;font-size:11px;border:1px solid #b3423a;border-radius:4px;padding:0 4px}.seg{display:inline-flex;border:1px solid var(--n-200);border-radius:6px;overflow:hidden;font-size:11.5px}.seg i{font-style:normal;padding:2px 8px;background:var(--panel, #fff);color:var(--n-600);cursor:pointer;border-right:1px solid var(--n-200)}.seg i:last-child{border-right:0}.seg i.on{background:var(--n-800, #333);color:#fff}.seg i:not(.on):hover{background:var(--n-100)}.ppa-risks{margin-top:8px;display:flex;flex-direction:column;gap:4px}[data-theme=c] .ppa-panel{background:var(--th-card-2, var(--n-50));border-color:var(--c-line, var(--n-200))}[data-theme=c] .ppa-metric{background:var(--th-card-bg, #fff);border-color:var(--c-line, var(--n-200))}.form-sec{grid-column:1 / -1;display:flex;align-items:center;gap:8px;margin:10px 0 2px;padding-top:10px;font-size:12.5px;font-weight:600;letter-spacing:.04em;color:var(--n-800, #333)}.form-sec:before{content:"";width:3px;height:14px;border-radius:2px;background:var(--c-primary, #2f6157)}.form-sec:after{content:"";flex:1;height:1px;background:var(--c-line-soft, var(--n-200))}[data-theme=c] .form-sec{color:var(--n-800, #eee)}.ppa-gate{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;border:1px dashed var(--n-300, var(--n-200));border-radius:8px;background:var(--panel, #fff);margin-bottom:8px}.ppa-gate-ok{border-style:solid}.ppa-confirm{display:inline-flex;width:18px;height:18px;border-radius:50%;border:1.5px solid var(--c-warn, #b45309);color:var(--c-warn, #b45309);background:var(--c-warn-bg, #fef3c7);font-size:11px;align-items:center;justify-content:center;flex:none}.ppa-confirm.on{border-color:var(--c-ok, #2f6157);color:var(--c-ok, #2f6157);background:#2f615714}.ppa-time-pending{border-style:dashed}[data-theme=c] .ppa-gate{background:var(--th-card-bg, #fff);border-color:var(--c-line, var(--n-200))}.ppa-time-blocked{border-color:#b3423a}.ppa-time-blocked ul li{color:#6d4535}.badge-info{background:var(--c-primary-soft, #eef2ff);color:var(--c-primary, #4f46e5)}.badge-make{background:#f3e8ff;color:#7c3aed}.badge-outsource{background:#ffedd5;color:#c2410c}.seg i.on-issue{background:var(--c-ok, #047857);color:#fff}.seg i.on-purchase{background:var(--c-primary, #4f46e5);color:#fff}.seg i.on-make{background:#7c3aed;color:#fff}.seg i.on-outsource{background:#c2410c;color:#fff}.ppa-step-act.act-purchase{color:var(--c-primary, #4f46e5)}.ppa-step-act.act-make{color:#7c3aed}.ppa-step-act.act-outsource{color:#c2410c}.ppa-step-act.act-issue{color:var(--c-ok, #047857)}[data-theme=c] .badge-info{background:#6366f129;color:#9ba8f5}[data-theme=c] .badge-make{background:#7c3aed2e;color:#b79bf0}[data-theme=c] .badge-outsource{background:#ea580c29;color:#f0a57a}[data-theme=c] .ppa-confirm{background:#e0a33e24}.ppa-plan{border:1px solid var(--n-200);border-radius:10px;background:var(--panel, #fff);padding:10px 14px;margin-bottom:8px}.ppa-plan-title{font-size:13px;font-weight:600;color:var(--n-800, #333);margin-bottom:6px}.ppa-steps{list-style:none;margin:0;padding:0;counter-reset:step}.ppa-step{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px}.ppa-step-n{flex:none;width:20px;height:20px;border-radius:50%;background:var(--n-800, #333);color:#fff;font-size:11.5px;display:inline-flex;align-items:center;justify-content:center}.ppa-step-crit .ppa-step-n{background:#b3423a}.ppa-step-name{min-width:96px;font-weight:500}.ppa-step-act{color:var(--n-600)}.ppa-step-days{margin-left:auto;color:var(--n-800);font-weight:600}.ppa-parallel{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px dashed var(--n-200)}.save-hint{display:block;flex-basis:100%;text-align:left;margin-bottom:6px}[data-theme=c] .ppa-plan{background:var(--th-card-bg, #fff);border-color:var(--c-line, var(--n-200))}.todo-bell-anchor{position:relative;display:inline-flex}.todo-panel{position:absolute;top:calc(100% + 6px);right:0;width:360px;background:var(--th-card-bg, #fff);border:1px solid var(--c-line);border-radius:var(--r-md);box-shadow:var(--sh-lg);padding:6px;z-index:70;animation:fadeIn .15s ease}.todo-panel-head{font-size:var(--fs-xs);color:var(--n-400);padding:6px 10px 4px;letter-spacing:1px}.todo-empty{padding:18px 10px;text-align:center;color:var(--n-400);font-size:var(--fs-sm)}.todo-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:var(--r-sm)}.todo-item:hover{background:var(--n-100)}.todo-item .badge{flex:none}.todo-title{flex:1;min-width:0;border:none;background:none;font:inherit;font-size:12.5px;line-height:1.45;color:var(--n-700);text-align:left;cursor:pointer;padding:0}.todo-title:hover{color:var(--c-primary-strong);text-decoration:underline}.todo-more{padding:6px 10px;font-size:var(--fs-xs);color:var(--n-400)}.so-line-active{outline:2px solid var(--c-primary);outline-offset:1px;background:var(--c-primary-soft)}.os-line-row{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;margin:4px 0}.os-line-row .field-hint{flex:0 0 auto}@media (max-width: 720px){.os-line-row{flex-wrap:wrap}}.form-grid .mo-guide,.form-grid .mo-callout{grid-column:1 / -1}.mo-guide{margin:0 0 12px;padding:8px 12px;background:var(--n-50, #f8fafc);border:1px dashed var(--n-300, #d6dee8);border-radius:8px;font-size:var(--fs-sm, 13px);color:var(--n-600, #526173)}[data-theme=c] .mo-guide{background:var(--th-card-2, #f8fafc)}.mo-callout{display:flex;flex-direction:column;gap:4px;padding:10px 12px;border-radius:10px;font-size:var(--fs-sm, 13px);margin:0 0 10px}.mo-callout b{font-size:var(--fs-sm, 13px)}.mo-callout-danger{background:#fdf2f2;border:1px solid #f0c4c4;color:#8a2f2f}.mo-callout-warn{background:#fdf7ee;border:1px solid #edd8b2;color:#7a5124}[data-theme=c] .mo-callout-danger{background:#aa3c3c29;border-color:#aa3c3c73;color:#e6b3b3}[data-theme=c] .mo-callout-warn{background:#aa782829;border-color:#aa782873;color:#e2c69a}.mo-summary{border:1px solid var(--n-200, #e3e9f2);background:var(--n-50, #f8fafc);border-radius:12px;padding:12px 14px;font-size:var(--fs-sm, 13px);display:flex;flex-direction:column;gap:4px}[data-theme=c] .mo-summary{background:var(--th-card-2, #f8fafc);border-color:var(--c-line, var(--n-200))}.mo-summary-title{font-weight:600;color:var(--n-800, #333);margin-bottom:2px}.mo-summary .k{color:var(--n-500, #6b7a90);margin-right:6px}.side-tools{display:flex;justify-content:flex-start;padding:6px 10px 0;margin-left:2px}.side-tools .btn-link{font-size:12px;color:var(--th-side-text, var(--n-600));opacity:1;text-decoration:none}.side-tools .btn-link:hover{color:var(--th-side-text-hover, var(--c-primary-strong));opacity:1;text-decoration:none}.side-group-ico{width:16px;height:16px;flex:none;opacity:1;margin-top:-1px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.side-group-title{display:flex;align-items:center;gap:7px}.ppa-chain{display:flex;flex-direction:column;gap:3px}.ppa-chain-row{display:flex;align-items:center;gap:8px;font-size:13px}.ppa-chain-conn{color:var(--n-500, #999);font-size:12px;flex:none;min-width:26px}.ppa-chain-name{font-weight:500}.ppa-chain-days{margin-left:auto;color:var(--n-800, #333);font-weight:600;font-size:12.5px}.ppa-chain-target .ppa-chain-name{font-weight:600}.ppa-chain-badge{font-size:11px;border:1px solid var(--c-primary, #4a6fa5);color:var(--c-primary, #4a6fa5);border-radius:4px;padding:0 6px;flex:none}.ppa-thead{display:flex;gap:8px;font-size:11px;color:var(--n-600);border-bottom:1px dashed var(--n-200);padding:2px 0 4px;margin-left:26px;margin-bottom:2px}.ppa-row{flex-wrap:nowrap!important;gap:8px!important;padding:3px 0;overflow:hidden}.ppa-tw{width:16px;flex:none}.ppa-name{flex:none;width:190px;box-sizing:border-box;padding-left:calc(var(--depth, 0) * 14px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppa-qty{flex:none;width:195px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppa-row>.badge{flex:none;min-width:56px;text-align:center}.ppa-crit-tag,.ppa-confirm{flex:none}.ppa-row>.btn-link:not(.ppa-tw){flex:none;min-width:40px;text-align:left}.ppa-row>.seg{margin-left:auto;flex:none}.ppa-thead{display:flex;gap:8px;margin-left:0!important;padding-left:24px}.ppa-thead>span:nth-child(1){flex:none;width:182px}.ppa-thead>span:nth-child(2){flex:none;width:195px}.ppa-thead>span:nth-child(3){flex:none;width:56px}.ppa-thead>span:nth-child(4){margin-left:auto}
