agent-dag 3.9.0 → 3.11.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.
@@ -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);--sm-edge: color-mix(in srgb, var(--text) 36%, transparent);--sm-fill: color-mix(in srgb, var(--text) 5%, 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);--sm-edge: color-mix(in srgb, var(--text) 46%, transparent);--sm-fill: color-mix(in srgb, var(--text) 5%, 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-color:transparent;border:2px solid transparent;background-clip:padding-box;border-radius:999px;transition:background-color .16s ease-out}:hover::-webkit-scrollbar-thumb,:focus-within::-webkit-scrollbar-thumb{background-color:var(--line)}*::-webkit-scrollbar-thumb:hover{background-color:var(--muted-dim)}*{scrollbar-color:transparent transparent;scrollbar-width:thin}:hover,:focus-within{scrollbar-color:var(--line) transparent}: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:0 1px 2px #0000004d,0 14px 34px #00000057;animation:popIn .14s cubic-bezier(.22,1,.36,1);text-align:left}.sm-switches{display:flex;flex-direction:column;gap:12px}.sm-switch{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:20px}.sm-switch-label{font-weight:500}.sm-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}.sm-toggle:hover{border-color:var(--accent)}.sm-toggle:active{transform:scale(.97)}.sm-toggle[aria-checked=true]{background:var(--accent);border-color:var(--accent)}.sm-toggle-knob{position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%;background:var(--muted);transition:transform .14s cubic-bezier(.22,1,.36,1),background .14s ease}.sm-toggle[aria-checked=true] .sm-toggle-knob{transform:translate(13px);background:var(--bg)}.sm-setting,.sm-channel{display:flex;flex-direction:column;gap:5px}.sm-channel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:var(--ctl-h)}.sm-channel-name{margin:0;font-size:11px;font-weight:500;color:var(--text-dim)}button.btn.sm-channel-action{padding:0 10px;font-size:11px;border-color:var(--sm-edge);background:var(--sm-fill)}.sm-tones{display:flex;flex-direction:column;gap:18px;padding-top:14px;border-top:1px solid var(--line)}.sm-tone{display:flex;flex-direction:column;gap:9px}.sm-tone-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.sm-tone-name{margin:0;font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:color-mix(in srgb,var(--muted) 88%,var(--panel));font-weight:500}button.btn.sm-hear{padding:0 8px;gap:4px;font-size:11px;border-color:var(--sm-edge);background:var(--sm-fill);color:color-mix(in srgb,var(--text) 88%,var(--panel))}.sm-channel-state{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}.sm-channel-state[data-ok]{color:color-mix(in srgb,var(--ok) 70%,var(--text))}.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:18px;accent-color:var(--accent)}@supports selector(input::-webkit-slider-runnable-track){.sm-row input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent}.sm-row input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:999px;background:linear-gradient(to right,var(--accent) 0 var(--sm-level, 0%),color-mix(in srgb,var(--text) 14%,transparent) var(--sm-level, 0%) 100%)}.sm-row input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:11px;height:11px;margin-top:-4px;border-radius:50%;background:var(--accent)}}@supports selector(input::-moz-range-track){.sm-row input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent}.sm-row input[type=range]::-moz-range-track{height:3px;border-radius:999px;background:color-mix(in srgb,var(--text) 14%,transparent)}.sm-row input[type=range]::-moz-range-progress{height:3px;border-radius:999px;background:var(--accent)}.sm-row input[type=range]::-moz-range-thumb{width:11px;height:11px;border:none;border-radius:50%;background:var(--accent)}}.sound-menu .sm-read{color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}.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(--sm-fill);color:var(--text);border:1px solid var(--sm-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:12px;border-top:1px solid var(--line);font-size:11px;color:color-mix(in srgb,var(--text-dim) 88%,var(--panel))}.sm-foot 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:1px 5px;margin-right:7px}.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 .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)}.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 .notify-ask{display:inline-flex;align-items:center;min-height:24px;margin-left:6px;padding:3px 9px;border-radius:999px;background:transparent;border:1px dashed var(--ctl-edge);color:var(--muted);font:inherit;font-size:11px;cursor:pointer;white-space:nowrap;transition:border-color .12s,color .12s,transform .14s cubic-bezier(.23,1,.32,1)}.topbar .notify-ask:hover{border-color:color-mix(in srgb,var(--warn) 85%,transparent);color:var(--warn)}.topbar .notify-ask:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.topbar .notify-ask:active{transform:none}}.topbar .notify-said{display:inline-flex;align-items:center;min-height:24px;margin-left:6px;padding:3px 2px;font-size:11px;white-space:nowrap;color:var(--muted)}.topbar .notify-said-blocked{color:var(--warn)}.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)}.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:not(:has(.detail)){grid-template-columns:1fr}.app:has(.session-list):not(:has(.detail)){grid-template-columns:240px 1fr}.app:has(.accounts-panel):not(:has(.detail)){grid-template-columns:288px 1fr}.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 .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[data-family=opus]{color:#f0abfc;border-color:#f0abfc66;background:#f0abfc0f}.model-chip[data-family=sonnet]{color:#7dd3fc;border-color:#7dd3fc66;background:#7dd3fc0f}.model-chip[data-family=haiku]{color:#86efac;border-color:#86efac66;background:#86efac0f}.model-chip[data-family=fable],.model-chip[data-family=mythos]{color:#fcd34d;border-color:#fcd34d66;background:#fcd34d0f}:root[data-theme=light] .model-chip[data-family=opus]{color:#6b21a8;border-color:#7e22ce8c;background:#7e22ce24}:root[data-theme=light] .model-chip[data-family=sonnet]{color:#075985;border-color:#0369a18c;background:#0369a124}:root[data-theme=light] .model-chip[data-family=haiku]{color:#166534;border-color:#15803d8c;background:#15803d24}:root[data-theme=light] .model-chip[data-family=fable],:root[data-theme=light] .model-chip[data-family=mythos]{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}.session-list .sl-waiting-tool{font-weight:500;opacity:.75}.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] .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)}.uh-range.up-period{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin:14px var(--panel-inset) 10px;padding:0;border:none;border-bottom:1px solid color-mix(in srgb,var(--text) 5%,transparent);border-radius:0;background:transparent}.up-period .uh-range-btn{display:grid;grid-template-columns:max-content;grid-template-rows:1fr auto;align-items:center;justify-content:center;min-height:30px;padding:0;border-radius:0}.up-period .uh-range-btn:after{content:"";margin-inline:-3px;margin-bottom:-1px;height:2px;border-radius:1px;background:transparent;transition:background-color .12s ease-out}.up-period .uh-range-btn:hover{color:color-mix(in srgb,var(--text) 45%,var(--muted))}.up-period .uh-range-btn[aria-pressed=true]{background:transparent;color:var(--text)}.up-period .uh-range-btn[aria-pressed=true]:hover{color:var(--text)}.up-period .uh-range-btn[aria-pressed=true]:after{background:var(--accent)}.up-period .uh-range-btn:focus-visible{outline-offset:-4px;border-radius:4px}.up-stale{opacity:var(--dim-stale);transition:opacity .14s ease-out}.up-dot-past{visibility:hidden}.up-session-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--text-dim)}.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-disclose{display:flex;align-items:baseline;gap:8px;flex:1 1 auto;min-width:0;margin:-5px 0;padding:5px 0;border:none;background:transparent;font:inherit;color:inherit;letter-spacing:inherit;text-align:left;text-transform:inherit;cursor:pointer;transition:color .12s ease,transform .14s cubic-bezier(.23,1,.32,1)}.up-disclose:hover{color:var(--text)}.up-disclose:active{transform:scale(.97)}.up-disclose:focus-visible{outline-offset:-2px}.up-chev{flex:none;align-self:center;margin-left:auto;color:var(--text-dim);transition:transform .14s cubic-bezier(.23,1,.32,1),color .12s ease}.up-section-age+.up-chev{margin-left:0}.up-disclose:hover .up-chev{color:var(--text)}.up-disclose[aria-expanded=true] .up-chev{transform:rotate(180deg)}.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-sessions[hidden]{display:none}.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,.ver-banner .ver-act:active:not(:disabled),.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,.sm-toggle:active,.up-disclose: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}.up-chev{transition: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-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-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-gear{margin-left:auto}.bw-gear.on{color:var(--accent)}.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-write-err{border-color:var(--err)}.bw-write-err .bw-row-detail{white-space:normal;overflow:visible}.bw-write-err-x{color:var(--err)}.bw-row .btn{white-space:nowrap}.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-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)}@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-rc-verdict{margin:0;font-size:11px;line-height:1.5;color:var(--text-secondary)}.bw-rc-verdict.exposed{color:var(--warn)}.bw-rc-foreign{margin:0;display:flex;flex-direction:column;gap:4px;font-size:10px;line-height:1.5;color:var(--warn)}.bw-rc-body{display:flex;flex-direction:column;gap:8px}.bw-rc-note{margin:0;font-size:10px;line-height:1.5;color:var(--text-secondary)}.bw-rc-cmd{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border-radius:6px;background:var(--bg-soft);border:1px solid var(--line)}.bw-rc-cmd code{flex:1;min-width:0;font-size:10px;line-height:1.6;white-space:pre-wrap;word-break:break-all;-webkit-user-select:all;user-select:all;color:var(--text)}button.btn.bw-rc-copy{flex:none;font-size:10px;padding:2px 8px}.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}}@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)}
@@ -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-CLkhZk3Y.js"></script>
44
- <link rel="stylesheet" crossorigin href="/assets/index-IAX04wVV.css">
43
+ <script type="module" crossorigin src="/assets/index-Dya_sxoa.js"></script>
44
+ <link rel="stylesheet" crossorigin href="/assets/index-XrBtr430.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": "3.9.0",
3
+ "version": "3.11.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": {
@@ -31,96 +31,120 @@
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.11.0": [
35
+ {
36
+ "title": "🗂 The session list waits to be asked for",
37
+ "body": "**BY SESSION in the Usage panel now starts collapsed.** It is the one block in that panel with no ceiling — every other section is two or three rows, or a model table bounded by the models that exist — and it was the reason the panel scrolled at all. Shut, the whole panel is one screen: quota, period, money, models. Press the heading to open it, and it stays open; ccdeck remembers your answer from then on.\n\nThe count of what is behind it is on the heading's tooltip, so collapsing it does not hide how much there is.\n\n**Scrollbars are also gone until you point at the thing that scrolls.** Nothing moves when they appear — the track keeps its width in both states, so no text shifts under the pointer as it arrives."
38
+ },
39
+ {
40
+ "title": "📊 today · month · all, as tabs that remember",
41
+ "body": "**The Usage panel's period switcher is a full-width row of tabs** rather than a pill floating over the column, with a thin cyan mark under the word it belongs to. It governs the figures beneath it, so it now looks like it does.\n\n**Your chosen period survives a reload.** It was the one preference in that panel that did not.\n\n**It costs one Tab stop instead of three.** Tab into the strip, then move with ←/→ or Home/End, and press Enter to choose. Arrowing past a period no longer starts reading it — moving and choosing are separate now, which matters on `all`.\n\nAnd **`month` says which month.** Hover it: this is the calendar month, from the 1st — not the last 30 days. `today` and `all` say what they cover too."
42
+ },
43
+ {
44
+ "title": "🔔 Sounds and Notifications are two switches, and Browser notifications is a channel",
45
+ "body": "**The sound menu has been rebuilt.** Sounds and Notifications are real switches now instead of words that read like status. Under them, **Browser notifications** is named as what it is — one of the two ways ccdeck can reach you — rather than sitting there as a third setting that seemed to contradict the one above it.\n\nThere are two notifiers and they never both fire: the page raises one when the deck is open but hidden, and the server raises one when no page is open at all. Only the first needs a browser permission, which is why the permission belongs to a channel and not to the feature. **Turning Notifications on now asks the browser on that same press** — no second control to hunt for.\n\n`M` mutes and unmutes sounds from anywhere. **Hear it** plays the tone even when Sounds is off, so you can pick one before turning them back on."
46
+ },
47
+ {
48
+ "title": "🧹 No agent, no empty panel",
49
+ "body": "**The detail panel no longer appears when nothing is selected.** It used to sit there empty, and a tab on the edge of the canvas existed to bring it back after you closed it — both are gone. Select an agent and the panel is there; press **D** to toggle it yourself.\n\nThe canvas is that much wider whenever you are not reading one agent."
50
+ }
51
+ ],
52
+ "3.10.0": [
53
+ {
54
+ "title": "🔌 Who else can drive your browser, and where to see it",
55
+ "body": "**Browser Watch has a Remote control section.** The Claude in Chrome extension holds a connection open to Anthropic's relay, and that connection is registered against your **account**, not against this machine — so any Claude Code session signed in to the same account, running anywhere, can enumerate and drive this browser, and nothing prompts you on the machine being driven.\n\nThe panel now says whether that is the case here, and what the extension is actually allowed to do in each profile — enabled or switched off, every site or only the ones it was granted, and which of the powerful APIs it holds. That last part is not what `chrome://extensions` shows you: the per-site list there is enforced by the extension, on itself, while the grant underneath stays exactly as wide as it was.\n\nIf you want it closed, the section hands you the one command that closes it — as text, to paste in your own terminal. **ccdeck never runs it and never asks for your password**, and it never will: no part of this deck elevates, and a dashboard that could raise a password box on request would be a gift to anything else running on the machine. If the block is already in place, the section offers the command that takes it back out. And if something else in your hosts file already points that name somewhere, it says so and leaves the line alone — ccdeck only removes the line ccdeck wrote.\n\nAll of this is two file reads and no network call. It was written some releases ago and, until now, was not connected to any screen.\n\n**Also:** the README said `share` produces a `ccdeck1:` blob. It produces `ccdeck2:` — `ccdeck1:` has been read-only legacy for a while."
56
+ }
57
+ ],
34
58
  "3.9.0": [
35
59
  {
36
- "title": "\ud83c\udf9b\ufe0f Five switches that were not where the thing they control is",
37
- "body": "**The session list has a button again.** It lost one a while back and only the `L` key was left \u2014 and `L` is written down in one place, a shortcuts sheet behind a small `?` in the corner of the canvas. If you use a mouse there was no way to open the list at all. The `\u2630` is back at the left of the top bar.\n\n**The Notifications switch now tells you whether the browser will actually show one.** It said `on` while this browser had never been asked for permission, which is not the same thing. It now says so on that row and offers the ask right there. Before, the only place to grant it was a button that appears solely while a session is stuck waiting \u2014 so on a machine where that rarely happens you could not switch notifications on at all.\n\n**Started with `--workspace` or `--scope` and seeing nothing?** The empty screen used to tell everyone to \"run `claude` or `codex` in any folder\", which is the one thing that cannot work for you. It now names the folder the deck is actually watching.\n\n**Browser Watch says when a setting did not save.** Flipping the switch and having it fail showed a red line reading \"Could not read\" \u2014 about reading history, not about your press \u2014 and ten seconds later the panel wiped it and looked perfectly healthy with the setting unchanged. A failed save now says so, in its own words, and stays until you dismiss it. The \"nobody browsing for\" menu also follows the stored value again: change it in a second tab and this one never caught up.\n\n**The deck no longer restarts itself when nothing on screen offers to stop it.** Thirty seconds after the last agent went quiet, with a new version on disk, the server would exit, come back and reload the page. The `auto when idle` switch that controls that lives inside the update banner \u2014 so if you had closed the banner with its `\u00d7`, it happened with no visible setting anywhere. Closing the banner now also stands down the restart; clicking the version chip brings back both together."
60
+ "title": "🎛️ Five switches that were not where the thing they control is",
61
+ "body": "**The session list has a button again.** It lost one a while back and only the `L` key was left — and `L` is written down in one place, a shortcuts sheet behind a small `?` in the corner of the canvas. If you use a mouse there was no way to open the list at all. The `☰` is back at the left of the top bar.\n\n**The Notifications switch now tells you whether the browser will actually show one.** It said `on` while this browser had never been asked for permission, which is not the same thing. It now says so on that row and offers the ask right there. Before, the only place to grant it was a button that appears solely while a session is stuck waiting — so on a machine where that rarely happens you could not switch notifications on at all.\n\n**Started with `--workspace` or `--scope` and seeing nothing?** The empty screen used to tell everyone to \"run `claude` or `codex` in any folder\", which is the one thing that cannot work for you. It now names the folder the deck is actually watching.\n\n**Browser Watch says when a setting did not save.** Flipping the switch and having it fail showed a red line reading \"Could not read\" — about reading history, not about your press — and ten seconds later the panel wiped it and looked perfectly healthy with the setting unchanged. A failed save now says so, in its own words, and stays until you dismiss it. The \"nobody browsing for\" menu also follows the stored value again: change it in a second tab and this one never caught up.\n\n**The deck no longer restarts itself when nothing on screen offers to stop it.** Thirty seconds after the last agent went quiet, with a new version on disk, the server would exit, come back and reload the page. The `auto when idle` switch that controls that lives inside the update banner — so if you had closed the banner with its `×`, it happened with no visible setting anywhere. Closing the banner now also stands down the restart; clicking the version chip brings back both together."
38
62
  }
39
63
  ],
