:root{--slate-50: #f8fafc;--slate-100: #f1f5f9;--slate-200: #e2e8f0;--slate-300: #cbd5e1;--slate-400: #94a3b8;--slate-500: #64748b;--slate-600: #475569;--slate-700: #334155;--slate-800: #1e293b;--slate-900: #0f172a;--slate-950: #020617;--blue-50: #eff6ff;--blue-100: #dbeafe;--blue-200: #bfdbfe;--blue-300: #93c5fd;--blue-400: #60a5fa;--blue-500: #3b82f6;--blue-600: #2563eb;--blue-700: #1d4ed8;--blue-800: #1e40af;--blue-900: #1e3a8a;--green-500: #22c55e;--green-600: #16a34a;--green-700: #15803d;--amber-400: #fbbf24;--amber-500: #f59e0b;--amber-600: #d97706;--red-500: #ef4444;--red-600: #dc2626;--red-700: #b91c1c;--sky-500: #0ea5e9;--violet-500:#8b5cf6;--chart-1: #2563eb;--chart-2: #0ea5e9;--chart-3: #16a34a;--chart-4: #f59e0b;--chart-5: #8b5cf6}:root{--background: var(--slate-50);--foreground: var(--slate-900);--card: #ffffff;--card-foreground: var(--slate-900);--popover: #ffffff;--popover-foreground: var(--slate-900);--primary: var(--blue-600);--primary-hover: var(--blue-700);--primary-foreground: #ffffff;--secondary: var(--slate-100);--secondary-hover: var(--slate-200);--secondary-foreground: var(--slate-900);--muted: var(--slate-100);--muted-foreground: var(--slate-500);--accent: var(--slate-100);--accent-foreground: var(--slate-900);--success: var(--green-600);--success-foreground: #ffffff;--success-subtle: #f0fdf4;--warning: var(--amber-500);--warning-foreground: #ffffff;--warning-subtle: #fffbeb;--destructive: var(--red-600);--destructive-foreground:#ffffff;--destructive-subtle: #fef2f2;--info: var(--blue-600);--info-subtle: var(--blue-50);--border: var(--slate-200);--input: var(--slate-200);--ring: var(--blue-600);--sidebar: #ffffff;--sidebar-foreground: var(--slate-700);--sidebar-border: var(--slate-200);--sidebar-accent: var(--slate-100);--sidebar-active: var(--blue-50);--sidebar-active-fg: var(--blue-700);--radius: .5rem;--radius-sm: calc(var(--radius) - 4px);--radius-md: calc(var(--radius) - 2px);--radius-lg: var(--radius);--radius-xl: calc(var(--radius) + 4px);--radius-full: 9999px;--shadow-xs: 0 1px 2px 0 rgb(15 23 42 / .05);--shadow-sm: 0 1px 3px 0 rgb(15 23 42 / .08), 0 1px 2px -1px rgb(15 23 42 / .08);--shadow-md: 0 4px 6px -1px rgb(15 23 42 / .08), 0 2px 4px -2px rgb(15 23 42 / .06);--shadow-lg: 0 10px 15px -3px rgb(15 23 42 / .1), 0 4px 6px -4px rgb(15 23 42 / .07);--shadow-xl: 0 20px 25px -5px rgb(15 23 42 / .12), 0 8px 10px -6px rgb(15 23 42 / .08);--space-0: 0px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px}.dark{--background: var(--slate-950);--foreground: var(--slate-100);--card: var(--slate-900);--card-foreground: var(--slate-100);--popover: var(--slate-900);--popover-foreground: var(--slate-100);--primary: var(--blue-500);--primary-hover: var(--blue-400);--primary-foreground: var(--slate-950);--secondary: var(--slate-800);--secondary-hover: var(--slate-700);--secondary-foreground: var(--slate-100);--muted: var(--slate-800);--muted-foreground: var(--slate-400);--accent: var(--slate-800);--accent-foreground: var(--slate-100);--success: var(--green-500);--success-subtle: #052e16;--warning: var(--amber-400);--warning-subtle: #422006;--destructive: var(--red-500);--destructive-foreground:#ffffff;--destructive-subtle: #450a0a;--info: var(--blue-500);--info-subtle: #172554;--border: var(--slate-800);--input: var(--slate-700);--ring: var(--blue-500);--sidebar: var(--slate-900);--sidebar-foreground: var(--slate-300);--sidebar-border: var(--slate-800);--sidebar-accent: var(--slate-800);--sidebar-active: rgba(37, 99, 235, .15);--sidebar-active-fg: var(--blue-300);--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .3);--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .4), 0 1px 2px -1px rgb(0 0 0 / .4);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .45), 0 2px 4px -2px rgb(0 0 0 / .4);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .5), 0 4px 6px -4px rgb(0 0 0 / .4);--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .55), 0 8px 10px -6px rgb(0 0 0 / .45)}:root{--font-sans: "Noto Sans SC", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--text-xs: 12px;--text-sm: 13px;--text-base: 14px;--text-md: 15px;--text-lg: 16px;--text-xl: 18px;--text-2xl: 20px;--text-3xl: 24px;--text-4xl: 30px;--text-5xl: 36px;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.65;--weight-normal: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--tracking-tight: -.01em;--tracking-normal: 0;--tracking-wide: .04em}.ds-h1{font-family:var(--font-sans);font-size:var(--text-4xl);font-weight:var(--weight-bold);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);color:var(--foreground)}.ds-h2{font-family:var(--font-sans);font-size:var(--text-3xl);font-weight:var(--weight-semibold);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);color:var(--foreground)}.ds-h3{font-family:var(--font-sans);font-size:var(--text-xl);font-weight:var(--weight-semibold);line-height:var(--leading-snug);color:var(--foreground)}.ds-h4{font-family:var(--font-sans);font-size:var(--text-lg);font-weight:var(--weight-semibold);line-height:var(--leading-snug);color:var(--foreground)}.ds-lead{font-size:var(--text-lg);font-weight:var(--weight-normal);line-height:var(--leading-relaxed);color:var(--muted-foreground)}.ds-p{font-size:var(--text-base);font-weight:var(--weight-normal);line-height:var(--leading-normal);color:var(--foreground)}.ds-small{font-size:var(--text-sm);line-height:var(--leading-normal);color:var(--muted-foreground)}.ds-muted{font-size:var(--text-base);color:var(--muted-foreground)}.ds-label{font-size:var(--text-sm);font-weight:var(--weight-medium);line-height:1;color:var(--foreground)}.ds-code{font-family:var(--font-mono);font-size:.85em;font-weight:var(--weight-medium);background:var(--muted);color:var(--foreground);padding:.15em .4em;border-radius:var(--radius-sm)}.ds-overline{font-size:var(--text-xs);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--muted-foreground)}*{scrollbar-width:thin;scrollbar-color:var(--slate-300) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--slate-300);border-radius:999px;border:3px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:var(--slate-400);background-clip:content-box}::-webkit-scrollbar-corner{background:transparent}.dark *{scrollbar-color:var(--slate-700) transparent}.dark ::-webkit-scrollbar-thumb{background:var(--slate-700);background-clip:content-box}.dark ::-webkit-scrollbar-thumb:hover{background:var(--slate-600);background-clip:content-box}:root{--primary: #2f6feb;--primary-hover: #1f56cc;--ring: #2f6feb;--info: #2f6feb;--sidebar-active-fg: #1f56cc}.dark,:root[data-theme=dark]{--primary: #5c8df5;--primary-hover: #7da4f7;--ring: #5c8df5;--info: #5c8df5;--sidebar-active: rgba(47, 111, 235, .18);--sidebar-active-fg: #9db9f8}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font-family:var(--font-sans);background:var(--background);color:var(--foreground);font-size:var(--text-base);-webkit-font-smoothing:antialiased}#root{height:100%}button{font-family:inherit}a{color:inherit;text-decoration:none}p{margin:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:32px;padding:0 14px;border-radius:var(--radius-md);font-size:14px;font-weight:500;border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:background .14s ease,box-shadow .14s ease,border-color .14s ease}.btn:focus-visible{outline:none;box-shadow:0 0 0 2px var(--background),0 0 0 4px var(--ring)}.btn-primary{background:var(--primary);color:var(--primary-foreground)}.btn-primary:hover{background:var(--primary-hover)}.btn-secondary{background:var(--secondary);color:var(--secondary-foreground)}.btn-secondary:hover{background:var(--secondary-hover)}.btn-outline{background:var(--card);color:var(--foreground);border-color:var(--input)}.btn-outline:hover{background:var(--muted)}.btn-ghost{background:transparent;color:var(--foreground)}.btn-ghost:hover{background:var(--muted)}.btn-destructive{background:var(--destructive);color:var(--destructive-foreground)}.btn-destructive:hover{filter:brightness(.93)}.btn-sm{height:28px;padding:0 10px;font-size:13px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-danger-text{color:var(--destructive)}.btn-row{display:flex;align-items:center;gap:10px}.btn-row.end{justify-content:flex-end}.iconbtn{width:34px;height:34px;border-radius:var(--radius-md);border:none;background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--muted-foreground)}.iconbtn:hover{background:var(--secondary);color:var(--foreground)}.iconbtn:focus-visible{outline:none;box-shadow:0 0 0 2px var(--ring)}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field>label{font-size:13px;font-weight:500}.input,.select,.textarea{width:100%;height:32px;padding:0 12px;border:1px solid var(--input);border-radius:var(--radius-md);font-size:14px;font-family:var(--font-sans);background:var(--card);color:var(--foreground);outline:none;transition:box-shadow .14s ease,border-color .14s ease}.textarea{height:auto;padding:7px 12px;resize:vertical;line-height:1.5}.input:focus,.select:focus,.textarea:focus{border-color:var(--ring);box-shadow:0 0 0 3px #2f6feb2e}.input::placeholder,.textarea::placeholder{color:var(--muted-foreground)}.mono-input,.code-textarea{font-family:var(--font-mono);font-size:13px}.code-textarea{line-height:1.55;white-space:pre;overflow-x:auto}.file-input{padding:4px 12px;line-height:22px;cursor:pointer}.hint{font-size:12px;color:var(--muted-foreground)}.hint.error{color:var(--destructive)}.form-col{display:flex;flex-direction:column;gap:14px}.form-row{display:grid;grid-template-columns:2fr 1fr;gap:12px}.grant-row{grid-template-columns:1fr 2fr 1.5fr 1fr}@media(max-width:960px){.form-row,.grant-row{grid-template-columns:1fr}}.switch{width:38px;height:22px;border-radius:999px;border:none;padding:0;background:var(--slate-300);position:relative;cursor:pointer;transition:background .15s ease;flex-shrink:0}.dark .switch,[data-theme=dark] .switch{background:var(--slate-700)}.switch.on,.dark .switch.on,[data-theme=dark] .switch.on{background:var(--primary)}.switch:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm);transition:left .15s ease}.switch.on:after{left:18px}.switch:disabled{opacity:.55;cursor:wait}.switch:focus-visible{outline:none;box-shadow:0 0 0 2px var(--background),0 0 0 4px var(--ring)}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);margin-bottom:14px;overflow:hidden}.card-pad{padding:14px 16px}.card-head{padding:12px 16px;border-bottom:1px solid var(--border)}.card-title{font-size:15px;font-weight:600;line-height:1.3;color:var(--card-foreground)}.card-desc{font-size:13px;color:var(--muted-foreground);margin-top:2px}.mcp-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;padding:2px 9px;border-radius:var(--radius-full);line-height:1.4;white-space:nowrap}.badge .dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge-success{background:var(--success-subtle);color:var(--success)}.badge-warning{background:var(--warning-subtle);color:var(--warning)}.badge-danger{background:var(--destructive-subtle);color:var(--destructive)}.badge-info{background:var(--info-subtle);color:var(--info)}.badge-neutral{background:var(--secondary);color:var(--secondary-foreground)}.dark .badge-warning,[data-theme=dark] .badge-warning{color:var(--amber-400)}.table-scroll{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:13px}.table thead th{text-align:left;font-size:11px;font-weight:600;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.03em;padding:10px 14px 8px;border-bottom:1px solid var(--border);white-space:nowrap}.table tbody td{padding:9px 14px;border-bottom:1px solid var(--border);vertical-align:middle}.table tbody tr:last-child td{border-bottom:none}.table tbody tr{transition:background .1s ease}.table tbody tr:hover{background:var(--muted)}.row-click{cursor:pointer}.num{font-variant-numeric:tabular-nums}.mono{font-family:var(--font-mono);font-size:12px}.muted{color:var(--muted-foreground)}.nowrap{white-space:nowrap}.break-all{word-break:break-all}.error-cell{max-width:260px;color:var(--muted-foreground)}.shell{display:flex;height:100%}.sidebar{width:216px;flex-shrink:0;background:var(--sidebar);border-right:1px solid var(--sidebar-border);display:flex;flex-direction:column;height:100%}.sb-brand{display:flex;align-items:center;gap:10px;padding:16px;border-bottom:1px solid var(--sidebar-border)}.sb-mark{width:34px;height:34px;border-radius:9px;flex-shrink:0;background:var(--primary);color:var(--primary-foreground);display:inline-flex;align-items:center;justify-content:center}.sb-brand-name{font-weight:700;font-size:15px;line-height:1.15;color:var(--foreground)}.sb-brand-sub{font-size:11px;color:var(--muted-foreground);margin-top:1px}.sb-nav{padding:12px 10px;flex:1;overflow:auto;display:flex;flex-direction:column;gap:2px}.sb-group{font-size:11px;font-weight:600;color:var(--muted-foreground);padding:4px 10px 6px;letter-spacing:.03em}.sb-item{display:flex;align-items:center;gap:11px;width:100%;padding:9px 11px;border:none;border-radius:var(--radius-md);font-size:14px;text-align:left;background:transparent;color:var(--sidebar-foreground);cursor:pointer;transition:background .12s ease,color .12s ease}.sb-item:hover{background:var(--sidebar-accent)}.sb-item.active{background:var(--sidebar-active);color:var(--sidebar-active-fg);font-weight:500}.sb-item:focus-visible{outline:none;box-shadow:0 0 0 2px var(--ring)}.sb-foot{padding:12px;border-top:1px solid var(--sidebar-border)}.sb-user{display:flex;align-items:center;gap:10px;padding:4px 6px}.avatar{width:30px;height:30px;border-radius:50%;flex-shrink:0;background:var(--primary);color:var(--primary-foreground);display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600}.sb-user-meta{min-width:0}.sb-user-name{font-size:13px;font-weight:500;line-height:1.2;color:var(--foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sb-user-roles{font-size:11px;color:var(--muted-foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.main{flex:1;display:flex;flex-direction:column;min-width:0;height:100%}.topbar{height:48px;flex-shrink:0;border-bottom:1px solid var(--border);background:var(--card);display:flex;align-items:center;gap:8px;padding:0 16px}.crumb{font-size:14px;color:var(--muted-foreground)}.crumb b{color:var(--foreground);font-weight:600}.spacer{flex:1}.topbar-user{font-size:13px;color:var(--muted-foreground);margin-right:2px}.content{flex:1;overflow:auto;padding:18px 22px 28px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.page-title{font-size:21px;font-weight:600;letter-spacing:-.01em;line-height:1.25}.page-sub{font-size:13px;color:var(--muted-foreground);margin-top:2px}.detail-title{display:flex;align-items:center;gap:10px}.back-bar{margin-bottom:8px;color:var(--muted-foreground)}.back-bar:hover{color:var(--foreground)}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}@media(max-width:1100px){.detail-grid{grid-template-columns:1fr}}.detail-grid>.card{margin-bottom:0}.versions-card{margin-top:14px}.info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px 14px}@media(max-width:720px){.info-grid{grid-template-columns:repeat(2,1fr)}}.info-label{font-size:12px;color:var(--muted-foreground);margin-bottom:2px}.info-value{font-size:13px;color:var(--foreground)}.toolbar{display:flex;align-items:flex-end;gap:12px;margin-bottom:14px;flex-wrap:wrap}.toolbar-select{min-width:300px}.audit-toolbar .field{min-width:200px}.audit-limit{width:130px}.audit-query{margin-bottom:1px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:50;padding:20px;animation:fade .15s ease}.modal{background:var(--popover);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);width:100%;max-width:480px;max-height:90vh;overflow:auto;animation:pop .16s cubic-bezier(.16,1,.3,1)}.modal-head{padding:20px 22px 0}.modal-body{padding:16px 22px;display:flex;flex-direction:column;gap:16px}.modal-foot{padding:14px 22px 20px;display:flex;justify-content:flex-end;gap:10px}@keyframes fade{0%{opacity:0}}@keyframes pop{0%{opacity:0;transform:translateY(6px) scale(.98)}}.toast-stack{position:fixed;bottom:24px;right:24px;z-index:60;display:flex;flex-direction:column;gap:10px;max-width:380px}.toast{background:var(--popover);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:12px 16px;display:flex;align-items:flex-start;gap:10px;font-size:14px;cursor:pointer;animation:slidein .2s cubic-bezier(.16,1,.3,1)}.toast-dot{width:8px;height:8px;border-radius:50%;margin-top:6px;flex-shrink:0}.toast-dot-success{background:var(--success)}.toast-dot-error{background:var(--destructive)}.toast-dot-info{background:var(--info)}.toast-body{min-width:0}.toast-msg{color:var(--popover-foreground)}.toast-detail{font-size:12px;color:var(--muted-foreground);margin-top:3px;line-height:1.5}@keyframes slidein{0%{opacity:0;transform:translate(12px)}}.empty-state{text-align:center;padding:40px 20px}.empty-icon{width:60px;height:60px;border-radius:50%;background:var(--muted);color:var(--slate-400);display:inline-flex;align-items:center;justify-content:center;margin-bottom:14px}.empty-title{font-size:14px;font-weight:500}.empty-desc{font-size:13px;color:var(--muted-foreground);margin:5px auto 0;max-width:420px;line-height:1.6}.empty-action{display:flex;justify-content:center;gap:10px;margin-top:16px}.loading{display:flex;align-items:center;justify-content:center;gap:10px;padding:36px 20px;color:var(--muted-foreground);font-size:13px}.spinner{width:16px;height:16px;border-radius:50%;flex-shrink:0;border:2px solid var(--border);border-top-color:var(--primary);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.inline-error{background:var(--destructive-subtle);border:1px solid var(--destructive);border-radius:var(--radius-md);padding:10px 14px;font-size:13px;margin-bottom:14px}.form-col .inline-error,.modal-body .inline-error{margin-bottom:0}.inline-error-msg{color:var(--destructive);font-weight:500}.inline-error-suggestion{color:var(--muted-foreground);margin-top:4px;line-height:1.55}.dark .inline-error-suggestion,[data-theme=dark] .inline-error-suggestion{color:var(--slate-300)}.error-list{margin:6px 0 0;padding-left:18px;color:var(--destructive);line-height:1.7}.callout{display:flex;gap:12px;align-items:flex-start;background:var(--info-subtle);border:1px solid var(--info);border-radius:var(--radius-lg);padding:14px 16px;margin-bottom:14px;color:var(--foreground)}.callout>svg{color:var(--info);flex-shrink:0;margin-top:1px}.callout-title{font-size:14px;font-weight:600;color:var(--info)}.callout-body{font-size:13px;line-height:1.7;margin-top:3px}.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;background:var(--background);padding:20px}.login-box{width:100%;max-width:392px}.login-brand{display:flex;flex-direction:column;align-items:center;margin-bottom:24px}.login-mark{width:52px;height:52px;border-radius:13px;margin-bottom:14px}.login-title{font-size:24px;font-weight:700;letter-spacing:-.01em}.login-sub{font-size:13px;color:var(--muted-foreground);margin-top:5px;text-align:center}.login-card{padding:22px;margin-bottom:0}.login-form{display:flex;flex-direction:column;gap:16px}.login-form .input{height:38px}.login-submit{width:100%;height:40px;font-size:14px}.login-foot{text-align:center;font-size:12px;color:var(--muted-foreground);margin-top:18px}.narrow-page{max-width:860px}.upload-phase{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--muted-foreground)}.upload-result{border-color:var(--success)}.upload-result .card-head{border-bottom-color:var(--border)}.upload-result .card-title{color:var(--success)}.result-list{margin:0;display:flex;flex-direction:column;gap:8px}.result-list>div{display:flex;gap:12px;align-items:baseline}.result-list dt{width:84px;flex-shrink:0;font-size:12px;color:var(--muted-foreground)}.result-list dd{margin:0;font-size:13px;min-width:0}.grant-card{margin-top:14px}
