:root{--bg: #f5f4fb;--surface: #ffffff;--surface-2: #f8f7fd;--border: #e4e2ef;--border-strong: #cfcbe2;--text: #1d1b2e;--muted: #6b6884;--accent: #6d4aff;--accent-600: #5a37f0;--accent-soft: #efeaff;--danger: #d93a3a;--danger-soft: #fdeeee;--warn: #9a6a00;--warn-soft: #fff6dc;--ok: #19875a;--ok-soft: #e6f6ee;--info-soft: #eaf2ff;--radius: 10px;--radius-sm: 6px;--shadow: 0 1px 2px rgba(29, 27, 46, .05), 0 2px 8px rgba(29, 27, 46, .04);--mono: ui-monospace, "Cascadia Code", "JetBrains Mono", Consolas, monospace;font-family:Inter,Segoe UI,system-ui,-apple-system,Roboto,sans-serif;font-size:14px;line-height:1.5;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;min-height:100vh}h1,h2,h3,h4{margin:0;line-height:1.25}h1{font-size:22px;font-weight:650}h4{font-size:13px;font-weight:600;margin:12px 0 6px}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code{font-family:var(--mono);font-size:12.5px}.muted{color:var(--muted)}.nowrap{white-space:nowrap}.center{text-align:center}.right{text-align:right}.spacer{flex:1}.hint{color:var(--muted);font-size:12.5px;margin-top:10px}.app-header{position:sticky;top:0;z-index:20;background:var(--surface);border-bottom:1px solid var(--border)}.header-inner{max-width:1280px;margin:0 auto;padding:0 24px;height:58px;display:flex;align-items:center;gap:28px}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;color:var(--text)}.brand:hover{text-decoration:none}.nav{display:flex;gap:4px}.nav-link{padding:7px 12px;border-radius:var(--radius-sm);color:var(--muted);font-weight:500}.nav-link:hover{background:var(--surface-2);color:var(--text);text-decoration:none}.nav-link.router-link-active,.nav-link.is-active{background:var(--accent-soft);color:var(--accent-600)}.user{margin-left:auto;display:flex;align-items:center;gap:10px}.user-text{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2}.user-org,.user-email{font-weight:600;font-size:13px}.user-name,.user-ids{color:var(--muted);font-size:12px;max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar{width:32px;height:32px;border-radius:50%;background:var(--accent-soft);color:var(--accent-600);display:grid;place-items:center;font-weight:700;font-size:12px}.main{max-width:1280px;margin:0 auto;padding:28px 24px 64px}.main-public{min-height:100vh}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.page-head p{margin:4px 0 0}.back{display:inline-block;margin-bottom:10px;color:var(--muted);font-size:13px}.title-code{font-size:13px;font-weight:500;color:var(--muted);background:var(--surface-2);border:1px solid var(--border);border-radius:4px;padding:2px 6px;margin-left:8px;vertical-align:middle}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;margin-bottom:16px}.card-flush{padding:0;overflow:hidden}.card-title{font-size:16px;font-weight:650;margin-bottom:12px}.card-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--surface-2)}.card-footer{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 16px;border-top:1px solid var(--border);background:var(--surface-2)}.empty{padding:48px 20px;text-align:center;color:var(--muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:36px;padding:0 14px;border-radius:var(--radius-sm);border:1px solid transparent;font:inherit;font-weight:550;cursor:pointer;white-space:nowrap;text-decoration:none;transition:background .12s,border-color .12s,color .12s}.btn:hover{text-decoration:none}.btn:disabled,.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-sm{height:30px;padding:0 10px;font-size:13px}.btn-lg{height:44px;font-size:15px}.btn-block{width:100%}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-600)}.btn-secondary{background:var(--surface);border-color:var(--border-strong);color:var(--text)}.btn-secondary:hover{border-color:var(--accent);color:var(--accent-600)}.btn-ghost{background:transparent;color:var(--text)}.btn-ghost:hover{background:var(--accent-soft);color:var(--accent-600)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{background:#bf2f2f}.btn-danger-outline{background:var(--surface);border-color:#f0b8b8;color:var(--danger)}.btn-danger-outline:hover{background:var(--danger-soft)}.btn-group{display:flex;gap:2px;flex-wrap:wrap}.link-btn{background:none;border:0;padding:0;font:inherit;color:inherit;cursor:pointer;text-align:left}.link-btn:hover{color:var(--accent-600);text-decoration:underline}.input{height:36px;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);font:inherit;color:var(--text);width:100%}.input:focus,.editor-input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.input-auto{width:auto}.input-search{max-width:320px}.field-label{display:block;font-size:13px;font-weight:550;margin:14px 0 6px}.check{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.check:disabled{cursor:not-allowed;opacity:.35}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.segmented{display:inline-flex;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:2px}.segmented button{border:0;background:none;font:inherit;font-size:13px;padding:5px 12px;border-radius:4px;cursor:pointer;color:var(--muted)}.segmented button.active{background:var(--accent-soft);color:var(--accent-600);font-weight:600}.switch{position:relative;display:inline-flex;cursor:pointer;vertical-align:middle}.switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:inherit}.switch-track{width:36px;height:20px;border-radius:999px;background:#d6d3e4;position:relative;transition:background .15s}.switch-thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003;transition:transform .15s}.switch input:checked+.switch-track{background:var(--accent)}.switch input:checked+.switch-track .switch-thumb{transform:translate(16px)}.switch input:focus-visible+.switch-track{outline:2px solid var(--accent);outline-offset:2px}.switch.is-disabled{cursor:not-allowed;opacity:.4}.table-wrap{overflow-x:auto}.table-scroll{max-height:62vh;overflow-y:auto}.table{width:100%;border-collapse:collapse}.table th{position:sticky;top:0;z-index:1;background:var(--surface-2);text-align:left;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);padding:10px 14px;border-bottom:1px solid var(--border)}.table th.center{text-align:center}.table td{padding:10px 14px;border-bottom:1px solid var(--border);vertical-align:middle}.table tbody tr:last-child td{border-bottom:0}.table tbody tr:hover td{background:#fbfaff}.row-muted td,.row-muted .module-name{color:var(--muted)}.row-selected td{background:#fcfbff}.row-error td{background:var(--danger-soft)!important}.row-click{cursor:pointer}.row-open td{background:var(--surface-2)}.row-detail td{background:var(--surface-2);padding-top:0}.module-name{font-weight:600;color:var(--text)}.sub{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:12px;margin-top:2px}code.sub{display:block}.field-label-cell{font-weight:550}.type{font-family:var(--mono);font-size:12px}.caret{width:24px;color:var(--muted)}.ellipsis{max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;padding:4px 0 8px}.badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap}.badge-soft{background:var(--accent-soft);color:var(--accent-600)}.badge-red{background:var(--danger-soft);color:var(--danger)}.badge-gray{background:#efeef4;color:var(--muted)}.badges{display:flex;gap:4px;flex-wrap:wrap}.status-ok{background:var(--ok-soft);color:var(--ok)}.status-error{background:var(--danger-soft);color:var(--danger)}.status-denied{background:var(--warn-soft);color:var(--warn)}.status-invalid{background:var(--info-soft);color:var(--muted)}.chips{display:flex;gap:4px;flex-wrap:wrap;max-width:340px}.chip{display:inline-block;padding:1px 7px;border-radius:4px;background:#f0eff6;border:1px solid var(--border);font-size:12px;white-space:nowrap;margin-right:2px}.chip-more{background:var(--accent-soft);color:var(--accent-600);border-color:transparent}.dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);margin-left:4px;vertical-align:middle}.counter{font-size:13px;color:var(--muted);padding:4px 10px;border-radius:999px;background:var(--surface);border:1px solid var(--border)}.counter strong{color:var(--text)}.counter-full{border-color:#f0d48a;background:var(--warn-soft)}.counter-error{border-color:#f0b8b8;background:var(--danger-soft);color:var(--danger);animation:shake .3s}@keyframes shake{25%{transform:translate(-3px)}75%{transform:translate(3px)}}.alert{padding:12px 14px;border-radius:var(--radius-sm);font-size:13.5px;margin:12px 0;border:1px solid transparent}.alert-error{background:var(--danger-soft);border-color:#f4c7c7;color:#8f2020}.alert-info{background:var(--info-soft);border-color:#cfe0fb;color:#1f4d8f}.alert-warn{background:var(--warn-soft);border-color:#f2dea0;color:#6b4a00}.alert.inset{margin:12px 16px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin:8px 0 16px}.tabs button{border:0;background:none;font:inherit;font-weight:550;color:var(--muted);padding:10px 14px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.tabs button:hover{color:var(--text)}.tabs button.active{color:var(--accent-600);border-bottom-color:var(--accent)}.tabs-inline{margin-top:14px;flex-wrap:wrap}.perm-card{display:flex;align-items:center;gap:22px;flex-wrap:wrap;padding:14px 20px}.perm-item{display:flex;align-items:center;gap:8px}.perm-sep{width:1px;height:24px;background:var(--border)}.editor{display:grid;min-height:480px}.editor-mode-split{grid-template-columns:1fr 1fr}.editor-mode-edit,.editor-mode-preview{grid-template-columns:1fr}.editor-mode-edit .editor-input{border-right:0}.editor-input{width:100%;min-height:480px;resize:vertical;border:0;border-right:1px solid var(--border);padding:16px;font-family:var(--mono);font-size:13px;line-height:1.6;color:var(--text);background:var(--surface)}.editor>.editor-preview{padding:16px 22px;overflow:auto;max-height:70vh}.markdown h1{font-size:20px;margin:4px 0 12px}.markdown h2{font-size:17px;margin:18px 0 8px}.markdown h3{font-size:15px;margin:14px 0 6px}.markdown p,.markdown ul,.markdown ol{margin:8px 0}.markdown code{background:#f0eff6;padding:1px 5px;border-radius:4px}.markdown pre{background:#1e1b2e;color:#ece9ff;padding:12px;border-radius:var(--radius-sm);overflow:auto}.markdown pre code{background:none;padding:0}.markdown table{border-collapse:collapse}.markdown th,.markdown td{border:1px solid var(--border);padding:4px 8px}.markdown blockquote{margin:8px 0;padding-left:12px;border-left:3px solid var(--border-strong);color:var(--muted)}.url-row{display:flex;align-items:center;gap:8px}.url{flex:1;min-width:0;overflow-x:auto;white-space:nowrap;padding:8px 10px;border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border)}.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:14px 0}.kv dt{color:var(--muted)}.kv dd{margin:0;overflow-wrap:anywhere}.token-once{border:1px solid #c9b9ff;background:linear-gradient(180deg,#f6f2ff,#fff)}.token-once-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.token-once-head p{margin:0 0 12px}.token-value{font-size:13.5px;background:#fff;border-color:#c9b9ff;white-space:normal;overflow-wrap:anywhere}.connect-body{display:grid;grid-template-columns:minmax(260px,.9fr) 1.1fr;gap:24px;margin-top:8px}.connect-help h3{font-size:15px;margin-bottom:8px}.steps{padding-left:18px;margin:8px 0}.steps li{margin:4px 0}.file-hint{margin:10px 0}.code-block{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:#faf9fe;align-self:start}.code-head{display:flex;justify-content:space-between;align-items:center;padding:6px 8px 6px 14px;border-bottom:1px solid var(--border)}.code-lang{font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.code{margin:0;padding:14px;overflow:auto;font-family:var(--mono);font-size:12.5px;line-height:1.6;white-space:pre;max-height:460px}.code-sm{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);max-height:320px;white-space:pre-wrap;word-break:break-word}.ph{background:#ffe9a8;color:#6b4a00;border-radius:3px;padding:0 2px}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(1200px 600px at 10% -10%,#e5dcff,transparent),radial-gradient(900px 500px at 110% 110%,#dfe9ff,transparent),var(--bg)}.login-card{width:100%;max-width:440px;padding:32px}.login-brand{display:flex;align-items:center;gap:14px;margin-bottom:18px}.login-brand p{margin:2px 0 0}.login-lead{margin:0 0 6px}.login-card .btn-block{margin-top:18px}.login-points{margin:20px 0 0;padding-left:18px;color:var(--muted);font-size:13px}.login-points li{margin:4px 0}.dialog{border:0;border-radius:var(--radius);padding:0;width:min(480px,calc(100vw - 32px));box-shadow:0 20px 60px #1d1b2e40}.dialog::backdrop{background:#1d1b2e73}.dialog-body{padding:22px}.dialog-title{font-size:17px;margin-bottom:10px}.dialog-content p{margin:8px 0}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}.toast-host{position:fixed;right:20px;bottom:20px;z-index:100;display:flex;flex-direction:column;gap:8px;max-width:420px}.toast{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:var(--radius-sm);background:var(--text);color:#fff;box-shadow:0 8px 24px #0000002e;font-size:13.5px}.toast-success{background:#155e43}.toast-error{background:brown}.toast-msg{flex:1}.toast-close{background:none;border:0;color:inherit;opacity:.7;cursor:pointer;font-size:18px;line-height:1;padding:0}.toast-close:hover{opacity:1}.toast-enter-from,.toast-leave-to{opacity:0;transform:translateY(8px)}.toast-enter-active,.toast-leave-active{transition:all .2s}@media(max-width:900px){.grid-2,.connect-body,.detail-grid,.editor-mode-split{grid-template-columns:1fr}.header-inner{gap:12px;padding:0 14px;height:auto;min-height:58px;flex-wrap:wrap}.user{width:100%;justify-content:flex-end;padding-bottom:8px}.main{padding:20px 14px 48px}}