40
64
  "3.8.9": [
41
65
  {
42
- "title": "\ud83d\udda5\ufe0f Four things that only went wrong on somebody else's operating system",
43
- "body": "**Ubuntu:** the deck knew where Chromium and Brave keep their profiles when installed as a snap or a flatpak \u2014 which on a default Ubuntu is the only place Chromium is \u2014 but not what those programs are called. So it reported them as not running while they were, and refused to quit them. Both now work.\n\n**Windows:** the deck asked the system whether it could write to the folder an update installs into, and Windows always answers yes for a folder whatever the permissions say. It offered you an update that then died inside npm with a permission error. It now finds out by trying, and declines up front with the command to run yourself \u2014 which is what every other platform already got.\n\n**Linux:** if `XDG_DATA_HOME` was set to something starting with `~`, as it is from a systemd unit or a Dockerfile, the deck and claude-swap looked in two different places for your accounts. The panel said you had none while `cswap list` showed them all.\n\n**Plain terminals:** six messages used a typographic dash the old Windows console and the Linux text console cannot draw, so a box appeared mid-sentence \u2014 including in the line that explains why no events are arriving. They use the plain form on those terminals now, like everything else already did."
66
+ "title": "🖥️ Four things that only went wrong on somebody else's operating system",
67
+ "body": "**Ubuntu:** the deck knew where Chromium and Brave keep their profiles when installed as a snap or a flatpak — which on a default Ubuntu is the only place Chromium is — but not what those programs are called. So it reported them as not running while they were, and refused to quit them. Both now work.\n\n**Windows:** the deck asked the system whether it could write to the folder an update installs into, and Windows always answers yes for a folder whatever the permissions say. It offered you an update that then died inside npm with a permission error. It now finds out by trying, and declines up front with the command to run yourself — which is what every other platform already got.\n\n**Linux:** if `XDG_DATA_HOME` was set to something starting with `~`, as it is from a systemd unit or a Dockerfile, the deck and claude-swap looked in two different places for your accounts. The panel said you had none while `cswap list` showed them all.\n\n**Plain terminals:** six messages used a typographic dash the old Windows console and the Linux text console cannot draw, so a box appeared mid-sentence — including in the line that explains why no events are arriving. They use the plain form on those terminals now, like everything else already did."
44
68
  }
45
69
  ],
