sessiongraph-app-darwin-arm64 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/payload/SessionGraph.app/Contents/Info.plist +2 -2
- package/payload/SessionGraph.app/Contents/MacOS/sessiongraph +0 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/server.mjs +425 -134
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-ngj67_1P.js → index-3_I59bPI.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-DZ3QjOks.js → index-86i6pjnx.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-Ca1o8F2F.js → index-BEabiGl5.js} +16 -16
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-DmhroAg3.js → index-DxQk-77k.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-Oz3Ov7Mv.css → index-vX8x5oFC.css} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{scene-DpPyjrii.js → scene-CEalI0mr.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{share-BDMRLovI.js → share-BydK_UaB.js} +3 -3
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/worker-DwqxiDWY.js +2 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/index.html +2 -2
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/LICENSE-OFL-1.1.txt +93 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/NOTICE.txt +22 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/amp.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/antigravity.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/aside.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/augment.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/cherry.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/codebuddy.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/codebuff.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/commandcode.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/crush.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/deepseek.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/devin.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/droid.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/freebuff.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/fx.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/gajae.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/goose.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/grok.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/hermes.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/hindsight.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/jcode.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/junie.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/kimchi.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/kimi.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/kiro.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/lmstudio.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/mimo.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/minimax.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/mistral.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/muse.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/mux.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/octofriend.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/openclaw.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/prime.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/proma.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/reasonix.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/senpi.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/t3.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/trae.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/unsloth.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/warp.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/zcode.svg +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/sources/zed.svg +1 -0
- package/payload/SessionGraph.app/Contents/_CodeSignature/CodeResources +511 -38
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/worker-YMPBjASm.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{v as i}from"./index-
|
|
1
|
+
import{v as i}from"./index-BEabiGl5.js";function r(e){if(e!==void 0){if(typeof e=="string")return e;if("ok"in e&&"cancel"in e)return{OkCancelCustom:[e.ok,e.cancel]};if("yes"in e&&"no"in e&&"cancel"in e)return{YesNoCancelCustom:[e.yes,e.no,e.cancel]};if("ok"in e)return{OkCustom:e.ok}}}async function f(e={}){return typeof e=="object"&&Object.freeze(e),await i("plugin:dialog|open",{options:e})}async function k(e={}){return typeof e=="object"&&Object.freeze(e),await i("plugin:dialog|save",{options:e})}async function l(e,a){return await i("plugin:dialog|message",{message:e,title:a?.title,kind:a?.kind,buttons:r(a?.buttons)})}async function s(e,a){const n=typeof a=="string"?{title:a}:a;return n&&!n.buttons&&n.okLabel&&(n.buttons={ok:n.okLabel}),l(e,n)}async function u(e,a){const n=typeof a=="string"?{title:a}:a,c=n?.okLabel||n?.cancelLabel,t=n?.okLabel??"Yes";return await l(e,{title:n?.title,kind:n?.kind,buttons:c?{ok:t,cancel:n.cancelLabel??"No"}:"YesNo"})===t}async function d(e,a){const n=typeof a=="string"?{title:a}:a,c=n?.okLabel||n?.cancelLabel,t=n?.okLabel??"Ok";return await l(e,{title:n?.title,kind:n?.kind,buttons:c?{ok:t,cancel:n.cancelLabel??"Cancel"}:"OkCancel"})===t}export{u as ask,d as confirm,s as message,f as open,k as save};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{font-family:Geist Variable,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#dbe7e3;background:#080e13;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color-scheme:dark;--line: #c9e3db14;--muted: #82978f;--mint: #b0e9d6;--mono: "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;--control-bg: #122321;--control-border: #b0e9d626;--control-hover: #b0e9d610;--control-radius: 8px;--popover-bg: #0e1c20}*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0;overflow:hidden}#app{height:100dvh;isolation:isolate}button,input,select{font:inherit}button,a,input,select,summary{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit;border:0;background:none;transition:background .18s,color .18s,border-color .18s}button:disabled{cursor:default;opacity:.45}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid #b0e9d6aa;outline-offset:3px}svg{width:16px;height:16px;flex-shrink:0}[hidden]{display:none!important}::selection{background:#b0e9d632;color:#f0fff8}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-thumb{background:#3a5149;border-radius:4px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.muted{color:var(--muted)}.map,#scene{position:absolute;inset:0}#scene canvas{display:block;width:100%;height:100%;touch-action:none}.canvas-vignette{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 150px 20px #04090d55}.glass{background:color-mix(in srgb,#0c161b var(--panel-opacity, 90%),transparent);border:1px solid #d6eee119;box-shadow:0 12px 48px #0003,inset 0 1px #ffffff04;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.app-header,.map-controls{position:fixed;top:24px;display:flex;align-items:center;gap:5px;height:48px;border-radius:14px;padding:5px 7px;z-index:40}.app-header{left:24px;padding-left:13px;gap:10px}.brand{display:flex;align-items:center;gap:8px}.brand img{width:24px;height:24px}.brand>span{font-size:21px;font-weight:510;letter-spacing:-1px;line-height:1;white-space:nowrap}.brand-dot{color:var(--mint)}.connection{display:flex;align-items:center}.status-dot{width:5px;height:5px;border-radius:50%;background:#d6b578}.connected .status-dot{background:#a9d9c5;box-shadow:0 0 8px #b0e9d630}.toolbar-divider{width:1px;height:18px;background:var(--line);margin:0 3px}.toolbar-button{display:flex;align-items:center;gap:7px;padding:9px 10px;border-radius:8px;font-size:12px;color:#9eafa9}.toolbar-button:hover,.icon-button:hover{background:#c2e9d90c;color:#e9fff4}.toolbar-button[aria-expanded=true],.map-controls .icon-button[aria-expanded=true]{background:#b0e9d60c;color:var(--mint)}.icon-button{width:34px;height:34px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;color:#8ba198}.map-controls{right:24px}.view-switch{display:flex;gap:2px}.view-switch button{min-width:37px;padding:9px 8px;border-radius:8px;font-size:12px;color:#7d9489}.view-switch .active{color:#d4f6e7;background:#b0e9d614}.floating-panel{position:fixed;z-index:10;border-radius:16px;animation:panel-in .2s ease-out}.floating-panel.front{z-index:20}.panel-heading{display:flex;align-items:center;padding:10px 10px 8px 16px;gap:3px;flex-shrink:0}.panel-handle{display:flex;align-items:center;gap:8px;flex:1;min-width:0;padding:8px 0;text-align:left;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;font-size:13px;font-weight:480;color:#bdcec6}.panel-handle>svg{width:13px;height:13px;color:#597368}.panel-handle:hover>svg{color:#b0e9d6}.dragging{-webkit-user-select:none;user-select:none;box-shadow:0 20px 80px #0006}.dragging .panel-handle{cursor:grabbing}.small-badge{font:10px var(--mono);font-weight:400;color:#879f93;margin-left:2px}.sidebar{top:86px;left:24px;width:330px;height:min(580px,calc(100dvh - 230px));max-height:calc(100dvh - 100px);display:flex;flex-direction:column;overflow:hidden}.search-box{display:flex;align-items:center;gap:9px;margin:3px 16px 0;padding:10px 11px;background:#d5f6e703;border:1px solid #d1e9dc16;border-radius:9px;color:#7c9588}.search-box:focus-within{border-color:#b0e9d650}.search-box svg{width:14px;height:14px}.search-trigger{text-align:left;font-size:12px}.search-trigger span{flex:1}.search-trigger:hover{border-color:#b0e9d644;color:#d1ecdf}.search-box input{width:100%;min-width:0;background:none;border:0;outline:none;color:#e3ece9;font-size:12px}.search-box input::placeholder{color:#7f948a}kbd{border:1px solid #c4e1d71c;border-radius:4px;padding:2px 5px;font:11px var(--mono);color:#8fa69a}.filters{padding:16px;border-bottom:1px solid var(--line)}.filter-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.select-wrap{display:flex;align-items:center;position:relative;min-width:0;margin-bottom:8px;color:#8ea99b}.filter-row>.select-wrap{flex:1;margin-bottom:0}.select-wrap>svg,.select-wrap>#source-filter-icon{pointer-events:none;position:absolute;left:9px;width:14px;height:14px}.select-wrap>svg:last-child{left:auto;right:9px;width:12px}.select-wrap select{appearance:none;width:100%;min-width:0;height:34px;padding:7px 29px 7px 32px;background:transparent;color:#bdcfc6;border:1px solid transparent;border-radius:8px;font-size:12px;cursor:pointer;text-overflow:ellipsis}.select-wrap:hover select{background:#b0e9d606}.select-wrap select:focus-visible{outline:2px solid #b0e9d680;outline-offset:0;background:#b0e9d609}#source-filter-icon .source-icon{width:14px;height:14px;flex-basis:14px}select option{background:#14211e;color:#e1e8ea}.filter-toggles{display:flex;gap:18px;margin-top:16px}.filter-toggles label{display:flex;align-items:center;gap:6px;font-size:11px;color:#91a99b;cursor:pointer}.filter-toggles input{width:12px;height:12px;margin:0;accent-color:#a0c9ba}.session-list{padding:0 8px 10px;flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain}.list-date{display:flex;gap:7px;padding:17px 12px 8px;font-size:11px;color:#8ca196}.list-date span{color:#647e70}.session-card{width:100%;display:flex;text-align:left;gap:10px;padding:11px 12px;border:1px solid transparent;border-radius:9px;margin-bottom:2px}.session-card:hover{background:#dbf5e805}.session-card.selected{background:#b0e9d60b;border-color:#b0e9d61a}.session-dot{width:5px;height:5px;margin-top:6px;flex-shrink:0;border-radius:50%;background:var(--node-color, #b0e9d6);box-shadow:0 0 7px color-mix(in srgb,var(--node-color, #b0e9d6) 25%,transparent)}.session-card-body{flex:1;min-width:0}.session-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:12px;font-weight:420;line-height:1.55;color:#bccfc5}.selected .session-title{color:#e1f2eb}.session-meta{display:flex;align-items:center;gap:5px;margin-top:6px;font-size:10px;color:#748e7f}.session-meta svg{width:11px;height:11px}.session-meta span:first-of-type{max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-meta span:last-child{margin-left:auto;white-space:nowrap}.timeline-dock{bottom:24px;left:50%;transform:translate(-50%);width:min(620px,calc(100% - 48px))}.timeline-panel{padding:9px 14px 18px;border-radius:16px}.timeline-top{display:flex;align-items:center;gap:4px;margin-bottom:14px}.timeline-top .panel-handle{font-size:12px;font-weight:400;white-space:nowrap}.range-buttons{display:flex;gap:2px;margin-left:8px}.range-buttons button{font-size:11px;color:#859d8e;border-radius:6px;padding:6px 8px}.range-buttons button:hover{color:var(--mint)}.range-buttons button.active{color:var(--mint);background:#b0e9d613}.timeline-track{display:flex;align-items:center;gap:15px}.play-button{width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:1px solid #b0e9d62b;border-radius:50%;color:var(--mint);background:#b0e9d604}.play-button:hover{background:#b0e9d613}.play-button svg{width:13px;height:13px}.histogram-wrap{flex:1;position:relative;height:30px;border-bottom:1px solid #b0e9d620}.histogram{display:flex;align-items:flex-end;height:100%;gap:3px;-webkit-mask-image:linear-gradient(to right,black var(--progress, 100%),#ffffff30 var(--progress, 100%));mask-image:linear-gradient(to right,black var(--progress, 100%),#ffffff30 var(--progress, 100%))}.histogram span{flex:1;min-width:0;background:linear-gradient(#a6d5c7ba,#61887d35);border-radius:2px 2px 0 0}#scrubber{appearance:none;position:absolute;inset:-6px -7px;margin:0;width:calc(100% + 14px);height:calc(100% + 12px);background:transparent;cursor:ew-resize}#scrubber::-webkit-slider-thumb{appearance:none;width:12px;height:40px;opacity:0}#scrubber::-moz-range-thumb{width:12px;height:40px;opacity:0}.timeline-cursor{pointer-events:none;position:absolute;top:-3px;bottom:-2px;width:1px;background:#d3eee0;box-shadow:0 0 8px #b0e9d640}.timeline-cursor:before{content:"";position:absolute;top:-2px;left:-2px;width:5px;height:5px;background:var(--mint);border-radius:50%}.playback-date{width:43px;text-align:right;white-space:nowrap;font-size:11px;color:#9ab1a3}.playback-period{display:none;text-align:center;color:#a0baae;font:11px var(--mono);letter-spacing:.06em;font-variant-numeric:tabular-nums}.playback-summary{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:12px 28px;margin:16px 0 0;color:#829e91;font-size:11px}.playback-summary strong{color:#e3f3eb;font-size:26px;font-weight:450;letter-spacing:-.8px;font-variant-numeric:tabular-nums;margin-right:9px}.playback-summary small{flex-basis:100%;text-align:center;font:9px var(--mono)}.playback-share{display:flex;justify-content:center;margin-bottom:12px;visibility:hidden;opacity:0;pointer-events:none;transition:opacity .18s ease}.playback-share.ready{visibility:visible;opacity:1;pointer-events:auto}.playback-share button{flex:0 0 auto;min-height:44px;padding:12px 22px;gap:10px;border-radius:10px;font-size:13px;font-weight:550}.playback-share button:hover:not(:disabled){background:#cbf7e7}.playback-share svg{width:17px;height:17px}#app.playback-mode .app-header,#app.playback-mode .map-controls,#app.playback-mode .shortcut-hints,#app.playback-mode .desktop-update,#app.playback-mode .node-tooltip{display:none}#app.playback-mode .timeline-dock{bottom:max(24px,env(safe-area-inset-bottom));top:auto!important;left:50%!important;transform:translate(-50%)!important;width:min(580px,calc(100% - 40px))}#app.playback-mode .timeline-panel{background:none;border:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;padding:0}#app.playback-mode .timeline-top,#app.playback-mode .playback-date,#app.playback-mode .playback-summary small{display:none}#app.playback-mode .play-button{background:none;border:0;box-shadow:none}#app.playback-mode .playback-period{display:block;margin-top:14px}#app.playback-mode .playback-summary{display:flex;justify-content:center;text-align:center;gap:20px clamp(28px,6vw,64px);margin:14px 0 0}#app.playback-mode .playback-summary>span{display:flex;flex-direction:column;gap:4px}#app.playback-mode .playback-summary strong{font-size:clamp(36px,6vw,48px);line-height:1;margin:0;letter-spacing:-1.8px}#app.playback-mode .timeline-cursor{box-shadow:none}.share-dialog{width:min(900px,calc(100% - 32px));max-width:none}.share-dialog h2{margin-bottom:8px}.share-dialog>p{margin:0 0 20px}.share-formats{display:flex;gap:4px;width:fit-content;margin-bottom:18px;padding:4px;border:1px solid var(--control-border);border-radius:10px;background:#070f1380}.share-formats button{min-width:100px;min-height:38px;padding:9px 18px;border-radius:7px;color:#8ea99b;font-size:12px}.share-formats button:hover{color:#e1f2eb;background:var(--control-hover)}.share-formats button[aria-pressed=true]{background:#b0e9d6;color:#182e29;font-weight:550}.share-preview{aspect-ratio:8 / 5;display:grid;place-items:center;background:#030609;border-radius:9px;overflow:hidden}.share-preview img,.share-preview video{display:block;width:100%;height:auto}.share-progress{display:grid;gap:18px;justify-items:center;color:#a0bfaf;font-size:12px}.share-progress progress{width:min(260px,50vw);height:4px;accent-color:var(--mint)}.share-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:10px;margin-top:20px}.share-actions .share-close{margin-right:auto}.share-actions .primary-button,.share-actions .secondary-button{flex:0 0 auto}.share-x{text-decoration:none}.share-dialog .share-notice{margin:14px 0 0}.share-tray{margin-top:16px;padding:16px;border:1px solid var(--line);border-radius:10px}.share-tray p{margin:0 0 12px}.share-tray>div{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-caption{width:100%;resize:none;padding:10px;border:1px solid var(--line);border-radius:6px;background:#070f1380;color:#b8d2c5;font:11px/1.7 Geist Variable,sans-serif}.custom-dates{position:relative}summary{cursor:pointer;list-style:none}summary::-webkit-details-marker{display:none}.date-positioner,.ui-select-positioner{margin:0;padding:0;border:0;background:transparent;color:inherit;overflow:visible;z-index:150}.date-popover{width:min(344px,calc(100vw - 24px));max-height:min(570px,calc(100dvh - 24px));overflow:auto;padding:18px;border:1px solid var(--control-border);border-radius:16px;background:var(--popover-bg);box-shadow:0 20px 70px #0008,inset 0 1px #ffffff05}.date-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.date-heading .eyebrow{font:8px var(--mono);letter-spacing:.14em;color:#789e8d}.date-heading h2{margin:5px 0 0;font-size:18px;font-weight:500;letter-spacing:-.5px}.date-close{font-size:23px}.date-fields{display:flex;align-items:center;gap:10px}.date-fields>span{padding-top:16px;color:#5f8072}.date-fields label{flex:1;min-width:0;color:#8aa79a;font-size:10px}.date-fields input{display:block;width:100%;margin-top:6px;padding:10px;border:1px solid var(--control-border);border-radius:var(--control-radius);background:#070f1380;color:#d4e8df;font:11px var(--mono)}.date-fields input:focus{border-color:#b0e9d670}.date-fields input[aria-invalid=true]{border-color:#eab894}.date-presets{display:flex;gap:6px;margin:12px 0 16px}.date-presets button{flex:1;padding:7px 4px;border:1px solid var(--control-border);border-radius:6px;color:#9ebcae;font-size:10px}.date-presets button:hover{background:var(--control-hover);color:var(--mint)}.date-calendar{padding-top:10px;border-top:1px solid var(--line)}.date-navigation{display:flex;align-items:center;gap:8px;margin-bottom:9px}.date-view{flex:1;padding:8px;border-radius:var(--control-radius);font-size:13px;font-weight:500}.date-view:hover{background:var(--control-hover)}.date-calendar table{width:100%;table-layout:fixed;border-spacing:0 3px;font-size:12px}.date-calendar th{padding-bottom:10px;color:#729183;font-size:10px;font-weight:400}.date-calendar td{padding:0;text-align:center}.date-calendar td button{width:100%;height:34px;border-radius:7px;font-size:11px;color:#c6dacf;position:relative}.date-calendar td button:hover{background:#b0e9d61c}.date-calendar td button[data-outside-range]{color:#50675e}.date-calendar td button[data-in-range],.date-calendar td button[data-in-hover-range]{background:#b0e9d610;border-radius:0;color:#c8e7d9}.date-calendar td button[data-range-start],.date-calendar td button[data-range-end]{border-radius:7px;color:#10251e;background:var(--mint);font-weight:600}.date-calendar td button[data-today]:after{content:"";position:absolute;width:3px;height:3px;bottom:4px;left:calc(50% - 1.5px);border-radius:50%;background:currentColor}.date-calendar td button:focus-visible{outline-offset:-2px;z-index:1}.date-calendar table:not([data-calendar-view=day]) td{padding:3px}.date-calendar table:not([data-calendar-view=day]) button{height:47px}.date-footer{display:flex;align-items:center;gap:12px;border-top:1px solid var(--line);margin-top:12px;padding-top:14px}.date-status{flex:1;color:#7f9d8f;font-size:10px;line-height:1.6}.date-footer .primary-button{flex:0 0 auto;font-size:11px}.ui-select{display:inline-flex;min-width:0;position:relative}.ui-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-width:0;min-height:34px;padding:8px 10px;border:1px solid var(--control-border);border-radius:var(--control-radius);background:var(--control-bg);color:#c7dfd2;font-size:12px;text-align:left}.ui-select-trigger>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-select-trigger>svg{width:12px;height:12px;color:#7f9d90}.ui-select-trigger:hover,.ui-select-trigger[data-state=open]{background:var(--control-hover);border-color:#b0e9d645}.ui-select-menu{min-width:max(150px,var(--reference-width));max-width:min(400px,calc(100vw - 24px));max-height:min(300px,var(--available-height, 300px));overflow:auto;padding:5px;border:1px solid var(--control-border);border-radius:10px;background:var(--popover-bg);box-shadow:0 12px 40px #0007;outline:none}.ui-select-option{position:relative;padding:9px 30px 9px 10px;border-radius:6px;color:#a8c3b5;font-size:12px;line-height:1.5;cursor:pointer;overflow-wrap:anywhere}.ui-select-option[data-highlighted]{color:#e0f4e9;background:var(--control-hover)}.ui-select-option[data-state=checked]{color:var(--mint)}.ui-select-option[data-state=checked]:after{content:"✓";position:absolute;right:10px}.ui-select-option[data-disabled]{opacity:.4;cursor:default}.select-wrap .ui-select{width:100%}.select-wrap>svg,.select-wrap>#source-filter-icon{z-index:1}.select-wrap>svg:last-child{display:none}.select-wrap .ui-select-trigger{padding-left:32px;background:transparent;border-color:transparent}.select-wrap .ui-select-trigger:hover,.select-wrap .ui-select-trigger[data-state=open]{background:#b0e9d609}.setting-row>.ui-select{min-width:120px;max-width:180px}.setting-row .ui-select-trigger{font-size:11px}.search-options .ui-select-trigger{background:transparent;border-color:transparent;padding-left:0;min-height:28px}.launch-destination .ui-select{max-width:77%}.inspector-stack{top:86px;right:24px;width:360px;max-height:calc(100dvh - 230px);display:flex;flex-direction:column;gap:12px;pointer-events:none}.inspector-stack>aside{pointer-events:auto;border-radius:16px}.inspector-stack.has-events{height:calc(100dvh - 110px);max-height:calc(100dvh - 110px)}.inspector{min-height:0;display:flex;flex-direction:column;overflow:hidden}.has-events .inspector{flex:0 1 220px;max-height:32%}.has-events .detail-title h2{font-size:17px}.detail-scroll{overflow-y:auto;min-height:0;overscroll-behavior:contain}.detail-title{padding:3px 20px 0}.detail-title h2{font-size:20px;line-height:1.4;letter-spacing:-.45px;font-weight:460;color:#e2ede9;margin:0 0 10px;overflow-wrap:anywhere}.detail-date{font-size:11px;color:#8ba699}.detail-actions{display:flex;align-items:center;gap:9px;padding:17px 20px}.secondary-button,.primary-button{display:flex;align-items:center;justify-content:center;gap:7px;padding:9px 12px;border:1px solid #b0e9d625;border-radius:8px;font-size:12px;color:#b8d9c7;background:#b0e9d606;flex:1}.secondary-button:hover{background:#b0e9d610}.secondary-button svg{width:14px;height:14px}.primary-button{flex:0;background:#b0e9d6;color:#182e29}.text-button{display:inline-flex;align-items:center;gap:7px;padding:8px;font-size:12px;color:#a6c9b6}.detail-section{border-top:1px solid var(--line);padding:17px 20px}.section-label{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:12px;font-weight:450;color:#b3c8bc}.section-label>span{margin-left:auto;font:11px var(--mono);color:#8ca896}.file-list{list-style:none;margin:0;padding:0}.file-list li{display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px solid #d1f1df07}.file-list li>svg{width:14px;height:14px;color:#c2b08f}.file-list li>div{flex:1;min-width:0}.file-list strong{display:block;font:11px var(--mono);color:#c7dbcf;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-list li span{display:block;margin-top:4px;font-size:11px;color:#7d9988;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-list small{font:10px var(--mono);color:#89a994}.coverage-note{font-size:11px;line-height:1.7;color:#8ba597;margin:14px 0 0}.no-files p{font-size:12px;color:#8ca698;margin:0}.detail-loading{display:flex;align-items:center;gap:8px;font-size:12px;color:#97b6a4}.detail-loading svg{width:14px;height:14px}.load-more{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;margin-top:14px;padding:10px;border:1px solid #b0e9d61c;border-radius:8px;font-size:11px;color:#a2cbb3}.load-more:hover{background:#b0e9d609}.load-more svg{width:13px;height:13px}.relation{display:flex;align-items:center;gap:10px;width:100%;padding:10px 0;text-align:left;border-bottom:1px solid #d1f1df07}.relation>svg{width:14px;height:14px;color:#b6a3d9}.relation>svg:last-child{width:12px;color:#7c9788;margin-left:auto}.relation>span{min-width:0}.relation small{display:block;font-size:11px;color:#8fa598;margin-bottom:4px}.relation strong{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:12px;line-height:1.5;font-weight:400;color:#bdd1c7}.relation:hover strong{color:#e2f6e9}.more-details summary{display:flex;align-items:center;gap:8px;font-size:12px;color:#9ab4a3}.more-details summary>span{margin-left:auto;font:11px var(--mono)}.more-details summary svg{width:13px;height:13px;margin-left:auto}.more-details[open] summary{margin-bottom:14px;color:#c6e0ce}.more-details[open] summary svg{transform:rotate(180deg)}.metadata{margin:0;font-size:12px}.metadata>div{display:flex;justify-content:space-between;gap:15px;padding:7px 0}.metadata dt{color:#829e8d;flex-shrink:0}.metadata dd{margin:0;text-align:right;overflow-wrap:anywhere;font:11px var(--mono);color:#c1d7cc}.directory-card{margin-top:13px;padding:12px;border:1px solid var(--line);border-radius:8px}.directory-card>span{font-size:11px;color:#93b19e}.directory-card code,.location-entry code{display:block;margin-top:6px;font:11px/1.7 var(--mono);color:#8eaa9a;overflow-wrap:anywhere}.location-entry{margin-top:14px}.location-entry>span{font-size:11px;color:#afc9b8}.tools-list>div{display:flex;justify-content:space-between;gap:12px;padding:6px 0;font:11px var(--mono)}.tools-list span{overflow-wrap:anywhere;color:#91af9b}.tools-list strong{font-weight:400;color:#b4cebe}.scene-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.scene-label{position:absolute;left:0;top:0;max-width:155px;padding:5px 8px;font:10px var(--mono);color:var(--label-color);opacity:0;filter:blur(3px);transition:opacity .45s ease,filter .45s ease;background:#080f1266;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scene-label.visible{opacity:.55;filter:blur(0)}.selected-label{width:260px;max-width:calc(100% - 24px);padding:7px 10px;font-size:11px;background:#0d1c22ed;border:1px solid #b0e9d62b;border-radius:6px;box-shadow:0 3px 15px #0005;z-index:1}.selected-label.visible{opacity:1}.event-marker-icon{position:absolute;top:0;left:0;width:12px;height:12px;color:#d7e5df;opacity:0;pointer-events:none}.event-marker-icon.visible{opacity:.38}.event-marker-icon svg{display:block;width:12px;height:12px}.scene-labels[data-motion=false] .scene-label{transition:none}.node-tooltip{position:absolute;z-index:30;width:260px;padding:14px;background:#101e1cf2;border:1px solid #b0e9d62b;border-radius:10px;box-shadow:0 12px 32px #0006;pointer-events:none;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.node-tooltip strong{display:block;font-size:13px;font-weight:450;line-height:1.5;color:#e1efec;margin-bottom:7px}.node-tooltip>span{font-size:11px;color:#91af9d}.message-tooltip{width:min(390px,calc(100vw - 24px));border-color:color-mix(in srgb,var(--event-color) 35%,transparent)}.message-tooltip pre{margin:10px 0;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.7 var(--mono);color:#d9e9e0;max-height:min(280px,38dvh);overflow:hidden}.message-tooltip>span{display:block;font-size:10px;line-height:1.6}.graph-message{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background:#080e1333;padding:32px;text-align:center}.graph-message>svg{width:28px;height:28px;color:var(--mint)}.graph-message h3{font-size:18px;font-weight:450;margin:18px 0;color:#cde1d7}.graph-message p{max-width:350px;font-size:13px;line-height:1.8;color:#91b09f}.loading-orbit{position:relative;width:64px;height:64px}.loading-orbit span{position:absolute;inset:0;border:1px solid #b0e9d629;border-radius:50%;transform:rotateX(55deg) rotateY(20deg);animation:orbit 3s linear infinite}.loading-orbit span:nth-child(2){animation-delay:-.8s}.loading-orbit span:nth-child(3){animation-delay:-1.6s}.empty-list{padding:20px 12px;font-size:12px;line-height:1.8;color:#86a593}.list-loading{padding:22px 8px}.skeleton{height:48px;margin-bottom:20px;border-radius:8px;background:linear-gradient(100deg,#ffffff02,#ffffff05,#ffffff02);background-size:200%;animation:shimmer 2s infinite}.spinning>svg,svg.spinning{animation:spin 2s linear infinite}dialog{max-width:420px;width:calc(100% - 32px);max-height:calc(100dvh - 40px);background:#101d1cf7;color:#d1e2dc;border:1px solid #b0e9d62b;border-radius:18px;padding:28px;box-shadow:0 25px 100px #0009}dialog::backdrop{background:#02070c88;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dialog-close{position:absolute;top:12px;right:12px}dialog h2{font-size:22px;font-weight:450;letter-spacing:-.5px;margin:0 0 18px}dialog p{font-size:12px;line-height:1.8;color:#92ad9e;margin:18px 0}.help-rows>div{display:flex;justify-content:space-between;align-items:center;padding:9px 0;font-size:12px;border-bottom:1px solid var(--line)}.graph-legend{display:flex;flex-wrap:wrap;gap:13px 18px;margin-top:22px;font-size:12px;color:#a5c2b0}.graph-legend>span{display:flex;align-items:center;gap:7px}.legend-node{width:5px;height:5px;border-radius:50%;background:var(--mint)}.legend-node.message{width:3px;height:3px;background:#dcfff0}.legend-file{width:5px;height:5px;background:#edc899;transform:rotate(45deg)}.legend-line{width:14px;height:1px}.legend-line.fork{background:#edbc8d}.legend-line.child{background:#bda6ef}.legend-line.lane{background:#849d95}.motion-button{width:100%}.motion-button[aria-pressed=false]{color:#728b7e;background:transparent}html[data-density=compact] .session-card{padding-block:6px}html[data-density=compact] .session-title{-webkit-line-clamp:1}html[data-density=compact] .list-date{padding-top:12px}html[data-motion=false] *,html[data-motion=false] *:before,html[data-motion=false] *:after{animation-duration:.01ms!important;transition-duration:.01ms!important}.event-panel{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.event-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 2px 18px}.event-heading h2{margin:0;font-size:13px;font-weight:480;color:#bdcec6}.event-close{font-size:22px}.event-toolbar{display:flex;align-items:center;gap:12px;padding:12px 0;font-size:11px}.event-toolbar label{display:flex;align-items:center;gap:10px}.event-toolbar select{padding:8px;border:1px solid #b0e9d630;border-radius:6px;background:#142620;color:#d0e6da;max-width:180px}.event-count{color:#adc6b8;font:9px var(--mono);margin-left:8px}.event-scroll{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}.event-browser{margin:0 16px 16px;border-top:1px solid var(--line);padding-top:12px}.event-browser summary,.event-footer summary{cursor:pointer;font-size:11px;color:#9ab4a3}.event-browser>summary,.event-footer summary,.event-provenance>summary{display:flex;align-items:center;gap:8px}.event-browser>summary:after,.event-footer summary:after,.event-provenance>summary:after{content:"";width:6px;height:6px;flex-shrink:0;margin-left:auto;margin-right:3px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:translateY(-2px) rotate(45deg)}.event-browser[open]>summary:after,.event-footer details[open]>summary:after,.event-provenance[open]>summary:after{transform:translateY(2px) rotate(225deg)}.event-list{max-height:230px;overflow:auto;overscroll-behavior:contain}.event-row{display:block;width:100%;padding:10px;margin-bottom:5px;border:1px solid transparent;border-radius:9px;text-align:left}.event-row:hover{background:#b0e9d608}.event-row[aria-current=true]{background:#b0e9d610;border-color:#b0e9d635}.event-row-top{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:8px}.event-row-top small{color:#7e9c8a;font:9px var(--mono)}.event-badge{font:10px var(--mono);color:var(--event-color);display:inline-flex;align-items:center;gap:7px}.event-badge:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--event-color);flex-shrink:0}.event-row strong{display:block;font-size:12px;font-weight:480;color:#d2e4da;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-preview{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:11px;color:#8aa798;line-height:1.6;margin:6px 0;overflow-wrap:anywhere}.event-row time{font:9px var(--mono);color:#6f9380}.event-pagination{display:flex;justify-content:space-between;gap:10px;padding-top:10px;border-top:1px solid var(--line)}.event-pagination button{font-size:10px}.event-content{padding:16px;min-width:0}.event-detail-nav{display:flex;align-items:center;gap:8px;padding:8px 16px 12px;border-bottom:1px solid var(--line)}.event-detail-nav>span{font:9px var(--mono);color:#92ad9e;text-align:center}.event-detail-nav button{font-size:11px;padding:7px 9px}.event-detail-heading h3{font-size:18px;font-weight:450;letter-spacing:-.4px;overflow-wrap:anywhere;margin:10px 0}.event-detail-heading p{color:#7f9f8c;font:10px var(--mono);line-height:1.6}.event-status{display:inline-block;margin-left:12px;color:#9ab7a6;font:9px var(--mono);border:1px solid #b0e9d629;padding:4px 7px;border-radius:4px}.event-status.failed{color:#eeaa9d;border-color:#eeaa9d40}.event-payload{margin-top:18px}.event-content h4{font:10px var(--mono);text-transform:uppercase;letter-spacing:.1em;color:#8aa997;margin:0 0 12px}.event-payload pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.8 var(--mono);color:#d4e6db;padding:12px;border:1px solid #b0e9d619;border-radius:9px;background:#050e123d;tab-size:2}.event-warning{padding:12px;background:#eac5940a;border:1px solid #eac59430;border-radius:7px;font-size:11px;color:#d6bc97}.event-correlations{margin-top:20px}.event-correlations p{font-size:11px;color:#91a999}.event-link{display:flex;align-items:center;gap:9px;padding:10px;width:100%;border:1px solid var(--line);border-radius:7px;margin-bottom:6px;text-align:left}.event-link>span:nth-child(2){flex:1;overflow-wrap:anywhere;font-size:12px}.event-link small{font:9px var(--mono);color:#8ca594}.event-provenance{margin-top:18px;font-size:11px;color:#7e9d8b}.event-provenance summary{cursor:pointer;padding-block:10px}.event-provenance dl{display:grid;grid-template-columns:90px minmax(0,1fr);gap:10px}.event-provenance dd{margin:0;overflow-wrap:anywhere;font-family:var(--mono);font-size:10px}.event-footer{display:flex;align-items:center;gap:12px;padding:8px 16px;border-top:1px solid var(--line);background:#081216}.event-footer>.event-coverage{flex:1}.event-coverage{font-size:10px;line-height:1.6;color:#7d9c8b;max-height:70px;overflow:auto}.event-reload{font-size:11px;white-space:nowrap}.event-empty{padding:24px 12px;color:#90aa9c;font-size:12px;line-height:1.7}.event-panel button:disabled{opacity:.4;cursor:default}.event-panel[aria-busy=true] .event-scroll{opacity:.65}.event-key{display:flex;flex-wrap:wrap;gap:12px;margin:14px 0}.event-key span{font:9px var(--mono)}.event-key i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;background:var(--event-color)}.explore-events{width:100%;justify-content:center;margin-top:10px}.history-coverage{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}.history-coverage>summary{min-height:24px;border-radius:4px}.settings-dialog{width:min(850px,calc(100% - 32px));max-width:none;height:min(710px,calc(100dvh - 48px));padding:0;overflow:hidden;background:#0c191e}.settings-dialog[open]{display:flex;flex-direction:column}.settings-heading{display:flex;align-items:flex-start;justify-content:space-between;padding:30px 30px 24px;border-bottom:1px solid var(--line);background:radial-gradient(ellipse at top left,#28534a44,transparent 70%)}.settings-heading h2{margin:0 0 4px;font-size:27px;letter-spacing:-.8px}.settings-heading p{margin:0;font-size:12px;color:#87a69a}.settings-close{font-size:25px;margin:-10px -12px 0 0}.settings-layout{display:grid;grid-template-columns:175px minmax(0,1fr);flex:1;min-height:0}.settings-tabs{padding:20px 12px;border-right:1px solid var(--line);background:#040b0e33}.settings-tabs button{display:flex;align-items:center;gap:10px;width:100%;padding:12px;margin-bottom:5px;text-align:left;font-size:12px;border-radius:8px;color:#8aa79a}.settings-tabs button>svg{width:16px;height:16px;color:#6b9582}.settings-tabs button[aria-selected=true]{color:#d5eee2;background:#b0e9d610}.settings-tabs button[aria-selected=true]>svg{color:#b0e9d6}.settings-tabs button:hover{background:#b0e9d609}.settings-content{min-width:0;overflow-y:auto;overscroll-behavior:contain;padding:26px 30px}.settings-content h3{font-size:18px;font-weight:450;margin:0 0 7px;letter-spacing:-.4px}.settings-description{margin:0 0 20px;font-size:12px}.settings-sources-list{margin-top:20px;color:var(--muted);font-size:12px}.settings-import-progress{color:var(--muted);font-size:11px;line-height:1.6;margin-top:16px}.setting-row{display:flex;align-items:center;justify-content:space-between;gap:22px;padding:16px 0;border-bottom:1px solid var(--line)}.setting-row>span:first-child{flex:1;min-width:0}.setting-row strong{display:block;font-size:12px;font-weight:470;color:#d1e3d9}.setting-row small{display:block;margin-top:5px;font-size:11px;line-height:1.55;color:#83a090}.setting-row select{max-width:165px;min-width:120px;padding:9px;border:1px solid #b0e9d621;border-radius:7px;background:#142620;color:#c7dfd2;font-size:11px}.setting-row input[type=checkbox]{appearance:none;flex-shrink:0;position:relative;width:34px;height:20px;margin:0;border-radius:20px;border:1px solid #779c8b40;background:#1c2e28;cursor:pointer}.setting-row input[type=checkbox]:before{content:"";position:absolute;width:12px;height:12px;top:3px;left:3px;border-radius:50%;background:#718f80;transition:transform .18s,background .18s}.setting-row input[type=checkbox]:checked{background:#b0e9d625;border-color:#b0e9d64a}.setting-row input[type=checkbox]:checked:before{transform:translate(14px);background:#b0e9d6}.setting-slider{display:flex;align-items:center;width:160px;gap:10px;flex-shrink:0}.setting-slider input{accent-color:#b0e9d6;width:108px;min-width:0;cursor:pointer}.setting-slider output{min-width:36px;font:10px var(--mono);color:#bddaca;text-align:right}.setting-row:has(:disabled){opacity:.45}.settings-note{display:flex;align-items:center;gap:14px;margin-top:22px}.settings-note>span{flex:1;font-size:11px;color:#85a495;line-height:1.6}.settings-note button{flex:0 0 auto;font-size:11px}.settings-footnote{font-size:10px;color:#6f9280;margin-bottom:0}.settings-footer{display:flex;align-items:center;gap:12px;padding:15px 22px;border-top:1px solid var(--line);background:#081216}.settings-save-status{flex:1;font-size:10px;color:#7d9c8b;line-height:1.5}.settings-footer .text-button{font-size:11px}.settings-footer .primary-button{padding-inline:20px}@media(max-width:650px){.settings-dialog{width:calc(100% - 20px);height:calc(100dvh - 24px);max-height:none}.settings-heading{padding:23px 20px 18px}.settings-heading h2{font-size:23px}.settings-layout{display:flex;flex-direction:column}.settings-tabs{display:flex;padding:9px;border-right:0;border-bottom:1px solid var(--line);overflow-x:auto;flex-shrink:0}.settings-tabs button{width:auto;flex:1 0 auto;margin:0;padding:9px 11px;font-size:11px;justify-content:center}.settings-tabs button>svg{width:14px;height:14px}.settings-content{padding:22px 18px}.setting-row{gap:12px}.setting-slider{width:128px}.setting-slider input{width:78px}.setting-row select{min-width:100px;max-width:135px}.settings-footer{flex-wrap:wrap;padding:12px 18px}.settings-save-status{flex-basis:100%}.settings-footer .text-button{margin-right:auto}}.toast{position:fixed;left:50%;bottom:155px;transform:translate(-50%);max-width:min(440px,calc(100% - 32px));padding:12px 18px;background:#15251ff5;color:#c8e5d4;border:1px solid #9fbfad44;border-radius:10px;box-shadow:0 10px 30px #0005;font-size:12px;line-height:1.7;z-index:100}.desktop-update{position:fixed;left:24px;bottom:24px;z-index:45;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:32px;min-width:86px;padding:6px 12px;border-radius:10px;color:var(--mint);font-size:11px;font-weight:450;line-height:18px;white-space:nowrap}.desktop-update svg{width:13px;height:13px}.desktop-update:hover{background:#172c29;border-color:#b0e9d633;color:#e9fff4}.desktop-update:disabled{opacity:1;color:#8ba198}.desktop-update[data-phase=downloading] svg,.desktop-update[data-phase=installing] svg{opacity:.65}.shortcut-hints{position:fixed;left:24px;bottom:24px;z-index:10;display:grid;gap:7px;color:#82938f;font-size:10px;pointer-events:none}.shortcut-hints span{display:flex;align-items:center;gap:8px}.shortcut-hints kbd{min-width:22px;padding:2px 4px;border:1px solid #a3bdb523;border-radius:4px;color:#a3b5ae;background:#0b141b66;font:9px var(--mono);text-align:center}#app:has(.desktop-update:not([hidden])) .shortcut-hints{bottom:66px}@media(min-width:760px)and (max-width:1000px){.shortcut-hints{bottom:165px}#app:has(.desktop-update:not([hidden])) .shortcut-hints{bottom:165px}}@keyframes panel-in{0%{opacity:0}to{opacity:1}}@keyframes orbit{to{transform:rotateX(55deg) rotateY(20deg) rotate(360deg)}}@keyframes shimmer{to{background-position:-200% 0}}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:1000px){.sidebar{width:300px}.inspector-stack{width:320px}}@media(max-width:759px){.shortcut-hints{display:none}.app-header{top:12px;left:12px;height:44px}.brand>span{font-size:19px}.app-header .toolbar-button{padding-inline:7px}.map-controls{top:auto;right:auto;left:50%;bottom:max(12px,env(safe-area-inset-bottom));transform:translate(-50%);height:46px}.floating-panel{border-radius:14px}.sidebar,.inspector-stack{top:70px;left:12px;right:auto;width:min(330px,calc(100% - 24px));max-height:calc(100dvh - 280px)}.sidebar{height:min(500px,calc(100dvh - 280px))}.inspector-stack{width:min(350px,calc(100% - 24px));inset:auto 12px 250px auto;max-height:min(40dvh,calc(100dvh - 450px))}.inspector-stack.has-events{height:min(420px,40dvh);gap:8px}.has-events .inspector{flex-basis:135px;max-height:26%}.event-content{padding:12px}.event-detail-heading h3{font-size:16px}.timeline-dock{bottom:max(72px,calc(env(safe-area-inset-bottom) + 60px));width:calc(100% - 24px)}.timeline-panel{padding:9px 12px 15px;border-radius:14px}.timeline-top{flex-wrap:wrap;gap:0;margin-bottom:13px}.timeline-top .panel-handle{flex-basis:calc(100% - 72px);font-size:12px}.timeline-top .range-buttons{order:4;width:100%;margin:4px 0 0;gap:5px}.range-buttons button{padding:5px 12px}.timeline-top .icon-button{width:32px;height:32px}.timeline-track{gap:12px}.histogram{gap:2px}.toast{bottom:230px}.desktop-update{left:12px;bottom:max(72px,calc(env(safe-area-inset-bottom) + 60px))}#app:has(.desktop-update:not([hidden])) .timeline-dock{bottom:max(112px,calc(env(safe-area-inset-bottom) + 100px))}#app:has(.desktop-update:not([hidden])) .inspector-stack{bottom:290px}}@media(min-width:760px)and (max-height:600px){.sidebar,.inspector-stack,.inspector-stack.has-events{max-height:calc(100dvh - 100px)}.sidebar{height:calc(100dvh - 100px)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.search-dialog{width:min(960px,calc(100% - 48px));max-width:none;height:min(680px,calc(100dvh - 100px));max-height:none;padding:0;overflow:hidden;border-radius:18px;background:#0b171bf5;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);box-shadow:0 30px 120px #0009}.search-dialog[open]{display:flex;flex-direction:column}.search-dialog::backdrop{background:#02070c88;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.search-command{display:flex;align-items:center;gap:13px;padding:17px 20px;border-bottom:1px solid var(--line)}.search-command-icon{font-size:26px;color:#9dcab7}.search-command input{min-width:0;flex:1;border:0;outline:0;background:none;color:#e0f1e8;font-size:17px}.search-command input::placeholder{color:#6c8b7b}.search-close{font-size:23px}.search-options{display:flex;align-items:center;gap:10px;padding:12px 20px;border-bottom:1px solid var(--line)}.search-options select{font-size:12px;color:#bcdbcb;padding:5px 20px 5px 0;border:0;background:none}.search-chip{padding:5px 9px;border:1px solid #bddfd21a;border-radius:6px;font-size:11px;color:#8fa99b}.search-chip[aria-pressed=true]{color:#b7e2cd;background:#b0e9d60a;border-color:#b0e9d629}#search-index-state{margin-left:auto;font-size:11px;color:#7d9c8c}.search-body{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);flex:1;min-height:0}.search-results{overflow-y:auto;overscroll-behavior:contain;min-height:0}.search-results-inner{position:relative}.search-result{position:absolute;left:7px;right:7px;height:86px;border-radius:8px;padding:11px 13px;cursor:pointer;border:1px solid transparent}.search-result.active{border-color:#b0e9d626;background:#b0e9d60e}.search-result:hover{background:#b0e9d60a}.search-result-title{font-size:13px;font-weight:440;color:#d2e5d9;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.search-result-meta{display:flex;justify-content:space-between;gap:10px;font-size:10px;color:#8ca996;margin-top:7px}.search-result-meta>span:first-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.match-kind{flex-shrink:0;color:#a0c7b0}.search-result-excerpt{font-size:11px;color:#759586;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-top:6px}.search-dialog mark{color:#dbffe7;background:#b6f4d111;border-radius:2px}.search-preview{border-left:1px solid var(--line);min-height:0;overflow-y:auto;overscroll-behavior:contain}.search-preview-heading{padding:22px}.search-preview-heading>span{color:#8ba898;font-size:11px}.search-preview-heading h2{margin:10px 0;font-size:20px;line-height:1.4;overflow-wrap:anywhere}.search-preview-heading p{margin:0 0 18px;font-size:11px}.search-open{width:100%}.search-open span{margin-left:auto}.search-launch{width:100%;justify-content:center;margin-top:7px}.search-preview-section{padding:19px 22px;border-top:1px solid var(--line)}.search-preview-section h3{color:#a9c6b4;font-size:12px;font-weight:450;margin:0 0 14px}.search-preview-section p{margin:8px 0 15px;font-size:12px;line-height:1.75;overflow-wrap:anywhere;white-space:pre-line}.search-preview-section article{margin:15px 0}.search-preview-section article>span{color:#b5d1bd;font-size:11px}.search-preview-section .preview-coverage{color:#718f7e;font-size:11px;margin-bottom:0}.search-footer{position:relative;display:flex;align-items:center;gap:14px;padding:12px 18px;border-top:1px solid var(--line);color:#87a592;font-size:11px}.search-footer button{color:#b0e9d6;font-size:11px}.search-keys{margin-left:auto;white-space:nowrap}.search-keys kbd{padding:1px 4px;margin-right:3px;font-size:10px}.search-keys kbd:not(:first-child){margin-left:10px}.search-syntax>div{position:absolute;bottom:45px;right:18px;display:flex;flex-direction:column;gap:10px;padding:18px;background:#132722;border:1px solid #b0e9d629;border-radius:10px;box-shadow:0 10px 30px #0006}.search-syntax code{color:#b4d7c2;font:11px var(--mono)}#search-clear-cache{margin-top:4px;padding:12px 0 0;border-top:1px solid var(--line);text-align:left}.source-badge{display:inline-flex;align-items:center;gap:6px;font:10px var(--mono);letter-spacing:.02em;color:#b5c8d9}.source-icon{display:inline-block;width:16px;height:16px;flex:0 0 16px;vertical-align:-3px;background:currentColor;mask:var(--source-icon) center / contain no-repeat;-webkit-mask:var(--source-icon) center / contain no-repeat}.source-icon-claude{color:#d9a387}.source-icon-openai{color:#b4d9c6}.source-icon-opencode{color:#c7d0d7}.source-icon-gemini,.source-icon-cline{color:#9cbcf6}.source-icon-qwen{color:#b8a6ec}.source-icon-pi{color:#e9a89c}.source-icon-copilot{color:#c7d0d7}.source-icon-roo{color:#d9b59a}.source-icon-kilo{color:#e6ce83}.source-icon-continue{color:#abd9bb}.source-symbol .source-icon{width:20px;height:20px;flex-basis:20px}.source-badge .source-icon,.search-result-meta .source-icon{width:12px;height:12px;flex-basis:12px;vertical-align:-2px}.search-result-meta .source-icon{margin-right:5px}.search-launch{display:inline-flex;gap:8px;align-items:center}#source-filter-icon{display:flex;align-items:center}.source-badge[data-source=claude-code]{color:#d8b297}.source-badge[data-source=codex]{color:#a5d1ba}.detail-title>.source-badge{margin-bottom:10px}.imports-dialog{width:min(680px,calc(100vw - 28px));max-width:680px;padding:32px}.imports-dialog[open]{display:flex;flex-direction:column;overflow-y:auto}.imports-dialog>*{flex-shrink:0}.imports-dialog>.import-sources{flex:1 1 auto;min-height:100px;overflow-y:auto;overscroll-behavior:contain;padding-right:4px}.imports-dialog .primary-button{flex:0 0 auto;white-space:nowrap}.imports-dialog .eyebrow{font:10px var(--mono);letter-spacing:.18em;color:#83b9a3}.imports-dialog h2{margin:16px 0 12px;font-size:clamp(24px,4vw,32px);font-weight:450;letter-spacing:-.04em}.imports-intro{color:#91a99d;font-size:13px;line-height:1.6;margin-bottom:14px}.privacy-disclosure{color:#91a99d;font-size:11px;line-height:1.65;margin-bottom:24px}.privacy-disclosure summary{cursor:pointer;color:#aec9bb}.privacy-disclosure p{font-size:inherit;line-height:inherit;margin:10px 0 0}.import-sources{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:max-content;align-content:start;gap:6px}.import-source{display:flex;align-items:center;min-width:0;min-height:52px;gap:9px;padding:8px 10px;border:1px solid #b0e9d61c;border-radius:8px;cursor:pointer;background:#b0e9d603}.import-source:has(input:checked){border-color:#b0e9d658;background:#b0e9d608}.import-source:hover{background:#b0e9d60e}.import-source:focus-within{outline:1px solid #b0e9d6;outline-offset:1px}.import-source:has(input:disabled){opacity:.6;cursor:wait}.import-source input{accent-color:#a4d8bf;flex:0 0 auto;margin:0}.source-symbol{display:grid;place-items:center;width:22px;height:22px;color:#bed3c7;flex:0 0 auto}.source-copy{flex:1;min-width:0}.import-source strong{display:block;font-size:12px;font-weight:500;line-height:1.4;overflow-wrap:anywhere}.import-source .source-meta{display:flex;flex-wrap:wrap;gap:4px 8px;color:#879d90;font-size:10px;line-height:1.35;margin-top:3px}.import-source .source-error{display:block;color:#e4ba96;font-size:10px;line-height:1.4;margin-top:3px;overflow-wrap:anywhere}.source-detected{color:#789083;white-space:nowrap}.source-detected.detected{color:#aedbc4}.imports-progress{font:11px var(--mono);color:#9fc2af;margin-top:20px;line-height:1.8;min-height:20px}.imports-dialog footer{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:18px}.imports-dialog footer>span{color:#789083;font-size:11px}.imports-notes{color:#91a99d;font-size:11px;line-height:1.6;margin-top:12px}.imports-notes>div{max-height:150px;overflow-y:auto}@media(max-width:600px){.imports-dialog{padding:26px 20px}.import-sources{grid-template-columns:minmax(0,1fr);gap:4px}.import-source{min-height:44px;padding:6px 9px}.imports-dialog footer{flex-wrap:wrap}}.search-empty{padding:30px 22px;color:#98b4a4;font-size:13px}.launch-dialog{width:min(520px,calc(100% - 32px));max-height:calc(100dvh - 48px);padding:28px;border-radius:16px}.launch-dialog h2{font-size:20px;margin:0 35px 10px 0}.launch-title{margin:0 0 24px;font-size:12px;line-height:1.6;overflow-wrap:anywhere}.launch-destination{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px;font-size:12px;color:#a9c6b4}.launch-destination select{min-width:0;max-width:77%;border:1px solid var(--line);border-radius:7px;padding:9px;background:#132321;color:#d1e5d9;font-size:12px}.launch-web-link{width:100%}.launch-pairing{margin-top:19px;font-size:11px;color:#8fa99b}.launch-pairing p,.launch-hint{font-size:11px;line-height:1.7}.launch-directory-label{display:grid;gap:9px;margin-bottom:18px;color:#a9c6b4;font-size:12px}.launch-directory{min-width:0;width:100%;padding:10px;background:#071114;color:#c8e5d5;border:1px solid var(--line);border-radius:7px;font:11px var(--mono)}.launch-summary{margin-bottom:18px;padding:13px;border:1px solid #b0e9d625;border-radius:9px;background:#b0e9d608}.launch-mode{color:#b8ddc9;font-size:12px;font-weight:500}.launch-hint{margin:7px 0 0;color:#9eb6a8}.launch-context{margin-top:12px;color:#a1b9ac;font-size:11px}.launch-context summary{cursor:pointer}.launch-coverage{line-height:1.7}.launch-context-path{display:block;overflow-wrap:anywhere;font:10px/1.7 var(--mono);color:#7e9e8e}.launch-availability{color:#c4b89b;font-size:11px;line-height:1.7;margin-bottom:0}.launch-availability:empty{display:none}.launch-command{display:block;width:100%;background:#071114;border:1px solid var(--line);border-radius:7px;padding:11px;color:#c8e5d5;font:11px var(--mono)}.launch-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px}.launch-actions>button{flex:1;white-space:nowrap}.launch-status{margin:14px 0 0;font-size:12px;line-height:1.6}.launch-status:empty{display:none}@media(max-width:759px){.search-dialog{width:calc(100% - 24px);height:calc(100dvh - 48px);border-radius:14px}.search-command{padding:12px;gap:8px}.search-command input{font-size:16px}.search-options{flex-wrap:wrap;padding:9px 14px;gap:7px 12px}#search-index-state{flex-basis:100%;margin-left:0}.search-body{grid-template-columns:1fr;grid-template-rows:minmax(150px,1fr) minmax(130px,.7fr)}.search-preview{border-left:0;border-top:1px solid var(--line)}.search-preview-heading{padding:16px}.search-preview-heading h2{font-size:17px}.search-preview-section{padding:16px}.search-footer{padding:10px 14px}.search-keys{display:none}.search-syntax{margin-left:auto}}
|
|
1
|
+
@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{font-family:Geist Variable,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#dbe7e3;background:#080e13;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color-scheme:dark;--line: #c9e3db14;--muted: #82978f;--mint: #b0e9d6;--mono: "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;--control-bg: #122321;--control-border: #b0e9d626;--control-hover: #b0e9d610;--control-radius: 8px;--popover-bg: #0e1c20}*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0;overflow:hidden}#app{height:100dvh;isolation:isolate}button,input,select{font:inherit}button,a,input,select,summary{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit;border:0;background:none;transition:background .18s,color .18s,border-color .18s}button:disabled{cursor:default;opacity:.45}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid #b0e9d6aa;outline-offset:3px}svg{width:16px;height:16px;flex-shrink:0}[hidden]{display:none!important}::selection{background:#b0e9d632;color:#f0fff8}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-thumb{background:#3a5149;border-radius:4px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.muted{color:var(--muted)}.map,#scene{position:absolute;inset:0}#scene canvas{display:block;width:100%;height:100%;touch-action:none}.canvas-vignette{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 150px 20px #04090d55}.glass{background:color-mix(in srgb,#0c161b var(--panel-opacity, 90%),transparent);border:1px solid #d6eee119;box-shadow:0 12px 48px #0003,inset 0 1px #ffffff04;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.app-header,.map-controls{position:fixed;top:24px;display:flex;align-items:center;gap:5px;height:48px;border-radius:14px;padding:5px 7px;z-index:40}.app-header{left:24px;padding-left:13px;gap:10px}.brand{display:flex;align-items:center;gap:8px}.brand img{width:24px;height:24px}.brand>span{font-size:21px;font-weight:510;letter-spacing:-1px;line-height:1;white-space:nowrap}.brand-dot{color:var(--mint)}.connection{display:flex;align-items:center}.status-dot{width:5px;height:5px;border-radius:50%;background:#d6b578}.connected .status-dot{background:#a9d9c5;box-shadow:0 0 8px #b0e9d630}.toolbar-divider{width:1px;height:18px;background:var(--line);margin:0 3px}.toolbar-button{display:flex;align-items:center;gap:7px;padding:9px 10px;border-radius:8px;font-size:12px;color:#9eafa9}.toolbar-button:hover,.icon-button:hover{background:#c2e9d90c;color:#e9fff4}.toolbar-button[aria-expanded=true],.map-controls .icon-button[aria-expanded=true]{background:#b0e9d60c;color:var(--mint)}.icon-button{width:34px;height:34px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;color:#8ba198}.map-controls{right:24px}.view-switch{display:flex;gap:2px}.view-switch button{min-width:37px;padding:9px 8px;border-radius:8px;font-size:12px;color:#7d9489}.view-switch .active{color:#d4f6e7;background:#b0e9d614}.floating-panel{position:fixed;z-index:10;border-radius:16px;animation:panel-in .2s ease-out}.floating-panel.front{z-index:20}.panel-heading{display:flex;align-items:center;padding:10px 10px 8px 16px;gap:3px;flex-shrink:0}.panel-handle{display:flex;align-items:center;gap:8px;flex:1;min-width:0;padding:8px 0;text-align:left;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;font-size:13px;font-weight:480;color:#bdcec6}.panel-handle>svg{width:13px;height:13px;color:#597368}.panel-handle:hover>svg{color:#b0e9d6}.dragging{-webkit-user-select:none;user-select:none;box-shadow:0 20px 80px #0006}.dragging .panel-handle{cursor:grabbing}.small-badge{font:10px var(--mono);font-weight:400;color:#879f93;margin-left:2px}.sidebar{top:86px;left:24px;width:330px;height:min(580px,calc(100dvh - 230px));max-height:calc(100dvh - 100px);display:flex;flex-direction:column;overflow:hidden}.search-box{display:flex;align-items:center;gap:9px;margin:3px 16px 0;padding:10px 11px;background:#d5f6e703;border:1px solid #d1e9dc16;border-radius:9px;color:#7c9588}.search-box:focus-within{border-color:#b0e9d650}.search-box svg{width:14px;height:14px}.search-trigger{text-align:left;font-size:12px}.search-trigger span{flex:1}.search-trigger:hover{border-color:#b0e9d644;color:#d1ecdf}.search-box input{width:100%;min-width:0;background:none;border:0;outline:none;color:#e3ece9;font-size:12px}.search-box input::placeholder{color:#7f948a}kbd{border:1px solid #c4e1d71c;border-radius:4px;padding:2px 5px;font:11px var(--mono);color:#8fa69a}.filters{padding:16px;border-bottom:1px solid var(--line)}.filter-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.select-wrap{display:flex;align-items:center;position:relative;min-width:0;margin-bottom:8px;color:#8ea99b}.filter-row>.select-wrap{flex:1;margin-bottom:0}.select-wrap>svg,.select-wrap>#source-filter-icon{pointer-events:none;position:absolute;left:9px;width:14px;height:14px}.select-wrap>svg:last-child{left:auto;right:9px;width:12px}.select-wrap select{appearance:none;width:100%;min-width:0;height:34px;padding:7px 29px 7px 32px;background:transparent;color:#bdcfc6;border:1px solid transparent;border-radius:8px;font-size:12px;cursor:pointer;text-overflow:ellipsis}.select-wrap:hover select{background:#b0e9d606}.select-wrap select:focus-visible{outline:2px solid #b0e9d680;outline-offset:0;background:#b0e9d609}#source-filter-icon .source-icon{width:14px;height:14px;flex-basis:14px}select option{background:#14211e;color:#e1e8ea}.filter-toggles{display:flex;gap:18px;margin-top:16px}.filter-toggles label{display:flex;align-items:center;gap:6px;font-size:11px;color:#91a99b;cursor:pointer}.filter-toggles input{width:12px;height:12px;margin:0;accent-color:#a0c9ba}.session-list{padding:0 8px 10px;flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain}.list-date{display:flex;gap:7px;padding:17px 12px 8px;font-size:11px;color:#8ca196}.list-date span{color:#647e70}.session-card{width:100%;display:flex;text-align:left;gap:10px;padding:11px 12px;border:1px solid transparent;border-radius:9px;margin-bottom:2px}.session-card:hover{background:#dbf5e805}.session-card.selected{background:#b0e9d60b;border-color:#b0e9d61a}.session-dot{width:5px;height:5px;margin-top:6px;flex-shrink:0;border-radius:50%;background:var(--node-color, #b0e9d6);box-shadow:0 0 7px color-mix(in srgb,var(--node-color, #b0e9d6) 25%,transparent)}.session-card-body{flex:1;min-width:0}.session-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:12px;font-weight:420;line-height:1.55;color:#bccfc5}.selected .session-title{color:#e1f2eb}.session-meta{display:flex;align-items:center;gap:5px;margin-top:6px;font-size:10px;color:#748e7f}.session-meta svg{width:11px;height:11px}.session-meta span:first-of-type{max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-meta span:last-child{margin-left:auto;white-space:nowrap}.timeline-dock{bottom:24px;left:50%;transform:translate(-50%);width:min(620px,calc(100% - 48px))}.timeline-panel{padding:9px 14px 18px;border-radius:16px}.timeline-top{display:flex;align-items:center;gap:4px;margin-bottom:14px}.timeline-top .panel-handle{font-size:12px;font-weight:400;white-space:nowrap}.range-buttons{display:flex;gap:2px;margin-left:8px}.range-buttons button{font-size:11px;color:#859d8e;border-radius:6px;padding:6px 8px}.range-buttons button:hover{color:var(--mint)}.range-buttons button.active{color:var(--mint);background:#b0e9d613}.timeline-track{display:flex;align-items:center;gap:15px}.play-button{width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:1px solid #b0e9d62b;border-radius:50%;color:var(--mint);background:#b0e9d604}.play-button:hover{background:#b0e9d613}.play-button svg{width:13px;height:13px}.histogram-wrap{flex:1;position:relative;height:30px;border-bottom:1px solid #b0e9d620}.histogram{display:flex;align-items:flex-end;height:100%;gap:3px;-webkit-mask-image:linear-gradient(to right,black var(--progress, 100%),#ffffff30 var(--progress, 100%));mask-image:linear-gradient(to right,black var(--progress, 100%),#ffffff30 var(--progress, 100%))}.histogram span{flex:1;min-width:0;background:linear-gradient(#a6d5c7ba,#61887d35);border-radius:2px 2px 0 0}#scrubber{appearance:none;position:absolute;inset:-6px -7px;margin:0;width:calc(100% + 14px);height:calc(100% + 12px);background:transparent;cursor:ew-resize}#scrubber::-webkit-slider-thumb{appearance:none;width:12px;height:40px;opacity:0}#scrubber::-moz-range-thumb{width:12px;height:40px;opacity:0}.timeline-cursor{pointer-events:none;position:absolute;top:-3px;bottom:-2px;width:1px;background:#d3eee0;box-shadow:0 0 8px #b0e9d640}.timeline-cursor:before{content:"";position:absolute;top:-2px;left:-2px;width:5px;height:5px;background:var(--mint);border-radius:50%}.playback-date{width:43px;text-align:right;white-space:nowrap;font-size:11px;color:#9ab1a3}.playback-period{display:none;text-align:center;color:#a0baae;font:11px var(--mono);letter-spacing:.06em;font-variant-numeric:tabular-nums}.playback-summary{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:12px 28px;margin:16px 0 0;color:#829e91;font-size:11px}.playback-summary strong{color:#e3f3eb;font-size:26px;font-weight:450;letter-spacing:-.8px;font-variant-numeric:tabular-nums;margin-right:9px}.playback-summary small{flex-basis:100%;text-align:center;font:9px var(--mono)}.playback-share{display:flex;justify-content:center;margin-bottom:12px;visibility:hidden;opacity:0;pointer-events:none;transition:opacity .18s ease}.playback-share.ready{visibility:visible;opacity:1;pointer-events:auto}.playback-share button{flex:0 0 auto;min-height:44px;padding:12px 22px;gap:10px;border-radius:10px;font-size:13px;font-weight:550}.playback-share button:hover:not(:disabled){background:#cbf7e7}.playback-share svg{width:17px;height:17px}#app.playback-mode .app-header,#app.playback-mode .map-controls,#app.playback-mode .shortcut-hints,#app.playback-mode .desktop-update,#app.playback-mode .node-tooltip{display:none}#app.playback-mode .timeline-dock{bottom:max(24px,env(safe-area-inset-bottom));top:auto!important;left:50%!important;transform:translate(-50%)!important;width:min(580px,calc(100% - 40px))}#app.playback-mode .timeline-panel{background:none;border:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;padding:0}#app.playback-mode .timeline-top,#app.playback-mode .playback-date,#app.playback-mode .playback-summary small{display:none}#app.playback-mode .play-button{background:none;border:0;box-shadow:none}#app.playback-mode .playback-period{display:block;margin-top:14px}#app.playback-mode .playback-summary{display:flex;justify-content:center;text-align:center;gap:20px clamp(28px,6vw,64px);margin:14px 0 0}#app.playback-mode .playback-summary>span{display:flex;flex-direction:column;gap:4px}#app.playback-mode .playback-summary strong{font-size:clamp(36px,6vw,48px);line-height:1;margin:0;letter-spacing:-1.8px}#app.playback-mode .timeline-cursor{box-shadow:none}.share-dialog{width:min(900px,calc(100% - 32px));max-width:none}.share-dialog h2{margin-bottom:8px}.share-dialog>p{margin:0 0 20px}.share-formats{display:flex;gap:4px;width:fit-content;margin-bottom:18px;padding:4px;border:1px solid var(--control-border);border-radius:10px;background:#070f1380}.share-formats button{min-width:100px;min-height:38px;padding:9px 18px;border-radius:7px;color:#8ea99b;font-size:12px}.share-formats button:hover{color:#e1f2eb;background:var(--control-hover)}.share-formats button[aria-pressed=true]{background:#b0e9d6;color:#182e29;font-weight:550}.share-preview{aspect-ratio:8 / 5;display:grid;place-items:center;background:#030609;border-radius:9px;overflow:hidden}.share-preview img,.share-preview video{display:block;width:100%;height:auto}.share-progress{display:grid;gap:18px;justify-items:center;color:#a0bfaf;font-size:12px}.share-progress progress{width:min(260px,50vw);height:4px;accent-color:var(--mint)}.share-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:10px;margin-top:20px}.share-actions .share-close{margin-right:auto}.share-actions .primary-button,.share-actions .secondary-button{flex:0 0 auto}.share-x{text-decoration:none}.share-dialog .share-notice{margin:14px 0 0}.share-tray{margin-top:16px;padding:16px;border:1px solid var(--line);border-radius:10px}.share-tray p{margin:0 0 12px}.share-tray>div{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.share-caption{width:100%;resize:none;padding:10px;border:1px solid var(--line);border-radius:6px;background:#070f1380;color:#b8d2c5;font:11px/1.7 Geist Variable,sans-serif}.custom-dates{position:relative}summary{cursor:pointer;list-style:none}summary::-webkit-details-marker{display:none}.date-positioner,.ui-select-positioner{margin:0;padding:0;border:0;background:transparent;color:inherit;overflow:visible;z-index:150}.date-popover{width:min(344px,calc(100vw - 24px));max-height:min(570px,calc(100dvh - 24px));overflow:auto;padding:18px;border:1px solid var(--control-border);border-radius:16px;background:var(--popover-bg);box-shadow:0 20px 70px #0008,inset 0 1px #ffffff05}.date-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.date-heading .eyebrow{font:8px var(--mono);letter-spacing:.14em;color:#789e8d}.date-heading h2{margin:5px 0 0;font-size:18px;font-weight:500;letter-spacing:-.5px}.date-close{font-size:23px}.date-fields{display:flex;align-items:center;gap:10px}.date-fields>span{padding-top:16px;color:#5f8072}.date-fields label{flex:1;min-width:0;color:#8aa79a;font-size:10px}.date-fields input{display:block;width:100%;margin-top:6px;padding:10px;border:1px solid var(--control-border);border-radius:var(--control-radius);background:#070f1380;color:#d4e8df;font:11px var(--mono)}.date-fields input:focus{border-color:#b0e9d670}.date-fields input[aria-invalid=true]{border-color:#eab894}.date-presets{display:flex;gap:6px;margin:12px 0 16px}.date-presets button{flex:1;padding:7px 4px;border:1px solid var(--control-border);border-radius:6px;color:#9ebcae;font-size:10px}.date-presets button:hover{background:var(--control-hover);color:var(--mint)}.date-calendar{padding-top:10px;border-top:1px solid var(--line)}.date-navigation{display:flex;align-items:center;gap:8px;margin-bottom:9px}.date-view{flex:1;padding:8px;border-radius:var(--control-radius);font-size:13px;font-weight:500}.date-view:hover{background:var(--control-hover)}.date-calendar table{width:100%;table-layout:fixed;border-spacing:0 3px;font-size:12px}.date-calendar th{padding-bottom:10px;color:#729183;font-size:10px;font-weight:400}.date-calendar td{padding:0;text-align:center}.date-calendar td button{width:100%;height:34px;border-radius:7px;font-size:11px;color:#c6dacf;position:relative}.date-calendar td button:hover{background:#b0e9d61c}.date-calendar td button[data-outside-range]{color:#50675e}.date-calendar td button[data-in-range],.date-calendar td button[data-in-hover-range]{background:#b0e9d610;border-radius:0;color:#c8e7d9}.date-calendar td button[data-range-start],.date-calendar td button[data-range-end]{border-radius:7px;color:#10251e;background:var(--mint);font-weight:600}.date-calendar td button[data-today]:after{content:"";position:absolute;width:3px;height:3px;bottom:4px;left:calc(50% - 1.5px);border-radius:50%;background:currentColor}.date-calendar td button:focus-visible{outline-offset:-2px;z-index:1}.date-calendar table:not([data-calendar-view=day]) td{padding:3px}.date-calendar table:not([data-calendar-view=day]) button{height:47px}.date-footer{display:flex;align-items:center;gap:12px;border-top:1px solid var(--line);margin-top:12px;padding-top:14px}.date-status{flex:1;color:#7f9d8f;font-size:10px;line-height:1.6}.date-footer .primary-button{flex:0 0 auto;font-size:11px}.ui-select{display:inline-flex;min-width:0;position:relative}.ui-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-width:0;min-height:34px;padding:8px 10px;border:1px solid var(--control-border);border-radius:var(--control-radius);background:var(--control-bg);color:#c7dfd2;font-size:12px;text-align:left}.ui-select-trigger>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-select-trigger>svg{width:12px;height:12px;color:#7f9d90}.ui-select-trigger:hover,.ui-select-trigger[data-state=open]{background:var(--control-hover);border-color:#b0e9d645}.ui-select-menu{min-width:max(150px,var(--reference-width));max-width:min(400px,calc(100vw - 24px));max-height:min(300px,var(--available-height, 300px));overflow:auto;padding:5px;border:1px solid var(--control-border);border-radius:10px;background:var(--popover-bg);box-shadow:0 12px 40px #0007;outline:none}.ui-select-option{position:relative;padding:9px 30px 9px 10px;border-radius:6px;color:#a8c3b5;font-size:12px;line-height:1.5;cursor:pointer;overflow-wrap:anywhere}.ui-select-option[data-highlighted]{color:#e0f4e9;background:var(--control-hover)}.ui-select-option[data-state=checked]{color:var(--mint)}.ui-select-option[data-state=checked]:after{content:"✓";position:absolute;right:10px}.ui-select-option[data-disabled]{opacity:.4;cursor:default}.select-wrap .ui-select{width:100%}.select-wrap>svg,.select-wrap>#source-filter-icon{z-index:1}.select-wrap>svg:last-child{display:none}.select-wrap .ui-select-trigger{padding-left:32px;background:transparent;border-color:transparent}.select-wrap .ui-select-trigger:hover,.select-wrap .ui-select-trigger[data-state=open]{background:#b0e9d609}.setting-row>.ui-select{min-width:120px;max-width:180px}.setting-row .ui-select-trigger{font-size:11px}.search-options .ui-select-trigger{background:transparent;border-color:transparent;padding-left:0;min-height:28px}.launch-destination .ui-select{max-width:77%}.inspector-stack{top:86px;right:24px;width:360px;max-height:calc(100dvh - 230px);display:flex;flex-direction:column;gap:12px;pointer-events:none}.inspector-stack>aside{pointer-events:auto;border-radius:16px}.inspector-stack.has-events{height:calc(100dvh - 110px);max-height:calc(100dvh - 110px)}.inspector{min-height:0;display:flex;flex-direction:column;overflow:hidden}.has-events .inspector{flex:0 1 220px;max-height:32%}.has-events .detail-title h2{font-size:17px}.detail-scroll{overflow-y:auto;min-height:0;overscroll-behavior:contain}.detail-title{padding:3px 20px 0}.detail-title h2{font-size:20px;line-height:1.4;letter-spacing:-.45px;font-weight:460;color:#e2ede9;margin:0 0 10px;overflow-wrap:anywhere}.detail-date{font-size:11px;color:#8ba699}.detail-actions{display:flex;align-items:center;gap:9px;padding:17px 20px}.secondary-button,.primary-button{display:flex;align-items:center;justify-content:center;gap:7px;padding:9px 12px;border:1px solid #b0e9d625;border-radius:8px;font-size:12px;color:#b8d9c7;background:#b0e9d606;flex:1}.secondary-button:hover{background:#b0e9d610}.secondary-button svg{width:14px;height:14px}.primary-button{flex:0;background:#b0e9d6;color:#182e29}.text-button{display:inline-flex;align-items:center;gap:7px;padding:8px;font-size:12px;color:#a6c9b6}.detail-section{border-top:1px solid var(--line);padding:17px 20px}.section-label{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:12px;font-weight:450;color:#b3c8bc}.section-label>span{margin-left:auto;font:11px var(--mono);color:#8ca896}.file-list{list-style:none;margin:0;padding:0}.file-list li{display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px solid #d1f1df07}.file-list li>svg{width:14px;height:14px;color:#c2b08f}.file-list li>div{flex:1;min-width:0}.file-list strong{display:block;font:11px var(--mono);color:#c7dbcf;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-list li span{display:block;margin-top:4px;font-size:11px;color:#7d9988;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-list small{font:10px var(--mono);color:#89a994}.coverage-note{font-size:11px;line-height:1.7;color:#8ba597;margin:14px 0 0}.no-files p{font-size:12px;color:#8ca698;margin:0}.detail-loading{display:flex;align-items:center;gap:8px;font-size:12px;color:#97b6a4}.detail-loading svg{width:14px;height:14px}.load-more{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;margin-top:14px;padding:10px;border:1px solid #b0e9d61c;border-radius:8px;font-size:11px;color:#a2cbb3}.load-more:hover{background:#b0e9d609}.load-more svg{width:13px;height:13px}.relation{display:flex;align-items:center;gap:10px;width:100%;padding:10px 0;text-align:left;border-bottom:1px solid #d1f1df07}.relation>svg{width:14px;height:14px;color:#b6a3d9}.relation>svg:last-child{width:12px;color:#7c9788;margin-left:auto}.relation>span{min-width:0}.relation small{display:block;font-size:11px;color:#8fa598;margin-bottom:4px}.relation strong{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:12px;line-height:1.5;font-weight:400;color:#bdd1c7}.relation:hover strong{color:#e2f6e9}.more-details summary{display:flex;align-items:center;gap:8px;font-size:12px;color:#9ab4a3}.more-details summary>span{margin-left:auto;font:11px var(--mono)}.more-details summary svg{width:13px;height:13px;margin-left:auto}.more-details[open] summary{margin-bottom:14px;color:#c6e0ce}.more-details[open] summary svg{transform:rotate(180deg)}.metadata{margin:0;font-size:12px}.metadata>div{display:flex;justify-content:space-between;gap:15px;padding:7px 0}.metadata dt{color:#829e8d;flex-shrink:0}.metadata dd{margin:0;text-align:right;overflow-wrap:anywhere;font:11px var(--mono);color:#c1d7cc}.directory-card{margin-top:13px;padding:12px;border:1px solid var(--line);border-radius:8px}.directory-card>span{font-size:11px;color:#93b19e}.directory-card code,.location-entry code{display:block;margin-top:6px;font:11px/1.7 var(--mono);color:#8eaa9a;overflow-wrap:anywhere}.location-entry{margin-top:14px}.location-entry>span{font-size:11px;color:#afc9b8}.tools-list>div{display:flex;justify-content:space-between;gap:12px;padding:6px 0;font:11px var(--mono)}.tools-list span{overflow-wrap:anywhere;color:#91af9b}.tools-list strong{font-weight:400;color:#b4cebe}.scene-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.scene-label{position:absolute;left:0;top:0;max-width:155px;padding:5px 8px;font:10px var(--mono);color:var(--label-color);opacity:0;filter:blur(3px);transition:opacity .45s ease,filter .45s ease;background:#080f1266;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scene-label.visible{opacity:.55;filter:blur(0)}.selected-label{width:260px;max-width:calc(100% - 24px);padding:7px 10px;font-size:11px;background:#0d1c22ed;border:1px solid #b0e9d62b;border-radius:6px;box-shadow:0 3px 15px #0005;z-index:1}.selected-label.visible{opacity:1}.event-marker-icon{position:absolute;top:0;left:0;width:12px;height:12px;color:#d7e5df;opacity:0;pointer-events:none}.event-marker-icon.visible{opacity:.38}.event-marker-icon svg{display:block;width:12px;height:12px}.scene-labels[data-motion=false] .scene-label{transition:none}.node-tooltip{position:absolute;z-index:30;width:260px;padding:14px;background:#101e1cf2;border:1px solid #b0e9d62b;border-radius:10px;box-shadow:0 12px 32px #0006;pointer-events:none;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.node-tooltip strong{display:block;font-size:13px;font-weight:450;line-height:1.5;color:#e1efec;margin-bottom:7px}.node-tooltip>span{font-size:11px;color:#91af9d}.message-tooltip{width:min(390px,calc(100vw - 24px));border-color:color-mix(in srgb,var(--event-color) 35%,transparent)}.message-tooltip pre{margin:10px 0;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.7 var(--mono);color:#d9e9e0;max-height:min(280px,38dvh);overflow:hidden}.message-tooltip>span{display:block;font-size:10px;line-height:1.6}.graph-message{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background:#080e1333;padding:32px;text-align:center}.graph-message>svg{width:28px;height:28px;color:var(--mint)}.graph-message h3{font-size:18px;font-weight:450;margin:18px 0;color:#cde1d7}.graph-message p{max-width:350px;font-size:13px;line-height:1.8;color:#91b09f}.loading-orbit{position:relative;width:64px;height:64px}.loading-orbit span{position:absolute;inset:0;border:1px solid #b0e9d629;border-radius:50%;transform:rotateX(55deg) rotateY(20deg);animation:orbit 3s linear infinite}.loading-orbit span:nth-child(2){animation-delay:-.8s}.loading-orbit span:nth-child(3){animation-delay:-1.6s}.empty-list{padding:20px 12px;font-size:12px;line-height:1.8;color:#86a593}.list-loading{padding:22px 8px}.skeleton{height:48px;margin-bottom:20px;border-radius:8px;background:linear-gradient(100deg,#ffffff02,#ffffff05,#ffffff02);background-size:200%;animation:shimmer 2s infinite}.spinning>svg,svg.spinning{animation:spin 2s linear infinite}dialog{max-width:420px;width:calc(100% - 32px);max-height:calc(100dvh - 40px);background:#101d1cf7;color:#d1e2dc;border:1px solid #b0e9d62b;border-radius:18px;padding:28px;box-shadow:0 25px 100px #0009}dialog::backdrop{background:#02070c88;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dialog-close{position:absolute;top:12px;right:12px}dialog h2{font-size:22px;font-weight:450;letter-spacing:-.5px;margin:0 0 18px}dialog p{font-size:12px;line-height:1.8;color:#92ad9e;margin:18px 0}.help-rows>div{display:flex;justify-content:space-between;align-items:center;padding:9px 0;font-size:12px;border-bottom:1px solid var(--line)}.graph-legend{display:flex;flex-wrap:wrap;gap:13px 18px;margin-top:22px;font-size:12px;color:#a5c2b0}.graph-legend>span{display:flex;align-items:center;gap:7px}.legend-node{width:5px;height:5px;border-radius:50%;background:var(--mint)}.legend-node.message{width:3px;height:3px;background:#dcfff0}.legend-file{width:5px;height:5px;background:#edc899;transform:rotate(45deg)}.legend-line{width:14px;height:1px}.legend-line.fork{background:#edbc8d}.legend-line.child{background:#bda6ef}.legend-line.lane{background:#849d95}.motion-button{width:100%}.motion-button[aria-pressed=false]{color:#728b7e;background:transparent}html[data-density=compact] .session-card{padding-block:6px}html[data-density=compact] .session-title{-webkit-line-clamp:1}html[data-density=compact] .list-date{padding-top:12px}html[data-motion=false] *,html[data-motion=false] *:before,html[data-motion=false] *:after{animation-duration:.01ms!important;transition-duration:.01ms!important}.event-panel{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.event-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 2px 18px}.event-heading h2{margin:0;font-size:13px;font-weight:480;color:#bdcec6}.event-close{font-size:22px}.event-toolbar{display:flex;align-items:center;gap:12px;padding:12px 0;font-size:11px}.event-toolbar label{display:flex;align-items:center;gap:10px}.event-toolbar select{padding:8px;border:1px solid #b0e9d630;border-radius:6px;background:#142620;color:#d0e6da;max-width:180px}.event-count{color:#adc6b8;font:9px var(--mono);margin-left:8px}.event-scroll{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}.event-browser{margin:0 16px 16px;border-top:1px solid var(--line);padding-top:12px}.event-browser summary,.event-footer summary{cursor:pointer;font-size:11px;color:#9ab4a3}.event-browser>summary,.event-footer summary,.event-provenance>summary{display:flex;align-items:center;gap:8px}.event-browser>summary:after,.event-footer summary:after,.event-provenance>summary:after{content:"";width:6px;height:6px;flex-shrink:0;margin-left:auto;margin-right:3px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:translateY(-2px) rotate(45deg)}.event-browser[open]>summary:after,.event-footer details[open]>summary:after,.event-provenance[open]>summary:after{transform:translateY(2px) rotate(225deg)}.event-list{max-height:230px;overflow:auto;overscroll-behavior:contain}.event-row{display:block;width:100%;padding:10px;margin-bottom:5px;border:1px solid transparent;border-radius:9px;text-align:left}.event-row:hover{background:#b0e9d608}.event-row[aria-current=true]{background:#b0e9d610;border-color:#b0e9d635}.event-row-top{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:8px}.event-row-top small{color:#7e9c8a;font:9px var(--mono)}.event-badge{font:10px var(--mono);color:var(--event-color);display:inline-flex;align-items:center;gap:7px}.event-badge:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--event-color);flex-shrink:0}.event-row strong{display:block;font-size:12px;font-weight:480;color:#d2e4da;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-preview{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:11px;color:#8aa798;line-height:1.6;margin:6px 0;overflow-wrap:anywhere}.event-row time{font:9px var(--mono);color:#6f9380}.event-pagination{display:flex;justify-content:space-between;gap:10px;padding-top:10px;border-top:1px solid var(--line)}.event-pagination button{font-size:10px}.event-content{padding:16px;min-width:0}.event-detail-nav{display:flex;align-items:center;gap:8px;padding:8px 16px 12px;border-bottom:1px solid var(--line)}.event-detail-nav>span{font:9px var(--mono);color:#92ad9e;text-align:center}.event-detail-nav button{font-size:11px;padding:7px 9px}.event-detail-heading h3{font-size:18px;font-weight:450;letter-spacing:-.4px;overflow-wrap:anywhere;margin:10px 0}.event-detail-heading p{color:#7f9f8c;font:10px var(--mono);line-height:1.6}.event-status{display:inline-block;margin-left:12px;color:#9ab7a6;font:9px var(--mono);border:1px solid #b0e9d629;padding:4px 7px;border-radius:4px}.event-status.failed{color:#eeaa9d;border-color:#eeaa9d40}.event-payload{margin-top:18px}.event-content h4{font:10px var(--mono);text-transform:uppercase;letter-spacing:.1em;color:#8aa997;margin:0 0 12px}.event-payload pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.8 var(--mono);color:#d4e6db;padding:12px;border:1px solid #b0e9d619;border-radius:9px;background:#050e123d;tab-size:2}.event-warning{padding:12px;background:#eac5940a;border:1px solid #eac59430;border-radius:7px;font-size:11px;color:#d6bc97}.event-correlations{margin-top:20px}.event-correlations p{font-size:11px;color:#91a999}.event-link{display:flex;align-items:center;gap:9px;padding:10px;width:100%;border:1px solid var(--line);border-radius:7px;margin-bottom:6px;text-align:left}.event-link>span:nth-child(2){flex:1;overflow-wrap:anywhere;font-size:12px}.event-link small{font:9px var(--mono);color:#8ca594}.event-provenance{margin-top:18px;font-size:11px;color:#7e9d8b}.event-provenance summary{cursor:pointer;padding-block:10px}.event-provenance dl{display:grid;grid-template-columns:90px minmax(0,1fr);gap:10px}.event-provenance dd{margin:0;overflow-wrap:anywhere;font-family:var(--mono);font-size:10px}.event-footer{display:flex;align-items:center;gap:12px;padding:8px 16px;border-top:1px solid var(--line);background:#081216}.event-footer>.event-coverage{flex:1}.event-coverage{font-size:10px;line-height:1.6;color:#7d9c8b;max-height:70px;overflow:auto}.event-reload{font-size:11px;white-space:nowrap}.event-empty{padding:24px 12px;color:#90aa9c;font-size:12px;line-height:1.7}.event-panel button:disabled{opacity:.4;cursor:default}.event-panel[aria-busy=true] .event-scroll{opacity:.65}.event-key{display:flex;flex-wrap:wrap;gap:12px;margin:14px 0}.event-key span{font:9px var(--mono)}.event-key i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;background:var(--event-color)}.explore-events{width:100%;justify-content:center;margin-top:10px}.history-coverage{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}.history-coverage>summary{min-height:24px;border-radius:4px}.settings-dialog{width:min(850px,calc(100% - 32px));max-width:none;height:min(710px,calc(100dvh - 48px));padding:0;overflow:hidden;background:#0c191e}.settings-dialog[open]{display:flex;flex-direction:column}.settings-heading{display:flex;align-items:flex-start;justify-content:space-between;padding:30px 30px 24px;border-bottom:1px solid var(--line);background:radial-gradient(ellipse at top left,#28534a44,transparent 70%)}.settings-heading h2{margin:0 0 4px;font-size:27px;letter-spacing:-.8px}.settings-heading p{margin:0;font-size:12px;color:#87a69a}.settings-close{font-size:25px;margin:-10px -12px 0 0}.settings-layout{display:grid;grid-template-columns:175px minmax(0,1fr);flex:1;min-height:0}.settings-tabs{padding:20px 12px;border-right:1px solid var(--line);background:#040b0e33}.settings-tabs button{display:flex;align-items:center;gap:10px;width:100%;padding:12px;margin-bottom:5px;text-align:left;font-size:12px;border-radius:8px;color:#8aa79a}.settings-tabs button>svg{width:16px;height:16px;color:#6b9582}.settings-tabs button[aria-selected=true]{color:#d5eee2;background:#b0e9d610}.settings-tabs button[aria-selected=true]>svg{color:#b0e9d6}.settings-tabs button:hover{background:#b0e9d609}.settings-content{min-width:0;overflow-y:auto;overscroll-behavior:contain;padding:26px 30px}.settings-content h3{font-size:18px;font-weight:450;margin:0 0 7px;letter-spacing:-.4px}.settings-description{margin:0 0 20px;font-size:12px}.settings-sources-list{margin-top:20px;color:var(--muted);font-size:12px}.settings-import-progress{color:var(--muted);font-size:11px;line-height:1.6;margin-top:16px}.setting-row{display:flex;align-items:center;justify-content:space-between;gap:22px;padding:16px 0;border-bottom:1px solid var(--line)}.setting-row>span:first-child{flex:1;min-width:0}.setting-row strong{display:block;font-size:12px;font-weight:470;color:#d1e3d9}.setting-row small{display:block;margin-top:5px;font-size:11px;line-height:1.55;color:#83a090}.setting-row select{max-width:165px;min-width:120px;padding:9px;border:1px solid #b0e9d621;border-radius:7px;background:#142620;color:#c7dfd2;font-size:11px}.setting-row input[type=checkbox]{appearance:none;flex-shrink:0;position:relative;width:34px;height:20px;margin:0;border-radius:20px;border:1px solid #779c8b40;background:#1c2e28;cursor:pointer}.setting-row input[type=checkbox]:before{content:"";position:absolute;width:12px;height:12px;top:3px;left:3px;border-radius:50%;background:#718f80;transition:transform .18s,background .18s}.setting-row input[type=checkbox]:checked{background:#b0e9d625;border-color:#b0e9d64a}.setting-row input[type=checkbox]:checked:before{transform:translate(14px);background:#b0e9d6}.setting-slider{display:flex;align-items:center;width:160px;gap:10px;flex-shrink:0}.setting-slider input{accent-color:#b0e9d6;width:108px;min-width:0;cursor:pointer}.setting-slider output{min-width:36px;font:10px var(--mono);color:#bddaca;text-align:right}.setting-row:has(:disabled){opacity:.45}.settings-note{display:flex;align-items:center;gap:14px;margin-top:22px}.settings-note>span{flex:1;font-size:11px;color:#85a495;line-height:1.6}.settings-note button{flex:0 0 auto;font-size:11px}.settings-footnote{font-size:10px;color:#6f9280;margin-bottom:0}.settings-footer{display:flex;align-items:center;gap:12px;padding:15px 22px;border-top:1px solid var(--line);background:#081216}.settings-save-status{flex:1;font-size:10px;color:#7d9c8b;line-height:1.5}.settings-footer .text-button{font-size:11px}.settings-footer .primary-button{padding-inline:20px}@media(max-width:650px){.settings-dialog{width:calc(100% - 20px);height:calc(100dvh - 24px);max-height:none}.settings-heading{padding:23px 20px 18px}.settings-heading h2{font-size:23px}.settings-layout{display:flex;flex-direction:column}.settings-tabs{display:flex;padding:9px;border-right:0;border-bottom:1px solid var(--line);overflow-x:auto;flex-shrink:0}.settings-tabs button{width:auto;flex:1 0 auto;margin:0;padding:9px 11px;font-size:11px;justify-content:center}.settings-tabs button>svg{width:14px;height:14px}.settings-content{padding:22px 18px}.setting-row{gap:12px}.setting-slider{width:128px}.setting-slider input{width:78px}.setting-row select{min-width:100px;max-width:135px}.settings-footer{flex-wrap:wrap;padding:12px 18px}.settings-save-status{flex-basis:100%}.settings-footer .text-button{margin-right:auto}}.toast{position:fixed;left:50%;bottom:155px;transform:translate(-50%);max-width:min(440px,calc(100% - 32px));padding:12px 18px;background:#15251ff5;color:#c8e5d4;border:1px solid #9fbfad44;border-radius:10px;box-shadow:0 10px 30px #0005;font-size:12px;line-height:1.7;z-index:100}.desktop-update{position:fixed;left:24px;bottom:24px;z-index:45;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:32px;min-width:86px;padding:6px 12px;border-radius:10px;color:var(--mint);font-size:11px;font-weight:450;line-height:18px;white-space:nowrap}.desktop-update svg{width:13px;height:13px}.desktop-update:hover{background:#172c29;border-color:#b0e9d633;color:#e9fff4}.desktop-update:disabled{opacity:1;color:#8ba198}.desktop-update[data-phase=downloading] svg,.desktop-update[data-phase=installing] svg{opacity:.65}.shortcut-hints{position:fixed;left:24px;bottom:24px;z-index:10;display:grid;gap:7px;color:#82938f;font-size:10px;pointer-events:none}.shortcut-hints span{display:flex;align-items:center;gap:8px}.shortcut-hints kbd{min-width:22px;padding:2px 4px;border:1px solid #a3bdb523;border-radius:4px;color:#a3b5ae;background:#0b141b66;font:9px var(--mono);text-align:center}#app:has(.desktop-update:not([hidden])) .shortcut-hints{bottom:66px}@media(min-width:760px)and (max-width:1000px){.shortcut-hints{bottom:165px}#app:has(.desktop-update:not([hidden])) .shortcut-hints{bottom:165px}}@keyframes panel-in{0%{opacity:0}to{opacity:1}}@keyframes orbit{to{transform:rotateX(55deg) rotateY(20deg) rotate(360deg)}}@keyframes shimmer{to{background-position:-200% 0}}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:1000px){.sidebar{width:300px}.inspector-stack{width:320px}}@media(max-width:759px){.shortcut-hints{display:none}.app-header{top:12px;left:12px;height:44px}.brand>span{font-size:19px}.app-header .toolbar-button{padding-inline:7px}.map-controls{top:auto;right:auto;left:50%;bottom:max(12px,env(safe-area-inset-bottom));transform:translate(-50%);height:46px}.floating-panel{border-radius:14px}.sidebar,.inspector-stack{top:70px;left:12px;right:auto;width:min(330px,calc(100% - 24px));max-height:calc(100dvh - 280px)}.sidebar{height:min(500px,calc(100dvh - 280px))}.inspector-stack{width:min(350px,calc(100% - 24px));inset:auto 12px 250px auto;max-height:min(40dvh,calc(100dvh - 450px))}.inspector-stack.has-events{height:min(420px,40dvh);gap:8px}.has-events .inspector{flex-basis:135px;max-height:26%}.event-content{padding:12px}.event-detail-heading h3{font-size:16px}.timeline-dock{bottom:max(72px,calc(env(safe-area-inset-bottom) + 60px));width:calc(100% - 24px)}.timeline-panel{padding:9px 12px 15px;border-radius:14px}.timeline-top{flex-wrap:wrap;gap:0;margin-bottom:13px}.timeline-top .panel-handle{flex-basis:calc(100% - 72px);font-size:12px}.timeline-top .range-buttons{order:4;width:100%;margin:4px 0 0;gap:5px}.range-buttons button{padding:5px 12px}.timeline-top .icon-button{width:32px;height:32px}.timeline-track{gap:12px}.histogram{gap:2px}.toast{bottom:230px}.desktop-update{left:12px;bottom:max(72px,calc(env(safe-area-inset-bottom) + 60px))}#app:has(.desktop-update:not([hidden])) .timeline-dock{bottom:max(112px,calc(env(safe-area-inset-bottom) + 100px))}#app:has(.desktop-update:not([hidden])) .inspector-stack{bottom:290px}}@media(min-width:760px)and (max-height:600px){.sidebar,.inspector-stack,.inspector-stack.has-events{max-height:calc(100dvh - 100px)}.sidebar{height:calc(100dvh - 100px)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.search-dialog{width:min(960px,calc(100% - 48px));max-width:none;height:min(680px,calc(100dvh - 100px));max-height:none;padding:0;overflow:hidden;border-radius:18px;background:#0b171bf5;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);box-shadow:0 30px 120px #0009}.search-dialog[open]{display:flex;flex-direction:column}.search-dialog::backdrop{background:#02070c88;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.search-command{display:flex;align-items:center;gap:13px;padding:17px 20px;border-bottom:1px solid var(--line)}.search-command-icon{font-size:26px;color:#9dcab7}.search-command input{min-width:0;flex:1;border:0;outline:0;background:none;color:#e0f1e8;font-size:17px}.search-command input::placeholder{color:#6c8b7b}.search-close{font-size:23px}.search-options{display:flex;align-items:center;gap:10px;padding:12px 20px;border-bottom:1px solid var(--line)}.search-options select{font-size:12px;color:#bcdbcb;padding:5px 20px 5px 0;border:0;background:none}.search-chip{padding:5px 9px;border:1px solid #bddfd21a;border-radius:6px;font-size:11px;color:#8fa99b}.search-chip[aria-pressed=true]{color:#b7e2cd;background:#b0e9d60a;border-color:#b0e9d629}#search-index-state{margin-left:auto;font-size:11px;color:#7d9c8c}.search-body{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);flex:1;min-height:0}.search-results{overflow-y:auto;overscroll-behavior:contain;min-height:0}.search-results-inner{position:relative}.search-result{position:absolute;left:7px;right:7px;height:86px;border-radius:8px;padding:11px 13px;cursor:pointer;border:1px solid transparent}.search-result.active{border-color:#b0e9d626;background:#b0e9d60e}.search-result:hover{background:#b0e9d60a}.search-result-title{font-size:13px;font-weight:440;color:#d2e5d9;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.search-result-meta{display:flex;justify-content:space-between;gap:10px;font-size:10px;color:#8ca996;margin-top:7px}.search-result-meta>span:first-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.match-kind{flex-shrink:0;color:#a0c7b0}.search-result-excerpt{font-size:11px;color:#759586;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-top:6px}.search-dialog mark{color:#dbffe7;background:#b6f4d111;border-radius:2px}.search-preview{border-left:1px solid var(--line);min-height:0;overflow-y:auto;overscroll-behavior:contain}.search-preview-heading{padding:22px}.search-preview-heading>span{color:#8ba898;font-size:11px}.search-preview-heading h2{margin:10px 0;font-size:20px;line-height:1.4;overflow-wrap:anywhere}.search-preview-heading p{margin:0 0 18px;font-size:11px}.search-open{width:100%}.search-open span{margin-left:auto}.search-launch{width:100%;justify-content:center;margin-top:7px}.search-preview-section{padding:19px 22px;border-top:1px solid var(--line)}.search-preview-section h3{color:#a9c6b4;font-size:12px;font-weight:450;margin:0 0 14px}.search-preview-section p{margin:8px 0 15px;font-size:12px;line-height:1.75;overflow-wrap:anywhere;white-space:pre-line}.search-preview-section article{margin:15px 0}.search-preview-section article>span{color:#b5d1bd;font-size:11px}.search-preview-section .preview-coverage{color:#718f7e;font-size:11px;margin-bottom:0}.search-footer{position:relative;display:flex;align-items:center;gap:14px;padding:12px 18px;border-top:1px solid var(--line);color:#87a592;font-size:11px}.search-footer button{color:#b0e9d6;font-size:11px}.search-keys{margin-left:auto;white-space:nowrap}.search-keys kbd{padding:1px 4px;margin-right:3px;font-size:10px}.search-keys kbd:not(:first-child){margin-left:10px}.search-syntax>div{position:absolute;bottom:45px;right:18px;display:flex;flex-direction:column;gap:10px;padding:18px;background:#132722;border:1px solid #b0e9d629;border-radius:10px;box-shadow:0 10px 30px #0006}.search-syntax code{color:#b4d7c2;font:11px var(--mono)}#search-clear-cache{margin-top:4px;padding:12px 0 0;border-top:1px solid var(--line);text-align:left}.source-badge{display:inline-flex;align-items:center;gap:6px;font:10px var(--mono);letter-spacing:.02em;color:#b5c8d9}.source-icon{display:inline-block;width:16px;height:16px;flex:0 0 16px;vertical-align:-3px;background:currentColor;mask:var(--source-icon) center / contain no-repeat;-webkit-mask:var(--source-icon) center / contain no-repeat}.source-icon-claude{color:#d9a387}.source-icon-openai{color:#b4d9c6}.source-icon-t3{color:#d2b7ec}.source-icon-opencode{color:#c7d0d7}.source-icon-gemini,.source-icon-cline{color:#9cbcf6}.source-icon-qwen{color:#b8a6ec}.source-icon-pi{color:#e9a89c}.source-icon-copilot{color:#c7d0d7}.source-icon-roo{color:#d9b59a}.source-icon-kilo{color:#e6ce83}.source-icon-continue{color:#abd9bb}.source-icon-openclaw,.source-icon-cherry{color:#efa2a0}.source-icon-hermes,.source-icon-amp,.source-icon-mistral{color:#e9bd85}.source-icon-kimi,.source-icon-deepseek,.source-icon-minimax,.source-icon-antigravity{color:#a7bcf2}.source-icon-grok,.source-icon-zed,.source-icon-warp,.source-icon-lmstudio{color:#c3d2d7}.source-icon-junie,.source-icon-kiro,.source-icon-muse{color:#c4adea}.source-icon-mimo{color:#e9ae82}.source-icon-devin,.source-icon-goose,.source-icon-unsloth,.source-icon-trae{color:#a8d6b9}.source-icon-codebuddy,.source-icon-commandcode{color:#b3d6dd}.source-icon-prime,.source-icon-senpi,.source-icon-kimchi,.source-icon-gajae{color:#d5c4a9}.source-icon-droid,.source-icon-codebuff,.source-icon-freebuff,.source-icon-jcode,.source-icon-zcode{color:#bed2c5}.source-icon-proma,.source-icon-aside,.source-icon-augment,.source-icon-fx,.source-icon-crush,.source-icon-octofriend,.source-icon-mux,.source-icon-reasonix,.source-icon-hindsight{color:#d0c0dd}.source-symbol .source-icon{width:20px;height:20px;flex-basis:20px}.source-badge .source-icon,.search-result-meta .source-icon{width:12px;height:12px;flex-basis:12px;vertical-align:-2px}.search-result-meta .source-icon{margin-right:5px}.search-launch{display:inline-flex;gap:8px;align-items:center}#source-filter-icon{display:flex;align-items:center}.source-badge[data-source=claude-code]{color:#d8b297}.source-badge[data-source=codex]{color:#a5d1ba}.detail-title>.source-badge{margin-bottom:10px}.imports-dialog{width:min(680px,calc(100vw - 28px));max-width:680px;padding:32px}.imports-dialog[open]{display:flex;flex-direction:column;overflow-y:auto}.imports-dialog>*{flex-shrink:0}.imports-dialog>.import-sources{flex:1 1 auto;min-height:100px;overflow-y:auto;overscroll-behavior:contain;padding-right:4px}.imports-dialog .primary-button{flex:0 0 auto;white-space:nowrap}.imports-dialog .eyebrow{font:10px var(--mono);letter-spacing:.18em;color:#83b9a3}.imports-dialog h2{margin:16px 0 12px;font-size:clamp(24px,4vw,32px);font-weight:450;letter-spacing:-.04em}.imports-intro{color:#91a99d;font-size:13px;line-height:1.6;margin-bottom:14px}.privacy-disclosure{color:#91a99d;font-size:11px;line-height:1.65;margin-bottom:24px}.privacy-disclosure summary{cursor:pointer;color:#aec9bb}.privacy-disclosure p{font-size:inherit;line-height:inherit;margin:10px 0 0}.import-sources{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:max-content;align-content:start;gap:6px}.import-source{display:flex;align-items:center;min-width:0;min-height:52px;gap:9px;padding:8px 10px;border:1px solid #b0e9d61c;border-radius:8px;cursor:pointer;background:#b0e9d603}.import-source:has(input:checked){border-color:#b0e9d658;background:#b0e9d608}.import-source:hover{background:#b0e9d60e}.import-source:focus-within{outline:1px solid #b0e9d6;outline-offset:1px}.import-source:has(input:disabled){opacity:.6;cursor:wait}.import-source input{accent-color:#a4d8bf;flex:0 0 auto;margin:0}.source-symbol{display:grid;place-items:center;width:22px;height:22px;color:#bed3c7;flex:0 0 auto}.source-copy{flex:1;min-width:0}.import-source strong{display:block;font-size:12px;font-weight:500;line-height:1.4;overflow-wrap:anywhere}.import-source .source-meta{display:flex;flex-wrap:wrap;gap:4px 8px;color:#879d90;font-size:10px;line-height:1.35;margin-top:3px}.import-source .source-error{display:block;color:#e4ba96;font-size:10px;line-height:1.4;margin-top:3px;overflow-wrap:anywhere}.source-detected{color:#789083;white-space:nowrap}.source-detected.detected{color:#aedbc4}.imports-progress{font:11px var(--mono);color:#9fc2af;margin-top:20px;line-height:1.8;min-height:20px}.imports-dialog footer{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:18px}.imports-dialog footer>span{color:#789083;font-size:11px}.imports-notes{color:#91a99d;font-size:11px;line-height:1.6;margin-top:12px}.imports-notes>div{max-height:150px;overflow-y:auto}@media(max-width:600px){.imports-dialog{padding:26px 20px}.import-sources{grid-template-columns:minmax(0,1fr);gap:4px}.import-source{min-height:44px;padding:6px 9px}.imports-dialog footer{flex-wrap:wrap}}.search-empty{padding:30px 22px;color:#98b4a4;font-size:13px}.launch-dialog{width:min(520px,calc(100% - 32px));max-height:calc(100dvh - 48px);padding:28px;border-radius:16px}.launch-dialog h2{font-size:20px;margin:0 35px 10px 0}.launch-title{margin:0 0 24px;font-size:12px;line-height:1.6;overflow-wrap:anywhere}.launch-destination{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px;font-size:12px;color:#a9c6b4}.launch-destination select{min-width:0;max-width:77%;border:1px solid var(--line);border-radius:7px;padding:9px;background:#132321;color:#d1e5d9;font-size:12px}.launch-web-link{width:100%}.launch-pairing{margin-top:19px;font-size:11px;color:#8fa99b}.launch-pairing p,.launch-hint{font-size:11px;line-height:1.7}.launch-directory-label{display:grid;gap:9px;margin-bottom:18px;color:#a9c6b4;font-size:12px}.launch-directory{min-width:0;width:100%;padding:10px;background:#071114;color:#c8e5d5;border:1px solid var(--line);border-radius:7px;font:11px var(--mono)}.launch-summary{margin-bottom:18px;padding:13px;border:1px solid #b0e9d625;border-radius:9px;background:#b0e9d608}.launch-mode{color:#b8ddc9;font-size:12px;font-weight:500}.launch-hint{margin:7px 0 0;color:#9eb6a8}.launch-context{margin-top:12px;color:#a1b9ac;font-size:11px}.launch-context summary{cursor:pointer}.launch-coverage{line-height:1.7}.launch-context-path{display:block;overflow-wrap:anywhere;font:10px/1.7 var(--mono);color:#7e9e8e}.launch-availability{color:#c4b89b;font-size:11px;line-height:1.7;margin-bottom:0}.launch-availability:empty{display:none}.launch-command{display:block;width:100%;background:#071114;border:1px solid var(--line);border-radius:7px;padding:11px;color:#c8e5d5;font:11px var(--mono)}.launch-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px}.launch-actions>button{flex:1;white-space:nowrap}.launch-status{margin:14px 0 0;font-size:12px;line-height:1.6}.launch-status:empty{display:none}@media(max-width:759px){.search-dialog{width:calc(100% - 24px);height:calc(100dvh - 48px);border-radius:14px}.search-command{padding:12px;gap:8px}.search-command input{font-size:16px}.search-options{flex-wrap:wrap;padding:9px 14px;gap:7px 12px}#search-index-state{flex-basis:100%;margin-left:0}.search-body{grid-template-columns:1fr;grid-template-rows:minmax(150px,1fr) minmax(130px,.7fr)}.search-preview{border-left:0;border-top:1px solid var(--line)}.search-preview-heading{padding:16px}.search-preview-heading h2{font-size:17px}.search-preview-section{padding:16px}.search-footer{padding:10px 14px}.search-keys{display:none}.search-syntax{margin-left:auto}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{M as oe,C as L,S as ce,a as M,G,P as ae,I as ne,b as k,D as F,c as I,A as T,d as Y,e as N,B as D,F as S,f as re,g as H,W as ke,h as Pe,O as Se,i as Ae,H as Ce,E as Re,R as Fe,U as Ee,V as O,j as Ie,k as Te,l as ze,m as Be,n as Ue,o as V,p as Ge,q as g,r as De,s as ee,t as Oe,u as Le,v as j,w as te,x as ie,y as He,L as Ne,z as de,J as ue,K as Xe,N as _e}from"./three-D_1Qt16u.js";import{h as ge,j as R,c as Ve,D as $e,m as je,k as C,l as $,o as We,n as qe,q as Ye,r as se,u as fe}from"./index-
|
|
1
|
+
import{M as oe,C as L,S as ce,a as M,G,P as ae,I as ne,b as k,D as F,c as I,A as T,d as Y,e as N,B as D,F as S,f as re,g as H,W as ke,h as Pe,O as Se,i as Ae,H as Ce,E as Re,R as Fe,U as Ee,V as O,j as Ie,k as Te,l as ze,m as Be,n as Ue,o as V,p as Ge,q as g,r as De,s as ee,t as Oe,u as Le,v as j,w as te,x as ie,y as He,L as Ne,z as de,J as ue,K as Xe,N as _e}from"./three-D_1Qt16u.js";import{h as ge,j as R,c as Ve,D as $e,m as je,k as C,l as $,o as We,n as qe,q as Ye,r as se,u as fe}from"./index-BEabiGl5.js";const Ke=["svg",ge,[["path",{d:"M12 8V4H8"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"}],["path",{d:"M2 14h2"}],["path",{d:"M20 14h2"}],["path",{d:"M15 13v2"}],["path",{d:"M9 13v2"}]]];const Qe=["svg",ge,[["circle",{cx:"12",cy:"8",r:"5"}],["path",{d:"M20 21a8 8 0 0 0-16 0"}]]],ye=`
|
|
2
2
|
attribute float nodeIndex;
|
|
3
3
|
uniform float uSelected;
|
|
4
4
|
uniform float uHovered;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
2
|
-
import{TimelineScene as X}from"./scene-
|
|
3
|
-
https://github.com/arvindell/sessiongraph`,de=`https://x.com/intent/tweet?text=${encodeURIComponent(_)}`,W=e=>e instanceof Error&&e.name==="AbortError";async function ue(e,t,o){const{label:r,description:l,mime:u,filename:i}=G[o];try{if(J()){const[{save:a},{writeFile:s}]=await Promise.all([O(()=>import("./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DxQk-77k.js","assets/index-BEabiGl5.js","assets/index-vX8x5oFC.css","assets/index-86i6pjnx.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{TimelineScene as X}from"./scene-CEalI0mr.js";import{i as J,_ as O,c as Y,S as Z,p as K,a as Q,t as ee,s as te,b as B,d as ae,e as oe,f as re,g as se}from"./index-BEabiGl5.js";import"./three-D_1Qt16u.js";const ne="Cosmic Wobbly Disco Sneaky Bouncy Galactic Crispy Dizzy Fuzzy Noodle Groovy Sleepy Spicy Jolly Loopy Squishy Turbo Giggly Velvet Soggy Zippy Fluffy Moonwalking Wiggly Fizzy Snazzy Goofy Jazzy Tiny Chunky Dapper Wacky".split(" "),ie="Wombat Pickle Pancake Badger Potato Narwhal Noodle Goblin Otter Turnip Hamster Comet Dumpling Goose Biscuit Llama Muffin Squid Raccoon Toaster Waffle Penguin Yeti Pudding Walrus Taco Jellybean Platypus Sloth Cactus Donut Mongoose".split(" ");function le(e,t=()=>crypto.getRandomValues(new Uint32Array(1))[0]/2**32){const o=ne.flatMap(r=>ie.map(l=>`${r} ${l}`));for(let r=o.length-1;r>0;r--){const l=Math.floor(t()*(r+1));[o[r],o[l]]=[o[l],o[r]]}return Array.from({length:e},(r,l)=>{const u=Math.floor(l/o.length);return`Project ${"Mega".repeat(u)}${o[l%o.length]}`})}function ce(e){const t=le(e.lanes.length),o=new Map(e.nodes.map((i,a)=>[i.session.id,`session-${a}`])),r=new Map(e.lanes.flatMap((i,a)=>i.nodes.map(s=>[s.session.id,`project-${a}`]))),l=e.nodes.map(i=>{const a=i.session,s={id:o.get(a.id),title:"Session",projectID:r.get(a.id),directory:"",created:a.created,updated:a.created,activity:a.activity&&{firstMessageAt:a.activity.firstMessageAt,lastMessageAt:a.activity.lastMessageAt,userMessages:a.activity.userMessages,untimedUserMessages:a.activity.untimedUserMessages},archived:!1,model:"",provider:"",agent:"",cost:null,source:a.source==="continue"?"continue":a.source==="opencode"||!a.source?"opencode":"unknown",tokens:a.tokens};return a.parentID&&o.has(a.parentID)&&(s.parentID=o.get(a.parentID)),a.forkID&&o.has(a.forkID)&&(s.forkID=o.get(a.forkID)),{session:s,position:[...i.position],startPosition:[...i.startPosition],color:i.color,radius:i.radius}}),u=new Map(l.map(i=>[i.session.id,i]));return{start:e.start,end:e.end,timeFrame:e.timeFrame&&{...e.timeFrame},nodes:l,edges:e.edges.map(i=>({from:o.get(i.from),to:o.get(i.to),kind:i.kind})),lanes:e.lanes.map((i,a)=>({key:`project-${a}`,label:t[a],color:i.color,kind:"directory",y:i.y,z:i.z,nodes:i.nodes.map(s=>u.get(o.get(s.session.id)))}))}}const G={gif:{label:"GIF",description:"GIF animation",mime:"image/gif",filename:"sessiongraph-playback.gif"},mp4:{label:"MP4",description:"MP4 video",mime:"video/mp4",filename:"sessiongraph-playback.mp4"}},_=`My coding sessions, visualized with SessionGraph.
|
|
3
|
+
https://github.com/arvindell/sessiongraph`,de=`https://x.com/intent/tweet?text=${encodeURIComponent(_)}`,W=e=>e instanceof Error&&e.name==="AbortError";async function ue(e,t,o){const{label:r,description:l,mime:u,filename:i}=G[o];try{if(J()){const[{save:a},{writeFile:s}]=await Promise.all([O(()=>import("./index-DxQk-77k.js"),__vite__mapDeps([0,1,2])),O(()=>import("./index-86i6pjnx.js"),__vite__mapDeps([3,1,2]))]),h=await a({title:`Save SessionGraph ${r}`,defaultPath:i,filters:[{name:l,extensions:[o]}]});if(!h)return"cancelled";await s(h,new Uint8Array(await e.arrayBuffer()))}else{const a=window.showSaveFilePicker;if(a){const h=await(await a.call(window,{suggestedName:i,types:[{description:l,accept:{[u]:[`.${o}`]}}]})).createWritable();try{await h.write(e),await h.close()}catch(c){throw await h.abort().catch(()=>{}),c}}else{const s=document.createElement("a");return s.href=t,s.download=i,document.body.append(s),s.click(),s.remove(),"downloaded"}}return"saved"}catch(a){if(W(a))return"cancelled";throw a}}const A=960,T=600,he=e=>Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e);function pe(e,t,o,r,l,u){const s=T-122,h=Math.max(1,...r);e.fillStyle="#91afa2",e.font='12px "Geist Variable", sans-serif',e.fillText("SessionGraph",28,32);for(let p=0;p<r.length;p++){const m=Math.max(2,r[p]/h*22);e.fillStyle=p/r.length<=o?"#91bfae":"#253d39",e.fillRect(260+p/r.length*440,s-m,440/r.length-2,m)}e.fillStyle="#d6f4e8",e.fillRect(260+440*o,s-27,1,31);const c=t.start+(t.end-t.start)*o,M=l.at(c,o===1).tokens;e.textAlign="center",e.fillStyle="#a0baae",e.font='12px "IBM Plex Mono", monospace',e.fillText(se(c,t.end-t.start),A/2,s+23),e.fillStyle="#e7f5ee",e.font='36px "Geist Variable", sans-serif',e.fillText(u(c,o===1).toLocaleString("en"),A/2-105,s+66),e.fillText(l.recorded?he(M):"—",A/2+105,s+66),e.font='12px "Geist Variable", sans-serif',e.fillStyle="#92b0a3",e.fillText("Sessions",A/2-105,s+87),e.fillText("Burnt tokens",A/2+105,s+87),e.textAlign="left"}async function ye(e,t,o,r,l){r.throwIfAborted();const{label:u,mime:i}=G[o],a=K(e.nodes.map(b=>b.session)),s=Q(e.nodes.map(b=>b.session)),h=ee(e.nodes.map(b=>te(b.session)),e.start,e.end),c=document.createElement("div");c.className="share-render-host",c.setAttribute("aria-hidden","true"),c.style.cssText=`position:fixed;left:-12000px;top:0;width:${A}px;height:${T}px;pointer-events:none;visibility:hidden`,document.body.append(c);const M=document.createElement("canvas");M.width=A,M.height=T;const p=M.getContext("2d",{willReadFrequently:!0});let m,f;try{if(!p)throw new Error("Canvas export is unavailable.");m=new X(c,{onSelect(){},onHover(){},onPlaybackInterrupt(){},onEvent(){},onEventHover(){}},{manual:!0}),m.applyPreferences({...t,quality:"balanced",motion:"on",labels:!0,focusDimming:!1,trails:t.trails==="selected"?"all":t.trails}),m.setGraph(e,!0),m.prepareCapture(),await document.fonts.ready,r.throwIfAborted(),f=o==="mp4"?new Worker(new URL("/assets/mp4-worker-HFPra5JP.js",import.meta.url),{type:"module"}):new Worker(new URL("/assets/gif-worker-CghHEBpp.js",import.meta.url),{type:"module"});const b=(w,I=[])=>new Promise((C,v)=>{r.throwIfAborted();const S=()=>{clearTimeout(P),r.removeEventListener("abort",g),f.onmessage=null,f.onerror=null},g=()=>{S(),v(r.reason)},P=setTimeout(()=>{S(),v(new Error(`${u} encoding timed out. Please try again.`))},6e4);r.addEventListener("abort",g,{once:!0}),f.onmessage=E=>{S(),E.data.error?v(new Error(E.data.error)):C(E.data)},f.onerror=()=>{S(),v(new Error(`Could not start the ${u} encoder.`))},f.postMessage(w,I)});o==="mp4"&&await b({init:!0,width:A,height:T});for(let w=0;w<B;w++){r.throwIfAborted();const I=ae(w);m.captureFrame(I,1/oe,p,re(w)),pe(p,e,I,h,a,s);const C=p.getImageData(0,0,A,T).data.buffer;await b({rgba:C,width:A,height:T},[C]),l((w+1)/B)}const $=await b({finish:!0});return new Blob([$.bytes],{type:i})}finally{f?.terminate(),m?.dispose(),c.remove()}}function ve(e){const t=document.createElement("dialog");t.className="share-dialog",t.setAttribute("aria-labelledby","share-title"),t.innerHTML=`<h2 id="share-title">SessionGraph</h2><p>Project and sessions names are hidden</p>
|
|
4
4
|
<div class="share-formats" role="group" aria-label="Animation format"><button data-format="gif" aria-pressed="true">GIF</button><button data-format="mp4" aria-pressed="false">MP4 video</button></div>
|
|
5
5
|
<div class="share-preview"><img alt="SessionGraph playback with hidden project and session names" hidden/><video aria-label="SessionGraph playback with hidden project and session names" muted loop playsinline controls hidden></video><div class="share-progress"><progress max="100" value="0" aria-label="Creating GIF"></progress><span role="status">Creating GIF… 0%</span></div></div>
|
|
6
6
|
<p class="share-notice" role="status" hidden></p>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(){"use strict";const Fe="ENTRIES",de="KEYS",le="VALUES";class G{constructor(e,t){const i=e._tree,r=Array.from(i.keys());this.set=e,this._type=t,this._path=r.length>0?[{node:i,keys:r}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=C(this._path);if(C(t)==="")return{done:!1,value:this.result()};const i=e.get(C(t));return this._path.push({node:i,keys:Array.from(i.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=C(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>C(e)).filter(e=>e!=="").join("")}value(){return C(this._path).node.get("")}result(){switch(this._type){case le:return this.value();case de:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const C=s=>s[s.length-1],ve=(s,e,t)=>{const i=new Map;if(e===void 0)return i;const r=e.length+1,o=r+t,n=new Uint8Array(o*r).fill(t+1);for(let c=0;c<r;++c)n[c]=c;for(let c=1;c<o;++c)n[c*r]=c;return he(s,e,t,i,n,1,r,""),i},he=(s,e,t,i,r,o,n,c)=>{const a=o*n;e:for(const d of s.keys())if(d===""){const u=r[a-1];u<=t&&i.set(c,[s.get(d),u])}else{let u=o;for(let p=0;p<d.length;++p,++u){const l=d[p],h=n*u,g=h-n;let m=r[h];const f=Math.max(0,u-t-1),_=Math.min(n-1,u+t);for(let w=f;w<_;++w){const V=l!==e[w],R=r[g+w]+ +V,b=r[g+w+1]+1,F=r[h+w]+1,S=r[h+w+1]=Math.min(R,b,F);S<m&&(m=S)}if(m>t)continue e}he(s.get(d),e,t,i,r,u,n,c+d)}};class v{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,i]=W(this._tree,e.slice(this._prefix.length));if(t===void 0){const[r,o]=X(i);for(const n of r.keys())if(n!==""&&n.startsWith(o)){const c=new Map;return c.set(n.slice(o.length),r.get(n)),new v(c,e)}}return new v(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,ke(this._tree,e)}entries(){return new G(this,Fe)}forEach(e){for(const[t,i]of this)e(t,i,this)}fuzzyGet(e,t){return ve(this._tree,e,t)}get(e){const t=K(this._tree,e);return t!==void 0?t.get(""):void 0}has(e){const t=K(this._tree,e);return t!==void 0&&t.has("")}keys(){return new G(this,de)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,H(this._tree,e).set("",t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const i=H(this._tree,e);return i.set("",t(i.get(""))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const i=H(this._tree,e);let r=i.get("");return r===void 0&&i.set("",r=t()),r}values(){return new G(this,le)}[Symbol.iterator](){return this.entries()}static from(e){const t=new v;for(const[i,r]of e)t.set(i,r);return t}static fromObject(e){return v.from(Object.entries(e))}}const W=(s,e,t=[])=>{if(e.length===0||s==null)return[s,t];for(const i of s.keys())if(i!==""&&e.startsWith(i))return t.push([s,i]),W(s.get(i),e.slice(i.length),t);return t.push([s,e]),W(void 0,"",t)},K=(s,e)=>{if(e.length===0||s==null)return s;for(const t of s.keys())if(t!==""&&e.startsWith(t))return K(s.get(t),e.slice(t.length))},H=(s,e)=>{const t=e.length;e:for(let i=0;s&&i<t;){for(const o of s.keys())if(o!==""&&e[i]===o[0]){const n=Math.min(t-i,o.length);let c=1;for(;c<n&&e[i+c]===o[c];)++c;const a=s.get(o);if(c===o.length)s=a;else{const d=new Map;d.set(o.slice(c),a),s.set(e.slice(i,i+c),d),s.delete(o),s=d}i+=c;continue e}const r=new Map;return s.set(e.slice(i),r),r}return s},ke=(s,e)=>{const[t,i]=W(s,e);if(t!==void 0){if(t.delete(""),t.size===0)ue(i);else if(t.size===1){const[r,o]=t.entries().next().value;fe(i,r,o)}}},ue=s=>{if(s.length===0)return;const[e,t]=X(s);if(e.delete(t),e.size===0)ue(s.slice(0,-1));else if(e.size===1){const[i,r]=e.entries().next().value;i!==""&&fe(s.slice(0,-1),i,r)}},fe=(s,e,t)=>{if(s.length===0)return;const[i,r]=X(s);i.set(r+e,t),i.delete(r)},X=s=>s[s.length-1],Z="or",me="and",ze="and_not";class E{constructor(e){if(e?.fields==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?ne:e.autoVacuum;this._options={...te,...e,autoVacuum:t,searchOptions:{...pe,...e.searchOptions||{}},autoSuggestOptions:{...De,...e.autoSuggestOptions||{}}},this._index=new v,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=ie,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:i,tokenize:r,processTerm:o,fields:n,idField:c}=this._options,a=t(e,c);if(a==null)throw new Error(`MiniSearch: document does not have ID field "${c}"`);if(this._idToShortId.has(a))throw new Error(`MiniSearch: duplicate ID ${a}`);const d=this.addDocumentId(a);this.saveStoredFields(d,e);for(const u of n){const p=t(e,u);if(p==null)continue;const l=r(i(p,u),u),h=this._fieldIds[u],g=new Set(l).size;this.addFieldLength(d,h,this._documentCount-1,g);for(const m of l){const f=o(m,u);if(Array.isArray(f))for(const _ of f)this.addTerm(h,d,_);else f&&this.addTerm(h,d,f)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:i=10}=t,r={chunk:[],promise:Promise.resolve()},{chunk:o,promise:n}=e.reduce(({chunk:c,promise:a},d,u)=>(c.push(d),(u+1)%i===0?{chunk:[],promise:a.then(()=>new Promise(p=>setTimeout(p,0))).then(()=>this.addAll(c))}:{chunk:c,promise:a}),r);return n.then(()=>this.addAll(o))}remove(e){const{tokenize:t,processTerm:i,extractField:r,stringifyField:o,fields:n,idField:c}=this._options,a=r(e,c);if(a==null)throw new Error(`MiniSearch: document does not have ID field "${c}"`);const d=this._idToShortId.get(a);if(d==null)throw new Error(`MiniSearch: cannot remove document with ID ${a}: it is not in the index`);for(const u of n){const p=r(e,u);if(p==null)continue;const l=t(o(p,u),u),h=this._fieldIds[u],g=new Set(l).size;this.removeFieldLength(d,h,this._documentCount,g);for(const m of l){const f=i(m,u);if(Array.isArray(f))for(const _ of f)this.removeTerm(h,d,_);else f&&this.removeTerm(h,d,f)}}this._storedFields.delete(d),this._documentIds.delete(d),this._idToShortId.delete(a),this._fieldLength.delete(d),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new v,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((i,r)=>{this.removeFieldLength(t,r,this._documentCount,i)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:i,batchWait:r}=this._options.autoVacuum;this.conditionalVacuum({batchSize:i,batchWait:r},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const i of e)this.discard(i)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:i}=this._options,r=i(e,t);this.discard(r),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const i=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=ie,this.performVacuuming(e,i)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const i=this._dirtCount;if(this.vacuumConditionsMet(t)){const r=e.batchSize||se.batchSize,o=e.batchWait||se.batchWait;let n=1;for(const[c,a]of this._index){for(const[d,u]of a)for(const[p]of u)this._documentIds.has(p)||(u.size<=1?a.delete(d):u.delete(p));this._index.get(c).size===0&&this._index.delete(c),n%r===0&&await new Promise(d=>setTimeout(d,o)),n+=1}this._dirtCount-=i}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:i}=e;return t=t||ne.minDirtCount,i=i||ne.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=i}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:i}=this._options,r={...i,...t},o=this.executeQuery(e,t),n=[];for(const[c,{score:a,terms:d,match:u}]of o){const p=d.length||1,l={id:this._documentIds.get(c),score:a*p,terms:Object.keys(u),queryTerms:d,match:u};Object.assign(l,this._storedFields.get(c)),(r.filter==null||r.filter(l))&&n.push(l)}return e===E.wildcard&&r.boostDocument==null||n.sort(_e),n}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const i=new Map;for(const{score:o,terms:n}of this.search(e,t)){const c=n.join(" "),a=i.get(c);a!=null?(a.score+=o,a.count+=1):i.set(c,{score:o,terms:n,count:1})}const r=[];for(const[o,{score:n,terms:c,count:a}]of i)r.push({suggestion:o,terms:c,score:n/a});return r.sort(_e),r}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(te.hasOwnProperty(e))return ee(te,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:i,documentIds:r,fieldLength:o,storedFields:n,serializationVersion:c}=e,a=this.instantiateMiniSearch(e,t);a._documentIds=P(r),a._fieldLength=P(o),a._storedFields=P(n);for(const[d,u]of a._documentIds)a._idToShortId.set(u,d);for(const[d,u]of i){const p=new Map;for(const l of Object.keys(u)){let h=u[l];c===1&&(h=h.ds),p.set(parseInt(l,10),P(h))}a._index.set(d,p)}return a}static async loadJSAsync(e,t){const{index:i,documentIds:r,fieldLength:o,storedFields:n,serializationVersion:c}=e,a=this.instantiateMiniSearch(e,t);a._documentIds=await U(r),a._fieldLength=await U(o),a._storedFields=await U(n);for(const[u,p]of a._documentIds)a._idToShortId.set(p,u);let d=0;for(const[u,p]of i){const l=new Map;for(const h of Object.keys(p)){let g=p[h];c===1&&(g=g.ds),l.set(parseInt(h,10),await U(g))}++d%1e3===0&&await ye(0),a._index.set(u,l)}return a}static instantiateMiniSearch(e,t){const{documentCount:i,nextId:r,fieldIds:o,averageFieldLength:n,dirtCount:c,serializationVersion:a}=e;if(a!==1&&a!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const d=new E(t);return d._documentCount=i,d._nextId=r,d._idToShortId=new Map,d._fieldIds=o,d._avgFieldLength=n,d._dirtCount=c||0,d._index=new v,d}executeQuery(e,t={}){if(e===E.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const l={...t,...e,queries:void 0},h=e.queries.map(g=>this.executeQuery(g,l));return this.combineResults(h,l.combineWith)}const{tokenize:i,processTerm:r,searchOptions:o}=this._options,n={tokenize:i,processTerm:r,...o,...t},{tokenize:c,processTerm:a}=n,p=c(e).flatMap(l=>a(l)).filter(l=>!!l).map(Le(n)).map(l=>this.executeQuerySpec(l,n));return this.combineResults(p,n.combineWith)}executeQuerySpec(e,t){const i={...this._options.searchOptions,...t},r=(i.fields||this._options.fields).reduce((m,f)=>({...m,[f]:ee(i.boost,f)||1}),{}),{boostDocument:o,weights:n,maxFuzzy:c,bm25:a}=i,{fuzzy:d,prefix:u}={...pe.weights,...n},p=this._index.get(e.term),l=this.termResults(e.term,e.term,1,e.termBoost,p,r,o,a);let h,g;if(e.prefix&&(h=this._index.atPrefix(e.term)),e.fuzzy){const m=e.fuzzy===!0?.2:e.fuzzy,f=m<1?Math.min(c,Math.round(e.term.length*m)):m;f&&(g=this._index.fuzzyGet(e.term,f))}if(h)for(const[m,f]of h){const _=m.length-e.term.length;if(!_)continue;g?.delete(m);const w=u*m.length/(m.length+.3*_);this.termResults(e.term,m,w,e.termBoost,f,r,o,a,l)}if(g)for(const m of g.keys()){const[f,_]=g.get(m);if(!_)continue;const w=d*m.length/(m.length+_);this.termResults(e.term,m,w,e.termBoost,f,r,o,a,l)}return l}executeWildcardQuery(e){const t=new Map,i={...this._options.searchOptions,...e};for(const[r,o]of this._documentIds){const n=i.boostDocument?i.boostDocument(o,"",this._storedFields.get(r)):1;t.set(r,{score:n,terms:[],match:{}})}return t}combineResults(e,t=Z){if(e.length===0)return new Map;const i=t.toLowerCase(),r=Me[i];if(!r)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(r)||new Map}toJSON(){const e=[];for(const[t,i]of this._index){const r={};for(const[o,n]of i)r[o]=Object.fromEntries(n);e.push([t,r])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,i,r,o,n,c,a,d=new Map){if(o==null)return d;for(const u of Object.keys(n)){const p=n[u],l=this._fieldIds[u],h=o.get(l);if(h==null)continue;let g=h.size;const m=this._avgFieldLength[l];for(const f of h.keys()){if(!this._documentIds.has(f)){this.removeTerm(l,f,t),g-=1;continue}const _=c?c(this._documentIds.get(f),t,this._storedFields.get(f)):1;if(!_)continue;const w=h.get(f),V=this._fieldLength.get(f)[l],R=Ee(w,g,this._documentCount,V,m,a),b=i*r*p*_*R,F=d.get(f);if(F){F.score+=b,Te(F.terms,e);const S=ee(F.match,t);S?S.push(u):F.match[t]=[u]}else d.set(f,{score:b,terms:[e],match:{[t]:[u]}})}}return d}addTerm(e,t,i){const r=this._index.fetch(i,we);let o=r.get(e);if(o==null)o=new Map,o.set(t,1),r.set(e,o);else{const n=o.get(t);o.set(t,(n||0)+1)}}removeTerm(e,t,i){if(!this._index.has(i)){this.warnDocumentChanged(t,e,i);return}const r=this._index.fetch(i,we),o=r.get(e);o==null||o.get(t)==null?this.warnDocumentChanged(t,e,i):o.get(t)<=1?o.size<=1?r.delete(e):o.delete(t):o.set(t,o.get(t)-1),this._index.get(i).size===0&&this._index.delete(i)}warnDocumentChanged(e,t,i){for(const r of Object.keys(this._fieldIds))if(this._fieldIds[r]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${i}" was not present in field "${r}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;t<e.length;t++)this._fieldIds[e[t]]=t}addFieldLength(e,t,i,r){let o=this._fieldLength.get(e);o==null&&this._fieldLength.set(e,o=[]),o[t]=r;const c=(this._avgFieldLength[t]||0)*i+r;this._avgFieldLength[t]=c/(i+1)}removeFieldLength(e,t,i,r){if(i===1){this._avgFieldLength[t]=0;return}const o=this._avgFieldLength[t]*i-r;this._avgFieldLength[t]=o/(i-1)}saveStoredFields(e,t){const{storeFields:i,extractField:r}=this._options;if(i==null||i.length===0)return;let o=this._storedFields.get(e);o==null&&this._storedFields.set(e,o={});for(const n of i){const c=r(t,n);c!==void 0&&(o[n]=c)}}}E.wildcard=Symbol("*");const ee=(s,e)=>Object.prototype.hasOwnProperty.call(s,e)?s[e]:void 0,Me={[Z]:(s,e)=>{for(const t of e.keys()){const i=s.get(t);if(i==null)s.set(t,e.get(t));else{const{score:r,terms:o,match:n}=e.get(t);i.score=i.score+r,i.match=Object.assign(i.match,n),ge(i.terms,o)}}return s},[me]:(s,e)=>{const t=new Map;for(const i of e.keys()){const r=s.get(i);if(r==null)continue;const{score:o,terms:n,match:c}=e.get(i);ge(r.terms,n),t.set(i,{score:r.score+o,terms:r.terms,match:Object.assign(r.match,c)})}return t},[ze]:(s,e)=>{for(const t of e.keys())s.delete(t);return s}},Ce={k:1.2,b:.7,d:.5},Ee=(s,e,t,i,r,o)=>{const{k:n,b:c,d:a}=o;return Math.log(1+(t-e+.5)/(e+.5))*(a+s*(n+1)/(s+n*(1-c+c*i/r)))},Le=s=>(e,t,i)=>{const r=typeof s.fuzzy=="function"?s.fuzzy(e,t,i):s.fuzzy||!1,o=typeof s.prefix=="function"?s.prefix(e,t,i):s.prefix===!0,n=typeof s.boostTerm=="function"?s.boostTerm(e,t,i):1;return{term:e,fuzzy:r,prefix:o,termBoost:n}},te={idField:"id",extractField:(s,e)=>s[e],stringifyField:(s,e)=>s.toString(),tokenize:s=>s.split(Ae),processTerm:s=>s.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(s,e)=>{typeof console?.[s]=="function"&&console[s](e)},autoVacuum:!0},pe={combineWith:Z,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Ce},De={combineWith:me,prefix:(s,e,t)=>e===t.length-1},se={batchSize:1e3,batchWait:10},ie={minDirtFactor:.1,minDirtCount:20},ne={...se,...ie},Te=(s,e)=>{s.includes(e)||s.push(e)},ge=(s,e)=>{for(const t of e)s.includes(t)||s.push(t)},_e=({score:s},{score:e})=>e-s,we=()=>new Map,P=s=>{const e=new Map;for(const t of Object.keys(s))e.set(parseInt(t,10),s[t]);return e},U=async s=>{const e=new Map;let t=0;for(const i of Object.keys(s))e.set(parseInt(i,10),s[i]),++t%1e3===0&&await ye(0);return e},ye=s=>new Promise(e=>setTimeout(e,s)),Ae=/[\n\r\p{Z}\p{P}]+/u,k=24e6,J=48e3,Oe=2,L=s=>JSON.stringify([Oe,s.revision,s.updated,s.created,s.projectID,s.directory]);function Ve(s,e){if(!s||!e||s.id!==e.id||s.version!==L(e)||!Number.isInteger(s.pages)||s.pages<1||s.pages>8||!Number.isInteger(s.characters)||s.characters<0||s.characters>J||typeof s.partial!="boolean"||typeof s.complete!="boolean"||typeof s.capped!="boolean"||s.cursor!==void 0&&(typeof s.cursor!="string"||!/^\d{1,9}$/.test(s.cursor))||s.complete&&(s.partial||s.capped||s.cursor)||!s.complete&&!s.capped&&(!s.cursor||s.pages>=8)||!Array.isArray(s.fragments)||s.fragments.length>J)return!1;let t=0;for(const i of s.fragments){if(!i||!["You","Assistant","Tool","File"].includes(i.kind)||typeof i.text!="string"||i.text.length>2e3||!Number.isFinite(i.time))return!1;t+=i.text.length}return t===s.characters}const x=s=>s.normalize("NFKD").replace(new RegExp("\\p{M}","gu"),"").toLowerCase(),oe=s=>x(s).match(/[\p{L}\p{N}]+/gu)||[],re=s=>oe(s).join(" ");function je(s){const e={text:"",terms:[],phrases:[],filters:[]},t=[];for(const i of s.slice(0,300).match(/(?:[^\s"]+|"[^"]*")+/g)||[]){const r=/^(source|project|dir|model|is|after|before|in):(.+)$/i.exec(i);if(r){const n=r[1].toLowerCase(),c=x(r[2].replace(/^"|"$/g,""));if(n==="in"){const a={title:["title"],files:["files"],messages:["body"],tools:["tools"]};e.fields=a[c],e.fields||(e.error="Use in:title, in:files, in:messages, or in:tools.")}else n==="is"&&!["fork","child","root","archived"].includes(c)?e.error="Use is:fork, is:child, is:root, or is:archived.":["after","before"].includes(n)&&(!/^\d{4}-\d{2}-\d{2}$/.test(c)||!Number.isFinite(Date.parse(c))||new Date(c).toISOString().slice(0,10)!==c)?e.error="Use a valid date in YYYY-MM-DD format.":e.filters.push([n,c]);continue}const o=i.replace(/^"|"$/g,"");i.startsWith('"')&&i.endsWith('"')&&e.phrases.push(re(o)),t.push(o)}return e.text=t.join(" "),e.terms=oe(e.text).slice(0,12),e.text=e.terms.join(" "),e}function Ne(s,e,t=220){const i=x(s),r=e.reduce((n,c)=>{const a=i.indexOf(c);return a<0?n:Math.min(n,a)},1/0),o=Number.isFinite(r)?Math.max(0,r-55):0;return`${o?"…":""}${s.slice(o,o+t).replace(/\s+/g," ").trim()}${s.length>o+t?"…":""}`}class $e{index=new E({fields:["title","project","directory","model","sessionID","files","body","tools"],tokenize:oe,processTerm:x,searchOptions:{combineWith:"AND",prefix:!0,boost:{title:12,files:5,project:3,directory:3,model:2,sessionID:12,body:1,tools:.6}}});entries=new Map;cache=new Map;scope=new Set;setData(e,t){const i=new Set(e.map(o=>o.id));for(const[o,n]of this.entries)i.has(o)||(this.index.remove(n.doc),this.entries.delete(o));const r=new Map(t.map(o=>[o.id,o.name]));for(const o of e){const n=this.entries.get(o.id),c=n&&L(n.session)===L(o),a={id:o.id,title:o.title,project:r.get(o.projectID)||"",directory:o.directory,model:o.model,sessionID:o.id,body:c?n.doc.body:"",files:c?n.doc.files:"",tools:c?n.doc.tools:""};if(c&&Object.keys(a).every(d=>n.doc[d]===a[d])){n.session=o;continue}this.entries.set(o.id,{session:o,doc:a,fragments:c?n.fragments:[]}),n&&this.index.remove(n.doc),this.index.add(a)}this.cache.clear()}setScope(e){this.scope=new Set(e),this.cache.clear()}content(e){return this.entries.get(e)?.fragments.slice()||[]}addContent(e,t){const i=this.entries.get(e);if(!i)return;i.fragments.push(...t);const r={...i.doc};for(const o of t){const n=o.kind==="File"?"files":o.kind==="Tool"?"tools":"body";r[n]+=`
|
|
2
|
+
${o.text}`}this.index.remove(i.doc),this.index.add(r),i.doc=r,this.cache.clear()}search(e,t=!1,i=80){const r=`${e}\0${t}\0${i}`,o=this.cache.get(r);if(o)return o;const n=je(e);if(n.error)return{hits:[],total:0,error:n.error};const c=l=>{const{session:h,doc:g}=l;if(t&&!this.scope.has(h.id))return!1;for(const[m,f]of n.filters)if(m==="source"&&![h.source||"opencode",...(h.linkedSessionIDs||[]).map(_=>_.split(":")[0])].some(_=>x(_).includes(f))||m==="project"&&!x(g.project).includes(f)&&!x(h.projectID).includes(f)||m==="dir"&&!x(h.directory).includes(f)||m==="model"&&!x(h.model).includes(f)||m==="after"&&h.created<new Date(`${f}T00:00:00`).getTime()||m==="before"&&h.created>new Date(`${f}T23:59:59.999`).getTime()||m==="is"&&(f==="fork"&&!h.forkID||f==="child"&&(!h.parentID||h.forkID)||f==="root"&&(h.parentID||h.forkID)||f==="archived"&&!h.archived))return!1;if(n.phrases.length){const m=n.fields||["title","body","files","tools","project","directory","model"];if(!n.phrases.every(f=>m.some(_=>re(g[_]).includes(f))))return!1}return!0},d=(n.terms.length?this.index.search(n.text,{fields:n.fields,fuzzy:l=>l.length<4?!1:l.length>7?2:1,filter:l=>c(this.entries.get(String(l.id)))}):[...this.entries.values()].filter(c).map(l=>({id:l.session.id,score:0,terms:[],match:{}}))).map(l=>{const h=this.entries.get(String(l.id)),g=re(h.doc.title),m=new Set(Object.values(l.match).flat()),f=n.text?g.includes(n.text)&&(!n.fields||n.fields.includes("title"))?5:m.has("title")||m.has("sessionID")?4:m.has("files")?3:m.has("body")?2:1:0;return{match:l,entry:h,tier:f}}).sort((l,h)=>h.tier-l.tier||h.match.score-l.match.score||h.entry.session.updated-l.entry.session.updated||l.entry.session.id.localeCompare(h.entry.session.id)),p={hits:d.slice(0,Math.min(250,Math.max(1,i))).map(({match:l,entry:h,tier:g})=>{const m=l.terms.length?l.terms:n.terms,f=h.fragments.filter(b=>!n.fields||n.fields.includes(b.kind==="File"?"files":b.kind==="Tool"?"tools":"body"));let _,w=0;for(const b of f){const F=x(b.text),S=m.reduce((Pe,Ue)=>Pe+Number(F.includes(Ue)),0);if(S>w&&(_=b,w=S),S===m.length&&S>0)break}const V=new Set(Object.values(l.match).flat()),R=g>=4?V.has("sessionID")&&!V.has("title")?"Session ID":"Title":_?_.kind==="File"?"File":_.kind==="Tool"?"Tool":"Message":n.text?"Metadata":"Recent";return{id:h.session.id,score:l.score,source:R,excerpt:_?Ne(_.text,m):"",terms:m}}),total:d.length};return this.cache.size>=30&&this.cache.delete(this.cache.keys().next().value),this.cache.set(r,p),p}}class Re{available=!0;epoch=0;async restore(e,t,i){const r=new Map(t.map(c=>[c.id,c]));let o,n=0;try{do{const c=await fetch(`/api/sessiongraph/index${o?`?after=${encodeURIComponent(o)}`:""}`);if(!c.ok)throw new Error("Index unavailable");const a=await c.json();this.epoch=a.epoch;for(const d of a.records)Ve(d,r.get(d.id))&&n+d.characters<=k&&(n+=d.characters,i(d));o=a.cursor}while(o);try{globalThis.indexedDB?.deleteDatabase("atlas-search")}catch{}}catch{this.available=!1}}async save(e){if(this.available)try{const t=await fetch("/api/sessiongraph/index",{method:"POST",headers:{"Content-Type":"application/json","X-SessionGraph-Action":"index"},body:JSON.stringify({record:e,epoch:this.epoch})});!t.ok&&t.status!==409&&(this.available=!1)}catch{this.available=!1}}async clear(){const e=await fetch("/api/sessiongraph/index",{method:"DELETE",headers:{"X-SessionGraph-Action":"index"}});if(this.available=e.ok,!e.ok)throw new Error("Could not clear saved index.")}}const z=new $e,q=new Re,y=new Map,D=new Set;let T=!1,Q=0,I=0,M=0,B=!1,A,O,xe=[],ce,be=0;const Y=new Set,j=s=>postMessage(s);function N(){if(!O)return;const s=performance.now(),e=z.search(O.text,O.viewOnly,O.limit);xe=e.hits.slice(0,12).map(t=>t.id),j({type:"results",request:O.request,...e,elapsed:performance.now()-s})}function $(){const s=[...y.values()];j({type:"status",status:{indexed:s.filter(e=>e.pages>0).length,complete:s.filter(e=>e.complete).length,total:y.size,characters:I,active:T&&Q>0,limited:I>=k||s.some(e=>e.partial||e.capped),failed:s.filter(e=>e.failed>0).length,restored:D.size,storage:B?A?.sourceID&&q.available?"local":"memory":"restoring"}})}function Se(){ce||(ce=setTimeout(()=>{ce=void 0,N(),$()},200))}function We(){const s=t=>!!(t&&!t.inflight&&!t.complete&&!t.capped&&t.failed<1);for(const t of xe){const i=y.get(t);if(s(i)&&i.pages<2)return i}let e;for(const t of y.values())s(t)&&(!e||t.pages<e.pages)&&(e=t);return e}function ae(){if(!B||!T||I>=k){$();return}for(;Q<2;){const s=We();if(!s)break;s.inflight=!0,Q++;const e=M,t=new AbortController;Y.add(t),(async()=>{try{const i=new URLSearchParams({updated:String(s.session.updated)});s.cursor&&i.set("cursor",s.cursor);const r=await fetch(`/api/sessiongraph/session/${encodeURIComponent(s.session.id)}/content?${i}`,{signal:t.signal});if(!r.ok)throw new Error("Conversation unavailable");const o=await r.json();if(e!==M||t.signal.aborted)return;if(o.id!==s.session.id)throw new Error("Unexpected conversation");const n=Math.min(J,Math.floor(k/Math.max(1,y.size)));let c=Math.min(n-s.characters,k-I);const a=[],d=[...o.fragments].sort((l,h)=>+(h.kind==="File"||h.kind==="You")-+(l.kind==="File"||l.kind==="You")),u=Math.max(160,Math.min(2e3,Math.floor(c/Math.max(1,d.length))));let p=!1;for(const l of d){if(c<=0){p=!0;break}const h=l.text.slice(0,Math.min(c,u));p||=h.length<l.text.length,a.push({...l,text:h}),c-=h.length,s.characters+=h.length,I+=h.length}z.addContent(s.session.id,a),s.pages++,s.partial||=o.truncated||p,s.complete=!o.nextCursor&&!s.partial,s.capped=!s.complete&&(!o.nextCursor||s.characters>=n||s.pages>=8),s.cursor=o.nextCursor||void 0,Se(),A?.sourceID&&await q.save({id:s.session.id,version:L(s.session),fragments:z.content(s.session.id),pages:s.pages,characters:s.characters,partial:s.partial,complete:s.complete,capped:s.capped,cursor:s.cursor})}catch{!t.signal.aborted&&e===M&&s.failed++}finally{s.inflight=!1,Y.delete(t),Q--,T?setTimeout(ae,performance.now()-be<150?150:35):$()}})()}$()}async function Ie(s,e=!1){const t=++M;B=!1,Y.forEach(n=>n.abort());const i=A?.sourceID===s.sourceID&&!e,r=i?new Map(y):new Map;i||(z.setData([],[]),D.clear()),A=s,y.clear(),I=0;for(const n of[...s.sessions].sort((c,a)=>a.updated-c.updated)){const c=r.get(n.id),a=c&&L(c.session)===L(n),d=a?{...c,session:n,inflight:!1}:{session:n,pages:0,characters:0,partial:!1,complete:!1,capped:!1,failed:0,inflight:!1};a||D.delete(n.id),y.set(n.id,d),I+=d.characters}for(const n of D)y.has(n)||D.delete(n);if(z.setData(s.sessions,s.projects),N(),$(),e&&await q.clear(),t!==M||(s.sourceID&&await q.restore(s.sourceID,s.sessions,n=>{if(t!==M)return;const c=y.get(n.id);!c||c.pages||I+n.characters>k||(z.addContent(n.id,n.fragments),Object.assign(c,{pages:n.pages,characters:n.characters,partial:n.partial,complete:n.complete,capped:n.capped,cursor:n.cursor}),I+=n.characters,D.add(n.id),Se())}),t!==M))return;const o=Math.min(J,Math.floor(k/Math.max(1,y.size)));for(const n of y.values())!n.complete&&n.characters>=o&&(n.capped=!0);B=!0,N(),ae()}self.onmessage=s=>{try{const e=s.data;e.type==="data"?Ie(e).catch(()=>j({type:"error",message:"Search index could not load. Reload to retry."})):e.type==="scope"?(z.setScope(e.ids),N()):e.type==="query"?(be=performance.now(),O=e,N()):e.type==="clear-cache"?(T=!1,A&&Ie(A,!0).catch(()=>j({type:"error",message:"Search index could not reset. Reload to retry."}))):(T=e.enabled,T?y.forEach(t=>{t.failed=0}):Y.forEach(t=>t.abort()),ae())}catch(e){j({type:"error",message:e instanceof Error?e.message:"Search unavailable"})}}})();
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
/>
|
|
11
11
|
<title>SessionGraph — Explore & visualize all your LLM sessions</title>
|
|
12
12
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-BEabiGl5.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/index-vX8x5oFC.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<div id="app"></div>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font) Geist-Italic[wght].ttf: Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@@ -19,3 +19,25 @@ Continue mark: docs/logo/dark.svg
|
|
|
19
19
|
https://github.com/continuedev/continue/tree/5522c6f44ca0ac3528b37244818fbfa39b5af470
|
|
20
20
|
Apache License 2.0, Copyright 2023 Continue Dev, Inc.
|
|
21
21
|
Adapted with monochrome fill and responsive dimensions. See LICENSE-APACHE-2.0.txt.
|
|
22
|
+
|
|
23
|
+
Additional monochrome SVG paths from Lobe Icons, MIT License, Copyright (c) 2023 LobeHub:
|
|
24
|
+
https://github.com/lobehub/lobe-icons/tree/ea434b96e75813517b377825e01c0df61dee8836/packages/static-svg/icons
|
|
25
|
+
Files: amp.svg, kimi.svg, grok.svg, cherrystudio.svg, commandcode.svg,
|
|
26
|
+
codebuddy.svg (also used for WorkBuddy), deepseek.svg, mistral.svg, muse.svg,
|
|
27
|
+
minimax.svg, goose.svg, devin.svg, unsloth.svg, kiro.svg, antigravity.svg,
|
|
28
|
+
trae.svg, lmstudio.svg, openclaw.svg, hermesagent.svg, junie.svg.
|
|
29
|
+
The source assets were adapted for monochrome CSS masks and renamed where needed.
|
|
30
|
+
See LICENSE-MIT.txt.
|
|
31
|
+
|
|
32
|
+
Zed Industries, Warp, and Xiaomi paths from Simple Icons (CC0-1.0):
|
|
33
|
+
https://github.com/simple-icons/simple-icons/tree/b45ca1f11d9d013a7c462944d90a049bc613ad4f/icons
|
|
34
|
+
Files: zedindustries.svg, warp.svg, xiaomi.svg. The Xiaomi mark identifies
|
|
35
|
+
the MiMo sources at small sizes. Adapted for monochrome CSS masks.
|
|
36
|
+
|
|
37
|
+
Source-specific initial marks for Aside, Augment, Codebuff, Crush, Freebuff,
|
|
38
|
+
Fx, Gajae-Code, Hindsight, Jcode, Kimchi, Mux, Prime Agent, Proma, Reasonix,
|
|
39
|
+
Senpi, and ZCode use glyph outlines from Geist Bold, Copyright 2024 The Geist
|
|
40
|
+
Project Authors, SIL Open Font License 1.1. These are identification initials,
|
|
41
|
+
not the products' official marks. See LICENSE-OFL-1.1.txt.
|
|
42
|
+
The Factory Droid and Octofriend symbols are original SessionGraph drawings,
|
|
43
|
+
not official product marks.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><path d="M15.087 23.18L12.03 24l-2.097-7.823-5.738 5.738-2.251-2.251 5.718-5.719-7.769-2.082.82-3.057 11.294 3.08 3.08 11.295z"></path><path d="M19.505 18.762l-3.057.82-2.564-9.573-9.572-2.564.819-3.057 11.295 3.079 3.08 11.295z"></path><path d="M23.893 14.374l-3.057.82-2.565-9.572L8.7 3.057 9.52 0l11.295 3.08 3.079 11.294z"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><path d="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><g transform="translate(2.749 21.000) scale(0.02535 -0.02535)"><path d="M18.800048828125 0 274.800048828125 710H454.9974365234375L710.9974365234375 0H553.4000244140625L500.999267578125 151.0020751953125H228.1982421875L175.7974853515625 0ZM270.9976806640625 275.8004150390625H458.7998046875L365.19873046875 550.4034423828125Z" transform="translate(0)"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><g transform="translate(1.749 21.000) scale(0.02535 -0.02535)"><path d="M18.800048828125 0 274.800048828125 710H454.9974365234375L710.9974365234375 0H553.4000244140625L500.999267578125 151.0020751953125H228.1982421875L175.7974853515625 0ZM270.9976806640625 275.8004150390625H458.7998046875L365.19873046875 550.4034423828125Z" transform="translate(0)"/></g><path d="M19 2v5m-2.5-2.5h5" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><path d="M6.513 18.419c-1.6 0-3.107-.64-4.247-1.802A6.146 6.146 0 01.5 12.287c0-1.63.626-3.168 1.766-4.33 1.14-1.162 2.647-1.802 4.247-1.802s3.132.655 4.25 1.795c.835.849.835 2.23 0 3.078a2.11 2.11 0 01-3.02 0 1.737 1.737 0 00-1.234-.521c-.945 0-1.744.813-1.744 1.776 0 .964.799 1.777 1.744 1.777.46 0 .907-.19 1.234-.522a2.11 2.11 0 013.02 0c.835.85.835 2.23 0 3.079a5.997 5.997 0 01-4.25 1.794v.008z"></path><path d="M12.026 24c-1.6 0-3.107-.64-4.247-1.802a6.146 6.146 0 01-1.766-4.33c0-1.63.644-3.193 1.762-4.337a2.11 2.11 0 013.021 0c.834.849.834 2.23 0 3.078-.324.331-.51.788-.51 1.255 0 .964.798 1.777 1.744 1.777.945 0 1.744-.813 1.744-1.777 0-.341-.083-.83-.475-1.233a6.255 6.255 0 01-1.77-4.348c0-1.615.627-3.168 1.767-4.33s2.646-1.802 4.247-1.802c1.6 0 3.107.64 4.247 1.802a6.146 6.146 0 011.766 4.33c0 1.63-.644 3.194-1.762 4.337a2.11 2.11 0 01-3.021 0 2.206 2.206 0 010-3.078c.323-.331.51-.788.51-1.255 0-.964-.798-1.777-1.744-1.777s-1.744.813-1.744 1.777c0 .47.19.935.521 1.27 1.115 1.136 1.727 2.667 1.727 4.311a6.122 6.122 0 01-1.766 4.33C15.137 23.36 13.63 24 12.03 24h-.004z"></path><path d="M12.026 6.867L8.53 3.587a1.336 1.336 0 111.827-1.949l1.4 1.313L13.744.495a1.336 1.336 0 012.075 1.68l-3.798 4.692h.004z"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><path d="M18.777 1.647c.28-.02.536.114.972.51 1.018.926 2.437 2.828 3.318 4.452l.34.631.482.24.11.06v3.638a5.206 5.206 0 00-5.32-1.23c-.491.166-1.021.471-2.08 1.082l-6.09 3.516c-1.057.61-1.586.916-1.975 1.259a5.208 5.208 0 00-1.493 5.572c.165.49.471 1.02 1.082 2.08l.315.543h-3.26c-.685 0-1.34-.135-1.939-.377-.169-.956-.009-1.789.469-2.335.158-.18.164-.189.13-.493a11.846 11.846 0 01-.057-1.711l.02-.444-.667-1.18C2.1 15.622 1.445 14.078 1.192 12.9c-.133-.647-.125-.934.04-1.146.1-.128.427-.261.822-.334.994-.175 3.162-.017 5.575.41l.25.043.551-.487c.915-.81 1.522-1.264 2.641-1.962 1.167-.73 2.484-1.331 3.967-1.807l.476-.152.261-.688c.937-2.471 1.896-4.293 2.58-4.9.235-.21.25-.22.422-.23z"></path><path d="M12.139 18.2a1.203 1.203 0 011.642.44l1.296 2.243a1.204 1.204 0 01-2.083 1.203l-1.296-2.243a1.203 1.203 0 01.44-1.644zM18.629 14.452a1.203 1.203 0 011.642.44l1.295 2.244a1.203 1.203 0 11-2.083 1.203l-1.295-2.243a1.203 1.203 0 01.44-1.644z"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><g transform="translate(2.795 21.000) scale(0.02535 -0.02535)"><path d="M74.000732421875 0V710H350.3994140625Q482.399169921875 710 552.2988891601562 663.7000122070312Q622.1986083984375 617.4000244140625 622.1986083984375 517.2000732421875Q622.1986083984375 473 604.2985229492188 440.39990234375Q586.3984375 407.7998046875 551.79833984375 388.8997802734375Q517.1982421875 369.999755859375 467.9981689453125 366.39990234375L467.59814453125 367.60009765625Q557.398193359375 362.2003173828125 604.7984008789062 316.7001953125Q652.1986083984375 271.2000732421875 652.1986083984375 195.5999755859375Q652.1986083984375 96.800048828125 582.598876953125 48.4000244140625Q512.9991455078125 0 384.399658203125 0ZM225.998046875 123.598388671875H376.5999755859375Q431.6007080078125 123.598388671875 465.1009521484375 146.09869384765625Q498.6011962890625 168.5989990234375 498.6011962890625 213.7994384765625Q498.6011962890625 258.9998779296875 465.40093994140625 282.40020751953125Q432.20068359375 305.800537109375 376.5999755859375 305.800537109375H225.998046875ZM225.998046875 416.199462890625H345.599609375Q402.00048828125 416.199462890625 435.30084228515625 437.8997802734375Q468.6011962890625 459.60009765625 468.6011962890625 501.2005615234375Q468.6011962890625 545.2010498046875 436.20086669921875 565.8013305664062Q403.800537109375 586.401611328125 345.599609375 586.401611328125H225.998046875Z" transform="translate(0)"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><path clip-rule="evenodd" d="M19.334 0a4.67 4.67 0 0 0-4.666 4.668v2H9.334v-2A4.67 4.67 0 0 0 4.668 0 4.67 4.67 0 0 0 0 4.668a4.67 4.67 0 0 0 4.668 4.665h2v5.334h-2A4.67 4.67 0 0 0 0 19.334 4.67 4.67 0 0 0 4.668 24a4.67 4.67 0 0 0 4.666-4.666v-2h5.334v2A4.67 4.67 0 0 0 19.334 24 4.67 4.67 0 0 0 24 19.334a4.67 4.67 0 0 0-4.666-4.667h-2V9.333h2A4.67 4.67 0 0 0 24 4.668 4.673 4.673 0 0 0 19.334 0m-2 6.666v-2c0-1.107.893-2 2-2s2 .893 2 2-.893 2-2 2zm-12.668 0c-1.107 0-2-.893-2-2s.893-2 2-2 2 .893 2 2v2zm4.666 8V9.334h5.334v5.334zm10.002 6.667c-1.107 0-2-.893-2-2v-2h2c1.107 0 2 .892 2 2 0 1.107-.893 2-2 2m-14.668 0c-1.107 0-2-.893-2-2 0-1.108.893-2 2-2h2v2c0 1.107-.893 2-2 2"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><g transform="translate(3.034 20.612) scale(0.02426 -0.02426)"><path d="M375.3995361328125 -16Q277.9996337890625 -16 202.69976806640625 28.20001220703125Q127.39990234375 72.4000244140625 84.70001220703125 155.10003662109375Q42.0001220703125 237.800048828125 42.0001220703125 354Q42.0001220703125 467.2000732421875 83.2000732421875 550.7000732421875Q124.4000244140625 634.2000732421875 199.9998779296875 680.1000366210938Q275.5997314453125 726 377.7994384765625 726Q516.9990234375 726 594.2987670898438 657.400146484375Q671.5985107421875 588.80029296875 694.198486328125 462.40087890625L536.001220703125 455.8009033203125Q524.0010986328125 522.80126953125 484.000732421875 560.5015258789062Q444.0003662109375 598.2017822265625 377.7994384765625 598.2017822265625Q321.198974609375 598.2017822265625 281.0985107421875 567.901611328125Q240.998046875 537.6014404296875 219.7977294921875 482.7010498046875Q198.597412109375 427.8006591796875 198.597412109375 354Q198.597412109375 278.9993896484375 220.397705078125 224.5989990234375Q242.197998046875 170.1986083984375 282.2984619140625 140.9984130859375Q322.39892578125 111.7982177734375 376.5994873046875 111.7982177734375Q448.600341796875 111.7982177734375 488.2008056640625 152.49853515625Q527.80126953125 193.1988525390625 538.4013671875 265.3992919921875L697.1986083984375 258.79931640625Q682.9986572265625 172.19970703125 641.998779296875 110.89984130859375Q600.9989013671875 49.5999755859375 534.299072265625 16.79998779296875Q467.5992431640625 -16 375.3995361328125 -16Z" transform="translate(0)"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black"><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"></path></svg>
|