:root{--bg: #f5f6f8;--panel: #ffffff;--border: #e3e6eb;--text: #24292f;--muted: #8a919c;--primary: #1677ff;--danger: #f5222d;--danger-bg: #fff1f0;--danger-border: #ffa39e;--c-key: #c7254e;--c-str: #2e8b57;--c-num: #005cc5;--c-bool: #6f42c1;--c-null: #6f42c1;--c-punct: #6a737d;--mono: "JetBrains Mono", "Fira Code", "Cascadia Code", Consolas, "Courier New", monospace}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,Roboto,Helvetica,Arial,sans-serif;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}.app{display:flex;flex-direction:column;height:100%}.app-header{display:flex;align-items:baseline;gap:16px;padding:14px 24px;background:var(--panel);border-bottom:1px solid var(--border)}.app-brand{display:flex;align-items:center;gap:10px}.logo{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;font-family:var(--mono);font-weight:700;color:#fff;background:var(--primary);border-radius:8px;font-size:14px}.app-header h1{font-size:18px;font-weight:600;margin:0}.app-sub{margin:0;font-size:12px;color:var(--muted)}.toolbar{display:flex;align-items:center;gap:10px;padding:10px 24px;background:var(--panel);border-bottom:1px solid var(--border)}.btn{padding:6px 16px;font-size:13px;border:1px solid var(--border);background:#fff;color:var(--text);border-radius:6px;cursor:pointer;transition:all .15s ease}.btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-danger{color:var(--danger);border-color:var(--danger-border);background:#fff}.btn-danger:hover:not(:disabled){border-color:var(--danger);background:var(--danger-bg)}.split{flex:1;display:flex;gap:0;min-height:0}.pane{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--panel)}.pane-left{border-right:1px solid var(--border)}.pane-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--border)}.pane-title{font-weight:600;font-size:13px}.pane-meta{font-size:12px;color:var(--muted)}.editor{flex:1;display:flex;flex-direction:column;min-height:0}.editor-body{flex:1;position:relative;overflow:hidden;min-height:0;background:#fafbfc}.code-wrap{position:absolute;top:0;right:0;bottom:0;left:0}.layer{position:absolute;top:0;left:0;will-change:transform}.inner{display:flex;align-items:flex-start;min-width:max-content}.gutter{flex-shrink:0;padding:12px 10px 40px;text-align:right;background:#fafbfc;border-right:1px solid var(--border);color:var(--muted);-webkit-user-select:none;user-select:none;font-family:var(--mono);font-size:13px;line-height:22px}.gutter-line{height:22px}.gutter-line.err{color:var(--danger);font-weight:700}.highlight{margin:0;padding:12px 16px 40px;font-family:var(--mono);font-size:14px;line-height:22px;color:var(--text);white-space:pre;-moz-tab-size:2;tab-size:2;min-width:max-content}.input{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;font-family:var(--mono);font-size:14px;line-height:22px;white-space:pre;-moz-tab-size:2;tab-size:2;border:none;outline:none;resize:none;overflow:auto;background:transparent;color:transparent;caret-color:var(--text)}.code-line{display:block;white-space:pre;min-height:22px}.err-line{background:#f5222d24;box-shadow:inset 2px 0 0 var(--danger);border-radius:2px}.tok-key{color:var(--c-key);font-weight:600}.tok-str{color:var(--c-str)}.tok-num{color:var(--c-num)}.tok-bool{color:var(--c-bool)}.tok-punct{color:var(--c-punct)}.editor-error{display:flex;align-items:center;gap:8px;padding:10px 16px;background:var(--danger-bg);border-top:1px solid var(--danger-border);color:var(--danger);font-size:13px}.editor-error .dot{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex-shrink:0;border-radius:50%;background:var(--danger);color:#fff;font-size:12px;font-weight:700}.viewer{flex:1;display:flex;flex-direction:column;min-height:0}.viewer-toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--border)}.viewer-title{font-weight:600;font-size:13px}.viewer-actions{display:flex;gap:8px}.tb-btn{padding:4px 12px;font-size:12px;border:1px solid var(--border);background:#fff;color:var(--text);border-radius:6px;cursor:pointer}.tb-btn:hover{border-color:var(--primary);color:var(--primary)}.viewer-body{flex:1;overflow:auto;min-height:0;padding:12px 16px 40px;background:#fafbfc}.viewer-empty{padding:40px 20px;text-align:center;color:var(--muted);font-size:14px}.viewer-empty.warn{color:var(--danger)}.viewer-tree{font-family:var(--mono);font-size:14px;line-height:1.6}.jn-row{display:flex;align-items:flex-start;flex-wrap:wrap;min-height:22px;padding:1px 0;border-radius:4px;cursor:default}.jn-row:hover{background:#1677ff0d}.jn-toggle{display:inline-flex;width:16px;flex-shrink:0;align-items:center;justify-content:center;color:var(--muted);font-size:10px;cursor:pointer;-webkit-user-select:none;user-select:none}.jn-toggle.is-root{cursor:default}.jn-key{color:var(--c-key);font-weight:600;cursor:pointer}.jn-punct{color:var(--c-punct)}.jn-bracket{color:var(--c-punct);cursor:pointer}.jn-preview{color:var(--muted);font-style:italic;margin:0 4px;font-size:13px}.jn-comma{color:var(--c-punct)}.jn-value.val-str{color:var(--c-str);white-space:pre-wrap;word-break:break-all}.jn-value.val-num{color:var(--c-num)}.jn-value.val-bool{color:var(--c-bool)}.jn-value.val-null{color:var(--c-null)}.app-footer{display:flex;align-items:center;justify-content:space-between;padding:8px 24px;background:var(--panel);border-top:1px solid var(--border);font-size:12px;color:var(--muted)}.status{display:inline-flex;align-items:center;gap:6px;color:#389e0d}.status .status-dot{width:8px;height:8px;border-radius:50%;background:currentColor}.status.bad{color:var(--danger)}.toast{position:fixed;top:70px;left:50%;transform:translate(-50%);padding:8px 18px;background:#000000c7;color:#fff;font-size:13px;border-radius:6px;z-index:99}.fade-enter-active,.fade-leave-active{transition:opacity .2s ease}.fade-enter-from,.fade-leave-to{opacity:0}