46
70
  "3.8.8": [
47
71
  {
48
- "title": "\ud83d\udcc9 A false 99% on the memory chart, and three other quiet failures",
49
- "body": "**The machine meter no longer invents a reading.** When the deck could not measure memory \u2014 a subprocess that would not start under load, or one that took too long \u2014 it substituted a number that means something else, and on a Mac that reads as about 99% used. The meter went red for half a minute, and because the chart keeps the highest value in each minute, that false peak stayed on it for a full day. A poll that cannot measure now keeps the last reading and records nothing: a gap in the chart is honest.\n\n**A failed ccusage repair no longer disables the repair.** If the deck found a half-installed copy it removes it and starts again. On Windows that removal can fail for a few seconds because the program it just ran still has the folder open \u2014 and the deck then treated the attempt as spent and never tried again for the rest of the session, leaving the panel permanently unable to read your usage. It now only counts a repair that happened.\n\n**Changing the auto-switch interval takes effect even during startup.** Set it in the first seconds after launch and the timer kept the old value for the life of the process, while the panel showed the new one.\n\n**Codex sessions with very large histories no longer cost hundreds of megabytes to read.** The deck read the whole file to find four values that live at its two ends \u2014 measured at 185 MB of memory and 95ms of frozen interface for one 44 MB session. It now reads only the ends."
72
+ "title": "📉 A false 99% on the memory chart, and three other quiet failures",
73
+ "body": "**The machine meter no longer invents a reading.** When the deck could not measure memory — a subprocess that would not start under load, or one that took too long — it substituted a number that means something else, and on a Mac that reads as about 99% used. The meter went red for half a minute, and because the chart keeps the highest value in each minute, that false peak stayed on it for a full day. A poll that cannot measure now keeps the last reading and records nothing: a gap in the chart is honest.\n\n**A failed ccusage repair no longer disables the repair.** If the deck found a half-installed copy it removes it and starts again. On Windows that removal can fail for a few seconds because the program it just ran still has the folder open — and the deck then treated the attempt as spent and never tried again for the rest of the session, leaving the panel permanently unable to read your usage. It now only counts a repair that happened.\n\n**Changing the auto-switch interval takes effect even during startup.** Set it in the first seconds after launch and the timer kept the old value for the life of the process, while the panel showed the new one.\n\n**Codex sessions with very large histories no longer cost hundreds of megabytes to read.** The deck read the whole file to find four values that live at its two ends — measured at 185 MB of memory and 95ms of frozen interface for one 44 MB session. It now reads only the ends."
50
74
  }
51
75
  ],
