sessiongraph-app-darwin-x64 1.0.6 → 1.0.8
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 +676 -138
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-86i6pjnx.js → index-B5TXKeav.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-DxQk-77k.js → index-BPR2p22J.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-3_I59bPI.js → index-CWphmptD.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-BEabiGl5.js → index-D-Ue5tsr.js} +30 -28
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{index-vX8x5oFC.css → index-fjc8n25E.css} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-D6ALMt6w.js +12 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-DG0jrGoB.css +1 -0
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{scene-CEalI0mr.js → scene-C2kTsRX_.js} +1 -1
- package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/{share-BydK_UaB.js → share-BhzLwRnE.js} +3 -3
- package/payload/SessionGraph.app/Contents/Resources/resources/web/index.html +2 -2
- package/payload/SessionGraph.app/Contents/_CodeSignature/CodeResources +54 -32
|
@@ -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-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
|
+
@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}}.publishing-dialog{width:min(1000px,calc(100% - 32px));max-width:none}.publishing-dialog>header{display:flex;justify-content:space-between;align-items:center;gap:20px}.publishing-dialog h2{margin:0}.publishing-disclosure,.publishing-scope,.publishing-note,.publishing-summary{color:#a1b6ad;font-size:12px;line-height:1.7}.publishing-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 20px;padding:18px;border:1px solid #c9e3db20;border-radius:6px}.publishing-fields legend{padding-inline:8px;font-size:13px}.publishing-fields label,.publishing-confirm{display:flex;gap:9px;align-items:center;font-size:12px;line-height:1.7}.publishing-dialog input[type=checkbox]{accent-color:#b0e9d6}.publishing-account,.publishing-dialog footer{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:18px}.publishing-account{font-size:13px}.publishing-status{font-size:13px;line-height:1.7;color:#b0e9d6;min-height:22px}.publishing-confirm{align-items:flex-start}.publishing-confirm input{margin-top:4px}.publishing-dialog footer{justify-content:flex-end}.publishing-dialog footer [data-animation]{margin-right:auto}.publishing-json{max-height:280px;overflow:auto;padding:15px;background:#060b10;font:11px/1.5 monospace}.publishing-link{display:block;text-align:right;margin-top:15px;color:#b0e9d6;font-size:13px}.publishing-connect{margin-block:15px;font-size:13px}.publishing-connect strong{font-family:monospace;letter-spacing:.1em}@media(max-width:600px){.publishing-fields{grid-template-columns:repeat(2,1fr)}}
|
package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-D6ALMt6w.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{m as D,h as N,D as q,j as H}from"./index-D-Ue5tsr.js";import{TimelineScene as F}from"./scene-C2kTsRX_.js";import"./three-D_1Qt16u.js";const R={tokens:"Token counts",timestamps:"Session timestamps",messageCounts:"Message counts",messageTimestamps:"Message timestamps",model:"Model used",harness:"Harness used"},j={tokens:!0,timestamps:!0,messageCounts:!0,messageTimestamps:!0,model:!0,harness:!0};function G(e){const i={...j};if(_(e))for(const n of Object.keys(i))typeof e[n]=="boolean"&&(i[n]=e[n]);return(!i.timestamps||!i.messageCounts)&&(i.messageTimestamps=!1),i}const U=1e4,B=2e6,J=1e5,X="Always excluded: project and session names, messages, code, paths, source IDs, and costs. Anonymous groups and recorded branch links are included. Your GitHub username identifies this profile. Selected timestamps and usage will be public.",Y=/^(?:gpt-[3-6](?:\.[0-9])?(?:-(?:turbo|mini|nano|pro|codex|astra|instant|thinking|chat|latest|preview|[0-9]{4,8}))*|o[1-4](?:-(?:mini|pro|preview|[0-9]{4,8}))*|claude-(?:(?:sonnet|opus|haiku)-[3-5](?:[.-][0-9])?|[3-5](?:-[0-9])?-(?:sonnet|opus|haiku))(?:-(?:latest|thinking|[0-9]{8}))*|gemini-[1-4](?:\.[0-9])?-(?:pro|flash)(?:-(?:lite|preview|exp|latest|[0-9]{2,4}))*|deepseek-(?:chat|reasoner|v[3-4](?:\.[0-9])?|r1)|grok-[2-5](?:\.[0-9])?(?:-(?:fast|code|reasoning|non-reasoning|[0-9]))*|kimi-k[1-3](?:\.[0-9])?(?:-thinking)?|minimax-m[1-3](?:\.[0-9])?)$/i,V=e=>{const i=e.split("/").at(-1)||"";return i.length<=100&&Y.test(i)?i.toLowerCase():null},_=e=>!!e&&typeof e=="object"&&!Array.isArray(e),T=(e,i)=>_(e)&&Object.keys(e).length===i.length&&i.every(n=>Object.hasOwn(e,n)),E=(e,i=Number.MAX_SAFE_INTEGER)=>Number.isSafeInteger(e)&&e>=0&&e<=i,M=e=>E(e,Date.UTC(2100,0,1)),I=e=>e===null||E(e);function z(e){const i=()=>{throw new Error("Invalid anonymous graph. Reopen the publishing preview and try again.")};if(!T(e,["version","settings","sessions"])||e.version!==1||!Array.isArray(e.sessions)||!T(e.settings,Object.keys(j))||Object.values(e.settings).some(l=>typeof l!="boolean"))return i();const n=e.settings;if(n.messageTimestamps&&(!n.timestamps||!n.messageCounts))return i();if(e.sessions.length<1||e.sessions.length>U)throw new Error(`Choose between 1 and ${U.toLocaleString("en")} sessions to publish.`);const s=["id","group","parent","fork",...n.timestamps?["timestamps"]:[],...n.tokens?["tokens"]:[],...n.messageCounts?["messages"]:[],...n.messageTimestamps?["messageTimes"]:[],...n.model?["model"]:[],...n.harness?["harness"]:[]];let o=0;for(let l=0;l<e.sessions.length;l++){const a=e.sessions[l];if(!T(a,s)||a.id!==l||!E(a.group,e.sessions.length-1))return i();for(const r of["parent","fork"])if(a[r]!==null&&(!E(a[r],e.sessions.length-1)||a[r]===l))return i();if(n.timestamps&&(!T(a.timestamps,["created","lastMessageAt"])||!M(a.timestamps.created)||a.timestamps.lastMessageAt!==null&&!M(a.timestamps.lastMessageAt))||n.tokens&&!I(a.tokens)||n.messageCounts&&(!T(a.messages,["count","untimed","partial"])||!I(a.messages.count)||!I(a.messages.untimed)||typeof a.messages.partial!="boolean")||n.messageTimestamps&&(!T(a.messageTimes,["values","limited"])||!Array.isArray(a.messageTimes.values)||a.messageTimes.values.length>2e3||typeof a.messageTimes.limited!="boolean"||a.messageTimes.values.some(r=>!M(r))||(o+=a.messageTimes.values.length,o>J))||n.model&&a.model!==null&&(typeof a.model!="string"||V(a.model)!==a.model)||n.harness&&a.harness!==null&&(typeof a.harness!="string"||!N(a.harness)))return i()}const h=e.sessions,m=new Uint8Array(h.length);for(let l=0;l<h.length;l++){if(m[l])continue;const a=[[l,!1]];for(;a.length;){const[r,k]=a.pop();if(k){m[r]=2;continue}if(m[r]===1)return i();if(m[r]!==2){m[r]=1,a.push([r,!0]);for(const g of[h[r].parent,h[r].fork])g!==null&&a.push([g,!1])}}}if(new TextEncoder().encode(JSON.stringify(e)).length>B)throw new Error("This graph is too large. Choose a smaller date range.");return e}function K(e){const i=z(e),n=i.sessions.map(o=>({id:String(o.id),projectID:String(o.group),title:`Session ${o.id+1}`,directory:"",created:o.timestamps?.created??o.id*36e5,updated:o.timestamps?.created??o.id*36e5,tokens:o.tokens??null,cost:null,archived:!1,model:o.model??"",provider:"",agent:"",source:o.harness??void 0,activity:{firstMessageAt:null,lastMessageAt:o.timestamps?.lastMessageAt??null,userMessages:0,untimedUserMessages:0},...o.parent===null?{}:{parentID:String(o.parent)},...o.fork===null?{}:{forkID:String(o.fork)}})),s=[...new Set(i.sessions.map(o=>o.group))].map(o=>({id:String(o),name:`Group ${o+1}`,directory:"",worktrees:[]}));return D(n,s)}const L=e=>e==null?"Unknown":e.toLocaleString(),$=e=>e===null?"Unknown":new Date(e).toLocaleString();function W(e){const i=[`${e.sessions.length.toLocaleString()} sessions`];if(e.settings.tokens){const n=e.sessions.filter(s=>s.tokens!==null);i.push(`${n.reduce((s,o)=>s+o.tokens,0).toLocaleString()} recorded tokens${n.length<e.sessions.length?" (partial coverage)":""}`)}return e.settings.messageCounts&&i.push(`${e.sessions.reduce((n,s)=>n+(s.messages?.count??0),0).toLocaleString()} recorded messages${e.sessions.some(n=>n.messages?.partial)?" (partial history)":""}`),i.join(" · ")}function Q(e,i){const n=K(i);e.classList.add("public-viewer"),e.innerHTML='<div class="public-canvas" aria-label="Anonymous session graph"></div><div class="public-view-controls"><button type="button" data-view="3d" aria-pressed="true">3D</button><button type="button" data-view="2d" aria-pressed="false">2D</button><button type="button" data-fit>Fit view</button></div><div class="public-session" aria-live="polite"><p>Select a session to inspect its public data.</p></div><div class="public-playback"><button type="button" data-play>Play</button><input type="range" min="0" max="1000" value="1000" aria-label="Graph playback position"><output></output></div>';const s=e.querySelector(".public-canvas"),o=e.querySelector(".public-session"),h=e.querySelector("output"),m=e.querySelector("input"),l=e.querySelector("[data-play]");let a=0,r=1,k=0,g=!1;const b=()=>{cancelAnimationFrame(a),a=0,f?.setPlaying(!1),l.textContent="Play"};let f;function c(d){if(f?.select(d),o.replaceChildren(),d===null){o.textContent="Select a session to inspect its public data.";return}const t=i.sessions[Number(d)],u=document.createElement("h3");u.textContent=`Session ${t.id+1}`,o.append(u);const p=(S,x)=>{const A=document.createElement("p"),O=document.createElement("strong");O.textContent=`${S}: `,A.append(O,x),o.append(A)};if(p("Group",String(t.group+1)),t.timestamps&&(p("Created",$(t.timestamps.created)),p("Last message",$(t.timestamps.lastMessageAt))),"tokens"in t&&p("Tokens",L(t.tokens)),t.messages&&(p("Messages",`${L(t.messages.count)}${t.messages.partial?" · partial history":""}`),p("Without timestamps",L(t.messages.untimed))),"model"in t&&p("Model",t.model??"Unknown or private alias"),"harness"in t&&p("Harness",t.harness?H(t.harness):"Unknown"),t.messageTimes){p("Message timestamps",`${t.messageTimes.values.length.toLocaleString()}${t.messageTimes.limited?" · limited":""}`);const S=document.createElement("details"),x=document.createElement("summary");x.textContent="View timestamps",S.append(x);const A=document.createElement("pre");A.textContent=t.messageTimes.values.map($).join(`
|
|
2
|
+
`)||"No recorded timestamps.",S.append(A),o.append(S)}const P=(t.messageTimes?.values??[]).map((S,x)=>({id:`public-${x}`,ordinal:x,kind:"message",name:"Message",role:"user",time:S,timeSource:"recorded",preview:""}));f?.setEvents(P)}try{f=new F(s,{onSelect:c,onHover(){},onPlaybackInterrupt:b,onEvent(){},onEventHover(){}}),f.applyPreferences({...q,muted:!0,clickSounds:!1,focusDimming:!1,messageDots:i.settings.messageTimestamps}),f.setGraph(n,!0)}catch{s.textContent="3D rendering is unavailable. Use the session list below to inspect the published data.",e.querySelector(".public-view-controls").hidden=!0}const w=()=>{f?.setCutoff(r),m.value=String(Math.round(r*1e3)),h.textContent=i.settings.timestamps?new Date(n.start+(n.end-n.start)*r).toLocaleDateString():"Timestamps hidden"},y=d=>{g||(r=Math.min(1,r+Math.min(d-k,100)/35e3),k=d,w(),r===1?b():a=requestAnimationFrame(y))};l.onclick=()=>{if(a)return b();r>=1&&(r=0),k=performance.now(),f?.setPlaying(!0),l.textContent="Pause",a=requestAnimationFrame(y)},m.oninput=()=>{b(),r=Number(m.value)/1e3,w()};for(const d of e.querySelectorAll("[data-view]"))d.onclick=()=>{f?.setFlat(d.dataset.view==="2d");for(const t of e.querySelectorAll("[data-view]"))t.setAttribute("aria-pressed",String(t===d))};e.querySelector("[data-fit]").onclick=()=>f?.reset();const C=document.createElement("label");C.className="public-session-picker",C.textContent="Inspect session ";const v=document.createElement("select");return v.setAttribute("aria-label","Inspect anonymous session"),v.append(new Option("Choose a session","")),i.sessions.forEach(d=>v.append(new Option(`Session ${d.id+1} · Group ${d.group+1}`,String(d.id)))),v.onchange=()=>c(v.value||null),C.append(v),e.append(C),w(),{dispose(){g=!0,b(),f?.dispose(),e.replaceChildren()}}}function se(e,i){const n=document.createElement("dialog");n.className="publishing-dialog",n.setAttribute("aria-labelledby","publishing-title"),n.innerHTML=`<header><h2 id="publishing-title">Publish SessionGraph</h2><button class="text-button" data-close aria-label="Close publishing">Close</button></header>
|
|
3
|
+
<p class="publishing-disclosure"></p><p class="publishing-scope"></p>
|
|
4
|
+
<fieldset class="publishing-fields"><legend>Publishing settings</legend>${Object.entries(R).map(([t,u])=>`<label><input type="checkbox" data-field="${t}"><span>${u}</span></label>`).join("")}</fieldset>
|
|
5
|
+
<p class="publishing-note">Message timestamps require session timestamps and message counts. Models show the last recorded public model ID; private aliases stay hidden. Changes apply when you publish again.</p>
|
|
6
|
+
<div class="publishing-preview"></div><p class="publishing-summary"></p>
|
|
7
|
+
<div class="publishing-account"><span data-account>Not signed in</span><button class="secondary-button" data-login>Sign in with GitHub</button><button class="text-button" data-logout hidden>Sign out</button><a class="secondary-button" href="https://sessiongraph.ai/account" target="_blank" rel="noopener noreferrer" data-manage hidden>Account & organizations ↗</a></div>
|
|
8
|
+
<div class="publishing-connect" hidden><p>Confirm this code in your browser: <strong data-code></strong></p><a class="secondary-button" data-connect target="_blank" rel="noopener noreferrer">Continue in browser ↗</a><button class="text-button" data-check>Check login</button></div>
|
|
9
|
+
<p role="status" class="publishing-status"></p>
|
|
10
|
+
<label class="publishing-confirm"><input type="checkbox" data-confirm><span>I reviewed this preview and want to make the selected data public under my GitHub username.</span></label>
|
|
11
|
+
<footer><button class="text-button" data-animation>Export animation instead</button><button class="text-button" data-json disabled>View exact JSON</button><button class="secondary-button" data-remove hidden>Unpublish</button><button class="primary-button" data-publish disabled>Publish graph</button></footer>
|
|
12
|
+
<a class="publishing-link" target="_blank" rel="noopener noreferrer" hidden></a><pre class="publishing-json" hidden></pre>`,document.body.append(n);const s=t=>n.querySelector(t);s(".publishing-disclosure").textContent=X;let o=[],h={...j},m,l,a=null,r=!1,k=0,g=!1,b=0,f=!1;const c=t=>{s(".publishing-status").textContent=t},w=async(t,u="GET",p)=>{const P=await fetch(`/api/sessiongraph/publishing/${t}`,{method:u,headers:{"Content-Type":"application/json","x-sessiongraph-action":"1"},...p===void 0?{}:{body:JSON.stringify(p)}}),S=await P.json();if(!P.ok)throw new Error(S.error||"Please try again.");return S};function y(){s("[data-publish]").disabled=g||!l||!a||!s("[data-confirm]").checked,s("[data-publish]").textContent=r?"Update public graph":"Publish graph",s("[data-remove]").hidden=!r,s("[data-remove]").disabled=g,s("[data-login]").hidden=!!a,s("[data-logout]").hidden=!a,s("[data-logout]").disabled=g,s("[data-manage]").hidden=!a,s("[data-account]").textContent=a?`Signed in as @${a}`:"Not signed in",s("[data-json]").disabled=!l;for(const u of n.querySelectorAll("[data-field]")){const p=u.dataset.field;u.checked=h[p],u.disabled=g||p==="messageTimestamps"&&(!h.timestamps||!h.messageCounts)}const t=s(".publishing-link");t.hidden=!a||!r,a&&(t.href=`https://sessiongraph.ai/@${a}`,t.textContent=t.href)}async function C(){const t=++k;if(l=void 0,s("[data-confirm]").checked=!1,m?.dispose(),m=void 0,s(".publishing-json").hidden=!0,s(".publishing-json").textContent="",y(),!o.length){s(".publishing-preview").textContent="Select sessions on the map to preview a public graph.";return}s(".publishing-preview").textContent="Preparing local preview…";try{const u=await w("preview","POST",{ids:o,settings:h});if(!n.open||t!==k)return;l=u,h=u.graph.settings,m=Q(s(".publishing-preview"),u.graph),s(".publishing-summary").textContent=W(u.graph),c("Preview prepared locally. Nothing has been uploaded.")}catch(u){t===k&&(s(".publishing-preview").textContent="",c(u.message))}y()}async function v(){const t=await w("status");n.open&&(a=t.username??null,r=!!t.publication,y())}async function d(){if(!(f||!n.open)){f=!0;try{(await w("poll","POST",{})).username&&(window.clearInterval(b),b=0,s(".publishing-connect").hidden=!0,await v(),c("Signed in. Review the preview before publishing."))}catch(t){window.clearInterval(b),b=0,c(t.message)}finally{f=!1}}}s("[data-login]").onclick=async()=>{try{const t=await w("login","POST",{});s("[data-code]").textContent=t.code,s("[data-connect]").href=t.url,s(".publishing-connect").hidden=!1,window.clearInterval(b),b=window.setInterval(()=>{d()},4e3),s("[data-connect]").focus(),c("Continue in your browser to connect this app.")}catch(t){c(t.message)}},s("[data-check]").onclick=()=>{d()},s("[data-logout]").onclick=async()=>{g=!0,y();try{await w("logout","POST",{}),a=null,r=!1,l=void 0,c("Signed out. Your published graph stays online until you unpublish it.")}catch(t){c(t.message)}finally{g=!1,y()}};for(const t of n.querySelectorAll("[data-field]"))t.onchange=()=>{h=G({...h,[t.dataset.field]:t.checked}),C()};return s("[data-confirm]").onchange=y,s("[data-publish]").onclick=async()=>{if(!(!l||!s("[data-confirm]").checked)){g=!0,y(),c("Publishing…");try{await w("publish","POST",{id:l.id,confirmed:!0}),r=!0,l=void 0,s("[data-confirm]").checked=!1,c("Published. Future imports stay local. Publish again to update this snapshot.")}catch(t){c(t.message)}finally{g=!1,y()}}},s("[data-remove]").onclick=async()=>{g=!0,y();try{await w("unpublish","POST",{}),r=!1,c("Unpublished. Your public graph has been removed.")}catch(t){c(t.message)}finally{g=!1,y()}},s("[data-json]").onclick=()=>{const t=s(".publishing-json");t.hidden=!t.hidden,t.textContent=l?JSON.stringify(l.graph,null,2):""},s("[data-animation]").onclick=()=>{n.close(),i()},s("[data-close]").onclick=()=>n.close(),n.addEventListener("close",()=>{k++,window.clearInterval(b),b=0,m?.dispose(),m=void 0,l=void 0,e()}),{async open(t){if(n.open)return;o=[...t],a=null,r=!1,l=void 0,c(""),s(".publishing-connect").hidden=!0,s(".publishing-scope").textContent=`${o.length.toLocaleString()} sessions in the current filtered view. Change filters on the map to choose what you publish.`,n.showModal(),e(),y();const u=v().catch(p=>c(p.message));try{h=G(await w("settings")),await C()}catch(p){c(p.message)}await u},dispose(){window.clearInterval(b),m?.dispose(),n.remove()}}}export{se as createPublishing};
|
package/payload/SessionGraph.app/Contents/Resources/resources/web/assets/publishing-DG0jrGoB.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.public-viewer{position:relative;min-width:0;border:1px solid #c9e3db1a;border-radius:10px;background:#080e13;overflow:hidden;color:#dbe7e3}.public-canvas{position:relative;height:min(62vh,620px);min-height:320px}.public-canvas canvas{display:block}.public-view-controls{position:absolute;top:14px;left:14px;display:flex;gap:5px}.public-viewer button,.public-session-picker select{border:1px solid #c9e3db30;border-radius:5px;background:#101c21;color:#dbe7e3;padding:8px 12px;font:inherit;font-size:12px;cursor:pointer}.public-viewer button[aria-pressed=true]{color:#b0e9d6;border-color:#b0e9d680}.public-session{position:absolute;right:12px;top:12px;max-width:min(280px,50%);max-height:calc(100% - 125px);overflow:auto;padding:14px;background:#0b141ae8;border:1px solid #c9e3db1a;border-radius:6px;font-size:12px}.public-session h3{margin:0 0 10px;font-size:15px;font-weight:500}.public-session p{margin:5px 0;line-height:1.6;color:#a1b6ad;overflow-wrap:anywhere}.public-session strong{font-weight:500;color:#dbe7e3}.public-session pre{white-space:pre-wrap;font-size:10px}.public-session details{margin-top:8px}.public-playback{display:flex;align-items:center;gap:14px;padding:12px 16px;border-top:1px solid #c9e3db1a}.public-playback input{flex:1;min-width:40px;accent-color:#b0e9d6}.public-playback output{font-size:12px;min-width:105px;text-align:right}.public-session-picker{display:flex;align-items:center;gap:12px;padding:0 16px 14px;font-size:12px}.public-session-picker select{flex:1;min-width:0}.public-viewer .scene-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}.public-viewer .scene-label{position:absolute;left:0;top:0;max-width:155px;padding:5px 8px;font:10px monospace;color:var(--label-color);opacity:0;background:#080f1266;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.public-viewer .scene-label.visible{opacity:.55}@media(max-width:600px){.public-session{position:static;max-width:none;max-height:180px;border-radius:0;border-inline:0}.public-playback{gap:8px;padding-inline:10px}.public-playback output{min-width:85px;font-size:10px}}
|
|
@@ -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{
|
|
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{k as ge,l as R,c as Ve,D as $e,n as je,o as C,q as $,r as We,u as qe,v as Ye,w as se,x as fe}from"./index-D-Ue5tsr.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-BPR2p22J.js","assets/index-D-Ue5tsr.js","assets/index-fjc8n25E.css","assets/index-B5TXKeav.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{TimelineScene as X}from"./scene-C2kTsRX_.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-D-Ue5tsr.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-BPR2p22J.js"),__vite__mapDeps([0,1,2])),O(()=>import("./index-B5TXKeav.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>
|
|
@@ -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-D-Ue5tsr.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/index-fjc8n25E.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<div id="app"></div>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
</data>
|
|
19
19
|
<key>Resources/resources/server.mjs</key>
|
|
20
20
|
<data>
|
|
21
|
-
|
|
21
|
+
VEhZu8KsM3wadJyKPbTuy4LDA5o=
|
|
22
22
|
</data>
|
|
23
23
|
<key>Resources/resources/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2</key>
|
|
24
24
|
<data>
|
|
@@ -84,37 +84,45 @@
|
|
|
84
84
|
<data>
|
|
85
85
|
LdRX2sBB3T5WDAsZLCwBlsMYXPw=
|
|
86
86
|
</data>
|
|
87
|
-
<key>Resources/resources/web/assets/index-
|
|
87
|
+
<key>Resources/resources/web/assets/index-B5TXKeav.js</key>
|
|
88
88
|
<data>
|
|
89
|
-
|
|
89
|
+
yL+7enhyNLi8GvbAoEZkUTVXcWQ=
|
|
90
90
|
</data>
|
|
91
|
-
<key>Resources/resources/web/assets/index-
|
|
91
|
+
<key>Resources/resources/web/assets/index-BPR2p22J.js</key>
|
|
92
92
|
<data>
|
|
93
|
-
|
|
93
|
+
MYZ+appCI/7ZoDPB3qme6PZUWck=
|
|
94
94
|
</data>
|
|
95
|
-
<key>Resources/resources/web/assets/index-
|
|
95
|
+
<key>Resources/resources/web/assets/index-CWphmptD.js</key>
|
|
96
96
|
<data>
|
|
97
|
-
|
|
97
|
+
Xwrx8t/ueqsuCWBplcEHrFIYgY0=
|
|
98
98
|
</data>
|
|
99
|
-
<key>Resources/resources/web/assets/index-
|
|
99
|
+
<key>Resources/resources/web/assets/index-D-Ue5tsr.js</key>
|
|
100
100
|
<data>
|
|
101
|
-
|
|
101
|
+
9x13EEv4Gsb2WEfohz4XG5GYV6Y=
|
|
102
102
|
</data>
|
|
103
|
-
<key>Resources/resources/web/assets/index-
|
|
103
|
+
<key>Resources/resources/web/assets/index-fjc8n25E.css</key>
|
|
104
104
|
<data>
|
|
105
|
-
|
|
105
|
+
kBT9mRswpPJjgLJSCiTP0cxgJss=
|
|
106
106
|
</data>
|
|
107
107
|
<key>Resources/resources/web/assets/mp4-worker-HFPra5JP.js</key>
|
|
108
108
|
<data>
|
|
109
109
|
ATVDz7hoBhGkjEraL7M3QJPykT0=
|
|
110
110
|
</data>
|
|
111
|
-
<key>Resources/resources/web/assets/
|
|
111
|
+
<key>Resources/resources/web/assets/publishing-D6ALMt6w.js</key>
|
|
112
112
|
<data>
|
|
113
|
-
|
|
113
|
+
S8x3YDdYOm77wvKDh0+F8+XsdDE=
|
|
114
114
|
</data>
|
|
115
|
-
<key>Resources/resources/web/assets/
|
|
115
|
+
<key>Resources/resources/web/assets/publishing-DG0jrGoB.css</key>
|
|
116
116
|
<data>
|
|
117
|
-
|
|
117
|
+
d/rpcq/ilp3t9jczDOPw0S858zg=
|
|
118
|
+
</data>
|
|
119
|
+
<key>Resources/resources/web/assets/scene-C2kTsRX_.js</key>
|
|
120
|
+
<data>
|
|
121
|
+
dUuO3DugdINbX6O5sN06w5Xp2Is=
|
|
122
|
+
</data>
|
|
123
|
+
<key>Resources/resources/web/assets/share-BhzLwRnE.js</key>
|
|
124
|
+
<data>
|
|
125
|
+
JE5gS5QRM3YZ/NY748IMa4Yy9tU=
|
|
118
126
|
</data>
|
|
119
127
|
<key>Resources/resources/web/assets/three-D_1Qt16u.js</key>
|
|
120
128
|
<data>
|
|
@@ -130,7 +138,7 @@
|
|
|
130
138
|
</data>
|
|
131
139
|
<key>Resources/resources/web/index.html</key>
|
|
132
140
|
<data>
|
|
133
|
-
|
|
141
|
+
ArW4bJFRlu2A6QzNUvFwS//rl/8=
|
|
134
142
|
</data>
|
|
135
143
|
<key>Resources/resources/web/sources/LICENSE-APACHE-2.0.txt</key>
|
|
136
144
|
<data>
|
|
@@ -396,7 +404,7 @@
|
|
|
396
404
|
<dict>
|
|
397
405
|
<key>hash2</key>
|
|
398
406
|
<data>
|
|
399
|
-
|
|
407
|
+
xuoB/lT1DcsCafZ/pmNAf1O+VhDA+RMbZKp55aKMFgw=
|
|
400
408
|
</data>
|
|
401
409
|
</dict>
|
|
402
410
|
<key>Resources/resources/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2</key>
|
|
@@ -511,39 +519,39 @@
|
|
|
511
519
|
vO1WHZkeP4HBUMCOcff6hJ/L/1I1YPYFkkXy7c4ZtgA=
|
|
512
520
|
</data>
|
|
513
521
|
</dict>
|
|
514
|
-
<key>Resources/resources/web/assets/index-
|
|
522
|
+
<key>Resources/resources/web/assets/index-B5TXKeav.js</key>
|
|
515
523
|
<dict>
|
|
516
524
|
<key>hash2</key>
|
|
517
525
|
<data>
|
|
518
|
-
|
|
526
|
+
oAsuQQVokTuMtL5wx1U45dvJhBJ61nhil5cqDviZuMk=
|
|
519
527
|
</data>
|
|
520
528
|
</dict>
|
|
521
|
-
<key>Resources/resources/web/assets/index-
|
|
529
|
+
<key>Resources/resources/web/assets/index-BPR2p22J.js</key>
|
|
522
530
|
<dict>
|
|
523
531
|
<key>hash2</key>
|
|
524
532
|
<data>
|
|
525
|
-
|
|
533
|
+
2r8cgi5IevD+or452FLqn2TTJdnnbC6dWx065AbJLRM=
|
|
526
534
|
</data>
|
|
527
535
|
</dict>
|
|
528
|
-
<key>Resources/resources/web/assets/index-
|
|
536
|
+
<key>Resources/resources/web/assets/index-CWphmptD.js</key>
|
|
529
537
|
<dict>
|
|
530
538
|
<key>hash2</key>
|
|
531
539
|
<data>
|
|
532
|
-
|
|
540
|
+
95s+/M81zngjsxoKcXn7aZuVyRaTd04RkSl3SGZOxQk=
|
|
533
541
|
</data>
|
|
534
542
|
</dict>
|
|
535
|
-
<key>Resources/resources/web/assets/index-
|
|
543
|
+
<key>Resources/resources/web/assets/index-D-Ue5tsr.js</key>
|
|
536
544
|
<dict>
|
|
537
545
|
<key>hash2</key>
|
|
538
546
|
<data>
|
|
539
|
-
|
|
547
|
+
mXiydKzRuvxZ0GC0lUBoYTf8y4uAAwNQdistsEx6uYo=
|
|
540
548
|
</data>
|
|
541
549
|
</dict>
|
|
542
|
-
<key>Resources/resources/web/assets/index-
|
|
550
|
+
<key>Resources/resources/web/assets/index-fjc8n25E.css</key>
|
|
543
551
|
<dict>
|
|
544
552
|
<key>hash2</key>
|
|
545
553
|
<data>
|
|
546
|
-
|
|
554
|
+
sWci48xyh6YJNHb+xk/zlhnibhC7abQIFfcF2O3NEaM=
|
|
547
555
|
</data>
|
|
548
556
|
</dict>
|
|
549
557
|
<key>Resources/resources/web/assets/mp4-worker-HFPra5JP.js</key>
|
|
@@ -553,18 +561,32 @@
|
|
|
553
561
|
OcBpKX8DX9+EUp27mNDb0LMrwE28fDC5f3PbjJsXOjU=
|
|
554
562
|
</data>
|
|
555
563
|
</dict>
|
|
556
|
-
<key>Resources/resources/web/assets/
|
|
564
|
+
<key>Resources/resources/web/assets/publishing-D6ALMt6w.js</key>
|
|
565
|
+
<dict>
|
|
566
|
+
<key>hash2</key>
|
|
567
|
+
<data>
|
|
568
|
+
6rmWwIpggV83JHqx5aU9tAseVlNN7TrsZlkh+P+jwWM=
|
|
569
|
+
</data>
|
|
570
|
+
</dict>
|
|
571
|
+
<key>Resources/resources/web/assets/publishing-DG0jrGoB.css</key>
|
|
572
|
+
<dict>
|
|
573
|
+
<key>hash2</key>
|
|
574
|
+
<data>
|
|
575
|
+
+cEC3JP91lcHwFmjNIeSSnRkcWa9eFlfauLkrCScyR0=
|
|
576
|
+
</data>
|
|
577
|
+
</dict>
|
|
578
|
+
<key>Resources/resources/web/assets/scene-C2kTsRX_.js</key>
|
|
557
579
|
<dict>
|
|
558
580
|
<key>hash2</key>
|
|
559
581
|
<data>
|
|
560
|
-
|
|
582
|
+
bnliWmxJSVfMAa0pjMjrJyMnRUQHrUpVzDueSi4mBSA=
|
|
561
583
|
</data>
|
|
562
584
|
</dict>
|
|
563
|
-
<key>Resources/resources/web/assets/share-
|
|
585
|
+
<key>Resources/resources/web/assets/share-BhzLwRnE.js</key>
|
|
564
586
|
<dict>
|
|
565
587
|
<key>hash2</key>
|
|
566
588
|
<data>
|
|
567
|
-
|
|
589
|
+
JLTXkKKeuLNgtPU96/8m1/JKB7VOazD6GAd/+HCGwC4=
|
|
568
590
|
</data>
|
|
569
591
|
</dict>
|
|
570
592
|
<key>Resources/resources/web/assets/three-D_1Qt16u.js</key>
|
|
@@ -592,7 +614,7 @@
|
|
|
592
614
|
<dict>
|
|
593
615
|
<key>hash2</key>
|
|
594
616
|
<data>
|
|
595
|
-
|
|
617
|
+
rI1iCR2nzIKnui2YZnnwZwfuY8zxwP2sTFT6VOWWgf8=
|
|
596
618
|
</data>
|
|
597
619
|
</dict>
|
|
598
620
|
<key>Resources/resources/web/sources/LICENSE-APACHE-2.0.txt</key>
|