html,body,#app{min-height:100%}body{margin:0;background:#f4f5f7}.app-state-screen{position:fixed;z-index:10000;top:0;right:0;bottom:0;left:0;display:grid;width:100%;min-height:100vh;min-height:100dvh;overflow:auto;place-items:center;padding:0;color:var(--c-text, #1f2329);background:var(--c-bg, #f4f5f7);box-sizing:border-box;font-family:var(--font-sans, -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif)}.app-state-screen:before{position:absolute;top:50%;left:50%;width:min(560px,78vw);height:min(560px,78vw);border:1px solid rgba(15,157,138,.11);border-radius:50%;content:"";transform:translate(-50%,-50%)}.app-state-screen__panel{position:relative;z-index:1;display:flex;width:100%;min-height:100%;align-items:center;justify-content:center;flex-direction:column;padding:48px 32px;box-sizing:border-box;text-align:center}.app-state-screen__brand{display:grid;width:42px;height:42px;margin:0 auto;place-items:center;border-radius:7px;color:#fff;background:#20262e;box-shadow:inset 0 -3px 0 var(--c-accent, #0f9d8a);font-family:var(--font-mono, Menlo, Consolas, monospace);font-size:13px;font-weight:700}.app-state-screen__product{margin:15px 0 0;color:var(--c-text-3, #8a94a3);font-size:12px;font-weight:500;letter-spacing:.08em}.app-state-screen__title{margin:24px 0 0;color:var(--c-text, #1f2329);font-size:18px;font-weight:600;line-height:1.45}.app-state-screen__description{min-height:22px;margin:8px 0 0;color:var(--c-text-3, #8a94a3);font-size:13px;line-height:1.7}.app-state-screen__detail{max-height:64px;margin:10px 0 0;overflow:auto;color:var(--c-danger, #d64541);font-size:12px;line-height:1.6;word-break:break-word}.app-state-screen__progress{position:relative;width:180px;height:2px;margin:28px auto 0;overflow:hidden;border-radius:2px;background:var(--c-border, #e2e5e9)}.app-state-screen__progress:after{position:absolute;top:0;bottom:0;left:0;width:42%;border-radius:inherit;background:var(--c-accent, #0f9d8a);content:"";animation:app-state-progress 1.35s ease-in-out infinite}.app-state-screen__action{min-width:112px;height:38px;margin-top:24px;padding:0 20px;border:0;border-radius:var(--r-md, 5px);color:#fff;background:var(--c-accent, #0f9d8a);cursor:pointer;font:inherit;font-size:13px;font-weight:600;transition:background .16s ease}.app-state-screen__action:hover:not(:disabled){background:var(--c-accent-hover, #0c8676)}.app-state-screen__action:focus-visible{outline:3px solid rgba(15,157,138,.22);outline-offset:2px}.app-state-screen__action:disabled{cursor:wait;opacity:.68}.app-state-screen--error .app-state-screen__brand{box-shadow:inset 0 -3px 0 var(--c-danger, #d64541)}@keyframes app-state-progress{0%{transform:translate(-110%)}55%{transform:translate(95%)}to{transform:translate(245%)}}@media(max-width:480px){.app-state-screen{padding:0}.app-state-screen__panel{min-height:100%;padding:36px 20px}}@media(prefers-reduced-motion:reduce){.app-state-screen__progress:after{width:60%;animation:none}.app-state-screen__action{transition:none}}.route-progress[data-v-e67ed04d]{position:fixed;z-index:9999;top:0;right:0;left:0;height:2px;overflow:hidden;pointer-events:none}.route-progress span[data-v-e67ed04d]{display:block;width:38%;height:100%;border-radius:0 2px 2px 0;background:var(--c-accent);box-shadow:0 0 8px #0f9d8a4d;animation:route-progress-moving-e67ed04d 1.1s ease-in-out infinite}.route-progress.is-finishing span[data-v-e67ed04d]{width:100%;animation:none;transition:width .18s ease-out}@keyframes route-progress-moving-e67ed04d{0%{transform:translate(-105%)}65%{transform:translate(175%)}to{transform:translate(270%)}}@media(prefers-reduced-motion:reduce){.route-progress span[data-v-e67ed04d]{width:72%;animation:none}}.toast-wrap[data-v-088e6c2f]{position:fixed;top:16px;left:50%;transform:translate(-50%);z-index:2000;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}.toast[data-v-088e6c2f]{padding:9px 18px;border-radius:var(--r-md);background:#22282f;color:#fff;font-size:var(--fs-sm);box-shadow:var(--shadow-md);max-width:420px;text-align:center}.toast--success[data-v-088e6c2f]{border-left:3px solid #3ecf8e}.toast--error[data-v-088e6c2f]{border-left:3px solid #f1655f}.toast--warning[data-v-088e6c2f]{border-left:3px solid #e2a626}.toast--info[data-v-088e6c2f]{border-left:3px solid #5d8cf0}.toast-enter-active[data-v-088e6c2f],.toast-leave-active[data-v-088e6c2f]{transition:all .22s ease}.toast-enter-from[data-v-088e6c2f],.toast-leave-to[data-v-088e6c2f]{opacity:0;transform:translateY(-8px)}.confirm-mask[data-v-2e3673b3]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1500;background:#0f172073;display:flex;align-items:center;justify-content:center;padding:16px}.confirm[data-v-2e3673b3]{width:420px;max-width:100%;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);padding:var(--sp-5)}.confirm__body[data-v-2e3673b3]{display:flex;align-items:flex-start;gap:var(--sp-3)}.confirm__icon[data-v-2e3673b3]{flex:0 0 32px;width:32px;height:32px;margin-top:2px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center}.confirm__icon--danger[data-v-2e3673b3]{background:var(--c-danger-soft);color:var(--c-danger)}.confirm__icon--warning[data-v-2e3673b3]{background:var(--c-warning-soft);color:var(--c-warning)}.confirm__icon--primary[data-v-2e3673b3]{background:var(--c-accent-soft);color:var(--c-accent)}.confirm__content[data-v-2e3673b3]{min-width:0}.confirm__title[data-v-2e3673b3]{font-size:var(--fs-md);font-weight:600;color:var(--c-text);line-height:1.5}.confirm__message[data-v-2e3673b3]{margin-top:6px;font-size:var(--fs-sm);color:var(--c-text-2);line-height:1.65;word-break:break-word}.confirm__footer[data-v-2e3673b3]{display:flex;justify-content:flex-end;gap:var(--sp-2);margin-top:var(--sp-5)}.confirm__btn[data-v-2e3673b3]{height:32px;padding:0 16px;border-radius:var(--r-md);border:1px solid var(--c-border-strong);background:var(--c-surface);color:var(--c-text);font-family:var(--font-sans);font-size:var(--fs-sm);font-weight:500;line-height:1;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.confirm__btn[data-v-2e3673b3]:hover{border-color:var(--c-accent);color:var(--c-accent)}.confirm__btn[data-v-2e3673b3]:focus-visible{outline:2px solid var(--c-accent);outline-offset:2px}.confirm__btn--main[data-v-2e3673b3]{border-color:transparent;color:#fff}.confirm__btn--main[data-v-2e3673b3]:hover{color:#fff}.confirm__btn--primary[data-v-2e3673b3]{background:var(--c-accent)}.confirm__btn--primary[data-v-2e3673b3]:hover{background:var(--c-accent-hover)}.confirm__btn--danger[data-v-2e3673b3]{background:var(--c-danger)}.confirm__btn--danger[data-v-2e3673b3]:hover{background:#bf3b37}.confirm__btn--warning[data-v-2e3673b3]{background:var(--c-warning)}.confirm__btn--warning[data-v-2e3673b3]:hover{background:#a86f06}.confirm-enter-active[data-v-2e3673b3],.confirm-leave-active[data-v-2e3673b3]{transition:opacity .16s ease}.confirm-enter-active .confirm[data-v-2e3673b3],.confirm-leave-active .confirm[data-v-2e3673b3]{transition:transform .16s ease}.confirm-enter-from[data-v-2e3673b3],.confirm-leave-to[data-v-2e3673b3]{opacity:0}.confirm-enter-from .confirm[data-v-2e3673b3],.confirm-leave-to .confirm[data-v-2e3673b3]{transform:scale(.96)}:root{--c-bg: #f4f5f7;--c-surface: #ffffff;--c-surface-2: #fafbfc;--c-border: #e2e5e9;--c-border-strong: #c9ced6;--c-text: #1f2329;--c-text-2: #4e5866;--c-text-3: #8a94a3;--c-text-invert: #ffffff;--c-accent: #0f9d8a;--c-accent-hover: #0c8676;--c-accent-soft: #e4f5f2;--c-accent-soft-border: #b6e2db;--c-danger: #d64541;--c-danger-soft: #fdecea;--c-warning: #c8860a;--c-warning-soft: #fdf3df;--c-success: #1d8a4e;--c-success-soft: #e5f5eb;--c-info: #3b6fd4;--c-info-soft: #e8effb;--c-sidebar: #20262e;--c-sidebar-hover: #2b333d;--c-sidebar-active: #303a46;--c-sidebar-text: #aab4c0;--c-sidebar-text-active: #ffffff;--font-sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, "Courier New", monospace;--fs-xs: 12px;--fs-sm: 13px;--fs-md: 14px;--fs-lg: 16px;--fs-xl: 20px;--fs-2xl: 24px;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--r-sm: 3px;--r-md: 5px;--r-lg: 8px;--shadow-sm: 0 1px 2px rgba(16, 24, 40, .06);--shadow-md: 0 4px 12px rgba(16, 24, 40, .08);--shadow-lg: 0 8px 28px rgba(16, 24, 40, .12)}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%}body{font-family:var(--font-sans);font-size:var(--fs-md);line-height:1.6;color:var(--c-text);background:var(--c-bg);-webkit-font-smoothing:antialiased}a{color:var(--c-accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{font-weight:600;line-height:1.4}.mono,code,kbd,tt{font-family:var(--font-mono);font-size:.92em}.page{padding:var(--sp-6);max-width:1440px}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-5)}.page-title{font-size:var(--fs-xl);font-weight:600;color:var(--c-text)}.page-desc{margin-top:2px;font-size:var(--fs-sm);color:var(--c-text-3)}.panel{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);box-shadow:var(--shadow-sm)}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-border)}.panel-title{font-size:var(--fs-md);font-weight:600}.panel-body{padding:var(--sp-5)}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-border)}.toolbar-spacer{flex:1}.table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.data-table th{text-align:left;padding:10px var(--sp-4);background:var(--c-surface-2);border-bottom:1px solid var(--c-border);color:var(--c-text-2);font-weight:500;white-space:nowrap}.data-table td{padding:10px var(--sp-4);border-bottom:1px solid var(--c-border);vertical-align:middle}.data-table tbody tr:hover{background:#f6f8f9}.data-table tbody tr:last-child td{border-bottom:none}.data-table .cell-mono{font-family:var(--font-mono);font-size:.9em;color:var(--c-text-2)}.empty-state{padding:var(--sp-8);text-align:center;color:var(--c-text-3);font-size:var(--fs-sm)}.text-muted{color:var(--c-text-3)}.text-danger{color:var(--c-danger)}.text-accent{color:var(--c-accent)}.mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mb-3{margin-bottom:var(--sp-3)}.mb-4{margin-bottom:var(--sp-4)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#c9ced6;border-radius:4px}::-webkit-scrollbar-track{background:transparent}.manage-page{padding:var(--sp-6);max-width:1500px;margin:0 auto}.manage-page__intro{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-4)}.manage-page__intro h1{font-size:var(--fs-xl)}.manage-page__intro p{color:var(--c-text-3);font-size:var(--fs-sm);margin-top:3px}.manage-page__tools{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-2);flex-wrap:wrap}.manage-stack{display:flex;flex-direction:column;gap:var(--sp-4)}.manage-filter{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2);padding:var(--sp-3);background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg)}.manage-filter>.manage-filter__item{width:152px!important;flex:0 0 152px}.manage-filter.manage-filter--dense>.manage-filter__item{width:132px!important;flex-basis:132px}.manage-filter>.manage-filter__search{width:220px!important;flex:0 0 220px}.manage-filter__spacer{flex:1;min-width:var(--sp-2)}.manage-actions{display:flex;align-items:center;gap:4px}.manage-actions--wrap{flex-wrap:wrap}.manage-danger{color:var(--c-danger)!important}.manage-form-grid{display:grid;grid-template-columns:1fr 1fr;-moz-column-gap:var(--sp-5);column-gap:var(--sp-5)}.manage-form-grid__full{grid-column:1 / -1}.manage-form-tip{margin:calc(-1 * var(--sp-1)) 0 var(--sp-4) 96px;color:var(--c-text-3);font-size:var(--fs-xs)}.manage-context{display:inline-flex;align-items:center;height:28px;padding:0 10px;border:1px solid var(--c-accent-soft-border);background:var(--c-accent-soft);color:var(--c-accent-hover);border-radius:999px;font-size:var(--fs-xs)}.manage-chip{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:999px;border:1px solid var(--c-border);color:var(--c-text-2);background:var(--c-surface-2);font-size:var(--fs-xs)}.manage-chip--accent{color:var(--c-accent-hover);border-color:var(--c-accent-soft-border);background:var(--c-accent-soft)}.manage-code{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--c-text-2)}.manage-muted{color:var(--c-text-3);font-size:var(--fs-xs)}.manage-tree-name{display:inline-flex;align-items:center;gap:5px;font-weight:500}.manage-tree-guide{color:var(--c-text-3)}.manage-textarea{display:block;width:100%;min-height:78px;resize:vertical;border:1px solid var(--c-border-strong);border-radius:var(--r-md);padding:8px 10px;outline:none;font-family:var(--font-sans);font-size:var(--fs-sm);color:var(--c-text)}.manage-textarea:focus{border-color:var(--c-accent);box-shadow:0 0 0 3px var(--c-accent-soft)}.manage-switch{display:inline-flex;align-items:center;gap:8px;min-height:32px;cursor:pointer;font-size:var(--fs-sm)}.manage-switch input{width:34px;height:18px;accent-color:var(--c-accent)}.manage-check-list{display:flex;flex-direction:column;gap:7px;max-height:360px;overflow-y:auto}.manage-check{display:flex;align-items:center;gap:10px;min-height:38px;padding:7px 10px;border:1px solid var(--c-border);border-radius:var(--r-md);cursor:pointer;font-size:var(--fs-sm)}.manage-check:hover{border-color:var(--c-accent);background:var(--c-accent-soft)}.manage-check input{accent-color:var(--c-accent)}.manage-check__meta{margin-left:auto;color:var(--c-text-3);font-size:var(--fs-xs)}.manage-check-empty{padding:var(--sp-4);border:1px dashed var(--c-border);border-radius:var(--r-md);color:var(--c-text-3);font-size:var(--fs-sm);text-align:center}.role-groups{display:flex;flex-direction:column;gap:var(--sp-3);max-height:380px;overflow-y:auto;padding-right:2px}.role-group{display:flex;flex-direction:column;gap:6px}.role-group__title{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;padding:2px 2px 5px;background:var(--c-surface);font-size:var(--fs-xs);font-weight:600;color:var(--c-text-2)}.role-group__title code{padding:1px 5px;border-radius:var(--r-sm);background:var(--c-surface-2);color:var(--c-text-3);font-family:var(--font-mono);font-size:11px;font-weight:400}.role-group__count{margin-left:auto;color:var(--c-text-3);font-weight:400}.role-check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.manage-check--compact{min-height:30px;padding:3px 8px;gap:6px;border-radius:var(--r-sm);font-size:var(--fs-xs)}.role-check__name{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.role-check__code{flex:0 1 auto;max-width:45%;overflow:hidden;color:var(--c-text-3);font-family:var(--font-mono);font-size:11px;white-space:nowrap;text-overflow:ellipsis}@media(max-width:640px){.role-check-grid{grid-template-columns:1fr}}.manage-secret{padding:var(--sp-4);border:1px solid var(--c-warning);border-radius:var(--r-md);background:var(--c-warning-soft)}.manage-secret strong{display:block;margin-top:6px;font-family:var(--font-mono);letter-spacing:1px}.manage-inline{display:flex;align-items:center;gap:var(--sp-2)}.manage-summary{display:flex;gap:var(--sp-3);flex-wrap:wrap}.manage-summary__item{min-width:120px;padding:var(--sp-3) var(--sp-4);border:1px solid var(--c-border);background:var(--c-surface);border-radius:var(--r-lg)}.manage-summary__item strong{display:block;font-size:var(--fs-xl)}.manage-summary__item span{color:var(--c-text-3);font-size:var(--fs-xs)}@media(max-width:760px){.manage-page{padding:var(--sp-4)}.manage-page__intro{align-items:flex-start;flex-direction:column}.manage-page__tools{width:100%;justify-content:space-between}.manage-form-grid{grid-template-columns:1fr}.manage-form-grid__full{grid-column:auto}.manage-filter>.manage-filter__item,.manage-filter.manage-filter--dense>.manage-filter__item,.manage-filter>.manage-filter__search{width:100%!important;flex:1 1 100%}.manage-filter__spacer{display:none}}