52
76
  "3.8.7": [
53
77
  {
54
- "title": "\ud83e\udde0 Four things in the panel that behaved wrongly",
55
- "body": "**Today's figure no longer overshoots.** Once a minute, when a fresh reading landed, the headline briefly counted past the true number and back down \u2014 it was measuring the last minute of spend from a starting point one moment out of date. The reading and its starting point are now recorded together, so there is no moment where they can disagree.\n\n**Browser Watch marks findings read when you close it, not when you open it.** It was clearing the badge immediately, and stamping every new finding as read the moment it arrived \u2014 so anything that turned up while you were reading was never badged at all. It was also writing to storage four times a second the whole time the panel was open.\n\n**A hidden tool category can always be brought back.** Hide one, leave the deck running, and once the canvas had turned over the row of chips disappeared while the filter stayed on \u2014 no bubbles, and nothing to press. Only reloading fixed it. The chips now stay for as long as anything is hidden.\n\n**Clicking a session's name no longer switches auto-fit off.** The deck was reading its own camera move as you grabbing the canvas, and remembered it across restarts, with nothing said."
78
+ "title": "🧠 Four things in the panel that behaved wrongly",
79
+ "body": "**Today's figure no longer overshoots.** Once a minute, when a fresh reading landed, the headline briefly counted past the true number and back down — it was measuring the last minute of spend from a starting point one moment out of date. The reading and its starting point are now recorded together, so there is no moment where they can disagree.\n\n**Browser Watch marks findings read when you close it, not when you open it.** It was clearing the badge immediately, and stamping every new finding as read the moment it arrived — so anything that turned up while you were reading was never badged at all. It was also writing to storage four times a second the whole time the panel was open.\n\n**A hidden tool category can always be brought back.** Hide one, leave the deck running, and once the canvas had turned over the row of chips disappeared while the filter stayed on — no bubbles, and nothing to press. Only reloading fixed it. The chips now stay for as long as anything is hidden.\n\n**Clicking a session's name no longer switches auto-fit off.** The deck was reading its own camera move as you grabbing the canvas, and remembered it across restarts, with nothing said."
56
80
  }
57
81
  ],
