agent-dag 1.48.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/bin/deck.js +266 -61
- package/dist/web/assets/index-BYupRwZc.js +139 -0
- package/dist/web/assets/index-Bnn7d7u8.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -4
- package/release-notes.json +40 -0
- package/src/server/boot-deadline.mjs +127 -0
- package/src/server/codex-usage.mjs +79 -1
- package/src/server/cswap-admin.mjs +66 -5
- package/src/server/cswap-install.mjs +61 -8
- package/src/server/index.mjs +122 -25
- package/src/server/log-tail.mjs +139 -0
- package/src/server/macmon.mjs +299 -0
- package/src/server/open-url.mjs +226 -0
- package/src/server/quota.mjs +48 -2
- package/src/server/system-metrics.mjs +896 -32
- package/src/server/term.mjs +79 -3
- package/dist/web/assets/index-DT1bdZn0.css +0 -1
- package/dist/web/assets/index-PPcCF-io.js +0 -111
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.react-flow{direction:ltr}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;-webkit-animation:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:#ffffff80;padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}:root,:root[data-theme=dark]{--bg: #0b0c10;--bg-soft: #0f1116;--panel: #14161b;--line: #1f2229;--line-soft: #1a1c22;--text: #d8dae0;--text-secondary: #9aa0ab;--ctl-fill: color-mix(in srgb, var(--text) 7%, transparent);--ctl-edge: color-mix(in srgb, var(--text) 50%, transparent);--muted: #7e828c;--muted-dim: #50535b;--text-dim: #7e828c;--accent: #7dd3fc;--accent-dim: #38bdf850;--ok: #86efac;--warn: #fcd34d;--err: #fca5a5;--inflight: #f0abfc;--shadow-1: 0 6px 18px rgba(0,0,0,.25);--shadow-2: 0 10px 24px rgba(0,0,0,.32);--node-grad: linear-gradient(180deg, var(--panel), var(--bg-soft));--topbar-grad: linear-gradient(to bottom, var(--panel), var(--bg-soft));--bg-grid-1: rgba(125,211,252,.06);--bg-grid-2: rgba(240,171,252,.05);--grid-line: #1a1d24;--minimap-mask: rgba(11,12,16,.85);--session-label-l: 78%;--session-accent-l: 60%;--session-rim-l: 55%;--session-edge-l: 72%;--session-edge-idle-l: 55%;--mcp-dot-l: 65%;--usage-purple: #c4b5fd;--usage-blue: #7dd3fc;--usage-green: #86efac;--usage-amber: #fcd34d;--usage-red: #fca5a5;--usage-indigo: #a5b4fc;--usage-orange: #fdba74;--usage-zinc: #94a3b8;color-scheme:dark}:root[data-theme=light]{--bg: #eef1f6;--bg-soft: #ffffff;--panel: #ffffff;--line: #c8cdd6;--line-soft: #dde1e8;--text: #0d1117;--text-secondary: #303845;--muted: #4a5260;--muted-dim: #7c8493;--text-dim: #5f6673;--ctl-fill: color-mix(in srgb, var(--text) 7%, transparent);--ctl-edge: color-mix(in srgb, var(--text) 50%, transparent);--accent: #0369a1;--accent-dim: rgba(3,105,161,.22);--ok: #157a3a;--warn: #ad4e08;--err: #b91c1c;--inflight: #7e22ce;--shadow-1: 0 4px 14px rgba(15,23,42,.1);--shadow-2: 0 10px 28px rgba(15,23,42,.16);--node-grad: linear-gradient(180deg, #ffffff, #f2f5fa);--topbar-grad: linear-gradient(to bottom, #ffffff, #eef1f6);--bg-grid-1: rgba(3,105,161,.1);--bg-grid-2: rgba(126,34,206,.08);--grid-line: #d0d5dd;--minimap-mask: rgba(238,241,246,.85);--session-label-l: 26%;--session-accent-l: 26%;--session-rim-l: 38%;--session-edge-l: 30%;--session-edge-idle-l: 36%;--mcp-dot-l: 32%;--usage-purple: #7e22ce;--usage-blue: #0369a1;--usage-green: #157a3a;--usage-amber: #7a5c00;--usage-red: #be123c;--usage-indigo: #3730a3;--usage-orange: #b0490c;--usage-zinc: #4a5260;color-scheme:light}:root{--panel-inset: 14px;--ctl-h: 30px}:root{--dim-off: .6;--dim-stale: .45}:root{--edge-transition: opacity .5s ease, stroke-width .2s ease;--ctx-arc-transition: stroke-dasharray .4s ease}@media(prefers-reduced-motion:reduce){:root{--edge-transition: opacity .5s ease;--ctx-arc-transition: none}}:root{--pulse-live: 1.2s ease-in-out}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;background:var(--bg);color:var(--text);font:13px/1.45 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;overscroll-behavior:none}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:var(--line);border:2px solid var(--bg);border-radius:999px}*::-webkit-scrollbar-thumb:hover{background:var(--muted-dim)}*{scrollbar-color:var(--line) transparent;scrollbar-width:thin}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}button:focus-visible{outline-offset:1px}.app{display:grid;grid-template-columns:1fr 360px;grid-template-rows:52px auto 1fr;height:100vh}.app:has(.session-list){grid-template-columns:240px 1fr 360px}.app:has(.accounts-panel){grid-template-columns:288px 1fr 360px}.app:has(.session-list) .canvas-wrap,.app:has(.accounts-panel) .canvas-wrap{grid-column:2}.app:has(.session-list) .conn-banner,.app:has(.accounts-panel) .conn-banner,.app:has(.session-list) .ver-banner,.app:has(.accounts-panel) .ver-banner{grid-column:2}.canvas-wrap{grid-column:1;grid-row:3}.detail{grid-column:2;grid-row:2 / -1}.app:has(.session-list) .detail{grid-column:3}.vis-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip-link{position:fixed;top:8px;left:8px;z-index:100;padding:8px 14px;border-radius:8px;background:var(--panel);border:1px solid var(--accent);color:var(--text);font-size:12px;font-weight:600;text-decoration:none;transform:translateY(calc(-100% - 16px))}.skip-link:focus{transform:none}.canvas-wrap:focus-visible{outline-offset:-3px}.topbar{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:0 18px;background:var(--topbar-grad);border-bottom:1px solid var(--line);-webkit-user-select:none;user-select:none}.topbar .readout{display:flex;align-items:center;gap:24px}.topbar .brand{font-weight:600;letter-spacing:.02em;color:var(--text);display:flex;align-items:center;gap:10px;font-size:14px;white-space:nowrap;flex:none}.topbar .brand h1{font:inherit;margin:0}.topbar .brand .logo{width:14px;height:14px;border-radius:4px;background:conic-gradient(from 220deg,#7dd3fc,#f0abfc,#86efac,#7dd3fc);box-shadow:0 0 12px #7dd3fc73}.topbar .brand .v{color:var(--muted);font-weight:400;font-size:11px;margin-left:2px}.topbar .brand button.v{display:inline-flex;align-items:center;flex:none;gap:5px;min-height:24px;padding:2px 7px;border:1px solid transparent;border-radius:999px;background:none;font:inherit;font-size:11px;font-weight:500;cursor:pointer;transition:background .13s,border-color .13s,color .13s,transform .14s cubic-bezier(.23,1,.32,1)}.topbar .brand button.v:active{transform:scale(.97)}.topbar .brand button.v:not(.stale){color:var(--muted);font-weight:400;border-color:var(--ctl-edge)}.topbar .brand button.v:not(.stale):hover{color:var(--text);border-color:var(--text);background:var(--ctl-fill)}.topbar .brand button.v.checking{cursor:progress;opacity:var(--dim-off)}.topbar .brand button.v.stale{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 85%,transparent);background:color-mix(in srgb,var(--warn) 10%,transparent)}.topbar .brand button.v.stale:hover{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 18%,transparent)}.topbar .brand button.v .v-dot{width:5px;height:5px;border-radius:50%;background:var(--warn);box-shadow:0 0 7px var(--warn);animation:pulse 2.4s infinite}.topbar .actions{display:flex;gap:18px;align-items:center;flex:none}.topbar .action-run{display:flex;align-items:center;gap:8px}.sound-slot{position:relative;display:flex}.sound-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:40;width:268px;padding:12px;display:flex;flex-direction:column;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-2);animation:popIn .14s cubic-bezier(.22,1,.36,1);text-align:left}button.btn.sm-switch{justify-content:space-between;gap:12px}.sm-switch-label{font-weight:600}.sm-switch-state{color:var(--muted);font-variant-numeric:tabular-nums}.sm-switch[aria-pressed=true] .sm-switch-state{color:var(--accent)}.sm-tone{display:flex;flex-direction:column;gap:8px}.sm-tone-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.sm-tone-name{margin:0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}button.btn.sm-hear{padding:0 8px;gap:5px;font-size:11px}.sm-row{display:flex;align-items:center;gap:10px}.sm-row label{font-size:12px;color:var(--muted);min-width:48px}.sm-row input[type=range]{flex:1;min-width:0;margin:0;height:20px;accent-color:var(--accent)}.sm-read{min-width:34px;text-align:right;font-variant-numeric:tabular-nums;font-size:11px;color:var(--text)}.sm-select{flex:1;min-width:0;min-height:24px;padding:0 6px;background:var(--bg);color:var(--text);border:1px solid var(--ctl-edge);border-radius:6px;font:inherit;font-size:12px;accent-color:var(--accent)}.sm-select:hover{border-color:var(--accent)}.sm-note{margin:0;font-size:11px;line-height:1.45;color:var(--text-dim)}.sm-foot{margin:0;padding-top:10px;border-top:1px solid var(--line);font-size:11px;color:var(--text-dim)}.selected-ribbon{display:inline-flex;align-items:center;gap:8px;padding:4px 6px 4px 10px;background:var(--bg-soft);border:1px solid var(--ctl-edge);border-radius:999px;color:var(--text);font:inherit;font-size:12px;cursor:pointer;max-width:min(380px,26vw);min-width:0;transition:border-color .12s,background .12s,transform .14s cubic-bezier(.23,1,.32,1)}.selected-ribbon:hover{border-color:var(--accent);background:var(--bg)}.selected-ribbon:active:not(:has(.selected-close:active)){transform:scale(.97)}.selected-ribbon:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.selected-ribbon .selected-label{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:0 1 auto}.selected-ribbon .selected-cost{color:var(--ok);font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;white-space:nowrap}.selected-ribbon .selected-rate{color:var(--muted);font-size:10px;white-space:nowrap}.selected-ribbon .selected-extra{display:inline-flex;align-items:center;padding:1px 6px;border-radius:999px;background:var(--accent-dim);color:var(--text);font-size:10px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.selected-ribbon .selected-close{position:relative;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex:none;border-radius:999px;color:var(--muted);font-size:14px;line-height:1;cursor:pointer;transition:background .12s,color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.selected-ribbon .selected-close:after{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:inherit}.selected-ribbon .selected-close:hover{background:var(--line);color:var(--text)}.selected-ribbon .selected-close:active{transform:scale(.94)}.topbar .status{color:var(--muted);font-size:12px;display:inline-flex;align-items:center;gap:14px}.topbar .status .stat{display:inline-flex;align-items:baseline;gap:4px;font-variant-numeric:tabular-nums}.topbar .status .stat .lbl{color:var(--muted)}.topbar .status .stat+.stat:before{content:"";display:inline-block;width:1px;height:12px;background:var(--line);margin-right:10px;position:relative;top:1px}.topbar .status .sysmeter-wrap{position:relative;display:inline-flex;align-items:center}.topbar .status .sysmeter{display:inline-flex;align-items:center;background:none;border:0;color:inherit;font:inherit;cursor:pointer;padding:5px 7px;margin:-5px -7px;border-radius:6px;transition:background .12s,box-shadow .12s,transform .14s cubic-bezier(.23,1,.32,1)}.topbar .status .sysmeter:hover{background:var(--line)}.topbar .status .sysmeter[aria-expanded=true]{box-shadow:inset 0 0 0 1px var(--accent)}.topbar .status .sysmeter-wrap+.stat:before,.topbar .status .sysmeter+.stat:before{content:"";display:inline-block;width:1px;height:12px;background:var(--line);margin-right:10px;position:relative;top:1px}.sysmeter .sm-box{position:relative;width:36px;height:14px}.sysmeter.idle .sm-box{cursor:default}.sysmeter .sm-graphic,.sysmeter .sm-read{position:absolute;top:0;right:0;bottom:0;left:0;transition:opacity .14s ease}.sysmeter .sm-graphic{display:flex;flex-direction:column;justify-content:space-between}.sysmeter .sm-spark{display:block}.sysmeter .sm-ram{display:block;height:3px;border-radius:999px;background:var(--line);overflow:hidden}.sysmeter .sm-ram-fill{display:block;width:100%;height:100%;border-radius:999px;background:var(--accent);transform-origin:left center;transition:transform .42s cubic-bezier(.22,1,.36,1),background .2s ease}.sysmeter .sm-ram-fill.warn{background:var(--warn)}.sysmeter .sm-read{opacity:0;display:flex;align-items:center;justify-content:center;gap:1px;font-size:10px;line-height:1;font-variant-numeric:tabular-nums;color:var(--text);letter-spacing:-.02em}.sysmeter .sm-read b{font-weight:600}.sysmeter .sm-read i{font-style:normal;color:var(--muted);opacity:.7}.sysmeter:hover .sm-graphic{opacity:0}.sysmeter:hover .sm-read{opacity:1}.sysmeter.idle .sm-graphic,.sysmeter.idle:hover .sm-graphic{opacity:.45}.sysmeter .sm-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.sysmeter .sm-graphic,.sysmeter .sm-read,.sysmeter .sm-ram-fill{transition:none}}.sysdetail{position:fixed;top:60px;right:var(--rail-r);z-index:20;width:280px;max-height:calc(100vh - 76px);overflow-y:auto;--pad-x: 14px;padding:12px var(--pad-x) 14px;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-2);font-size:11px;color:var(--text);text-align:left;cursor:default;animation:sdIn .16s cubic-bezier(.22,1,.36,1)}.app{--rail-r: 368px}.app:not(:has(.detail)){--rail-r: 8px}.sysdetail.shifted{right:calc(var(--rail-r) + 280px + 20px)}@keyframes sdIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.sd-head{display:flex;align-items:baseline;gap:8px;margin-bottom:12px}.sd-title{font-size:12px;font-weight:600}.sd-sub{color:var(--muted);font-variant-numeric:tabular-nums}.sd-close{margin-left:auto}.topbar .status .sysmeter:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.topbar .status .sysmeter:active{transform:none}}.sd-section+.sd-section{margin-top:13px}.sd-h{margin:0 0 6px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.sd-cores{display:grid;grid-template-columns:repeat(var(--n),1fr);gap:2px;height:26px}.sd-core{display:flex;align-items:flex-end;background:var(--line);border-radius:2px;overflow:hidden}.sysdetail .sd-core-fill{width:100%;height:100%;background:var(--accent);border-radius:2px;transform-origin:bottom;transition:transform .32s cubic-bezier(.22,1,.36,1)}.sd-row+.sd-row{margin-top:9px}.sysdetail .sd-open{display:block;width:calc(100% + var(--pad-x) * 2);padding:4px var(--pad-x);margin:-4px calc(var(--pad-x) * -1);border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer;transition:background .14s ease,transform .14s ease}.sysdetail .sd-open:hover{background:color-mix(in srgb,var(--text) 6%,transparent)}.sysdetail .sd-open:active{transform:scale(.97)}.sd-row-more{font-style:normal;font-size:11px;color:var(--text-dim);transition:color .14s ease}.sysdetail .sd-open:hover .sd-row-more{color:var(--text)}.sd-row-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:4px}.sd-row-label{color:var(--muted)}.sd-row-val{font-variant-numeric:tabular-nums;color:var(--muted)}.sd-row-val b{color:var(--text);font-weight:600}.sd-track{display:block;height:4px;border-radius:999px;background:var(--line);overflow:hidden}.sysdetail .sd-fill{display:block;width:100%;height:100%;border-radius:999px;background:var(--accent);transform-origin:left center;transition:transform .42s cubic-bezier(.22,1,.36,1),background .2s ease}.sd-fill.warn{background:var(--warn)}.sd-fill.hot{background:var(--err)}.sd-load{display:flex;gap:14px}.sd-load-item{display:flex;flex-direction:column;gap:1px;font-variant-numeric:tabular-nums}.sd-load-item b{font-size:13px;font-weight:600}.sd-load-item span{color:var(--muted);font-size:10px}.sd-load-item.over b{color:var(--warn)}.sd-note{margin-top:5px;color:var(--muted);font-size:10px}:is(.sysdetail,.pl-body) .sd-procs{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.sd-hrow{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.sd-all{position:relative;padding:0 0 6px;border:0;background:none;font:inherit;font-size:10px;color:var(--text-dim);cursor:pointer;transition:color .14s ease,transform .14s ease}.sd-all:after{content:"";position:absolute;top:50%;left:50%;width:100%;min-width:24px;height:24px;margin:-12px 0 0 -50%}.sd-all:hover{color:var(--text)}.sd-all:active{transform:scale(.97)}:is(.sysdetail,.pl-body) .sd-procs th{padding:0 0 3px}:is(.sysdetail,.pl-body) .sd-procs th:first-child,:is(.sysdetail,.pl-body) .sd-procs th:nth-child(2){width:40px}:is(.sysdetail,.pl-body) .sd-sort{display:flex;align-items:center;gap:3px;width:100%;min-height:24px;padding:0;border:0;border-radius:4px;background:none;font:inherit;font-size:10px;font-weight:500;line-height:1;color:var(--muted);cursor:pointer;transition:color .14s ease,background .14s ease,transform .14s ease}:is(.sysdetail,.pl-body) .sd-procs th:first-child .sd-sort,:is(.sysdetail,.pl-body) .sd-procs th:nth-child(2) .sd-sort{flex-direction:row-reverse;justify-content:flex-start;padding-right:8px}:is(.sysdetail,.pl-body) .sd-sort:hover{background:var(--line);color:var(--text)}:is(.sysdetail,.pl-body) .sd-sort:active{transform:scale(.97)}:is(.sysdetail,.pl-body) .sd-procs th:not([aria-sort=none]) .sd-sort{color:var(--text)}.sd-sort-dir{display:inline-block;width:8px;text-align:center}:is(.sysdetail,.pl-body) .sd-procs td{padding:2px 0}.sd-num{text-align:right;padding-right:8px!important;font-weight:600}.sd-dim{color:var(--muted);font-weight:400}:is(.sysdetail,.pl-body) .sd-proc-name{padding-left:2px;max-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}@media(prefers-reduced-motion:reduce){.sysdetail{animation:none}.sysdetail .sd-core-fill,.sysdetail .sd-fill{transition:none}:is(.sysdetail,.pl-body) .sd-sort:active{transform:none}.sd-all:active,.sysdetail .sd-open:active{transform:none}}.topbar .status .pill{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border-radius:999px;background:var(--bg-soft);border:1px solid var(--line);font-size:11px;font-weight:600;transition:color .2s ease,background-color .2s ease,border-color .2s ease}.topbar .status .pill:before{transition:background-color .2s ease,box-shadow .2s ease}.topbar .status .pill .pill-box{display:inline-grid;grid-template-areas:"pill-label";align-items:center;justify-items:start;font-variant-numeric:tabular-nums}.topbar .status .pill .pill-widest,.topbar .status .pill .pill-label{grid-area:pill-label;white-space:nowrap}.topbar .status .pill .pill-widest{visibility:hidden}.topbar .status .pill.live{color:var(--ok);border-color:#86efac59;background:#86efac0f}.topbar .status .pill.live:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 8px var(--ok);animation:pulse 1.6s ease-in-out infinite}.topbar .status .pill.paused{color:var(--warn);border-color:#fcd34d59;background:#fcd34d0f}.topbar .status .pill.paused:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--warn);box-shadow:0 0 8px var(--warn)}.topbar .status .pill.dead{color:var(--err);border-color:#fca5a559;background:#fca5a50f}.topbar .status .pill.dead:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--err);box-shadow:0 0 8px var(--err)}.topbar .status .count{color:var(--text);font-variant-numeric:tabular-nums}.topbar .waiting-stat{display:inline-flex;align-items:center;gap:6px;min-height:24px;padding:3px 9px;border-radius:999px;background:transparent;border:1px solid color-mix(in srgb,var(--warn) 85%,transparent);color:var(--warn);font:inherit;font-size:11px;cursor:pointer;white-space:nowrap;transition:border-color .12s,background .12s,transform .14s cubic-bezier(.23,1,.32,1)}.topbar .waiting-stat b{font-weight:700;font-variant-numeric:tabular-nums}.topbar .waiting-stat:hover{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 12%,transparent)}.topbar .waiting-stat:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.topbar .waiting-stat:active{transform:none}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}button.btn{background:transparent;color:var(--text);border:1px solid var(--ctl-edge);min-height:var(--ctl-h);padding:0 12px;border-radius:6px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font:inherit;font-size:12px;transition:border-color .12s,color .12s,background .12s,transform .14s cubic-bezier(.23,1,.32,1)}button.btn:hover{border-color:var(--accent);color:var(--accent)}button.btn:active:not(:disabled){transform:scale(.97)}button.btn:disabled{opacity:var(--dim-off);cursor:default}button.btn.primary{background:var(--accent-dim);color:var(--text);border-color:var(--accent)}button.btn.danger{color:var(--err);border-color:color-mix(in srgb,var(--err) 65%,transparent)}button.btn.danger:hover{border-color:var(--err);color:var(--err);background:color-mix(in srgb,var(--err) 12%,transparent)}button.btn.icon-btn{width:var(--ctl-h);height:var(--ctl-h);padding:0;font-size:14px;line-height:1}button.btn.icon-btn[aria-pressed=true],button.btn.icon-btn[aria-expanded=true]{background:var(--accent);border-color:var(--accent);color:var(--bg)}button.btn.icon-btn[aria-pressed=true]:hover,button.btn.icon-btn[aria-expanded=true]:hover{box-shadow:0 0 0 2px var(--accent-dim)}.glyph-btn{display:inline-flex;align-items:center;justify-content:center;min-width:24px;min-height:24px;padding:4px;margin-top:-4px;margin-bottom:-4px;background:none;border:0;border-radius:50%;color:var(--muted);font:inherit;font-size:16px;line-height:1;cursor:pointer;transition:color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.glyph-btn:focus-visible{outline-offset:1px}.glyph-btn:hover{color:var(--text)}.glyph-btn:active:not(:disabled){transform:scale(.94)}:root[data-theme=light] .search-empty{background:#ffffffe0;box-shadow:0 6px 18px #0f172a1a}.conn-banner{grid-column:1;grid-row:2;display:flex;align-items:center;gap:10px;padding:8px 18px;background:linear-gradient(90deg,rgba(252,165,165,.12),transparent);border-bottom:1px solid rgba(252,165,165,.3);color:var(--err);font-size:12px;font-weight:500;animation:fadeIn .2s ease}.conn-banner .conn-dot{width:7px;height:7px;border-radius:50%;background:var(--err);box-shadow:0 0 8px var(--err);animation:pulse 1.2s infinite}.conn-banner .conn-sub{color:var(--text);font-weight:400}.ver-banner{grid-column:1;grid-row:2;display:flex;align-items:center;gap:10px;padding:8px 18px;background:linear-gradient(90deg,color-mix(in srgb,var(--warn) 13%,transparent),transparent);border-bottom:1px solid color-mix(in srgb,var(--warn) 30%,transparent);color:var(--text);font-size:12px;font-weight:500;animation:fadeIn .2s ease}.ver-banner .ver-dot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--warn);box-shadow:0 0 8px var(--warn);animation:pulse 2.4s infinite}.ver-banner strong{font-weight:600}.ver-banner strong,.ver-banner .ver-sub{white-space:nowrap}.ver-banner .ver-sub{color:var(--muted);font-weight:400;min-width:0;overflow:hidden;text-overflow:ellipsis}.ver-banner .ver-cmd{display:inline-flex;align-items:center;gap:8px;padding:3px 5px 3px 9px;border:1px solid var(--ctl-edge);border-radius:999px;background:var(--ctl-fill);color:var(--text);cursor:pointer;transition:border-color .13s,background .13s,transform .14s cubic-bezier(.23,1,.32,1)}.ver-banner .ver-cmd:hover{border-color:var(--accent);background:var(--panel)}.ver-banner .ver-cmd:active{transform:scale(.97)}.ver-banner .ver-cmd code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;-webkit-user-select:text;user-select:text}.ver-banner .ver-cmd-hint{font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--text);background:var(--line);border-radius:999px;padding:2px 7px}.ver-banner.done{background:linear-gradient(90deg,color-mix(in srgb,var(--ok) 13%,transparent),transparent);border-bottom-color:color-mix(in srgb,var(--ok) 30%,transparent)}.ver-banner.done .ver-dot{background:var(--ok);box-shadow:0 0 8px var(--ok);animation:none}.ver-banner .ver-act{padding:3px 11px;border:1px solid color-mix(in srgb,var(--warn) 85%,transparent);border-radius:999px;background:color-mix(in srgb,var(--warn) 16%,transparent);color:var(--warn);font:inherit;font-size:11px;font-weight:600;cursor:pointer;transition:background .13s,border-color .13s,transform .14s cubic-bezier(.23,1,.32,1)}.ver-banner .ver-act:hover:not(:disabled){background:color-mix(in srgb,var(--warn) 26%,transparent);border-color:var(--warn)}.ver-banner .ver-act:active:not(:disabled){transform:scale(.97)}.ver-banner .ver-act:disabled{opacity:var(--dim-off);cursor:default}.ver-banner .ver-sub.fail{color:var(--err)}.ver-banner .ver-auto{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border:1px solid transparent;border-radius:999px;background:none;color:var(--muted);font:inherit;font-size:11px;cursor:pointer;transition:color .13s,border-color .13s,transform .14s cubic-bezier(.23,1,.32,1)}.ver-banner .ver-auto:hover{color:var(--text);border-color:var(--ctl-edge)}.ver-banner .ver-auto:active{transform:scale(.97)}.ver-banner .ver-auto i{width:6px;height:6px;border-radius:50%;background:var(--muted-dim);transition:background .13s,box-shadow .13s}.ver-banner .ver-auto.on{color:var(--warn)}.ver-banner .ver-auto.on i{background:var(--warn);box-shadow:0 0 6px var(--warn)}.ver-banner .ver-close{display:inline-flex;align-items:center;justify-content:center;margin-left:2px;flex:none;width:24px;height:24px;padding:0;border:0;border-radius:999px;background:none;color:var(--muted);font:inherit;font-size:14px;line-height:1;cursor:pointer;transition:background .12s,color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ver-banner .ver-close:hover{background:var(--line);color:var(--text)}.ver-banner .ver-close:active{transform:scale(.94)}.react-flow__node.rf-spotlit-out{opacity:.16;filter:saturate(.3) blur(.3px);transition:opacity .2s ease,filter .2s ease}.react-flow__node.rf-spotlit-out:hover{opacity:.55;filter:saturate(.7)}.react-flow__edge.rf-edge-selected .react-flow__edge-path{stroke-dasharray:6 3;animation:dashflow .8s linear infinite;filter:drop-shadow(0 0 4px var(--accent-dim))}.react-flow__node.rf-exiting{pointer-events:none}.react-flow__node.rf-exiting .agent-node{animation:nodeExit .6s cubic-bezier(.55,0,.55,1) forwards}@keyframes nodeExit{0%{opacity:1;filter:blur(0) saturate(1);transform:scale(1)}60%{opacity:.4;filter:blur(2px) saturate(.4)}to{opacity:0;filter:blur(6px) saturate(0);transform:scale(.85)}}.react-flow__edge.rf-edge-exiting .react-flow__edge-path{animation:edgeExit .6s ease forwards}@keyframes edgeExit{to{opacity:0;stroke-dashoffset:40}}.canvas-wrap{position:relative;background:radial-gradient(1200px 600px at 60% -10%,var(--bg-grid-1),transparent 60%),radial-gradient(1000px 500px at 10% 110%,var(--bg-grid-2),transparent 60%),var(--bg);overflow:hidden}.cat-filter-bar{position:absolute;top:14px;left:14px;z-index:6;display:flex;gap:4px;padding:4px;background:#14161bc7;border:1px solid var(--line);border-radius:999px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);box-shadow:0 6px 18px #0000004d}:root[data-theme=light] .cat-filter-bar{background:#ffffffc7;box-shadow:0 6px 18px #0f172a1a}.cat-filter{display:inline-flex;align-items:center;gap:5px;padding:4px 10px 4px 8px;border-radius:999px;border:1px solid transparent;background:transparent;color:var(--text);font:inherit;font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.02em;cursor:pointer;transition:background .12s,color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.cat-filter .cat-emoji{font-size:13px;line-height:1}.cat-filter .cat-name{text-transform:lowercase}.cat-filter:hover{background:var(--ctl-fill)}.cat-filter:active{transform:scale(.97)}.cat-filter:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.cat-filter.off{color:var(--muted)}.cat-filter.off .cat-emoji{filter:grayscale(.7)}.cat-filter.off:hover{color:var(--text)}.cat-filter.off .cat-name{text-decoration:line-through}.detail{position:relative;background:var(--panel);border-left:1px solid var(--line);padding:18px;overflow:auto;display:flex;flex-direction:column;gap:12px}.detail-close{position:absolute;top:10px;right:12px;z-index:2;margin-top:0;margin-bottom:0}.app:has(.detail-reopen){grid-template-columns:1fr}.app:has(.session-list):has(.detail-reopen){grid-template-columns:240px 1fr}.app:has(.accounts-panel):has(.detail-reopen){grid-template-columns:288px 1fr}.detail-reopen{position:fixed;top:64px;right:0;width:24px;height:44px;display:grid;place-items:center;font-size:16px;line-height:1;color:var(--muted);background:var(--panel);border:1px solid var(--ctl-edge);border-right:none;border-radius:8px 0 0 8px;cursor:pointer;z-index:10;box-shadow:-2px 2px 8px #0003;transition:color .12s ease,background .12s ease,transform .14s cubic-bezier(.23,1,.32,1)}.detail-reopen:hover{color:var(--text)}.detail-reopen:active{transform:scale(.94)}.detail>h2,.detail h3{margin:0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}.detail .empty{color:var(--muted);font-style:italic}.detail .hint{border:1px dashed var(--line);border-radius:8px;padding:12px;color:var(--muted);font-size:12px;line-height:1.55;background:var(--bg-soft)}.detail .hint code{background:var(--bg);border:1px solid var(--line);padding:1px 6px;border-radius:4px;font-size:11px;color:var(--text)}.detail .row{display:flex;justify-content:space-between;align-items:baseline;padding:5px 0;border-bottom:1px solid var(--line-soft);font-size:12px;gap:12px}.detail .row:last-child{border-bottom:none}.detail .row .k{color:var(--muted)}.detail .row .v{color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden;text-overflow:ellipsis;max-width:220px;white-space:nowrap}.detail .tool{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;padding:5px 0;color:var(--text);display:flex;justify-content:space-between;gap:8px;border-bottom:1px solid var(--line-soft)}.detail .tool:last-child{border-bottom:none}.detail .tool .name{display:inline-flex;align-items:center;gap:8px}.detail .tool .name .status-dot{display:inline-flex;align-items:center;justify-content:center;width:10px;height:10px;flex:0 0 10px;font-size:11px;font-weight:700;line-height:1}.detail .tool .name .status-dot:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.detail .tool .name .status-dot.inflight{color:var(--inflight)}.detail .tool .name .status-dot.inflight:before{animation:pulse var(--pulse-live) infinite}.detail .tool .name .status-dot.done{color:var(--ok)}.detail .tool .name .status-dot.done:before{content:"✓";width:auto;height:auto;background:none}.detail .tool .name .status-dot.err{color:var(--err)}.detail .tool .name .status-dot.err:before{content:"×";width:auto;height:auto;background:none}.react-flow__renderer{background:transparent}.react-flow__node{transition:transform .32s cubic-bezier(.22,1,.36,1);animation:nodeSpawn .36s cubic-bezier(.22,1,.36,1) both}@keyframes nodeSpawn{0%{opacity:0;filter:blur(2px)}}.react-flow__node.dragging,.react-flow__node:active{transition:none}.react-flow__edge-path{stroke:var(--accent-dim);stroke-width:1.5;transition:stroke .2s ease}.react-flow__edge.animated .react-flow__edge-path{stroke:var(--inflight);stroke-dasharray:5;animation:dashflow .8s linear infinite}.react-flow__edge.sess-edge.sess-live .react-flow__edge-path{stroke:hsl(var(--session-hue, 200) 80% var(--session-edge-l))}.react-flow__edge.sess-edge.sess-idle .react-flow__edge-path{stroke:hsl(var(--session-hue, 200) 50% var(--session-edge-idle-l))}@keyframes dashflow{to{stroke-dashoffset:-10}}.react-flow__attribution{display:none}.react-flow__controls{background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:none;overflow:hidden}.react-flow__controls-button{background:var(--panel);color:var(--text);border-bottom:1px solid var(--line);fill:var(--text)}.react-flow__controls-button:hover{background:var(--ctl-fill)}.react-flow__controls-button[aria-pressed=true]{background:var(--warn);color:var(--bg);fill:var(--bg)}.react-flow__controls-button[aria-pressed=true]:hover{box-shadow:inset 0 0 0 2px var(--bg)}.agent-node{--accent: hsl(var(--session-hue, 200) 70% var(--session-accent-l));position:relative;min-width:220px;max-width:260px;padding:10px 12px 10px 16px;background:var(--node-grad);border:1px solid var(--line);border-radius:10px;color:var(--text);font-size:12px;box-shadow:var(--shadow-1);transition:border-color .2s ease,box-shadow .2s ease;overflow:hidden;will-change:transform}.agent-node:hover{box-shadow:var(--shadow-2)}.agent-node.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent-dim),0 10px 24px #0006}.agent-node.state-active{border-color:var(--inflight);box-shadow:0 0 0 1px #f0abfc73,0 8px 22px #f0abfc2e}.agent-node.state-done{border-color:#86efac80}.agent-node.state-err{border-color:#fca5a599}.agent-node .accent-stripe{position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--accent);opacity:.7}.agent-node .head{display:flex;align-items:center;justify-content:space-between;gap:8px}.agent-node .head-right{display:flex;align-items:center;gap:6px}.ctx-donut{background:transparent;border:none;padding:0;cursor:pointer;line-height:0;border-radius:50%;transition:filter .12s ease,transform .12s ease}.ctx-donut:hover{filter:brightness(1.2);transform:scale(1.08)}.ctx-donut:active{transform:scale(.94)}.ctx-donut:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ctx-modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:100;padding:24px;animation:fadeIn .14s ease-out}.ctx-modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 20px 50px #00000080;width:min(560px,100%);max-height:80vh;overflow:auto;padding:18px 20px 22px;color:var(--text);animation:popIn .18s cubic-bezier(.22,1,.36,1)}.ctx-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.ctx-modal-title{font-size:14px;font-weight:600}.ctx-modal-sub{font-size:11px;color:var(--muted);margin-top:3px}.ctx-modal-close{transition:color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ctx-modal-close:hover{color:var(--text)}.ctx-window-row{margin-bottom:16px}.ctx-window-bar{position:relative;height:10px;border-radius:999px;background:var(--bg-soft);border:1px solid var(--line);overflow:hidden}.ctx-window-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--inflight));transition:width .4s ease}.ctx-window-meta{display:flex;justify-content:space-between;font-size:11px;margin-top:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}.ctx-window-pct{color:var(--text);font-weight:600}.ctx-section-title{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:18px 0 8px;font-weight:600}.ctx-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 16px}.ctx-row{display:flex;justify-content:space-between;padding:4px 0;font-size:12px;border-bottom:1px dashed var(--line)}.ctx-row.accent .ctx-row-val{color:var(--accent);font-weight:600}.ctx-row-label{color:var(--muted)}.ctx-row-val{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums}.ctx-empty{font-size:12px;color:var(--muted);padding:8px 0}.ctx-md-list{list-style:none;padding:0;margin:0}.ctx-md-list li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:6px 0;border-bottom:1px dashed var(--line);font-size:12px}.ctx-md-path{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ctx-md-size{color:var(--muted);font-variant-numeric:tabular-nums;flex-shrink:0}.agent-node .title{display:flex;align-items:center;gap:8px;min-width:0}.agent-node .title .label{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}.agent-node .time{font-variant-numeric:tabular-nums;font-size:11px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.state-pill{display:inline-flex;align-items:center;padding:1px 7px;font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;border-radius:999px;border:1px solid transparent}.state-pill.state-active{color:var(--inflight);border-color:#f0abfc66;background:#f0abfc14}.state-pill.state-active:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--inflight);box-shadow:0 0 6px var(--inflight);margin-right:5px;animation:pulse var(--pulse-live) infinite}.state-pill.state-done{color:var(--ok);border-color:#86efac59;background:#86efac14}.state-pill.state-err{color:var(--err);border-color:#fca5a566;background:#fca5a514}.agent-node .waiting-row{display:flex;align-items:center;gap:6px;margin-top:7px;padding:3px 7px;border:1px solid transparent;border-radius:6px;font-size:10px;font-weight:600;min-width:0}.agent-node .waiting-row.permission{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 85%,transparent)}.agent-node .waiting-row.idle{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 85%,transparent)}.agent-node .waiting-said{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-node .waiting-row b{font-weight:700;font-variant-numeric:tabular-nums}.waiting-dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}.agent-node .approval-blind-row{display:flex;align-items:center;gap:6px;margin-top:7px;padding:3px 7px;font-size:10px;font-weight:600;min-width:0;color:var(--muted);font-style:italic}.agent-node .approval-blind-said{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.approval-blind-dot{width:5px;height:5px;border-radius:50%;border:1px solid currentColor;flex-shrink:0}.agent-node .sub{color:var(--muted);font-size:11px;margin-top:3px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-node .session-name{margin-top:4px;font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tool-spark-row{display:flex;align-items:center;gap:8px;margin-top:6px;height:14px}.tool-spark{flex:0 0 auto;overflow:visible}.tool-spark-bar{fill:var(--muted);transition:fill .2s}.tool-spark-bar.active{fill:var(--accent);opacity:.72}.tool-spark-bar.latest{fill:var(--inflight);opacity:1;filter:drop-shadow(0 0 3px rgba(240,171,252,.55))}.tool-spark-label{color:var(--muted);font-size:9px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.04em;text-transform:uppercase}:root[data-theme=light] .tool-spark-bar{fill:var(--muted-dim)}:root[data-theme=light] .tool-spark-bar.active{fill:var(--accent);opacity:.85}:root[data-theme=light] .tool-spark-bar.latest{fill:var(--inflight);filter:drop-shadow(0 0 3px rgba(126,34,206,.45))}.agent-node .meta{color:var(--muted);font-size:11px;margin-top:8px;display:flex;gap:12px}.agent-node .meta b{color:var(--text);font-weight:600}.agent-node .meta .inflight-meta,.agent-node .meta .inflight-meta b{color:var(--inflight)}.agent-node .meta .tokens-meta{color:var(--accent);margin-left:auto}.agent-node .meta .tokens-meta b{color:var(--accent)}.agent-node .meta .cost-meta{color:var(--ok);display:inline-flex;align-items:baseline;gap:4px}.agent-node .meta .cost-meta b{color:var(--ok)}.agent-node .meta .cost-unpriced{color:var(--muted);font-style:italic}.agent-node .meta .cost-meta .cost-rate{color:var(--muted);font-size:9px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.02em}.tokens-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;padding:8px 10px;background:var(--bg-soft);border:1px solid var(--line);border-radius:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.tokens-grid>div{display:flex;justify-content:space-between;align-items:baseline}.tokens-grid .k{color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.06em}.tokens-grid b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}.agent-node.synthetic{border-style:dashed;opacity:.92}.agent-node .synth-tag{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;border:1px solid var(--muted);color:var(--muted);font-size:10px;font-weight:700;margin-left:4px}.spawn-badge{display:inline-flex;align-items:center;padding:1px 6px;margin-left:6px;border-radius:999px;border:1px solid var(--line);color:var(--accent);background:var(--bg-soft);font-size:10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600}.model-chip{display:inline-flex;align-items:center;padding:1px 7px;margin-left:6px;border-radius:999px;border:1px solid var(--line);color:var(--text);background:var(--bg-soft);font-size:10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;letter-spacing:.02em}.model-chip[title*=opus]{color:#f0abfc;border-color:#f0abfc66;background:#f0abfc0f}.model-chip[title*=sonnet]{color:#7dd3fc;border-color:#7dd3fc66;background:#7dd3fc0f}.model-chip[title*=haiku]{color:#86efac;border-color:#86efac66;background:#86efac0f}.model-chip[title*=fable]{color:#fcd34d;border-color:#fcd34d66;background:#fcd34d0f}:root[data-theme=light] .model-chip[title*=opus]{color:#6b21a8;border-color:#7e22ce8c;background:#7e22ce24}:root[data-theme=light] .model-chip[title*=sonnet]{color:#075985;border-color:#0369a18c;background:#0369a124}:root[data-theme=light] .model-chip[title*=haiku]{color:#166534;border-color:#15803d8c;background:#15803d24}:root[data-theme=light] .model-chip[title*=fable]{color:#92400e;border-color:#b453098c;background:#b4530924}.react-flow__edge-textbg{fill:var(--bg-soft);fill-opacity:.9}.react-flow__edge-text{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;fill:var(--text)}.session-clusters{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;transform-origin:0 0;will-change:transform}.cluster-card{position:absolute;border-radius:16px;border:1px solid hsl(var(--session-hue, 200) 65% var(--session-rim-l) / .32);background:hsl(var(--session-hue, 200) 70% 50% / .04);transition:opacity .2s ease,left .32s cubic-bezier(.22,1,.36,1),top .32s cubic-bezier(.22,1,.36,1),width .32s cubic-bezier(.22,1,.36,1),height .32s cubic-bezier(.22,1,.36,1);overflow:visible;pointer-events:auto;cursor:grab}.cluster-label{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;padding:3px 10px;border-radius:999px;background:var(--bg);color:hsl(var(--session-hue, 200) 70% var(--session-label-l));border:1px solid hsl(var(--session-hue, 200) 65% var(--session-rim-l) / .5);box-shadow:0 2px 6px #00000040;white-space:nowrap;line-height:1;cursor:pointer;pointer-events:auto;-webkit-user-select:none;user-select:none;transition:box-shadow .12s ease,filter .12s ease}.cluster-label-name{text-transform:none;letter-spacing:.02em}.cluster-label:hover{filter:brightness(1.25);box-shadow:0 4px 14px #00000073,0 0 0 1px currentColor}.session-group-handle{cursor:grab;background:transparent}.react-flow__node-sessionGroup{cursor:grab}.react-flow__node-sessionGroup.dragging,.react-flow__node-sessionGroup:active{cursor:grabbing}.react-flow__node-sessionGroup.selected{box-shadow:none}:root[data-theme=light] .cluster-label{background:var(--bg-soft);box-shadow:0 1px 4px #0f172a14}:root[data-theme=light] .cluster-label:hover{filter:brightness(.9)}.tool-bursts-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:5;overflow:visible}.tool-bursts-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}.tool-conn{fill:none;stroke-width:1.4;stroke-dasharray:5 4;stroke-linecap:round;transition:opacity .3s ease}.tool-conn.status-inflight{stroke:var(--inflight);animation:dashflow .7s linear infinite;filter:drop-shadow(0 0 4px rgba(240,171,252,.45))}.tool-conn.status-done{stroke:#86efacd9}.tool-conn.status-err{stroke:#fca5a5d9}.tool-conn.fading{stroke-dasharray:4 6}.tool-burst-wrap{position:absolute;pointer-events:none;will-change:transform}.tool-burst{display:inline-flex;align-items:center;gap:6px;padding:5px 11px 5px 9px;border-radius:999px;background:var(--panel);border:1px solid var(--line);font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;box-shadow:0 4px 14px #00000059,0 0 0 1px #00000040;white-space:nowrap;color:var(--text);animation:bubble-spawn .22s cubic-bezier(.34,1.56,.64,1) both}.tool-burst .tb-emoji{font-size:13px;line-height:1;filter:saturate(1.2);display:inline-block}.tool-burst .tb-name{font-weight:600;letter-spacing:.01em}.tool-burst .tb-spin{width:8px;height:8px;border-radius:50%;background:radial-gradient(circle at 30% 30%,var(--inflight),transparent 70%);box-shadow:0 0 8px var(--inflight);animation:pulse var(--pulse-live) infinite}.tool-burst .tb-mark{font-weight:700;font-size:12px;line-height:1;margin-left:2px;animation:mark-pop .26s cubic-bezier(.34,1.56,.64,1) both}.tool-burst .tb-mark.done{color:var(--ok);text-shadow:0 0 6px rgba(134,239,172,.55)}.tool-burst .tb-mark.err{color:var(--err);text-shadow:0 0 6px rgba(252,165,165,.55)}.tool-burst.status-inflight{border-color:#f0abfc8c;background:linear-gradient(180deg,#f0abfc1a,#7dd3fc0d),var(--panel);box-shadow:0 0 0 1px #f0abfc4d,0 6px 18px #f0abfc40}.tool-burst.status-inflight .tb-emoji{animation:emoji-wobble 1.6s ease-in-out infinite}.tool-burst.status-done{border-color:#86efac8c;background:linear-gradient(180deg,rgba(134,239,172,.1),transparent),var(--panel);box-shadow:0 0 0 1px #86efac38,0 4px 14px #86efac26;animation:bubble-spawn .22s cubic-bezier(.34,1.56,.64,1) both,bubble-done-flash .52s ease-out}.tool-burst.status-err{border-color:#fca5a599;background:linear-gradient(180deg,rgba(252,165,165,.1),transparent),var(--panel);box-shadow:0 0 0 1px #fca5a559,0 4px 12px #fca5a52e;animation:bubble-spawn .22s cubic-bezier(.34,1.56,.64,1) both,bubble-err-shake .38s ease-in-out}.tool-burst.fading{animation:bubble-fade-move .6s cubic-bezier(.22,.61,.36,1) forwards,bubble-fade-out .6s linear forwards}.tool-burst{position:relative}.tool-burst:before{content:"";position:absolute;left:4px;top:6px;bottom:6px;width:3px;border-radius:2px;background:var(--cat-accent, transparent);opacity:.85}.tool-burst.cat-file{--cat-accent: #7dd3fc}.tool-burst.cat-shell{--cat-accent: #fcd34d}.tool-burst.cat-web{--cat-accent: #67e8f9}.tool-burst.cat-agent{--cat-accent: #f0abfc}.tool-burst.cat-task{--cat-accent: #86efac}.tool-burst.cat-plan{--cat-accent: #c4b5fd}.tool-burst.cat-mcp{--cat-accent: #5eead4}.tool-burst.cat-other{--cat-accent: #94a3b8}.tool-burst.cat-mcp.mcp-hue{--cat-accent: hsl(var(--mcp-hue, 170) 65% var(--mcp-dot-l))}.tool-burst.dim{opacity:.22;filter:saturate(.4);transition:opacity .18s ease,filter .18s ease}.tool-burst.dim:hover{opacity:.6}.tool-burst.sub{font-size:10px;padding:4px 10px 4px 8px;opacity:.94;animation:bubble-spawn .22s .11s cubic-bezier(.34,1.56,.64,1) both}.tool-burst.sub .tb-emoji{font-size:12px}.tool-burst.sub.status-done{animation:bubble-spawn .22s .11s cubic-bezier(.34,1.56,.64,1) both,bubble-done-flash .52s ease-out}.tool-burst.sub.status-err{animation:bubble-spawn .22s .11s cubic-bezier(.34,1.56,.64,1) both,bubble-err-shake .38s ease-in-out}.tool-burst.sub.fading{animation:bubble-fade-move .6s cubic-bezier(.22,.61,.36,1) forwards,bubble-fade-out .6s linear forwards}.tool-burst.clickable{pointer-events:auto;cursor:pointer;transition:translate .12s ease,scale .14s cubic-bezier(.23,1,.32,1),box-shadow .12s ease,opacity .18s ease,filter .18s ease}.tool-burst.clickable:hover{translate:0 -1px;box-shadow:0 6px 18px #00000073,0 0 0 1px var(--cat-accent, rgba(255,255,255,.15))}.tool-burst.clickable:active{scale:.97}@keyframes bubble-spawn{0%{opacity:0;transform:translate(var(--spawn-dx, -28px),var(--spawn-dy, 0)) scale(.92);filter:blur(3px) brightness(1.4)}55%{opacity:1;transform:translate(0) scale(1.06);filter:blur(0) brightness(1.15);animation-timing-function:cubic-bezier(.23,1,.32,1)}to{transform:translate(0) scale(1)}}@keyframes bubble-done-flash{0%{scale:1;box-shadow:0 0 0 1px #86efac38,0 4px 14px #86efac26}40%{scale:1.14;box-shadow:0 0 0 2px #86efac8c,0 0 22px #86efac8c}to{scale:1;box-shadow:0 0 0 1px #86efac38,0 4px 14px #86efac26}}@keyframes bubble-err-shake{0%,to{translate:0}15%{translate:-4px}35%{translate:4px}55%{translate:-3px}75%{translate:2px}}@keyframes bubble-fade-move{0%{transform:scale(1) translate(0);filter:blur(0)}to{transform:scale(.82) translate(18px,-4px);filter:blur(1.5px)}}@keyframes bubble-fade-out{0%{opacity:1}to{opacity:0}}@keyframes emoji-wobble{0%,to{transform:rotate(-6deg) scale(1)}50%{transform:rotate(6deg) scale(1.08)}}@keyframes mark-pop{0%{opacity:0;transform:scale(.3) rotate(-30deg)}to{opacity:1;transform:scale(1) rotate(0)}}:root[data-theme=light] .tool-burst{box-shadow:0 2px 8px #0f172a1a,0 0 0 1px #0f172a0a}:root[data-theme=light] .tool-burst.status-inflight{border-color:#7e22ce8c;background:linear-gradient(180deg,rgba(126,34,206,.06),transparent),var(--panel);box-shadow:0 0 0 1px #7e22ce33,0 6px 14px #7e22ce2e}:root[data-theme=light] .tool-burst.status-done{border-color:#15803d80}:root[data-theme=light] .tool-burst.status-err{border-color:#b91c1c8c}:root[data-theme=light] .tool-conn.status-inflight{stroke:#7e22ced9;filter:drop-shadow(0 0 3px rgba(126,34,206,.35))}:root[data-theme=light] .tool-conn.status-done{stroke:#15803dd9}:root[data-theme=light] .tool-conn.status-err{stroke:#b91c1cd9}.session-list{grid-column:1;grid-row:2 / -1;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0;overflow-y:auto}.session-list .sl-header{display:flex;align-items:center;gap:8px;padding:12px var(--panel-inset) 10px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);z-index:1}.up-header h2,.ap-header h2,.session-list .sl-header h2{font-size:13px;font-weight:600}.session-list .sl-header h2{margin:0;flex:1;display:inline-flex;align-items:center;gap:8px}.session-list .sl-count{display:inline-flex;align-items:center;padding:1px 7px;border-radius:999px;background:var(--bg-soft);border:1px solid var(--line);color:var(--text);font-size:10px;font-weight:600;text-transform:none;letter-spacing:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.session-list .sl-live-count{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--inflight);font-weight:600}.session-list .sl-waiting-count{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--warn);font-weight:600}.session-list .sl-close{width:26px;height:26px}.session-list .sl-rows{--sl-card-gutter: 4px;--sl-card-edge: 1px;flex:1;padding:6px var(--sl-card-gutter);display:flex;flex-direction:column;gap:4px}.session-list .sl-empty{padding:16px 12px;color:var(--muted);font-size:12px;font-style:italic}.session-list .sl-row{display:flex;align-items:flex-start;gap:9px;padding:9px calc(var(--panel-inset) - var(--sl-card-gutter) - var(--sl-card-edge));background:transparent;border-width:var(--sl-card-edge);border-style:solid;border-color:transparent;border-radius:8px;cursor:pointer;text-align:left;color:var(--text);font:inherit;transition:background .12s,border-color .12s,transform .14s cubic-bezier(.23,1,.32,1);min-width:0}.session-list .sl-row:hover{background:var(--bg-soft);border-color:var(--ctl-edge)}.session-list .sl-row:active{transform:scale(.97)}.session-list .sl-row.selected{background:var(--bg-soft);border-color:var(--accent)}.session-list .sl-row:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.sl-dot{display:inline-flex;align-items:center;justify-content:center;width:10px;height:10px;margin-top:5px;flex:0 0 10px;font-size:11px;font-weight:700;line-height:1;color:var(--muted)}.sl-dot:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor}.up-session-row .sl-dot{margin-top:0}.sl-dot.state-active{color:var(--inflight)}.sl-dot.state-active:before{box-shadow:0 0 8px var(--inflight);animation:pulse var(--pulse-live) infinite}.sl-dot.state-done{color:var(--ok)}.sl-dot.state-done:before{content:"✓";width:auto;height:auto;background:none}.sl-dot.state-err{color:var(--err)}.sl-dot.state-err:before{content:"×";width:auto;height:auto;background:none}.session-list .sl-row-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.session-list .sl-row-head{display:flex;align-items:center;gap:6px;min-width:0}.session-list .sl-label{font-weight:600;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}.session-list .sl-row-meta{display:flex;flex-wrap:wrap;gap:8px;font-size:11px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.session-list .sl-row-meta b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}.session-list .sl-cost b{color:var(--ok)}.session-list .sl-elapsed{margin-left:auto}.session-list .sl-waiting{margin-left:auto;color:var(--warn);font-weight:600}.detail-hero{display:flex;flex-direction:column;gap:8px;padding:4px 0 14px;border-bottom:1px solid var(--line)}.detail-hero .hero-line{display:flex;align-items:center;gap:10px;min-width:0}.detail-hero .hero-title{margin:0;font-size:18px;font-weight:600;letter-spacing:.01em;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.detail-hero .hero-meta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;flex-wrap:wrap}.detail-hero .hero-meta-item{letter-spacing:.03em}.detail-hero .hero-sep{color:var(--text-dim)}.detail-hero .hero-cost{margin-top:8px;padding:10px 12px;background:var(--bg-soft);border:1px solid var(--line);border-radius:10px}.detail-hero .hero-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.detail-hero .hero-action-btn{padding:5px 12px;font-size:11px}.detail-hero .hero-cost-headline{display:flex;align-items:baseline;gap:6px;margin-bottom:8px}.detail-hero .hero-cost-value{font-size:22px;font-weight:700;color:var(--ok);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.detail-hero .hero-cost-label{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}.cost-bar{display:flex;height:8px;width:100%;border-radius:4px;overflow:hidden;background:var(--line)}.cost-bar .cb-seg{height:100%;display:block;transition:filter .12s ease;box-shadow:-1px 0 0 var(--panel)}.cost-bar .cb-seg:hover{filter:brightness(1.3)}:root[data-theme=light] .cost-bar .cb-seg:hover{filter:brightness(.85)}.cost-bar .cb-input{background:var(--usage-blue)}.cost-bar .cb-output{background:var(--usage-purple)}.cost-bar .cb-cache-r{background:var(--usage-green)}.cost-bar .cb-cache-w{background:var(--usage-amber)}.detail-section{display:flex;flex-direction:column;gap:8px;padding-top:4px}.detail-section h3{display:flex;align-items:center;gap:8px}.detail-section h3 .section-count{display:inline-flex;align-items:center;padding:1px 7px;border-radius:999px;background:var(--bg-soft);border:1px solid var(--line);color:var(--text);font-size:10px;font-weight:600;text-transform:none;letter-spacing:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.activity-row{display:flex;flex-direction:column;gap:8px}.activity-counters{display:flex;gap:12px;font-size:12px;color:var(--muted)}.activity-counters .ac-item b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}.activity-counters .ac-live,.activity-counters .ac-live b{color:var(--inflight)}.activity-counters .ac-err,.activity-counters .ac-err b{color:var(--err)}.cat-strip{display:flex;flex-wrap:wrap;gap:5px}.cat-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px 3px 7px;border-radius:999px;border:1px solid var(--line);background:var(--bg-soft);font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.cat-chip .cat-emoji{font-size:12px;line-height:1}.cat-chip .cat-count{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}.cat-chip .cat-server{color:var(--muted);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cat-chip.cat-file{border-color:#7dd3fc66}.cat-chip.cat-shell{border-color:#fcd34d66}.cat-chip.cat-web{border-color:#67e8f966}.cat-chip.cat-agent{border-color:#f0abfc66}.cat-chip.cat-task{border-color:#86efac66}.cat-chip.cat-plan{border-color:#c4b5fd66}.cat-chip.cat-mcp{border-color:#5eead466}.cat-chip.cat-other{border-color:#94a3b866}.cat-chip.cat-mcp.mcp-hue{border-color:hsl(var(--mcp-hue, 170) 65% var(--mcp-dot-l) / .4)}.prompts{display:flex;flex-direction:column;gap:8px}.prompt-entry{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--bg-soft)}.prompt-time{color:var(--muted);font-size:10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px}.prompt-text{font-size:12px;line-height:1.5;color:var(--text);white-space:pre-wrap;word-break:break-word}button.tool.clickable{width:100%;background:transparent;border:none;border-bottom:1px solid var(--line-soft);text-align:left;cursor:pointer;color:var(--text);font:inherit;padding:6px 0;display:flex;align-items:center;gap:8px;justify-content:space-between;border-radius:4px;transition:background .12s,transform .14s cubic-bezier(.23,1,.32,1)}button.tool.clickable{padding-left:6px;padding-right:6px}button.tool.clickable:hover{background:var(--ctl-fill)}button.tool.clickable:active{transform:scale(.97)}button.tool.clickable:last-child{border-bottom:none}.shortcuts{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;align-items:center}.shortcuts .sc{display:contents}.shortcuts .sc kbd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:600;color:var(--text);background:var(--bg-soft);border:1px solid var(--line);border-bottom-width:2px;border-radius:4px;padding:2px 7px;text-align:center;min-width:38px}.shortcuts .sc span{color:var(--muted);font-size:12px}.empty-hero .hint-row{margin-top:14px;font-size:12px;opacity:.75}.empty-hero .hint-row+.hint-row{margin-top:6px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0506098c;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;animation:fadeIn .14s ease-out}:root[data-theme=light] .modal-backdrop{background:#0f172a4d}.modal{width:min(820px,92vw);max-height:82vh;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-2),0 0 0 1px #7dd3fc1a;overflow:hidden;animation:popIn .18s cubic-bezier(.22,1,.36,1)}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--bg-soft)}.modal-title{display:flex;align-items:center;gap:10px;min-width:0}.modal-title .status-dot{display:inline-block;width:8px;height:8px;border-radius:50%}.modal-title .status-dot.inflight{background:var(--inflight);animation:pulse var(--pulse-live) infinite}.modal-title .status-dot.done{background:var(--ok)}.modal-title .status-dot.err{background:var(--err)}.modal-tool-name{font-weight:600;font-size:14px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.modal-tool-id{color:var(--muted);font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.modal-actions{display:flex;align-items:center;gap:8px}.modal-dur{color:var(--muted);font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.modal-body{padding:16px;overflow:auto;display:flex;flex-direction:column;gap:16px}.modal-section h4{margin:0 0 6px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600;display:flex;align-items:center;gap:8px}.modal-section .err-tag{font-size:9px;font-weight:700;padding:1px 6px;border-radius:4px;color:var(--err);background:#fca5a51a;border:1px solid rgba(252,165,165,.3)}.modal-note{margin:0;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--muted);font-size:11px;line-height:1.5}.modal-section pre{margin:0;padding:12px;background:var(--bg);border:1px solid var(--line);border-radius:8px;color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:320px;overflow:auto}@keyframes fadeIn{0%{opacity:0}}@keyframes popIn{0%{opacity:0;transform:translateY(4px) scale(.985)}to{opacity:1;transform:none}}.modal.clear-confirm{width:min(440px,92vw)}.clear-confirm .cc-actions{display:flex;justify-content:flex-end;gap:8px}.modal.key-help{width:min(560px,92vw)}.kh-group{grid-column:1 / -1;margin:10px 0 0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}.kh-group:first-child{margin-top:0}.modal.release-notes{width:min(620px,92vw)}.release-notes .rn-version{margin:0 0 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:600;color:var(--muted)}.release-notes .rn-notes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.release-notes .rn-note{border-left:2px solid var(--line);padding-left:12px}.release-notes .rn-note-title{margin:0 0 4px;font-size:13px;font-weight:600;line-height:1.45;color:var(--text)}.release-notes .rn-note-icon{margin-right:.15em}.release-notes .rn-note-body{margin:0;font-size:12px;line-height:1.65;color:var(--muted);white-space:pre-line}.session-summary{width:min(720px,92vw)}.session-summary .ss-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);gap:22px;padding:18px 18px 20px;background:linear-gradient(180deg,rgba(134,239,172,.05),transparent);border-bottom:1px solid var(--line)}.session-summary .ss-hero-left{display:flex;flex-direction:column;gap:8px;min-width:0}.session-summary .ss-cost-label{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.session-summary .ss-cost{font-size:34px;font-weight:700;color:var(--ok);font-variant-numeric:tabular-nums;letter-spacing:-.02em;line-height:1}.session-summary .ss-models{display:flex;gap:6px;flex-wrap:wrap}.session-summary .ss-hero-right{display:flex;flex-direction:column;justify-content:center;gap:10px;min-width:0}.cost-bar.cost-bar-lg{height:14px;border-radius:7px}.session-summary .ss-cost-legend{display:grid;grid-template-columns:1fr 1fr;gap:6px 16px;font-size:11px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.session-summary .ssl{display:inline-flex;align-items:baseline;gap:5px}.session-summary .ssl b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}.session-summary .ssl:before{content:"";display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:1px}.session-summary .ssl-in:before{background:var(--usage-blue)}.session-summary .ssl-out:before{background:var(--usage-purple)}.session-summary .ssl-cr:before{background:var(--usage-green)}.session-summary .ssl-cw:before{background:var(--usage-amber)}.session-summary .ss-stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;padding:14px 18px;border-bottom:1px solid var(--line)}.session-summary .ss-stat{display:flex;flex-direction:column;gap:2px;padding:8px 10px;background:var(--bg-soft);border:1px solid var(--line);border-radius:8px}.session-summary .ss-stat-value{font-size:18px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.01em;line-height:1.1}.session-summary .ss-stat-label{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.session-summary .ss-stat.tone-err .ss-stat-value{color:var(--err)}@media(max-width:640px){.session-summary .ss-hero{grid-template-columns:1fr}.session-summary .ss-stats{grid-template-columns:repeat(3,minmax(0,1fr))}}.session-summary .ss-top-tools{display:flex;flex-direction:column;gap:6px}.session-summary .ss-tt{display:grid;grid-template-columns:130px 1fr 36px;gap:10px;align-items:center}.session-summary .ss-tt-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-summary .ss-tt-bar{height:6px;background:var(--line);border-radius:3px;overflow:hidden}.session-summary .ss-tt-bar-fill{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--inflight));border-radius:3px}.session-summary .ss-tt-count{text-align:right;font-variant-numeric:tabular-nums;font-size:11px;color:var(--muted)}.session-summary .ss-prompt{font-size:12px;line-height:1.55;color:var(--text);padding:10px 12px;background:var(--bg-soft);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:4px;white-space:pre-wrap;word-break:break-word;max-height:200px;overflow:auto}.empty-hero{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;color:var(--muted);-webkit-user-select:none;user-select:none;max-width:520px}.empty-hero .orbit-stack{position:relative;width:260px;height:260px;margin:0 auto 28px}.empty-hero .orbit{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px dashed rgba(125,211,252,.18)}.empty-hero .orbit.r1{top:0;right:0;bottom:0;left:0;animation:spin 22s linear infinite}.empty-hero .orbit.r2{top:30px;right:30px;bottom:30px;left:30px;animation:spin 14s linear infinite reverse;border-color:#f0abfc33}.empty-hero .orbit.r3{top:60px;right:60px;bottom:60px;left:60px;animation:spin 9s linear infinite;border-color:#86efac38}.empty-hero .orbit .dot{position:absolute;width:14px;height:14px;border-radius:50%;top:-7px;left:50%;margin-left:-7px}.empty-hero .orbit.r1 .dot{background:var(--accent);box-shadow:0 0 22px var(--accent)}.empty-hero .orbit.r2 .dot{background:var(--inflight);box-shadow:0 0 22px var(--inflight);width:12px;height:12px;margin-left:-6px;top:-6px}.empty-hero .orbit.r3 .dot{background:var(--ok);box-shadow:0 0 22px var(--ok);width:10px;height:10px;margin-left:-5px;top:-5px}.empty-hero .orbit .dot.b{top:auto;bottom:-7px}.empty-hero .orbit.r2 .dot.b{bottom:-6px}.empty-hero .orbit.r3 .dot.b{bottom:-5px}.empty-hero .core{position:absolute;top:50%;left:50%;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;background:radial-gradient(circle at 30% 30%,#f0abfc,#7dd3fc 55%,#14161b);box-shadow:0 0 28px #f0abfc8c,0 0 64px #7dd3fc59;animation:corepulse 2.6s ease-in-out infinite}.empty-hero .core:after{content:"";position:absolute;top:-14px;right:-14px;bottom:-14px;left:-14px;border-radius:50%;border:1px solid rgba(255,255,255,.06);animation:corewave 2.6s ease-out infinite}@keyframes corepulse{0%,to{transform:scale(1);filter:brightness(1)}50%{transform:scale(1.08);filter:brightness(1.15)}}@keyframes corewave{0%{transform:scale(.85);opacity:.6}to{transform:scale(1.6);opacity:0}}.empty-hero h2{color:var(--text);font-size:18px;font-weight:600;margin:0 0 8px;letter-spacing:.01em}.empty-hero p{margin:0;font-size:13px;line-height:1.65}.empty-hero code{background:var(--bg-soft);border:1px solid var(--line);padding:2px 7px;border-radius:5px;color:var(--text);font-size:12px}@keyframes spin{to{transform:rotate(360deg)}}:root[data-theme=light] .topbar .status .pill.live{border-color:#15803d73;background:#e8f2eb}:root[data-theme=light] .topbar .status .pill.paused{border-color:#b4530980;background:#f8eee6}:root[data-theme=light] .topbar .status .pill.dead{border-color:#b91c1c80;background:#f8e8e8}:root[data-theme=light] .agent-node.state-active{border-color:#7e22cea6;box-shadow:0 0 0 1px #7e22ce4d,0 8px 22px #7e22ce2e}:root[data-theme=light] .agent-node.state-done{border-color:var(--ok)}:root[data-theme=light] .agent-node.state-err{border-color:var(--err)}:root[data-theme=light] .state-pill.state-active{border-color:#7e22ce73;background:#7e22ce1a}:root[data-theme=light] .state-pill.state-active:before{box-shadow:0 0 5px #7e22ce8c}:root[data-theme=light] .state-pill.state-done{border-color:#15803d73;background:#15803d1a;color:#166534}:root[data-theme=light] .state-pill.state-err{border-color:#b91c1c80;background:#b91c1c1a}:root[data-theme=light] .modal-section .err-tag{background:#b91c1c1a;border-color:#b91c1c73}:root[data-theme=light] .empty-hero .orbit{border-color:#0369a14d}:root[data-theme=light] .empty-hero .orbit.r2{border-color:#7e22ce4d}:root[data-theme=light] .empty-hero .orbit.r3{border-color:#15803d52}:root[data-theme=light] .empty-hero .core{background:radial-gradient(circle at 30% 30%,#c084fc,#0ea5e9 55%,#1e293b);box-shadow:0 0 28px #7e22ce66,0 0 64px #0369a140}:root[data-theme=light] .conn-banner{background:linear-gradient(90deg,rgba(185,28,28,.14),transparent);border-bottom-color:#b91c1c73}:root[data-theme=light] .search-clear{color:var(--muted)}:root[data-theme=light] .react-flow__edge-path{stroke:#0369a166}:root[data-theme=light] .react-flow__minimap-node{stroke:#0f172a40}.usage-panel{position:fixed;top:60px;right:368px;width:280px;max-height:calc(100vh - 76px);overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-2);z-index:20;padding:0 0 12px}.up-header{display:flex;align-items:center;gap:8px;padding:10px var(--panel-inset) 8px;border-bottom:1px solid var(--line-soft);position:sticky;top:0;background:var(--panel);z-index:1}.up-header h2{margin:0;flex:1}.up-header-right{display:flex;align-items:center;gap:4px}.up-rate{font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums;color:var(--inflight);padding:2px 6px;border-radius:999px;background:#f0abfc1f}.up-close{color:var(--muted)}.up-total{display:flex;align-items:baseline;gap:8px;padding:14px var(--panel-inset) 6px}.up-total-value{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--ok);line-height:1}.up-total-label{font-size:11px;color:var(--muted)}.usage-panel .cost-bar{margin:4px 14px 10px;width:auto;border-radius:3px}.up-tokens-row{display:flex;flex-wrap:wrap;gap:10px 16px;padding:6px var(--panel-inset) 10px}.up-tok{display:flex;align-items:baseline;gap:5px;font-size:12px;font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.up-k,.up-scope{font-size:10px;color:var(--muted);font-family:inherit}.up-section{padding:0 14px;margin-top:4px;border-top:1px solid var(--line-soft)}.up-section-title{display:flex;align-items:baseline;gap:8px;margin:8px 0 6px;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.up-section-age{margin-left:auto;font-size:10px;font-weight:400;color:var(--text-dim);text-transform:none;letter-spacing:0;white-space:nowrap}.up-table{width:100%;border-collapse:collapse;font-size:12px}.up-table th{text-align:left;color:var(--muted);font-weight:500;font-size:10px;padding:0 0 4px;border-bottom:1px solid var(--line-soft)}.up-table th:not(:first-child){text-align:right}.up-table td{padding:4px 0;vertical-align:middle}.up-model-name{color:var(--text);font-weight:500;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.up-num{text-align:right;font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);font-size:11px}.up-cost-val{color:var(--ok)}.up-sessions{display:flex;flex-direction:column;gap:4px}.up-session-row{display:flex;align-items:center;gap:7px;font-size:12px;padding:3px 0}.up-session-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.up-session-tokens{font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:var(--muted)}.up-session-cost{font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:var(--ok);min-width:36px;text-align:right}.up-unpriced{color:var(--muted);font-style:italic}.up-hint{padding:8px 14px 4px;font-size:11px;color:var(--muted);line-height:1.5}.up-empty{padding:20px 14px;font-size:12px;color:var(--muted);text-align:center;line-height:1.6}.app:not(:has(.detail)) .usage-panel{right:8px}.up-quota-section{padding-top:10px;border-top:none}.up-refresh-btn{padding:1px 7px}.up-quota-bars{display:flex;flex-direction:column;gap:10px}.qb-row{display:flex;flex-direction:column;gap:3px}.qb-meta{display:flex;justify-content:space-between;align-items:baseline;font-size:11px}.qb-label{color:var(--muted)}.qb-pct{font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600}.qb-track{position:relative;height:6px;border-radius:3px;background:var(--line);overflow:hidden}.qb-fill{height:100%;border-radius:3px;transition:width .4s ease}.qb-pace-marker{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;border-radius:1px;box-shadow:0 0 0 1px var(--panel);transition:left .4s ease;z-index:2}.qb-reset-row{display:flex;justify-content:space-between;align-items:baseline;gap:4px;min-height:14px}.qb-reset{font-size:10px;color:var(--text-dim)}.qb-pace{font-size:10px;font-weight:500;text-align:right;flex-shrink:0}.qb-limit-badge{margin-left:4px;font-size:10px}.up-plan-badge{margin-left:6px;padding:1px 5px;border:1px solid var(--line-soft);border-radius:3px;font-size:9px;font-weight:500;color:var(--text-dim);text-transform:none;letter-spacing:0;vertical-align:1px}.up-quota-na{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--muted)}.up-quota-hint{color:var(--text-dim)}.up-quota-hint code{background:var(--line);color:var(--text);padding:0 3px;border-radius:3px;font-size:10px}.up-quota-loading{font-size:11px;color:var(--text-dim)}.up-quota-sub{font-size:10px;color:var(--text-dim);margin-top:4px}.up-credits{color:var(--accent)}.up-reset-credits{color:var(--ok)}:root[data-theme=light] .up-rate{background:#7e22ce1a}.uh-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:100;padding:24px;animation:fadeIn .14s ease-out}.uh-modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 20px 50px #00000080;width:min(760px,100%);max-height:84vh;overflow:auto;padding:16px 18px 20px;color:var(--text);animation:popIn .18s cubic-bezier(.22,1,.36,1)}.uh-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}.uh-titlewrap{display:flex;flex-direction:column;gap:2px;margin-right:auto}.uh-title{font-size:14px;font-weight:600}.uh-sub{font-size:10px;color:var(--text-dim);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.uh-range{display:inline-flex;gap:2px;background:var(--bg-soft);border:1px solid var(--line);border-radius:999px;padding:2px}.uh-range-btn{font:inherit;font-size:10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;padding:2px 9px;border:none;border-radius:999px;color:var(--muted);background:transparent;cursor:pointer;transition:background .12s,color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.uh-range-btn:hover{color:var(--text)}.uh-range-btn:active{transform:scale(.97)}.uh-range-btn[aria-pressed=true]{background:var(--accent);color:var(--bg)}.uh-range-btn[aria-pressed=true]:hover{color:var(--bg)}.uh-reload{width:24px;height:24px;padding:0}.uh-reload:disabled{opacity:var(--dim-off);cursor:default}.uh-close{transition:color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.uh-close:hover{color:var(--text)}.uh-status{padding:40px 0;text-align:center;color:var(--muted);font-size:12px}.uh-status.uh-err{color:var(--err);max-width:46ch;margin:0 auto;line-height:1.5}.uh-retry{margin-top:14px}.uh-retry:disabled{opacity:var(--dim-off);cursor:default}.uh-stale{opacity:var(--dim-stale);transition:opacity .12s}.uh-totals{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}.uh-stat{display:flex;flex-direction:column;gap:2px;padding:8px 10px;background:var(--bg-soft);border:1px solid var(--line-soft);border-radius:8px}.uh-stat-val{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}.uh-stat-val.accent{color:var(--ok)}.uh-stat-label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.uh-agents{margin-bottom:12px}.uh-agent-bar{display:flex;height:6px;border-radius:3px;background:var(--line);overflow:hidden;margin-bottom:7px}.uh-agent-seg{height:100%;box-shadow:-1px 0 0 var(--panel)}.uh-agent-keys{display:flex;flex-wrap:wrap;gap:12px;font-size:11px;color:var(--muted)}.uh-agent-key{display:inline-flex;align-items:center;gap:5px}.uh-agent-cost{color:var(--text);font-variant-numeric:tabular-nums}.uh-agent-share{color:var(--text-dim);font-variant-numeric:tabular-nums}.uh-chart{display:flex;align-items:flex-end;height:168px;margin-bottom:10px;padding-bottom:16px;border-bottom:1px solid var(--line-soft);overflow-x:auto}.uh-bar-col{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;position:relative;background:none;border:none;padding:0;cursor:pointer;min-width:24px;transition:transform .14s cubic-bezier(.23,1,.32,1)}.uh-bar-col:focus-visible{outline-offset:-1px}.uh-bar-col:hover .uh-bar{filter:brightness(1.15)}.uh-bar-col:active{transform:scale(.97)}.uh-bar-col.sel .uh-bar{outline:1px solid var(--accent);outline-offset:1px}.uh-bar{width:78%;min-height:1px;display:flex;flex-direction:column;border-radius:2px 2px 0 0;overflow:hidden;transition:height .3s ease}.uh-bar-seg{width:100%;box-shadow:0 -1px 0 var(--panel)}.uh-bar-label{position:absolute;bottom:-15px;font-size:9px;color:var(--text-dim);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap;transform:rotate(0);overflow:hidden;max-width:100%;text-overflow:ellipsis}.uh-legend{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px;font-size:11px;color:var(--muted)}.uh-legend-item{display:inline-flex;align-items:center;gap:5px}.uh-legend-dot{width:8px;height:8px;border-radius:2px;display:inline-block;flex-shrink:0}.uh-legend-cost{color:var(--text);font-variant-numeric:tabular-nums}.uh-detail{background:var(--bg-soft);border:1px solid var(--line-soft);border-radius:10px;padding:12px 14px}.uh-detail-head{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}.uh-detail-date{font-size:12px;font-weight:600}.uh-detail-cost{font-size:12px;color:var(--ok);font-variant-numeric:tabular-nums}.uh-detail-agents{margin-left:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--text-dim);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.uh-detail-mini{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:12px}.uh-ministat{display:flex;flex-direction:column;gap:1px}.uh-ministat-val{font-size:12px;font-variant-numeric:tabular-nums}.uh-ministat-label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.uh-detail-models{display:flex;flex-direction:column;gap:5px}.uh-model-row{display:grid;grid-template-columns:130px 1fr auto;align-items:center;gap:8px}.uh-model-name{display:inline-flex;align-items:center;gap:5px;font-size:11px;min-width:0}.uh-model-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uh-model-bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden}.uh-model-bar-fill{display:block;height:100%;border-radius:3px}.uh-model-cost{font-size:11px;color:var(--text);font-variant-numeric:tabular-nums}:root[data-theme=light] .uh-backdrop{background:#0f172a4d}.accounts-panel{grid-column:1;grid-row:2 / -1;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0;overflow-y:auto}.ap-header{display:flex;align-items:center;gap:8px;padding:12px var(--panel-inset) 10px;border-bottom:1px solid var(--line);flex-shrink:0}.ap-header h2{margin:0;letter-spacing:.02em}.ap-header-right{margin-left:auto;display:flex;align-items:center;gap:4px}.ap-refresh{padding:1px 6px}.ap-refresh:disabled{opacity:var(--dim-off);cursor:default}.ap-account{padding:9px var(--panel-inset) 8px;border-bottom:1px solid var(--line-soft)}.ap-account.active{background:color-mix(in srgb,var(--accent) 2%,transparent)}.ap-account-head{display:flex;align-items:center;gap:6px;margin-bottom:6px}.ap-num{font-size:10px;color:var(--muted);min-width:9px}.ap-alias{font-size:11px;font-weight:600;color:var(--text);min-width:0;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ap-email{font-size:10px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.ap-badge-active{flex-shrink:0;padding:1px 7px;border-radius:999px;background:var(--accent);color:var(--bg);font-size:10px;font-weight:600;line-height:1.5}.ap-badge-held{flex-shrink:0;padding:1px 7px;border-radius:999px;background:var(--ctl-fill);color:var(--text);font-size:10px;line-height:1.5}.ap-switch{flex-shrink:0}.ap-lanes{display:flex;flex-direction:column}.ap-lane{display:grid;grid-template-columns:30px 1fr 32px;grid-template-areas:"label track pct" ". reset reset";align-items:center;gap:2px 6px;margin-bottom:3px}.ap-lane-label{grid-area:label;font-size:10px;color:var(--muted)}.ap-lane-track{grid-area:track;height:4px;border-radius:2px;background:var(--line-soft);overflow:hidden}.ap-lane-fill{height:100%;border-radius:2px}.ap-lane-pct{grid-area:pct;font-size:10px;text-align:right}.ap-lane-reset{grid-area:reset;font-size:9px;color:var(--text-dim)}.ap-lane-reset:empty{display:none}.ap-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin-top:5px;font-size:9px;color:var(--muted)}.ap-err,.ap-stale{color:var(--warn)}.ap-age{margin-left:auto;white-space:nowrap;cursor:help}.ap-empty{display:flex;flex-direction:column;gap:4px;padding:12px var(--panel-inset);font-size:11px;color:var(--muted)}.ap-hint{font-size:10px;line-height:1.5;color:var(--muted)}.ap-empty .ap-cmd{display:block;margin:6px 0 2px;padding:7px 9px;border-radius:5px;background:color-mix(in srgb,var(--accent) 7%,transparent);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}.ap-empty .ap-hint code{padding:1px 4px;border-radius:3px;background:color-mix(in srgb,var(--accent) 7%,transparent);font-size:10px}.ap-failure{display:flex;align-items:flex-start;gap:6px;margin:8px var(--panel-inset) 0;padding:6px 8px;border-radius:4px;background:color-mix(in srgb,var(--err) 12%,transparent);color:var(--err);font-size:10px;word-break:break-word}.ap-failure-text{flex:1;min-width:0}.ap-failure-x{position:relative;flex:none;margin:-2px -2px 0 0;padding:0 3px;border:0;background:none;color:inherit;opacity:.6;font-size:12px;line-height:1.2;cursor:pointer;transition:opacity .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ap-failure-x:after{content:"";position:absolute;top:50%;left:50%;width:24px;height:24px;margin:-12px 0 0 -12px}.ap-failure-x:hover{opacity:1}.ap-failure-x:active{transform:scale(.94)}.ap-auto{padding:12px var(--panel-inset) 11px;border-top:1px solid var(--line)}.ap-auto-head{display:flex;flex-direction:column;gap:8px}.ap-auto-ctl{display:flex;align-items:center;gap:6px}.ap-auto-title{margin:0;font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.ap-auto-state{margin-left:auto;display:inline-flex;align-items:center;gap:5px;padding:2px 8px 2px 7px;border:1px solid var(--ctl-edge);border-radius:999px;background:transparent;font:inherit;font-size:10px;color:var(--muted);line-height:1.5}.ap-dot{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.55;flex-shrink:0}button.ap-auto-state{cursor:pointer;transition:border-color .12s,color .12s,transform .14s cubic-bezier(.23,1,.32,1)}button.ap-auto-state:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}button.ap-auto-state:active:not(:disabled){transform:scale(.97)}button.ap-auto-state:focus-visible{outline:2px solid var(--accent);outline-offset:1px}button.ap-auto-state:disabled{cursor:default;opacity:var(--dim-off)}.ap-auto-state.live{border-color:var(--accent);color:var(--accent)}.ap-pulse{position:relative;width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}.ap-pulse:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:1px solid currentColor;animation:ap-ping 2.6s cubic-bezier(.22,.61,.36,1) infinite}@keyframes ap-ping{0%{transform:scale(1);opacity:.7}50%{transform:scale(3.2);opacity:0}to{transform:scale(3.2);opacity:0}}@media(prefers-reduced-motion:reduce){.ap-pulse:after{animation:none;opacity:.35;transform:scale(2.2)}}.ap-auto-note{margin:9px 0 0;font-size:9px;line-height:1.6;color:var(--muted)}.ap-auto-note .ap-pulse{display:inline-block;margin-right:5px;vertical-align:1px;color:var(--accent)}.ap-auto-note code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px;color:var(--text);white-space:nowrap}.ap-auto-now{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}.ap-auto-now:after{content:"/";margin-left:8px;color:var(--muted);opacity:.45}.ap-auto-now.near{color:var(--warn)}.ap-field{position:relative;display:inline-block}.ap-field:after{content:"";position:absolute;right:7px;top:50%;width:5px;height:5px;margin-top:-3px;border-right:1.2px solid currentColor;border-bottom:1.2px solid currentColor;transform:rotate(45deg);opacity:.5;pointer-events:none}.ap-field select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background:var(--ctl-fill);color:var(--text);border:1px solid var(--ctl-edge);border-radius:5px;padding:2px 19px 2px 7px;font:inherit;font-size:11px;line-height:1.5;text-align:right;cursor:pointer;transition:border-color .12s,color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ap-field select:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.ap-field select:active:not(:disabled){transform:scale(.97)}.ap-manage .ap-field select{text-align:left}.ap-field select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.ap-field select:disabled{cursor:default;opacity:var(--dim-off)}.ap-field:has(select:hover:not(:disabled)):after{color:var(--accent);opacity:1}.ap-auto-foot{display:flex;align-items:baseline;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--line-soft)}.ap-auto-result{font-size:10px;line-height:1.5;color:var(--muted);min-width:0}.ap-rotate{background:none;border:none;padding:0;font:inherit;font-size:9px;color:var(--muted);cursor:pointer;text-decoration:underline dotted;text-underline-offset:2px;transition:color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ap-rotate:hover:not(:disabled){color:var(--accent)}.ap-rotate:active:not(:disabled){transform:scale(.97)}.ap-rotate:disabled{cursor:default;opacity:var(--dim-off)}.ap-lanes-more{background:none;border:none;padding:0;font:inherit;font-size:9px;color:var(--muted);cursor:pointer;text-decoration:underline dotted;text-underline-offset:2px;transition:color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ap-lanes-more:hover{color:var(--accent)}.ap-lanes-more:active{transform:scale(.97)}.ap-footnote{margin:0;padding:9px 14px 2px;border-top:1px solid var(--line-soft);font-size:9px;line-height:1.5;color:var(--muted);cursor:help}.canvas-wrap.bubbling .react-flow__node{transition:transform .42s cubic-bezier(.22,.61,.36,1)}.canvas-wrap.bubbling .react-flow__node.react-flow__node-sessionGroup{transition:transform .42s cubic-bezier(.22,.61,.36,1),width .42s cubic-bezier(.22,.61,.36,1),height .42s cubic-bezier(.22,.61,.36,1)}@media(prefers-reduced-motion:reduce){.canvas-wrap.bubbling .react-flow__node,.canvas-wrap.bubbling .react-flow__node.react-flow__node-sessionGroup{transition:none}}.canvas-wrap.bubbling .react-flow__node.dragging,.canvas-wrap.dragging-any .react-flow__node,.canvas-wrap.dragging-any .react-flow__node.react-flow__node-sessionGroup{transition:none}.canvas-wrap.dragging-any .cluster-card{transition:opacity .2s ease}@media(prefers-reduced-motion:reduce){.react-flow__node{transition:none;animation:fadeIn .14s ease both}.react-flow__node.rf-exiting .agent-node,.react-flow__edge.rf-edge-exiting .react-flow__edge-path{animation:canvas-fade-out .6s linear forwards}.react-flow__edge.animated .react-flow__edge-path,.react-flow__edge.rf-edge-selected .react-flow__edge-path,.tool-conn.status-inflight{animation:none}.cluster-card{transition:opacity .2s ease}.ctx-donut{transition:filter .12s ease}.ctx-donut:hover{transform:none}.tool-burst,.tool-burst.sub,.tool-burst.status-done,.tool-burst.status-err,.tool-burst.sub.status-done,.tool-burst.sub.status-err{animation:fadeIn .14s ease both}.tool-burst.fading,.tool-burst.sub.fading{animation:canvas-fade-out .6s linear forwards}.tool-burst .tb-spin,.tool-burst .tb-mark,.tool-burst.status-inflight .tb-emoji,.state-pill.state-active:before{animation:none}.tool-burst.clickable{transition:box-shadow .12s ease,opacity .18s ease,filter .18s ease}.tool-burst.clickable:hover{translate:none}.empty-hero .orbit.r1,.empty-hero .orbit.r2,.empty-hero .orbit.r3,.empty-hero .core,.empty-hero .core:after{animation:none}@keyframes canvas-fade-out{to{opacity:0}}}.ap-add{line-height:1;margin-right:6px}.ap-more{margin-left:4px;display:inline-grid;place-items:center;min-width:24px;min-height:24px;padding:0 2px;border:1px solid transparent;border-radius:6px;background:none;color:var(--text-dim);font-size:13px;line-height:1;cursor:pointer}.ap-account:hover .ap-more,.ap-more:hover,.ap-more:focus-visible,.ap-more.on{color:var(--text)}.ap-more:hover,.ap-more.on{border-color:var(--ctl-edge)}.ap-manage{display:flex;flex-direction:column;gap:8px;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line-soft)}.ap-manage-name,.ap-manage-slot,.ap-manage-acts{display:flex;align-items:center;gap:8px}.ap-manage-input{flex:1}.ap-manage-slot .ap-field{flex:1;min-width:0}.ap-manage-slot .ap-field select{width:100%}.ap-manage-acts .ap-manage-btn.danger{margin-left:auto;min-width:62px}.ap-manage-hint{color:var(--text-dim);font-size:10px;min-width:0}.ap-manage-hint.ap-manage-swap{color:var(--accent)}.ap-manage-input{min-width:0;padding:3px 7px;border:1px solid var(--ctl-edge);border-radius:6px;background:var(--ctl-fill);color:var(--text);font:inherit;font-size:11px;transition:border-color .12s,background .12s}.ap-manage-input:hover{border-color:var(--accent)}.ap-manage-input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.ap-manage-btn{padding:3px 9px;border:1px solid var(--ctl-edge);border-radius:999px;background:var(--ctl-fill);color:var(--text);font:inherit;font-size:10px;cursor:pointer;transition:border-color .12s,color .12s,background .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ap-manage-btn:hover:not(:disabled){border-color:var(--accent);background:color-mix(in srgb,var(--text) 12%,transparent)}.ap-manage-btn:active:not(:disabled){transform:scale(.97)}.ap-manage-btn:disabled{opacity:var(--dim-off);cursor:default}.ap-manage-btn.danger{color:var(--err);border-color:color-mix(in srgb,var(--err) 65%,transparent)}.ap-manage-btn.danger:hover:not(:disabled){border-color:var(--err)}.ap-manage-btn.danger.armed{color:var(--bg);background:var(--err);border-color:var(--err);font-weight:600}.ap-share{display:flex;flex-direction:column;gap:5px}.ap-share-blob{display:block;max-height:66px;overflow:auto;overflow-wrap:anywhere;padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:var(--bg-soft);color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px;line-height:1.4;-webkit-user-select:all;user-select:all}.ap-share-foot{display:flex;align-items:center;gap:8px}.aa-modal{width:min(560px,92vw)}.aa-body{gap:18px;display:flex;flex-direction:column}.aa-tabs{display:inline-flex;gap:4px}.aa-tab{padding:4px 12px;border:1px solid var(--ctl-edge);border-radius:999px;background:none;color:var(--muted);font:inherit;font-size:12px;cursor:pointer;transition:color .12s,border-color .12s,background .12s,transform .14s cubic-bezier(.23,1,.32,1)}.aa-tab:hover{color:var(--text)}.aa-tab:active{transform:scale(.97)}.aa-tab.on{color:var(--text);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}.aa-step{display:flex;flex-direction:column;gap:8px}.aa-step h4{margin:0;color:var(--muted);font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.aa-note{margin:0;color:var(--muted);font-size:12px;line-height:1.5}.aa-err{margin:0;color:var(--err);font-size:12px;line-height:1.5}.aa-link{overflow-wrap:anywhere;padding:8px 10px;border:1px solid var(--ctl-edge);border-radius:8px;background:var(--ctl-fill);color:var(--accent);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;text-decoration:none;-webkit-user-select:all;user-select:all}.aa-link:hover{border-color:var(--accent);text-decoration:underline}.aa-field{display:flex;align-items:center;gap:8px}.aa-field input{flex:1;min-width:0;padding:7px 11px;border:1px solid var(--ctl-edge);border-radius:8px;background:var(--bg-soft);color:var(--text);font:inherit;font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.aa-field input::placeholder{color:var(--text-dim)}.aa-field input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.aa-field input:disabled{opacity:var(--dim-off)}.aa-primer .aa-note{max-width:46ch}.aa-actions{display:flex;gap:8px;align-items:center;margin-top:2px}.aa-done{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;padding:6px 0 2px;text-align:center;animation:aa-done-in .22s cubic-bezier(.23,1,.32,1) both}.aa-done h4{margin:0;color:var(--text);font-size:13px;font-weight:600;letter-spacing:0;text-transform:none}.aa-done .aa-note{max-width:44ch}@keyframes aa-done-in{0%{opacity:0;transform:scale(.97) translateY(4px)}to{opacity:1;transform:none}}.aa-mark{width:44px;height:44px;overflow:visible}.aa-mark-ring,.aa-mark-tick{fill:none;stroke:var(--ok);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}.aa-mark-ring{opacity:.45;stroke-dasharray:126;stroke-dashoffset:126;transform:rotate(-90deg);transform-origin:50% 50%;animation:aa-draw .38s cubic-bezier(.23,1,.32,1) 40ms forwards}.aa-mark-tick{stroke-dasharray:30;stroke-dashoffset:30;animation:aa-draw .26s cubic-bezier(.23,1,.32,1) .2s forwards}@keyframes aa-draw{to{stroke-dashoffset:0}}.confetti{position:fixed;width:0;height:0;z-index:101;pointer-events:none}.confetti-bit{position:absolute;top:0;left:0;width:6px;height:9px;margin:-4px 0 0 -3px;border-radius:1.5px;background:var(--accent);opacity:0;animation:aa-burst-move .9s cubic-bezier(.16,.9,.3,1) both,aa-burst-fade .9s linear both}.confetti-bit.round{width:6px;height:6px;border-radius:50%}.confetti-bit[data-hue="1"]{background:var(--ok)}.confetti-bit[data-hue="2"]{background:var(--warn)}.confetti-bit[data-hue="3"]{background:color-mix(in srgb,var(--accent) 55%,var(--ok))}@keyframes aa-burst-move{0%{transform:translateZ(0) scale(calc(var(--s, 1) * .6)) rotate(0)}70%{transform:translate3d(var(--dx),var(--dy),0) scale(var(--s, 1)) rotate(var(--rot))}to{transform:translate3d(calc(var(--dx) * 1.08),calc(var(--dy) * .82 + 16px),0) scale(calc(var(--s, 1) * .9)) rotate(var(--rot))}}@keyframes aa-burst-fade{0%{opacity:0}10%{opacity:1}62%{opacity:1}to{opacity:0}}@media(prefers-reduced-motion:reduce){.aa-done{animation:aa-done-fade .16s ease both}.aa-mark-ring,.aa-mark-tick{animation:none;stroke-dashoffset:0}@keyframes aa-done-fade{0%{opacity:0}to{opacity:1}}}.cat-filter-bar{transition:background .18s ease,border-color .18s ease,box-shadow .18s ease}.cat-filter-bar.occluded:not(:hover):not(:focus-within){background:#14161b59;border-color:transparent;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}:root[data-theme=light] .cat-filter-bar.occluded:not(:hover):not(:focus-within){background:#ffffff59}.ap-manage{animation:ap-manage-in .18s cubic-bezier(.23,1,.32,1) both}@keyframes ap-manage-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.ap-more{transition:color .12s,border-color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ap-more:active{transform:scale(.94)}.ap-manage-btn.danger.armed{position:relative;overflow:hidden}.ap-manage-btn.danger.armed:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:color-mix(in srgb,var(--bg) 70%,transparent);transform-origin:left center;animation:ap-disarm 4s linear forwards}@keyframes ap-disarm{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.ap-share{animation:ap-manage-in .18s cubic-bezier(.23,1,.32,1) both}.ap-share-blob{-webkit-user-select:all;user-select:all;max-height:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-dim)}.ap-share-foot .ap-manage-btn{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.ap-share-foot .ap-manage-btn:hover:not(:disabled){background:color-mix(in srgb,var(--accent) 18%,transparent)}.ap-share.expired .ap-share-blob{opacity:var(--dim-stale)}.ap-share-warn,.ap-share-expiry.soon{color:var(--warn)}.ap-share-expiry.gone{color:var(--err)}@media(prefers-reduced-motion:reduce){.ap-manage,.ap-share{animation:none}.ap-manage-btn.danger.armed:after{animation:none;transform:scaleX(0)}button.btn:active:not(:disabled),.ap-manage-btn:active:not(:disabled),.ap-more:active,.glyph-btn:active:not(:disabled),.cat-filter:active,.uh-range-btn:active,.selected-ribbon .selected-close:active,.ver-banner .ver-cmd:active,.ver-banner .ver-auto:active,.ver-banner .ver-close:active,.topbar .brand button.v:active,.search-clear:active,.ver-banner .ver-act:active:not(:disabled),.detail-reopen:active,.ctx-donut:active,.session-list .sl-row:active,button.tool.clickable:active,.uh-bar-col:active,.ap-failure-x:active,button.ap-auto-state:active:not(:disabled),.ap-field select:active:not(:disabled),.ap-rotate:active:not(:disabled),.ap-lanes-more:active,.aa-tab:active,.aa-result-fix:active,.bw-ep-head:active,.bw-toggle:active,.bw-help:active,.bw-settings select:active:not(:disabled),.selected-ribbon:active:not(:has(.selected-close:active)){transform:none}.tool-burst.clickable:active{scale:none}}.ap-fix{margin-left:6px;padding:1px 8px;border:1px solid color-mix(in srgb,var(--warn) 85%,transparent);border-radius:999px;background:color-mix(in srgb,var(--warn) 12%,transparent);color:var(--warn);font:inherit;font-size:10px;cursor:pointer;transition:background .12s,border-color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.ap-fix:hover{background:color-mix(in srgb,var(--warn) 22%,transparent);border-color:var(--warn)}.ap-fix:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.ap-fix:active{transform:none}}.ap-empty .ap-fix{align-self:flex-start;margin:5px 0 0}.ap-empty .ap-fix:disabled{opacity:var(--dim-off);cursor:default}@media(prefers-reduced-motion:reduce){.ctx-window-fill,.qb-fill,.qb-pace-marker,.uh-bar{transition:none}.modal,.ctx-modal,.uh-modal,.sound-menu{animation:fadeIn .14s ease-out}}.ap-stale-copy{font-size:10px;color:var(--text-dim)}.bw-btn{position:relative}.bw-badge{position:absolute;top:-4px;right:-4px;min-width:14px;height:14px;padding:0 3px;border-radius:7px;background:var(--warn);color:var(--bg);font-size:9px;font-weight:700;line-height:14px;text-align:center;font-variant-numeric:tabular-nums}.bw-btn.watching{color:var(--accent)}.bw-btn.has-findings{color:var(--warn)}.bw-modal{width:min(860px,94vw)}.bw-body{container:bw / inline-size;display:flex;flex-direction:column;gap:16px}.bw-body>*{flex:none}.bw-foreign{font-size:11px;color:var(--warn)}.bw-foreign code{display:block;color:var(--muted);font-size:11px}.bw-day{display:flex;flex-direction:column;gap:8px}.bw-day h4{margin:0;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim)}.bw-ep{border:1px solid var(--line);border-radius:6px;overflow:hidden;background:var(--panel)}.bw-ep-row{display:flex;align-items:stretch}.bw-ep-row .bw-ep-head{flex:1 1 auto;min-width:0}.bw-ep-x{flex:none;align-self:center;margin-right:6px;color:var(--text-dim);transition:color .12s ease}.bw-ep-x:hover,.bw-ep-x:focus-visible{color:var(--warn)}.bw-ep.open{border-color:var(--ctl-edge)}.bw-ep-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:12px;align-items:baseline;width:100%;padding:10px 12px;background:none;border:0;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:transform .12s ease,background .12s ease}.bw-ep-head:hover{background:var(--bg-soft)}.bw-ep-head:active{transform:scale(.97)}.bw-ep-host{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bw-ep-meta,.bw-ep-count{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.bw-ep-head:hover .bw-ep-count{color:var(--text)}.bw-ep-chev{font-size:9px;color:var(--muted);width:10px;text-align:center}.bw-ep-head:hover .bw-ep-chev{color:var(--text)}.bw-urls{list-style:none;margin:0;padding:0 12px 10px;display:flex;flex-direction:column;gap:4px}.bw-urls li{display:grid;grid-template-columns:62px 1fr;gap:8px;font-size:11px;align-items:baseline}.bw-url-time{color:var(--text-dim);font-variant-numeric:tabular-nums;white-space:nowrap}.bw-url{color:var(--muted);word-break:break-all}.bw-status{display:flex;align-items:center;flex-wrap:wrap;gap:10px;min-height:48px;border-top:1px solid var(--line);padding-top:12px}.bw-status-text{font-size:12px;color:var(--muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bw-status-dim{color:var(--muted)}.bw-gear{margin-left:auto}.bw-gear.on{color:var(--accent)}.bw-local{color:var(--text-dim)}.bw-switch{display:flex;align-items:center;gap:12px;padding:8px 0;cursor:pointer}.bw-switch-label{font-size:12px;color:var(--muted);white-space:nowrap}.bw-switch:hover .bw-switch-label{color:var(--text)}.bw-prof-name{font-weight:600}.bw-note{margin:0;font-size:11px;color:var(--text-secondary);max-width:72ch;line-height:1.55}.bw-state{display:flex;flex-direction:column;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:6px;overflow:hidden}.bw-row{display:grid;grid-template-columns:8px auto 1fr auto;gap:8px;align-items:center;background:var(--panel);padding:10px 14px}.bw-dot{width:7px;height:7px;border-radius:50%;background:var(--muted-dim)}.bw-row.err .bw-dot{background:var(--err)}.bw-row.ok .bw-dot{background:var(--ok)}.bw-row.on .bw-dot{background:var(--accent)}.bw-row-label{font-size:13px;font-weight:600;white-space:nowrap}.bw-row.err .bw-row-label{color:var(--err)}.bw-row-detail{font-size:12px;color:var(--text-secondary);min-width:0;overflow:hidden;text-overflow:ellipsis}.bw-row .btn{white-space:nowrap}.bw-cmd{background:var(--bg-soft);padding:12px 14px;display:flex;flex-direction:column;gap:8px}.bw-cmd code{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.7;color:var(--text);white-space:pre-wrap;overflow-wrap:break-word;word-break:normal;-webkit-user-select:all;user-select:all}.bw-why{background:none;border:0;padding:0 0 0 6px;color:var(--muted);font:inherit;font-size:11px;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.bw-why:hover{color:var(--text)}.bw-toggle{position:relative;width:30px;height:17px;padding:0;border-radius:9px;border:1px solid var(--ctl-edge);background:var(--ctl-fill);cursor:pointer;flex:none;transition:background .14s ease,border-color .14s ease,transform .12s ease}.bw-toggle:hover{border-color:var(--accent)}.bw-toggle:active{transform:scale(.97)}.bw-toggle[aria-checked=true]{background:var(--accent);border-color:var(--accent)}.bw-toggle-knob{position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%;background:var(--text);transition:transform .14s ease,background .14s ease}.bw-toggle[aria-checked=true] .bw-toggle-knob{transform:translate(13px);background:var(--bg)}.bw-log{display:flex;flex-direction:column;gap:4px;max-height:320px;overflow-y:auto}.bw-feed{display:flex;flex-direction:column;gap:12px;min-height:0}.bw-feed-note{margin-bottom:-4px;max-width:68ch}.bw-head-row{align-items:baseline}.bw-feed-count{margin-left:auto;font-size:10px;letter-spacing:0;text-transform:none;color:var(--text-dim);font-variant-numeric:tabular-nums}.bw-log-line{display:grid;grid-template-columns:66px minmax(0,96px) minmax(0,1fr) max-content;gap:8px;font-size:11px;align-items:baseline;padding:4px 8px;border-radius:4px;min-width:0;transition:background .14s ease}.bw-log-line:hover{background:var(--bg-soft)}.bw-log-line:hover .bw-log-time,.bw-log-line:hover .bw-log-profile,.bw-log-line:hover .bw-log-sys{color:var(--text)}.bw-log-time,.bw-log-profile,.bw-log-sys,.bw-log-browser{transition:color .14s ease}@media(prefers-reduced-motion:no-preference){.bw-log-line{animation:bw-line-in .26s cubic-bezier(.16,1,.3,1)}}@keyframes bw-line-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:no-preference){.bw-log-line.find{animation:bw-find-in .9s cubic-bezier(.16,1,.3,1)}}@keyframes bw-find-in{0%{background:color-mix(in srgb,var(--accent) 22%,transparent)}to{background:transparent}}.bw-log-time{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--text-dim);font-variant-numeric:tabular-nums;white-space:nowrap}.bw-log-line{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;line-height:1.6;color:var(--muted)}.bw-log-line.find .bw-log-browser,.bw-log-line.find .bw-log-value{color:var(--accent);font-weight:600}.bw-log-line.act .bw-log-sys{color:var(--text);font-style:normal}.bw-log-line.warn .bw-log-sys,.bw-log-line.warn .bw-log-browser,.bw-log-line.warn .bw-log-value{color:var(--warn)}.bw-log-sys{grid-column:2 / -1;color:var(--text-dim);font-style:italic}.bw-log-browser{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bw-log-profile{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bw-log-value{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.bw-log-flag{color:var(--accent)}.bw-chart{display:flex;gap:2px;height:10px}.bw-chart-day{flex:1;min-width:2px;border-radius:2px;background:var(--line-soft)}.bw-chart-day.hit{background:var(--accent)}.bw-chart-day.hit.many{box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 45%,transparent)}.bw-rest{margin:0;font-size:10px;color:var(--text-secondary);line-height:1.5}.bw-rest-head{align-self:flex-start}.bw-chev{color:var(--text-dim);font-size:9px}.bw-relay{font-size:10px;color:var(--text-dim);white-space:nowrap}.bw-loading{display:flex;flex-direction:column;gap:8px;padding:18px 0}.bw-loading p{margin:0;font-size:12px;color:var(--text-secondary)}.bw-loading-bar{position:relative;height:2px;border-radius:1px;background:var(--line);overflow:hidden}.bw-loading-bar:after{content:"";position:absolute;top:0;bottom:0;width:32%;border-radius:1px;background:var(--accent);animation:bw-sweep 1.4s ease-in-out infinite}@keyframes bw-sweep{0%{transform:translate(-110%)}to{transform:translate(320%)}}@media(prefers-reduced-motion:reduce){.bw-loading-bar:after{animation:none}}.bw-path{-webkit-user-select:all;user-select:all;word-break:break-all}.bw-mode-dot{width:7px;height:7px;border-radius:50%;background:var(--text-dim);flex:none;align-self:center;transition:background .2s ease,box-shadow .2s ease}.bw-mode-dot.on{background:var(--accent)}@media(prefers-reduced-motion:no-preference){.bw-mode-dot.on{animation:bw-pulse 2.6s ease-in-out infinite}}@keyframes bw-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--accent) 55%,transparent)}50%{box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 0%,transparent)}}.bw-mode-word{flex:none;font-size:12px;color:var(--text);font-weight:600;animation:bw-state-in .22s cubic-bezier(.16,1,.3,1)}.bw-mode-detail{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes bw-state-in{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:none}}@keyframes bw-state-fade{0%{opacity:0}to{opacity:1}}.bw-settings{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-start;padding:12px 16px;background:var(--bg-soft);border:1px solid var(--line);border-radius:6px;transform-origin:top}@media(prefers-reduced-motion:no-preference){.bw-settings{animation:bw-settings-in .24s cubic-bezier(.16,1,.3,1)}}@keyframes bw-settings-in{0%{opacity:0;transform:translateY(-6px) scaleY(.96)}to{opacity:1;transform:none}}.bw-why[aria-expanded=true]{color:var(--text)}.bw-settings label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--muted)}.bw-settings select{background:var(--ctl-fill);border:1px solid var(--ctl-edge);color:var(--text);border-radius:4px;padding:4px 6px;font-size:12px;cursor:pointer;transition:border-color .12s ease,color .12s ease,transform .12s ease}.bw-settings select:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.bw-settings select:active:not(:disabled){transform:scale(.97)}.bw-settings-note{margin:0;flex:1 1 30ch;font-size:11px;line-height:1.6;color:var(--text-secondary);max-width:66ch}.bw-settings-note strong{color:var(--text);font-weight:600}.bw-radar{display:block;width:100%;height:168px}@media(prefers-reduced-motion:reduce){.bw-radar{opacity:1}}.bw-work{display:grid;grid-template-columns:280px minmax(0,1fr);gap:32px;align-items:stretch}.bw-side{display:flex;flex-direction:column;gap:24px;min-width:0}.bw-sec{display:flex;flex-direction:column;gap:12px}.bw-sec-head{display:flex;align-items:center;gap:8px;margin:0;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)}.bw-help{width:16px;height:16px;padding:0;border:1px solid var(--ctl-edge);border-radius:50%;background:none;color:var(--text-dim);font:inherit;font-size:9px;line-height:1;cursor:pointer;transition:color .12s ease,border-color .12s ease,transform .12s ease}.bw-help{position:relative}.bw-help:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:50%}.bw-help:hover{color:var(--text);border-color:var(--accent)}.bw-help:active{transform:scale(.94)}.bw-help[aria-expanded=true]{color:var(--accent);border-color:var(--accent)}.bw-glance{display:flex;align-items:center;gap:16px}.bw-counts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;min-width:0}.bw-counts li{display:flex;align-items:baseline;gap:8px;min-width:0}.bw-count-n{min-width:3ch;text-align:right;font-size:18px;line-height:1.1;color:var(--text);font-variant-numeric:tabular-nums}.bw-count-of{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bw-since{margin:0;font-size:10px;line-height:1.5;color:var(--text-dim)}.bw-since+.bw-since{margin-top:-8px}.bw-gate{margin:0;font-size:10px;line-height:1.5;color:var(--muted);font-variant-numeric:tabular-nums}.bw-key{margin:0;display:grid;grid-template-columns:max-content minmax(0,1fr);gap:4px 12px;padding:8px 12px;border-radius:6px;background:var(--bg-soft)}.bw-key dt{font-size:10px;font-weight:600;color:var(--muted)}.bw-key dd{margin:0;font-size:10px;line-height:1.5;color:var(--text-secondary)}.bw-profiles{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.bw-profiles li{display:flex;align-items:center;gap:8px;min-height:24px;font-size:12px;min-width:0}.bw-prof-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bw-prof-dot{width:6px;height:6px;border-radius:50%;background:var(--text-dim);flex:none}.bw-prof-dot.on{background:var(--accent)}.bw-prof-state{font-size:11px;color:var(--muted);margin-left:auto;flex:none}.bw-work .bw-radar{width:88px;height:88px;flex:none}.bw-work .bw-log{flex:1 1 auto;min-height:220px;max-height:min(42vh,360px)}@container bw (max-width: 720px){.bw-work{grid-template-columns:minmax(0,1fr);gap:24px}.bw-work .bw-radar{width:88px;height:88px}}@media(max-width:640px){.bw-work{grid-template-columns:minmax(0,1fr);gap:24px}}.bw-scope{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.bw-mode-word,.bw-log-line,.bw-settings{animation:bw-state-fade .22s ease}}.bw-trouble{margin:0;padding:12px;border-radius:6px;border:1px solid var(--line);background:var(--bg-soft);font-size:11px;line-height:1.55;color:var(--text)}.bw-trouble.unreadable{border-color:color-mix(in srgb,var(--warn) 45%,transparent);color:var(--warn)}.bw-access{margin:8px 0 0;display:grid;grid-template-columns:max-content minmax(0,1fr);gap:4px 16px}.bw-access dt{font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim)}.bw-access dd{margin:0;font-size:11px;line-height:1.55;color:var(--text-secondary)}.bw-main{display:flex;flex-direction:column;gap:24px;min-width:0}.bw-findings{display:flex;flex-direction:column;gap:12px;min-height:0}.bw-eps{display:flex;flex-direction:column;gap:16px;max-height:min(30vh,260px);overflow-y:auto}.bw-empty{display:flex;flex-direction:column;gap:8px;max-width:62ch}.bw-empty-head{margin:0;font-size:13px;color:var(--text)}.bw-empty-note{margin:0;font-size:11px;line-height:1.6;color:var(--text-secondary)}.sa-modal{width:min(560px,92vw)}.sa-body{display:flex;flex-direction:column;gap:18px}.sa-step{display:flex;flex-direction:column;gap:10px}.sa-step h4{margin:0;color:var(--muted);font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.sa-note{margin:0;color:var(--muted);font-size:12px;line-height:1.5}.sa-actions{display:flex;gap:8px;align-items:center;margin-top:2px}.sa-count{margin:0;color:var(--text);font-size:12px;line-height:1.5}.sa-count.empty{color:var(--muted)}.sa-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column}.sa-pick{max-height:min(46vh,320px);overflow-y:auto;gap:2px}.sa-row{display:flex;align-items:baseline;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer}.sa-row:hover{background:color-mix(in srgb,var(--text) 6%,transparent)}.sa-row input{flex:none;accent-color:var(--accent)}.sa-who{color:var(--text);font-size:12px;overflow-wrap:anywhere}.sa-sub{color:var(--text-dim);font-size:11px;overflow-wrap:anywhere}.sa-failed{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--warn) 45%,transparent);border-radius:6px}.sa-failed-head{margin:0;color:var(--warn);font-size:12px}.sa-failed .sa-list{gap:4px}.sa-failed li{display:flex;flex-direction:column}.sa-why{color:var(--text-secondary);font-size:11px;line-height:1.5}.sa-dead{opacity:var(--dim-stale)}.aa-results{margin:0;padding:0;list-style:none;align-self:stretch;display:flex;flex-direction:column;gap:2px;max-height:min(38vh,260px);overflow-y:auto;text-align:left}.aa-result{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;padding:5px 8px;border-radius:6px;font-size:12px}.aa-result-who{color:var(--text);overflow-wrap:anywhere}.aa-result-what{margin-left:auto;color:var(--muted);font-size:11px;white-space:nowrap}.aa-result.imported .aa-result-what{color:var(--ok)}.aa-result.healed .aa-result-what,.aa-result.updated .aa-result-what{color:var(--accent)}.aa-result.failed .aa-result-what{color:var(--err)}.aa-result.failed{background:color-mix(in srgb,var(--err) 8%,transparent)}.aa-result-fix{padding:2px 8px;border:1px solid var(--ctl-edge);border-radius:999px;background:none;color:var(--muted);font:inherit;font-size:10px;cursor:pointer;transition:color .12s,border-color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.aa-result-fix:hover{color:var(--text);border-color:var(--accent)}.aa-result-fix:active{transform:scale(.97)}.aa-result-err{flex-basis:100%;color:var(--err);font-size:11px;line-height:1.5}.ap-share-set{padding:1px 6px}.hist-modal{width:min(620px,92vw)}.hist-since{margin-left:auto;margin-right:10px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.hist-body{padding:14px 16px 16px;overflow-y:auto}.hist-empty{margin:0;padding:20px 0;text-align:center;color:var(--muted);font-size:12px}.hist-series+.hist-series{margin-top:26px}.hist-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}.hist-label{font-size:12px;font-weight:600}.hist-stats{display:flex;align-items:baseline;gap:4px;font-variant-numeric:tabular-nums}.hist-stats b{font-size:16px;font-weight:600}.hist-stats b.warn{color:var(--warn)}.hist-stats b.hot{color:var(--err)}.hist-stats i{font-style:normal;font-size:10px;color:var(--muted);margin-right:8px}.hist-plot{position:relative}.hist-chart{display:block;width:100%;overflow:visible;touch-action:none}.hist-area{fill:var(--accent);opacity:.14}.hist-line{fill:none;stroke:var(--accent);stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round}.hist-dot{fill:var(--accent);stroke:var(--panel);stroke-width:1.5}.hist-floor{stroke:var(--line);stroke-width:1}.hist-rule{stroke-width:1;opacity:.6}.hist-rule.warn{stroke:var(--warn);stroke-dasharray:6 4}.hist-rule.hot{stroke:var(--err);stroke-dasharray:2 3;opacity:.75}.hist-rule-tag{font-size:9px;fill:var(--muted);font-variant-numeric:tabular-nums}.hist-rule-tag.warn{fill:var(--warn)}.hist-rule-tag.hot{fill:var(--err)}.hist-cross{stroke:var(--muted);stroke-width:1;stroke-dasharray:2 3}.hist-axis{display:flex;justify-content:space-between;margin-top:4px;font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums;min-height:13px}.hist-at b{color:var(--text);font-weight:600}.hist-note{margin-top:5px;font-size:10px;color:var(--muted)}@media(prefers-reduced-motion:reduce){.hist-modal,.pl-modal{animation:none}}.pl-modal{width:min(680px,92vw)}.pl-count{margin-left:auto;margin-right:10px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.pl-body{padding:10px 16px 4px;overflow-y:auto;font-size:11px}.pl-empty{margin:0;padding:20px 0;text-align:center;color:var(--muted);font-size:12px}.pl-table thead th{position:sticky;top:0;background:var(--panel);z-index:1}.pl-pid-h{width:62px;text-align:right;padding-right:8px!important;font-size:10px;font-weight:500;color:var(--muted)}.pl-pid{width:62px}.pl-name{padding-left:2px;color:var(--muted)}.pl-body tbody tr:hover td{color:var(--text)}.pl-foot{padding:8px 16px 12px;border-top:1px solid var(--line);font-size:10px;color:var(--muted)}
|
package/dist/web/index.html
CHANGED
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
document.documentElement.setAttribute("data-theme", stored === "light" ? "light" : "dark");
|
|
41
41
|
})();
|
|
42
42
|
</script>
|
|
43
|
-
<script type="module" crossorigin src="/assets/index-
|
|
44
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
43
|
+
<script type="module" crossorigin src="/assets/index-BYupRwZc.js"></script>
|
|
44
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Bnn7d7u8.css">
|
|
45
45
|
</head>
|
|
46
46
|
<body>
|
|
47
47
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-dag",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Live deck of Claude Code and Codex agents — watch tool calls, token spend and every Claude Code subagent on one calm canvas. Run it with npx ccdeck.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -54,9 +54,6 @@
|
|
|
54
54
|
"url": "https://github.com/BarganConstantin/ccdeck/issues"
|
|
55
55
|
},
|
|
56
56
|
"homepage": "https://github.com/BarganConstantin/ccdeck#readme",
|
|
57
|
-
"dependencies": {
|
|
58
|
-
"open": "^10.1.0"
|
|
59
|
-
},
|
|
60
57
|
"devDependencies": {
|
|
61
58
|
"@types/react": "^18.3.12",
|
|
62
59
|
"@types/react-dom": "^18.3.1",
|
package/release-notes.json
CHANGED
|
@@ -31,6 +31,46 @@
|
|
|
31
31
|
"about a defect in the type, and the suite refuses both it and no space at",
|
|
32
32
|
"all."
|
|
33
33
|
],
|
|
34
|
+
"3.1.0": [
|
|
35
|
+
{
|
|
36
|
+
"title": "🚀 The first run stops looking like it hung",
|
|
37
|
+
"body": "`npx ccdeck` on a machine that has never run it used to sit on a spinner at \"checking claude-swap\" and say nothing else. Measured on a Windows box: seventeen and a half seconds before it told you where to point a browser. It is now one and a half.\n\nThe deck was waiting for an install nobody asked for during that boot — a Python toolchain being fetched so the accounts panel would work. The port had been open the whole time; there was just nothing on screen to say so.\n\nIt no longer waits. Anything still working past the boot says so on its own line and keeps going in the background, and the deck comes up without it."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"title": "⚡ Every start is quicker, and stays quicker",
|
|
41
|
+
"body": "The event log was read from the beginning on every boot to fill a buffer that only keeps the last two thousand events — so four fifths of that reading existed to be thrown away, and it got slower the longer you had been using the deck. It reads from the end now and stops when the buffer is full: 258ms down to 20ms here, on a 34 MB log, and it no longer grows.\n\nThe accounts tool is also asked for its version once instead of twice, which on this machine was the single largest thing in an ordinary boot."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"title": "📉 Ten fewer packages to install",
|
|
45
|
+
"body": "Opening your browser used to cost a dependency that brought nine more with it — ten downloads on a cold `npx ccdeck` before the deck's own files were unpacked. It is now done with the commands the operating system already has.\n\nThe package has no runtime dependencies at all."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"title": "🌡️ Temperature, on the machines that could not show it",
|
|
49
|
+
"body": "On Windows the deck was asking somewhere it is not allowed to look: that reading lives behind a namespace that needs administrator, so it failed for everybody and the section never appeared. It reads a performance counter now, which needs nothing.\n\nOn Apple Silicon there is no command that ships with macOS which prints a temperature at all — the sensors are behind an interface only native code can reach. The deck fetches a small signed tool for it, verified against the checksum its release publishes, in the background and only on the Macs that need it. You do not have to install anything. `AGENTS_DECK_NO_DOWNLOAD=1` turns that off.\n\nA machine with no sensor still shows no section, which includes every virtual machine. Nothing is drawn that was not measured."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"title": "😌 The terminal goes quiet when there is nothing happening",
|
|
53
|
+
"body": "The dot at the bottom blinked every 800ms for as long as the deck ran, which is what a terminal does while it is working — so a deck that had finished in a second looked like one that never finished.\n\nIt now moves only while something actually is: a job still running, or hooks that cannot find the deck. Otherwise it is drawn once and left alone, and it says what the job is rather than just blinking. A step that takes more than three seconds shows how long it has been going, which is the whole of \"is this stuck\".\n\nAnd a machine with no Claude Code installed stops being told about it every few seconds — that one is said once now, on its own line instead of across the status line."
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"3.0.0": [
|
|
57
|
+
{
|
|
58
|
+
"title": "📈 The machine panel now shows what it DID, not just what it is",
|
|
59
|
+
"body": "Click any section of the machine panel — Cores, Memory, Load average, Thermal — and it opens a chart of what that reading has done since the deck started.\n\nThe panel could always tell you the machine is busy now. It could not tell you whether it got hot while that three-hour build was running, or how deep the queue went while you were away, and those are the questions you actually have afterwards.\n\nThermal is new as well. Where the machine will give degrees, it gives degrees; on a Mac it also reports whether the CPU is being held back to cool down, which is the consequence a temperature has to be interpreted into anyway. Nothing is drawn that was not measured — a machine with no sensor gets no section at all, rather than a zero."
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"title": "🔍 The whole process list, not just the busiest eight",
|
|
63
|
+
"body": "\"more\" beside Busiest processes opens the full list the deck is watching — around fifty processes rather than eight — with the pid and the untruncated name.\n\nThis closes a gap. The panel's eight rows are the busiest, so sorting them by name only reorders those eight: \"is my test runner still going\" could not be answered if the test runner was not already on screen. Now it can.\n\nIt is deliberately not a task manager. Nothing here ends a process; Activity Monitor and Task Manager are better at that and it is not a thing this deck should own."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"title": "🔤 Process names in Cyrillic, Greek or with accents read correctly",
|
|
67
|
+
"body": "An application named Яндекс Музыка was showing up as M-PM-/M-PM-=M-PM-4M-PM-5… in the process list, and so was every other name the deck could not spell in plain ASCII.\n\nThe deck was forcing a fixed locale on the commands it runs, to guarantee that a decimal point stays a point on a machine set to German or Russian — and that also forced the character set. It forces only the number format now. Your own character set is left alone, which is what makes the name arrive intact."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"title": "📦 The text you copy to share accounts is a third of its size",
|
|
71
|
+
"body": "Sharing three accounts used to produce 6168 characters. It is now 1896.\n\nMost of that text was never the credentials — two OAuth tokens are about two hundred characters between them, and the rest was the envelope, whose field names repeated in full for every account added. So the saving grows with the number of accounts rather than shrinking.\n\nA blob you copied before this still imports until it expires. One made now cannot be read by a deck older than this version — that is the one thing in this release that older decks cannot follow."
|
|
72
|
+
}
|
|
73
|
+
],
|
|
34
74
|
"1.48.0": [
|
|
35
75
|
{
|
|
36
76
|
"title": "👁 Browser Watch — see what a program opened while you were away",
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// The boot has a deadline, and the jobs under it do not get to decide it.
|
|
2
|
+
//
|
|
3
|
+
// #742. Two people on two operating systems reported the same thing: `npx
|
|
4
|
+
// ccdeck`, the wordmark, four rows, then a spinner at "checking claude-swap…"
|
|
5
|
+
// and nothing — no "server ready", no browser, no way to tell a slow machine
|
|
6
|
+
// from a dead one. The port was open the whole time. What they were watching
|
|
7
|
+
// was `reportStartup` awaiting `ensureCswap`, which on a machine that has
|
|
8
|
+
// neither claude-swap nor a Python toolchain downloads a uv binary under a
|
|
9
|
+
// 120-second deadline and then runs `uv tool install claude-swap` under a
|
|
10
|
+
// 180-second one. Five minutes, worst case, before the line that says where to
|
|
11
|
+
// point a browser — for a panel that is optional and that nobody asked for
|
|
12
|
+
// during that boot.
|
|
13
|
+
//
|
|
14
|
+
// The install itself is not the bug and is not cancelled here. What was wrong
|
|
15
|
+
// is that the boot waited for it. So every job whose failure is not fatal is
|
|
16
|
+
// given a slice of the boot rather than the whole of it, and a job that is
|
|
17
|
+
// still working when its slice runs out is SAID SO and left running. The row it
|
|
18
|
+
// would have printed is printed later, when it settles, which is the same
|
|
19
|
+
// contract the deck already has with its background upgrade.
|
|
20
|
+
//
|
|
21
|
+
// bin/deck.js's `update` job has raced a timer since it was written — this is
|
|
22
|
+
// that idea, given a name and the one thing the inline race could not do: tell
|
|
23
|
+
// "the job answered null" apart from "the job did not answer", which for
|
|
24
|
+
// claude-swap is the difference between "not installed" and "still installing".
|
|
25
|
+
|
|
26
|
+
/** How long the whole report may spend waiting on jobs that are not fatal.
|
|
27
|
+
*
|
|
28
|
+
* Eight seconds is chosen from the two ends it sits between. Below it are the
|
|
29
|
+
* probes a normal boot really does pay — `cswap --version`, `uv --version`,
|
|
30
|
+
* a PyPI lookup — which finish in well under a second on a warm machine and in
|
|
31
|
+
* two or three on a cold one behind a slow DNS; a deadline under that would
|
|
32
|
+
* turn every honest boot into a background one and the rows would stop being
|
|
33
|
+
* where a reader looks for them. Above it is the only thing the deadline
|
|
34
|
+
* exists to bound, and that one is measured in minutes, so there is no value
|
|
35
|
+
* in the middle that anybody would notice being wrong. */
|
|
36
|
+
export const BOOT_DEADLINE_MS = 8_000;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The deadline, as the environment may override it.
|
|
40
|
+
*
|
|
41
|
+
* Tests need a boot they can watch inside a test budget, and a test that has to
|
|
42
|
+
* wait eight real seconds to prove the deadline works is a test that costs the
|
|
43
|
+
* suite eight seconds forever. Read from the environment rather than passed
|
|
44
|
+
* down through four call sites for one caller that is not the product.
|
|
45
|
+
*
|
|
46
|
+
* Anything unparseable, negative, or absent is the default. Zero is honoured —
|
|
47
|
+
* "give the jobs nothing" is a coherent thing for a test to ask for, and the
|
|
48
|
+
* timer path below still runs, so it exercises the same code the product does.
|
|
49
|
+
*/
|
|
50
|
+
export function bootDeadlineMs(env = process.env) {
|
|
51
|
+
const raw = env.AGENTS_DECK_BOOT_DEADLINE_MS;
|
|
52
|
+
if (raw === undefined || raw === "") return BOOT_DEADLINE_MS;
|
|
53
|
+
const n = Number(raw);
|
|
54
|
+
return Number.isFinite(n) && n >= 0 ? n : BOOT_DEADLINE_MS;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Await `work`, but never past `ms`.
|
|
59
|
+
*
|
|
60
|
+
* Answers `{ done: true, value }` or `{ done: false, value: undefined }`. A
|
|
61
|
+
* shape rather than a sentinel value, because three of the jobs this wraps
|
|
62
|
+
* resolve to `null` on purpose — "not attempted" is a real answer and must not
|
|
63
|
+
* read as "ran out of time".
|
|
64
|
+
*
|
|
65
|
+
* A rejection is a settled job, not a timeout: `{ done: true, value: undefined
|
|
66
|
+
* }`. Every caller here already attached its own rejection handler at the point
|
|
67
|
+
* the promise was created, so the throw has been dealt with and what is left to
|
|
68
|
+
* decide is only whether to keep waiting. Re-throwing would turn a job that
|
|
69
|
+
* failed politely into a boot that died.
|
|
70
|
+
*
|
|
71
|
+
* The timer is cleared the moment the job settles, so a boot whose jobs all
|
|
72
|
+
* answer at once does not hold the event loop for the rest of the deadline.
|
|
73
|
+
*
|
|
74
|
+
* It is deliberately NOT unref'd. An unref'd deadline is a deadline that does
|
|
75
|
+
* not fire when the only thing left in the process is the deadline itself —
|
|
76
|
+
* which is exactly the shape of a test that awaits nothing else, and would have
|
|
77
|
+
* made this function pass by exiting rather than by working. The cost of
|
|
78
|
+
* keeping it is at most one deadline's worth of a process that was about to
|
|
79
|
+
* end, against a deck that runs until Ctrl+C.
|
|
80
|
+
*/
|
|
81
|
+
export function within(work, ms, { setTimer = setTimeout, clearTimer = clearTimeout } = {}) {
|
|
82
|
+
return new Promise(resolve => {
|
|
83
|
+
let answered = false;
|
|
84
|
+
const timer = setTimer(() => {
|
|
85
|
+
if (answered) return;
|
|
86
|
+
answered = true;
|
|
87
|
+
resolve({ done: false, value: undefined });
|
|
88
|
+
}, ms);
|
|
89
|
+
Promise.resolve(work).then(
|
|
90
|
+
value => {
|
|
91
|
+
if (answered) return;
|
|
92
|
+
answered = true;
|
|
93
|
+
clearTimer(timer);
|
|
94
|
+
resolve({ done: true, value });
|
|
95
|
+
},
|
|
96
|
+
() => {
|
|
97
|
+
if (answered) return;
|
|
98
|
+
answered = true;
|
|
99
|
+
clearTimer(timer);
|
|
100
|
+
resolve({ done: true, value: undefined });
|
|
101
|
+
},
|
|
102
|
+
);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* A deadline shared by everything that draws on it, in the order they are
|
|
108
|
+
* awaited.
|
|
109
|
+
*
|
|
110
|
+
* One budget for the whole report rather than one each, because the rows are
|
|
111
|
+
* awaited in sequence and per-job deadlines would multiply: four jobs at eight
|
|
112
|
+
* seconds is a thirty-two second boot that every individual deadline would call
|
|
113
|
+
* within its budget. What a reader was promised is that the deck is ready
|
|
114
|
+
* within the deadline, and that promise is about the sum.
|
|
115
|
+
*
|
|
116
|
+
* `left()` never goes below zero, so a job reached after the budget is spent is
|
|
117
|
+
* given a zero-length slice and reported as still working — which it is.
|
|
118
|
+
*/
|
|
119
|
+
export function budget(ms, now = Date.now) {
|
|
120
|
+
const started = now();
|
|
121
|
+
return {
|
|
122
|
+
left: () => Math.max(0, ms - (now() - started)),
|
|
123
|
+
spent: () => now() - started,
|
|
124
|
+
/** Await `work` against whatever is left. */
|
|
125
|
+
within: (work, deps) => within(work, Math.max(0, ms - (now() - started)), deps),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
import { open, stat } from "node:fs/promises";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { StringDecoder } from "node:string_decoder";
|
|
7
|
+
import { createReadStream } from "node:fs";
|
|
8
|
+
// The NAMESPACE, never a named import. `import { createZstdDecompress }` is
|
|
9
|
+
// resolved at link time, and node:zlib has no such export before Node 22.15 —
|
|
10
|
+
// so the named form does not degrade on an older runtime, it throws before a
|
|
11
|
+
// single line of this module runs and takes the whole deck down with it. Caught
|
|
12
|
+
// by the timezone probe, which spawns a child that imports this file.
|
|
13
|
+
import zlib from "node:zlib";
|
|
7
14
|
import { STOP, walkRolloutDays } from "./codex-dir.mjs";
|
|
8
15
|
import { PRODUCT } from "./brand.mjs";
|
|
9
16
|
|
|
@@ -154,7 +161,75 @@ function foldTokenLine(series, raw) {
|
|
|
154
161
|
// Returns an ascending-by-time array of { ts, inp, out, cacheR, total } where
|
|
155
162
|
// `inp` includes the cached portion (Codex reports input_tokens incl. cache),
|
|
156
163
|
// or null if the file has no usable token_count events.
|
|
164
|
+
/**
|
|
165
|
+
* Codex compresses cold rollouts, and this is how the deck keeps reading them.
|
|
166
|
+
*
|
|
167
|
+
* openai/codex 0.153.0 added a background worker that rewrites any rollout older
|
|
168
|
+
* than seven days as `rollout-….jsonl.zst`. Its own source says the quiet part
|
|
169
|
+
* out loud — "Requires every reader of the Codex home to support compressed
|
|
170
|
+
* shared histories" — and this deck is one of those readers. The flag
|
|
171
|
+
* (`local_thread_store_compression`) is still `default_enabled: false`, so
|
|
172
|
+
* nothing on disk has changed yet; the failure it would cause is why this is
|
|
173
|
+
* here before it does. A reader that matched only `.jsonl` would have skipped
|
|
174
|
+
* every day past the seventh IN SILENCE, and the 30-day Codex window would have
|
|
175
|
+
* quietly collapsed to the last seven with figures that still looked right.
|
|
176
|
+
*
|
|
177
|
+
* Streamed, not decompressed whole. The plain path reads a chunk at a time
|
|
178
|
+
* precisely so a megabyte of prompt text is never buffered, and handing that
|
|
179
|
+
* property back for a one-line `zstdDecompressSync` would trade a silent
|
|
180
|
+
* undercount for a memory spike.
|
|
181
|
+
*
|
|
182
|
+
* `createZstdDecompress` arrived in Node 22.15 and this package declares
|
|
183
|
+
* `>=18`, so a deck on an older runtime cannot read them at all. It says so
|
|
184
|
+
* once, on the terminal it was started from, rather than counting zero and
|
|
185
|
+
* looking healthy.
|
|
186
|
+
*/
|
|
187
|
+
const COMPRESSED = ".jsonl.zst";
|
|
188
|
+
const createZstdDecompress = typeof zlib.createZstdDecompress === "function"
|
|
189
|
+
? zlib.createZstdDecompress
|
|
190
|
+
: null;
|
|
191
|
+
let warnedNoZstd = false;
|
|
192
|
+
|
|
193
|
+
async function readCompressedTokenSeries(filePath) {
|
|
194
|
+
if (!createZstdDecompress) {
|
|
195
|
+
if (!warnedNoZstd) {
|
|
196
|
+
warnedNoZstd = true;
|
|
197
|
+
console.error(
|
|
198
|
+
`${PRODUCT} codex-usage: this Node (${process.version}) cannot read Codex's compressed `
|
|
199
|
+
+ "rollouts; sessions older than about a week are being left out. Node 22.15 or newer reads them.",
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const series = [];
|
|
206
|
+
const decoder = new StringDecoder("utf8");
|
|
207
|
+
let pending = "";
|
|
208
|
+
const stream = createReadStream(filePath).pipe(createZstdDecompress());
|
|
209
|
+
for await (const chunk of stream) {
|
|
210
|
+
pending += decoder.write(chunk);
|
|
211
|
+
let from = 0;
|
|
212
|
+
let nl;
|
|
213
|
+
while ((nl = pending.indexOf("\n", from)) >= 0) {
|
|
214
|
+
foldTokenLine(series, pending.slice(from, nl));
|
|
215
|
+
from = nl + 1;
|
|
216
|
+
}
|
|
217
|
+
if (from > 0) pending = pending.slice(from);
|
|
218
|
+
}
|
|
219
|
+
pending += decoder.end();
|
|
220
|
+
if (pending) foldTokenLine(series, pending);
|
|
221
|
+
return series.length ? series : null;
|
|
222
|
+
} catch { return null; }
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** The reader, exported under a test-only name. The compressed path cannot be
|
|
226
|
+
* reached through `fetchCodexUsage` without a Codex home full of week-old
|
|
227
|
+
* sessions, and the thing worth checking is that both spellings produce the
|
|
228
|
+
* same series. */
|
|
229
|
+
export const readTokenSeriesForTest = filePath => readTokenSeries(filePath);
|
|
230
|
+
|
|
157
231
|
async function readTokenSeries(filePath) {
|
|
232
|
+
if (filePath.endsWith(COMPRESSED)) return readCompressedTokenSeries(filePath);
|
|
158
233
|
let fd;
|
|
159
234
|
try {
|
|
160
235
|
fd = await open(filePath, "r");
|
|
@@ -330,7 +405,10 @@ async function listRolloutFiles(sinceMs) {
|
|
|
330
405
|
await walkRolloutDays(
|
|
331
406
|
(dir, files) => {
|
|
332
407
|
for (const f of files) {
|
|
333
|
-
|
|
408
|
+
// Both spellings. A cold rollout is `rollout-….jsonl.zst` and its name
|
|
409
|
+
// still carries the timestamp parseRolloutTime reads, so nothing else
|
|
410
|
+
// in this function has to know.
|
|
411
|
+
if (!f.endsWith(".jsonl") && !f.endsWith(COMPRESSED)) continue;
|
|
334
412
|
const t = parseRolloutTime(f);
|
|
335
413
|
if (t != null && nowMs - t <= sinceMs) {
|
|
336
414
|
out.push({ path: join(dir, f), startMs: t });
|