@charset "UTF-8";:root{--sn-bg: #FAF9FB;--sn-surface: #FFFFFF;--sn-gray500: #2B2233;--sn-gray400: #3E3446;--sn-gray300: #80708F;--sn-gray200: #E0DCE5;--sn-gray100: #F0ECF3;--sn-purple: #6C5FC7;--sn-purple-dark: #584AC0;--sn-link: #2562D4;--sn-link-hover: #1D48B8;--sn-red: #F55459;--sn-red-dark: #DF3338;--sn-yellow: #FFC227;--sn-green: #2BA185;--sn-pink: #F14499;--sn-fatal: #A61E24;--sn-radius: 6px;--sn-shadow: 0 2px 0 rgba(37, 11, 54, .04);--sn-sidebar-gradient: linear-gradient(294.17deg, #2f1937 35.57%, #452650 92.42%);--sn-sidebar-text: #9586A5;--sn-border-hover: #C9C1D3;--sn-focus-ring: 0 0 0 1px var(--sn-purple);--sn-overlay: rgba(43, 34, 51, .5);--sn-table-header-bg: #FAFAFC;--sn-auth-bg-base: #150E2E;--sn-auth-bg-corner: #171034;--sn-auth-bg-corner-alt: #1D1442;--sn-auth-bg-mid: #2A1D5A;--sn-auth-glow-core: rgba(69, 48, 127, .95);--sn-auth-glow-mid: rgba(58, 42, 114, .55);--sn-auth-glow-fade: rgba(58, 42, 114, 0);--sn-auth-glow-cool: rgba(43, 32, 92, .55);--sn-auth-glow-cool-fade: rgba(43, 32, 92, 0);--sn-auth-vignette: rgba(9, 5, 24, .92);--sn-auth-vignette-fade: rgba(9, 5, 24, 0);--sn-auth-halo: rgba(124, 96, 214, .16);--sn-auth-halo-fade: rgba(124, 96, 214, 0);--sn-auth-noise-opacity: .035;--sn-auth-glass-fill: rgba(255, 255, 255, .075);--sn-auth-glass-fill-solid: rgba(38, 27, 74, .86);--sn-auth-glass-border: rgba(255, 255, 255, .155);--sn-auth-glass-highlight: rgba(255, 255, 255, .22);--sn-auth-glass-lowlight: rgba(255, 255, 255, .05);--sn-auth-glass-sheen: rgba(255, 255, 255, .1);--sn-auth-glass-sheen-fade: rgba(255, 255, 255, 0);--sn-auth-glass-blur: blur(26px) saturate(120%);--sn-auth-card-shadow: rgba(8, 4, 22, .62);--sn-auth-card-shadow-soft: rgba(8, 4, 22, .4);--sn-auth-field-bg: rgba(255, 255, 255, .07);--sn-auth-field-bg-hover: rgba(255, 255, 255, .095);--sn-auth-field-bg-focus: rgba(255, 255, 255, .11);--sn-auth-field-border: rgba(255, 255, 255, .14);--sn-auth-field-border-hover: rgba(255, 255, 255, .2);--sn-auth-field-border-focus: rgba(185, 170, 255, .85);--sn-auth-focus-ring: rgba(185, 170, 255, .92);--sn-auth-text-strong: #FFFFFF;--sn-auth-text: #F1EEFA;--sn-auth-text-muted: rgba(255, 255, 255, .72);--sn-auth-text-dim: rgba(255, 255, 255, .5);--sn-auth-text-control: rgba(255, 255, 255, .68);--sn-auth-text-faint: rgba(255, 255, 255, .64);--sn-auth-mark-top: #8579D6;--sn-auth-btn-border: rgba(255, 255, 255, .16);--sn-auth-btn-highlight: rgba(255, 255, 255, .18);--sn-auth-btn-glow: rgba(76, 60, 170, .55);--sn-auth-on-purple: #FFFFFF;--sn-auth-on-purple-track: rgba(255, 255, 255, .35);--sn-auth-danger-bg: rgba(245, 84, 89, .14);--sn-auth-danger-border: rgba(245, 84, 89, .34);--sn-auth-danger-text: #FFB9BB;--sn-auth-sparkle: rgba(255, 255, 255, .55);--sn-auth-mascot-shadow: rgba(10, 4, 26, .55);--sn-auth-paw-shadow: rgba(8, 4, 22, .5);--sn-chart-1: #6C5FC7;--sn-chart-2: #F14499;--sn-chart-3: #2562D4;--sn-chart-4: #2BA185;--sn-chart-5: #FFC227;--sn-chart-6: #F55459;--sn-chart-7: #80708F;--sn-chart-grid: #F0ECF3;--sn-chart-tick: #80708F;--font-sans: "Rubik", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "Roboto Mono", ui-monospace, "Monaco", "Courier New", monospace;--bg: var(--sn-bg);--bg-deep: var(--sn-gray100);--surface: var(--sn-surface);--surface-hover: var(--sn-bg);--sidebar: var(--sn-table-header-bg);--sidebar-hover: var(--sn-gray100);--border: var(--sn-gray200);--border-light: var(--sn-gray100);--green: var(--sn-purple);--green-light: var(--sn-purple);--green-bright: var(--sn-purple-dark);--text: var(--sn-gray400);--text-muted: var(--sn-gray300);--text-dim: #A79BB5;--error: var(--sn-red);--warning: var(--sn-yellow);--success: var(--sn-green);--info: var(--sn-link);--radius: var(--sn-radius);--radius-sm: var(--sn-radius);--pink: var(--sn-pink)}*{margin:0;padding:0;box-sizing:border-box}html{scrollbar-color:var(--sn-gray200) transparent}html,body{height:100%;background:var(--sn-bg);color:var(--sn-gray400);font-family:var(--font-sans);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input,select,textarea{font-family:inherit}h1,h2,h3,h4{color:var(--sn-gray500);font-weight:600}::selection{background:var(--sn-purple);color:#fff}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--sn-gray200);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--sn-gray300)}code{font-family:var(--font-mono);font-size:12.5px;background:var(--sn-gray100);border-radius:4px;padding:1px 5px}pre{font-family:var(--font-mono)}pre code{background:none;padding:0}.muted{color:var(--sn-gray300)}.dim{color:var(--text-dim)}.mono{font-family:var(--font-mono)}.row{display:flex;align-items:center}.gap-2{gap:8px}.gap-3{gap:12px}.grow{flex:1}.wrap{flex-wrap:wrap}.page{padding:28px 32px;max-width:1500px;margin:0 auto;display:flex;flex-direction:column;gap:24px}.sn-link{color:var(--sn-link);font-weight:500;text-decoration:none;cursor:pointer;background:none;border:none;font-size:inherit;padding:0}.sn-link:hover{color:var(--sn-link-hover);text-decoration:underline}.sn-page-header{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.sn-page-title{font-size:26px;font-weight:600;color:var(--sn-gray500);letter-spacing:-.01em;line-height:1.25}.sn-page-sub{font-size:14px;color:var(--sn-gray300);margin-top:4px}.sn-panel{background:var(--sn-surface);border:1px solid var(--sn-gray200);border-radius:var(--sn-radius);box-shadow:var(--sn-shadow)}.sn-panel-header{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:13px;font-weight:600;color:var(--sn-gray500);border-bottom:1px solid var(--sn-gray200)}.sn-panel-header.muted{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--sn-gray300)}.sn-panel-body{padding:16px}.sn-panel-footer{padding:12px 16px;border-top:1px solid var(--sn-gray100);display:flex;align-items:center;gap:10px}.sn-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;background:var(--sn-surface);border:1px solid var(--sn-gray200);border-radius:var(--sn-radius);box-shadow:var(--sn-shadow);font-size:14px;font-weight:500;color:var(--sn-gray400);line-height:1;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;transition:border-color .12s ease,background .12s ease,color .12s ease}.sn-btn:hover:not(:disabled){border-color:var(--sn-border-hover)}.sn-btn:active:not(:disabled){background:var(--sn-bg)}.sn-btn:focus-visible{outline:none;box-shadow:var(--sn-shadow),0 0 0 2px #6c5fc759}.sn-btn:disabled{opacity:.5;cursor:not-allowed}.sn-btn.sm{height:26px;padding:0 10px;font-size:12.5px}.sn-btn.primary{background:var(--sn-purple);border-color:var(--sn-purple-dark);color:#fff}.sn-btn.primary:hover:not(:disabled){background:var(--sn-purple-dark);border-color:var(--sn-purple-dark)}.sn-btn.primary:active:not(:disabled){background:var(--sn-purple-dark)}.sn-btn.danger{background:var(--sn-red);border-color:var(--sn-red-dark);color:#fff}.sn-btn.danger:hover:not(:disabled){background:var(--sn-red-dark);border-color:var(--sn-red-dark)}.sn-btn.danger:active:not(:disabled){background:var(--sn-red-dark)}.sn-btn.active{border-color:var(--sn-purple);color:var(--sn-purple)}.sn-btn.active:hover:not(:disabled){border-color:var(--sn-purple)}.sn-caret{display:inline-block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid currentColor;opacity:.6;margin-left:2px}.sn-btn.has-caret:after{content:"";width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid currentColor;opacity:.6;margin-left:4px}.sn-btn-group{display:inline-flex;align-items:stretch}.sn-btn-group>.sn-btn{position:relative;border-radius:0;margin-left:-1px}.sn-btn-group>.sn-btn:first-child{border-radius:var(--sn-radius) 0 0 var(--sn-radius);margin-left:0}.sn-btn-group>.sn-btn:last-child{border-radius:0 var(--sn-radius) var(--sn-radius) 0}.sn-btn-group>.sn-btn:only-child{border-radius:var(--sn-radius)}.sn-btn-group>.sn-btn:hover,.sn-btn-group>.sn-btn:focus-visible,.sn-btn-group>.sn-btn.active{z-index:1}.sn-tag{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 8px;border-radius:10px;background:var(--sn-gray100);color:var(--sn-gray400);font-size:12px;font-weight:400;line-height:1;white-space:nowrap}.sn-tag.red{background:#fde6e7;color:var(--sn-red-dark)}.sn-tag.yellow{background:#fff3d6;color:#856c00}.sn-tag.purple{background:#eceaf9;color:var(--sn-purple-dark)}.sn-tag.green{background:#dff1ec;color:#1d7059}.sn-tag.blue{background:#e3ecfa;color:var(--sn-link)}.sn-tag.pink{background:#fde4f0;color:#c42d77}.sn-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--sn-gray300);flex-shrink:0}.sn-dot.error{background:var(--sn-red)}.sn-dot.warning{background:var(--sn-yellow)}.sn-dot.info{background:var(--sn-link)}.sn-dot.fatal{background:var(--sn-fatal)}.sn-dot.debug{background:var(--sn-gray300)}.sn-dot.success{background:var(--sn-green)}.sn-table-wrap{overflow-x:auto}.sn-table{width:100%;border-collapse:collapse;font-size:14px}.sn-table th{background:var(--sn-table-header-bg);text-align:left;padding:8px 16px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--sn-gray300);border-bottom:1px solid var(--sn-gray200);white-space:nowrap}.sn-table td{padding:10px 16px;border-bottom:1px solid var(--sn-gray100);vertical-align:middle}.sn-table tbody tr:last-child td{border-bottom:0}.sn-table tbody tr:hover{background:var(--sn-bg)}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:color .12s ease}th.sortable:hover,th.sortable.sorted{color:var(--sn-purple)}th.sortable .sort-ind{font-size:9px;opacity:.9}.sn-tabs{display:flex;align-items:center;border-bottom:1px solid var(--sn-gray200)}.sn-tab{appearance:none;background:none;border:none;font:inherit;font-size:14px;color:var(--sn-gray300);padding:12px 4px;margin-right:24px;margin-bottom:-1px;border-bottom:3px solid transparent;display:inline-flex;align-items:center;gap:6px;cursor:pointer;text-decoration:none;transition:color .12s ease}.sn-tab:hover{color:var(--sn-gray400)}.sn-tab.active{color:var(--sn-gray500);border-bottom-color:var(--sn-purple)}.sn-input{height:32px;width:100%;padding:0 10px;background:var(--sn-surface);border:1px solid var(--sn-gray200);border-radius:var(--sn-radius);color:var(--sn-gray400);font-size:14px;transition:border-color .12s ease,box-shadow .12s ease}.sn-input::placeholder{color:var(--sn-gray300)}.sn-input:focus{outline:none;border-color:var(--sn-purple);box-shadow:var(--sn-focus-ring)}.sn-input:disabled{background:var(--sn-gray100);opacity:.7;cursor:not-allowed}textarea.sn-input{height:auto;min-height:72px;padding:8px 10px;line-height:1.5;resize:vertical}select.sn-input{cursor:pointer}.field-label{display:block;font-size:12px;color:var(--sn-gray300);margin-bottom:6px}.sn-search{position:relative;display:flex;align-items:center}.sn-search>app-icon,.sn-search>svg,.sn-search>.sn-search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--sn-gray300);pointer-events:none;line-height:0}.sn-search .sn-input{padding-left:34px}.sn-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:48px 24px;text-align:center}.sn-empty>app-icon,.sn-empty .sn-empty-icon{color:var(--sn-gray200);margin-bottom:6px}.sn-empty-title{font-size:15px;font-weight:600;color:var(--sn-gray500)}.sn-empty-hint{font-size:13px;color:var(--sn-gray300);max-width:440px;line-height:1.55}.sn-pager{display:flex;align-items:center;justify-content:flex-end;gap:12px}.sn-pager-info{font-size:13px;color:var(--sn-gray300)}.sn-pager .sn-btn{padding:0 10px}.sn-kv{display:grid;grid-template-columns:minmax(140px,max-content) 1fr;column-gap:16px;margin:0}.sn-kv>dt,.sn-kv>.k{color:var(--sn-gray300);font-size:13px;font-weight:400;padding:7px 0}.sn-kv>dd,.sn-kv>.v{margin:0;min-width:0;color:var(--sn-gray400);font-size:13px;padding:7px 0;word-break:break-word}.sn-kv>*{border-bottom:1px solid var(--sn-gray100)}.sn-kv>:nth-last-child(-n+2){border-bottom:0}.sn-dist-row{position:relative;display:flex;align-items:center;gap:10px;padding:4px 8px;font-size:13px;border-radius:4px;overflow:hidden}.sn-dist-row+.sn-dist-row{margin-top:2px}.sn-dist-bar{position:absolute;top:0;left:0;bottom:0;background:var(--sn-gray100);border-radius:4px;z-index:0}.sn-dist-row .label{position:relative;z-index:1;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--sn-gray400)}.sn-dist-row .count{position:relative;z-index:1;color:var(--sn-gray300);font-variant-numeric:tabular-nums}.sn-dist-row .pct{position:relative;z-index:1;min-width:44px;text-align:right;color:var(--sn-gray300);font-variant-numeric:tabular-nums}.card{background:var(--sn-surface);border:1px solid var(--sn-gray200);border-radius:var(--sn-radius);box-shadow:var(--sn-shadow);transition:border-color .2s ease,background .2s ease}.card-hover:hover{border-color:var(--sn-border-hover)}.card-pad{padding:20px}.section-title{font-size:18px;font-weight:600;color:var(--sn-gray500)}.section-sub{font-size:13px;color:var(--sn-gray300);margin-top:4px}.input,select.input,textarea.input{width:100%;background:var(--sn-surface);border:1px solid var(--sn-gray200);color:var(--sn-gray400);border-radius:var(--sn-radius);padding:6px 12px;font-size:13px;transition:border-color .15s ease,box-shadow .15s ease}.input::placeholder{color:var(--sn-gray300)}.input:focus{outline:none;border-color:var(--sn-purple);box-shadow:var(--sn-focus-ring)}.input:disabled{background:var(--sn-gray100);opacity:.7;cursor:not-allowed}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:7px 14px;border-radius:var(--sn-radius);font-size:13px;font-weight:500;cursor:pointer;background:var(--sn-surface);border:1px solid var(--sn-gray200);color:var(--sn-gray400);box-shadow:var(--sn-shadow);transition:border-color .15s ease,background .15s ease,color .15s ease;white-space:nowrap}.btn:hover:not(:disabled){border-color:var(--sn-border-hover)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--sn-purple);border-color:var(--sn-purple-dark);color:#fff}.btn-primary:hover:not(:disabled){background:var(--sn-purple-dark);border-color:var(--sn-purple-dark)}.btn-ghost{background:transparent}.btn-ghost:hover:not(:disabled){border-color:var(--sn-purple);color:var(--sn-purple)}.btn-danger{background:#fde6e7;color:var(--sn-red-dark);border-color:#f7c6c8}.btn-danger:hover:not(:disabled){background:var(--sn-red);border-color:var(--sn-red-dark);color:#fff}.btn-sm{padding:4px 10px;font-size:12px}.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:12px;font-size:11px;font-weight:600;white-space:nowrap}.badge-success{background:#dff1ec;color:#1d7059}.badge-info{background:#e3ecfa;color:var(--sn-link)}.badge-danger{background:#fde6e7;color:var(--sn-red-dark)}.badge-warning{background:#fff3d6;color:#856c00}.badge-muted{background:var(--sn-gray100);color:var(--sn-gray300)}.badge-cyan{background:#dff3fa;color:#0e7490}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:14px;font-size:12px;background:#eceaf9;border:1px solid #D8D3F0;color:var(--sn-purple-dark)}.avatar-bubble{--bubble-size: 34px;width:var(--bubble-size);height:var(--bubble-size);flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border-radius:30%;background:linear-gradient(160deg,#8579D6 0%,var(--sn-purple) 100%);border:2px solid var(--sn-surface);box-shadow:0 0 0 2px #6c5fc740,0 2px #250b3614;color:#fff;font-size:calc(var(--bubble-size) * .52);line-height:1;overflow:hidden;transition:box-shadow .15s ease}.avatar-bubble img{width:100%;height:100%;object-fit:cover;border-radius:inherit}.avatar-bubble.sm{--bubble-size: 30px}.avatar-bubble.lg{--bubble-size: 96px}button:hover>.avatar-bubble,.avatar-bubble.hoverable:hover{box-shadow:0 0 0 3px #6c5fc759,0 2px #250b3614}.table-wrap{border:1px solid var(--sn-gray200);border-radius:var(--sn-radius);overflow:hidden;overflow-x:auto;background:var(--sn-surface)}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table thead{background:var(--sn-table-header-bg)}.data-table th{text-align:left;padding:9px 14px;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--sn-gray300);font-weight:600;white-space:nowrap;border-bottom:1px solid var(--sn-gray200)}.data-table td{padding:10px 14px;border-top:1px solid var(--sn-gray100)}.data-table tbody tr:hover{background:var(--sn-bg)}.empty-row{text-align:center;color:var(--sn-gray300);padding:32px!important}.size-picker{display:inline-flex;gap:2px;flex-wrap:wrap;background:var(--sn-surface);border:1px solid var(--sn-gray200);border-radius:var(--sn-radius);padding:3px}.size-picker button{padding:3px 9px;border:none;border-radius:4px;background:none;font-size:12px;font-weight:500;color:var(--sn-gray300);cursor:pointer;transition:background .12s ease,color .12s ease}.size-picker button:hover{color:var(--sn-gray500)}.size-picker button.on{background:var(--sn-purple);color:#fff}.state-msg{padding:20px;text-align:center;border-radius:var(--sn-radius);font-size:13px}.state-loading{background:#eceaf9;color:var(--sn-purple-dark)}.state-error{background:#fde6e7;color:var(--sn-red-dark)}.spinner{width:16px;height:16px;border:2px solid rgba(43,34,51,.15);border-top-color:currentColor;border-radius:50%;animation:spin .7s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.modal-overlay{position:fixed;inset:0;z-index:60;background:var(--sn-overlay);display:flex;align-items:center;justify-content:center;padding:20px;animation:fade-in .15s ease}.modal{background:var(--sn-surface);border:1px solid var(--sn-gray200);border-radius:var(--sn-radius);box-shadow:0 24px 48px #250b362e;width:100%;animation:pop-in .18s cubic-bezier(.2,.9,.3,1);max-height:90vh;display:flex;flex-direction:column}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--sn-gray200);color:var(--sn-gray500)}.modal-body{padding:20px;overflow-y:auto}.modal-foot{padding:14px 20px;border-top:1px solid var(--sn-gray100);display:flex;justify-content:flex-end;gap:10px}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes pop-in{0%{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}app-root{display:block;height:100%}