58
82
  "3.8.6": [
59
83
  {
60
- "title": "\ud83d\uddc2\ufe0f Two decks can no longer both claim the same log",
61
- "body": "When several decks share one events log they elect a single writer for it, so nothing is recorded twice. That election compared the path as typed \u2014 so two decks reaching the SAME file by different spellings each thought they were alone, both wrote every event, and each believed the log was theirs to clear.\n\nDifferent spellings are ordinary, not exotic: a shortened Windows home directory, a mapped or substituted drive, a junction, or on macOS `/tmp` against `/private/tmp`. The visible symptoms were duplicated tool calls after a restart, and Clear wiping history belonging to another deck.\n\nThe path is now canonicalised the same way the watched folder already was. It works on a first run too, before the log file exists."
84
+ "title": "🗂️ Two decks can no longer both claim the same log",
85
+ "body": "When several decks share one events log they elect a single writer for it, so nothing is recorded twice. That election compared the path as typed — so two decks reaching the SAME file by different spellings each thought they were alone, both wrote every event, and each believed the log was theirs to clear.\n\nDifferent spellings are ordinary, not exotic: a shortened Windows home directory, a mapped or substituted drive, a junction, or on macOS `/tmp` against `/private/tmp`. The visible symptoms were duplicated tool calls after a restart, and Clear wiping history belonging to another deck.\n\nThe path is now canonicalised the same way the watched folder already was. It works on a first run too, before the log file exists."
62
86
  }
63
87
  ],
64
88
  "3.8.5": [
65
89
  {
66
- "title": "\u26d4 Cancelling a sign-in no longer adds the account anyway",
67
- "body": "Press Escape while adding a Claude account and the deck killed the sign-in \u2014 and then, sometimes, registered the account regardless, switched to it, and told you it had worked.\n\nThe deck asks the tools it runs whether they finished cleanly. A program that is well behaved about being cancelled tidies up and exits with a success code, and the deck was reading that as \"it finished\" rather than \"I stopped it\". `claude auth login` is exactly that kind of program.\n\nA cancelled run now reports as cancelled. Everything that was not cancelled is unaffected."
90
+ "title": "⛔ Cancelling a sign-in no longer adds the account anyway",
91
+ "body": "Press Escape while adding a Claude account and the deck killed the sign-in — and then, sometimes, registered the account regardless, switched to it, and told you it had worked.\n\nThe deck asks the tools it runs whether they finished cleanly. A program that is well behaved about being cancelled tidies up and exits with a success code, and the deck was reading that as \"it finished\" rather than \"I stopped it\". `claude auth login` is exactly that kind of program.\n\nA cancelled run now reports as cancelled. Everything that was not cancelled is unaffected."
68
92
  }
69
93
  ],
70
94
  "3.8.4": [
71
95
  {
72
- "title": "\ud83e\uddf7 Your own hooks can no longer be eaten by two decks starting together",
73
- "body": "If you keep hooks of your own in `settings.json`, the deck parks them while it installs and puts them back afterwards. Two decks starting at the same moment could interleave inside that, and the loser wrote a version of the file computed before the restore \u2014 so your hook was gone from `settings.json` and gone from the park, which was its only other copy.\n\nThere was already a check for this, and it had a hole: if the last-moment re-read of the file failed, it read that as \"nothing changed\" and wrote anyway. A failed read is the one moment that check was most needed, because the usual reason a file cannot be read for a few milliseconds is that something else has just written it.\n\n`ccdeck --uninstall` had no such check at all and could overwrite a deck that was starting, then exit 0 saying it had succeeded. It has one now, and when it declines it says so and tells you to run it again rather than reporting that there was nothing to remove."
96
+ "title": "🧷 Your own hooks can no longer be eaten by two decks starting together",
97
+ "body": "If you keep hooks of your own in `settings.json`, the deck parks them while it installs and puts them back afterwards. Two decks starting at the same moment could interleave inside that, and the loser wrote a version of the file computed before the restore — so your hook was gone from `settings.json` and gone from the park, which was its only other copy.\n\nThere was already a check for this, and it had a hole: if the last-moment re-read of the file failed, it read that as \"nothing changed\" and wrote anyway. A failed read is the one moment that check was most needed, because the usual reason a file cannot be read for a few milliseconds is that something else has just written it.\n\n`ccdeck --uninstall` had no such check at all and could overwrite a deck that was starting, then exit 0 saying it had succeeded. It has one now, and when it declines it says so and tells you to run it again rather than reporting that there was nothing to remove."
74
98
  }
75
99
  ],
76
100
  "3.8.3": [
77
101
  {
78
- "title": "\ud83e\ude9f Windows: two settings files that could refuse to save",
79
- "body": "On Windows a file cannot be moved into place while anything else has it open, and Defender and the search indexer open a file the instant it is written. The deck has had a retry for that for a long time, and two files written in the last few days were not using it: the notifications preference, and Browser Watch's episode archive.\n\nWhen it bit, the notifications switch silently did not stick, and Browser Watch answered an error and showed an empty panel. Both now retry the way everything else in the deck already did.\n\nNothing changes on macOS or Linux, where the operating system never refused the move in the first place \u2014 which is why this got past a green test suite on both."
102
+ "title": "🪟 Windows: two settings files that could refuse to save",
103
+ "body": "On Windows a file cannot be moved into place while anything else has it open, and Defender and the search indexer open a file the instant it is written. The deck has had a retry for that for a long time, and two files written in the last few days were not using it: the notifications preference, and Browser Watch's episode archive.\n\nWhen it bit, the notifications switch silently did not stick, and Browser Watch answered an error and showed an empty panel. Both now retry the way everything else in the deck already did.\n\nNothing changes on macOS or Linux, where the operating system never refused the move in the first place — which is why this got past a green test suite on both."
80
104
  }
81
105
  ],
82
106
  "3.8.2": [
83
107
  {
84
- "title": "\u2328\ufe0f A closed-behind-your-back dialog no longer kills every keyboard shortcut",
85
- "body": "Open the context ring on a session's card and leave it open. The session finishes, and a couple of minutes later the canvas evicts it \u2014 or you press Clear. The dialog vanished, and from that moment every shortcut in the deck stopped working: Space, C, R, F, L, H, U, A, J, K, T, M, and the trash button too. Only reloading the page brought them back.\n\nThe deck was still counting the dialog as open, because it remembered which session you had opened it for rather than whether anything was on screen. It now closes the dialog when its session leaves the board, which is what should have happened in the first place. The end-of-session recap had the same problem and is fixed with it."
108
+ "title": "⌨️ A closed-behind-your-back dialog no longer kills every keyboard shortcut",
109
+ "body": "Open the context ring on a session's card and leave it open. The session finishes, and a couple of minutes later the canvas evicts it — or you press Clear. The dialog vanished, and from that moment every shortcut in the deck stopped working: Space, C, R, F, L, H, U, A, J, K, T, M, and the trash button too. Only reloading the page brought them back.\n\nThe deck was still counting the dialog as open, because it remembered which session you had opened it for rather than whether anything was on screen. It now closes the dialog when its session leaves the board, which is what should have happened in the first place. The end-of-session recap had the same problem and is fixed with it."
86
110
  }
87
111
  ],
88
112
  "3.8.1": [
89
113
  {
90
- "title": "\ud83d\udd12 Security: update if the deck runs on a Mac",
91
- "body": "A local process able to reach the deck's port \u2014 no token, no browser, no tab \u2014 could get a string of its choosing compiled as AppleScript when the deck raised a desktop notification with no page open. On macOS that is code running as you.\n\nThe strings were already passed as arguments rather than pasted into the script, which is normally the whole defence. It is not enough for `osascript`: its option parser reads any argument starting with a dash as an option, so a name beginning with `-e` was taken as more script instead of as text. Every place the deck hands `osascript` or `notify-send` something from outside now carries an explicit end-of-options marker, so nothing from outside can be read as an instruction again.\n\nNothing to change on your side beyond updating. If you would rather keep the deck off the desktop entirely, the Notifications switch in the sound menu does that, and `AGENTS_DECK_NO_NOTIFY=1` does it at launch \u2014 but the fix is the thing to have."
114
+ "title": "🔒 Security: update if the deck runs on a Mac",
115
+ "body": "A local process able to reach the deck's port — no token, no browser, no tab — could get a string of its choosing compiled as AppleScript when the deck raised a desktop notification with no page open. On macOS that is code running as you.\n\nThe strings were already passed as arguments rather than pasted into the script, which is normally the whole defence. It is not enough for `osascript`: its option parser reads any argument starting with a dash as an option, so a name beginning with `-e` was taken as more script instead of as text. Every place the deck hands `osascript` or `notify-send` something from outside now carries an explicit end-of-options marker, so nothing from outside can be read as an instruction again.\n\nNothing to change on your side beyond updating. If you would rather keep the deck off the desktop entirely, the Notifications switch in the sound menu does that, and `AGENTS_DECK_NO_NOTIFY=1` does it at launch — but the fix is the thing to have."
92
116
  }
93
117
  ],
94
118
  "3.8.0": [
95
119
  {
96
- "title": "\ud83d\udd15 Notifications now have an off switch",
97
- "body": "3.7.0 gave you a \"notify me\" button and no way back. Turning them off meant digging into your browser's site settings \u2014 which no page can do for you \u2014 and that still left the other notifier, the one the deck raises when no page is open at all. Silencing that one meant quitting the deck and starting it again with `AGENTS_DECK_NO_NOTIFY=1` in front. The person who wanted quiet was the one doing the work.\n\nThere is a **Notifications** switch in the sound menu now, beside the one for sound \u2014 that menu is already \"how loudly does this deck interrupt me\". One switch governs both notifiers, it takes effect immediately without a restart, and it is remembered across restarts.\n\nIt is kept by the deck rather than by your browser, because the second notifier runs when no page exists and a setting living in a page could never reach it. `AGENTS_DECK_NO_NOTIFY=1` still wins over the switch \u2014 a machine told at launch to stay off the desktop stays off it \u2014 and when that is the case the menu says so instead of showing an \"on\" that will not happen."
120
+ "title": "🔕 Notifications now have an off switch",
121
+ "body": "3.7.0 gave you a \"notify me\" button and no way back. Turning them off meant digging into your browser's site settings — which no page can do for you — and that still left the other notifier, the one the deck raises when no page is open at all. Silencing that one meant quitting the deck and starting it again with `AGENTS_DECK_NO_NOTIFY=1` in front. The person who wanted quiet was the one doing the work.\n\nThere is a **Notifications** switch in the sound menu now, beside the one for sound — that menu is already \"how loudly does this deck interrupt me\". One switch governs both notifiers, it takes effect immediately without a restart, and it is remembered across restarts.\n\nIt is kept by the deck rather than by your browser, because the second notifier runs when no page exists and a setting living in a page could never reach it. `AGENTS_DECK_NO_NOTIFY=1` still wins over the switch — a machine told at launch to stay off the desktop stays off it — and when that is the case the menu says so instead of showing an \"on\" that will not happen."
98
122
  }
99
123
  ],
100
124
  "3.7.1": [
101
125
  {
102
- "title": "\ud83d\udd14 The notifications now fire on the thing that actually stops your agent",
103
- "body": "3.7.0 could tell you a session was waiting \u2014 but only when Claude Code asked permission to run a tool. If you work with permissions bypassed, that never happens, and the whole feature was silent for you. Measured on one real log: 1683 events, every one of them in bypassPermissions, and a single permission prompt in the entire history.\n\nWhat fires constantly on that setup is the other kind: the agent asking you a question and stopping for the answer. The deck was throwing those away \u2014 no amber chip, no row in the sidebar, no notification, and no \"notify me\" button, because the button only appears while something is actually blocked.\n\nNow they count. The card carries the question itself rather than a generic \"Your turn\" \u2014 \"paycore needs your input: merge both branches to main, or just one?\" \u2014 and so does the notification, on the desktop, whether the tab is behind something or not open at all.\n\nAn idle prompt still stays quiet: a turn that ended is not a session that is stuck, and a channel that cries wolf is one you switch off."
126
+ "title": "🔔 The notifications now fire on the thing that actually stops your agent",
127
+ "body": "3.7.0 could tell you a session was waiting — but only when Claude Code asked permission to run a tool. If you work with permissions bypassed, that never happens, and the whole feature was silent for you. Measured on one real log: 1683 events, every one of them in bypassPermissions, and a single permission prompt in the entire history.\n\nWhat fires constantly on that setup is the other kind: the agent asking you a question and stopping for the answer. The deck was throwing those away — no amber chip, no row in the sidebar, no notification, and no \"notify me\" button, because the button only appears while something is actually blocked.\n\nNow they count. The card carries the question itself rather than a generic \"Your turn\" — \"paycore needs your input: merge both branches to main, or just one?\" — and so does the notification, on the desktop, whether the tab is behind something or not open at all.\n\nAn idle prompt still stays quiet: a turn that ended is not a session that is stuck, and a channel that cries wolf is one you switch off."
104
128
  }
105
129
  ],
106
130
  "3.7.0": [
107
131
  {
108
- "title": "\ud83d\udd14 The deck can reach you when you are not looking at it",
109
- "body": "The deck's whole point is telling you which agent is waiting on you, and until now it could only say so on screen \u2014 the amber chip, the tab title, the favicon. Every one of those is drawn inside a page, so the one moment it matters, when you have walked away and four agents have gone quiet, the deck was silent.\n\nNow it reaches the desktop, two ways that never overlap. With the deck open behind something, the page raises the notification itself: a \"notify me\" button appears in the top bar the first time a session blocks, and the browser asks you \u2014 nothing is requested before there is something to notify you about. With no page open at all, the server raises it, because it can see that nobody is connected and therefore that no other surface is saying anything.\n\nOne notification per session, replaced rather than stacked if a second deck raises it too. Clicking it brings the tab forward. `AGENTS_DECK_NO_NOTIFY=1` turns the desktop side off entirely, and if you refuse the browser prompt the deck says so plainly instead of leaving you thinking you switched something on \u2014 after a refusal only your browser's site settings can undo it, which no page is allowed to touch."
132
+ "title": "🔔 The deck can reach you when you are not looking at it",
133
+ "body": "The deck's whole point is telling you which agent is waiting on you, and until now it could only say so on screen — the amber chip, the tab title, the favicon. Every one of those is drawn inside a page, so the one moment it matters, when you have walked away and four agents have gone quiet, the deck was silent.\n\nNow it reaches the desktop, two ways that never overlap. With the deck open behind something, the page raises the notification itself: a \"notify me\" button appears in the top bar the first time a session blocks, and the browser asks you — nothing is requested before there is something to notify you about. With no page open at all, the server raises it, because it can see that nobody is connected and therefore that no other surface is saying anything.\n\nOne notification per session, replaced rather than stacked if a second deck raises it too. Clicking it brings the tab forward. `AGENTS_DECK_NO_NOTIFY=1` turns the desktop side off entirely, and if you refuse the browser prompt the deck says so plainly instead of leaving you thinking you switched something on — after a refusal only your browser's site settings can undo it, which no page is allowed to touch."
110
134
  },
111
135
  {
112
- "title": "\ud83e\udde9 A blocked session now says what it is asking for",
113
- "body": "\"Waiting on you\" told you to go and look. The session row and the card now carry the tool the prompt is most likely about, and the tooltip carries the one line of its input that a person actually reads \u2014 `rm -rf node_modules` rather than `{\"command\":\"rm -rf node_modules\"}`.\n\nIt is a guess and it is worded as one: the deck sees the tool calls, not the permission dialog, so it says \"likely on\". The deck still cannot allow, deny or answer anything for your agent, and it never will."
136
+ "title": "🧩 A blocked session now says what it is asking for",
137
+ "body": "\"Waiting on you\" told you to go and look. The session row and the card now carry the tool the prompt is most likely about, and the tooltip carries the one line of its input that a person actually reads — `rm -rf node_modules` rather than `{\"command\":\"rm -rf node_modules\"}`.\n\nIt is a guess and it is worded as one: the deck sees the tool calls, not the permission dialog, so it says \"likely on\". The deck still cannot allow, deny or answer anything for your agent, and it never will."
114
138
  },
115
139
  {
116
- "title": "\ud83e\uddee Today's figure was counting some sessions twice",
117
- "body": "The panel reads your usage from ccusage once a minute and fills the gap in between from what the deck is watching. The filling-in was wrong: any session that reached the canvas after the reading had landed was added in full, and since the canvas is still loading when the first reading arrives, that was most of them.\n\nMeasured on a deck four seconds old: ccusage said $450 for today and the panel said $1,006. The table underneath it said $450 the whole time, which is the disagreement to trust.\n\nThe deck now adds only work it has actually watched happen. A session that starts while you are looking shows up at the next reading instead of instantly \u2014 up to a minute \u2014 which is how the panel behaved before the live figure existed at all. Everything already on screen keeps moving as it did."
140
+ "title": "🧮 Today's figure was counting some sessions twice",
141
+ "body": "The panel reads your usage from ccusage once a minute and fills the gap in between from what the deck is watching. The filling-in was wrong: any session that reached the canvas after the reading had landed was added in full, and since the canvas is still loading when the first reading arrives, that was most of them.\n\nMeasured on a deck four seconds old: ccusage said $450 for today and the panel said $1,006. The table underneath it said $450 the whole time, which is the disagreement to trust.\n\nThe deck now adds only work it has actually watched happen. A session that starts while you are looking shows up at the next reading instead of instantly — up to a minute — which is how the panel behaved before the live figure existed at all. Everything already on screen keeps moving as it did."
118
142
  }
119
143
  ],
120
144
  "3.6.0": [
121
145
  {
122
- "title": "\u2702\ufe0f The two figures at the end of the top bar are gone",
123
- "body": "The bar used to end with a token count and a dollar figure. Both were sums over what is on the canvas at that moment, and the canvas drops finished sessions a couple of minutes after they end \u2014 so both numbers fell on their own, with nothing on screen to explain the fall. They carried the word \"board\" and a three-line tooltip for exactly that reason.\n\nThe usage panel answers the same question without the apology: it reads the logs on disk, it covers sessions this deck never watched, and it does not forget. Press U for the panel, or H for the full history.\n\nWhat is left in the bar is what is true right now \u2014 whether the stream is alive, and what your machine is doing."
146
+ "title": "✂️ The two figures at the end of the top bar are gone",
147
+ "body": "The bar used to end with a token count and a dollar figure. Both were sums over what is on the canvas at that moment, and the canvas drops finished sessions a couple of minutes after they end — so both numbers fell on their own, with nothing on screen to explain the fall. They carried the word \"board\" and a three-line tooltip for exactly that reason.\n\nThe usage panel answers the same question without the apology: it reads the logs on disk, it covers sessions this deck never watched, and it does not forget. Press U for the panel, or H for the full history.\n\nWhat is left in the bar is what is true right now — whether the stream is alive, and what your machine is doing."
124
148
  }
125
149
  ],
126
150
  "3.5.0": [
@@ -33,6 +33,15 @@
33
33
  import { existsSync as fsExistsSync, readdirSync as fsReaddirSync, statSync as fsStatSync } from "node:fs";
34
34
  import { homedir } from "node:os";
35
35
  import { posix as posixPath, win32 as winPath } from "node:path";
36
+ // ONE DECLARATION OF THE EXTENSION ID (#798). It was written out here and again
37
+ // in relay-guard.mjs, with the same literal, in two modules that never imported
38
+ // each other — so republishing the extension under a new id and updating one
39
+ // would leave the other detector answering "not installed" forever, with
40
+ // nothing going red anywhere. It comes from relay-guard because that direction
41
+ // is the safe one: relay-guard imports node:path and nothing else, a property
42
+ // its own header states and relay-guard.test.ts pins by reading the source, and
43
+ // importing this module (node:fs) into it would break that.
44
+ import { CLAUDE_EXT_ID } from "./relay-guard.mjs";
36
45
 
37
46
  /**
38
47
  * Claude in Chrome's extension id, which is the same 32 characters in every
@@ -42,8 +51,11 @@ import { posix as posixPath, win32 as winPath } from "node:path";
42
51
  * the browser, so Brave, Edge and Vivaldi all hold it under this exact name.
43
52
  * That is what makes a directory test sufficient here and what lets one
44
53
  * constant serve every row this module returns.
54
+ *
55
+ * Re-exported rather than moved, so the callers that read it from here keep
56
+ * working and the name still documents itself where it is used.
45
57
  */
46
- export const CLAUDE_EXT_ID = "fcoeoabgfenejglbffodgkkbkcdhcgfn";
58
+ export { CLAUDE_EXT_ID };
47
59
 
48
60
  /**
49
61
  * The directories inside a user-data root that are browsing profiles.