@henlii/pidance 0.2.39 → 0.2.40

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.
Files changed (85) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -4
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.json +1 -1
  6. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +1 -1
  14. package/.next/server/app/_not-found.rsc +3 -3
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  16. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  17. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  18. package/.next/server/app/api/about/route.js +1 -1
  19. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  20. package/.next/server/app/api/agent/[id]/route.js +1 -1
  21. package/.next/server/app/api/agent/new/route.js +1 -1
  22. package/.next/server/app/api/agent/running/events/route.js +1 -1
  23. package/.next/server/app/api/agent/running/route.js +1 -1
  24. package/.next/server/app/api/agent/submissions/[submissionId]/route.js +1 -1
  25. package/.next/server/app/api/file-index/route.js +1 -1
  26. package/.next/server/app/api/files/[...path]/route.js +1 -1
  27. package/.next/server/app/api/plugins/route.js +1 -1
  28. package/.next/server/app/api/plugins/updates/route.js +2 -1
  29. package/.next/server/app/api/preferences/route.js +1 -1
  30. package/.next/server/app/api/pty/route.js +4 -3
  31. package/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
  32. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  33. package/.next/server/app/api/sessions/[id]/command-entry/route.js +1 -1
  34. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  35. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  36. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  37. package/.next/server/app/api/sessions/[id]/info/route.js +1 -1
  38. package/.next/server/app/api/sessions/[id]/lock/route.js +1 -1
  39. package/.next/server/app/api/sessions/[id]/outline/route.js +1 -1
  40. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  41. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  42. package/.next/server/app/api/sessions/[id]/tool-results/[toolCallId]/route.js +1 -1
  43. package/.next/server/app/api/sessions/route.js +1 -1
  44. package/.next/server/app/api/sessions/search/route.js +1 -1
  45. package/.next/server/app/api/subagent-runs/route.js +1 -1
  46. package/.next/server/app/index.html +1 -1
  47. package/.next/server/app/index.rsc +5 -5
  48. package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  49. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  50. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  51. package/.next/server/app/page.js +13 -13
  52. package/.next/server/app/page_client-reference-manifest.js +1 -1
  53. package/.next/server/app-paths-manifest.json +4 -4
  54. package/.next/server/chunks/3557.js +1 -1
  55. package/.next/server/chunks/3908.js +1 -0
  56. package/.next/server/chunks/4127.js +1 -1
  57. package/.next/server/chunks/4511.js +1 -0
  58. package/.next/server/chunks/5274.js +1 -1
  59. package/.next/server/chunks/5277.js +1 -1
  60. package/.next/server/chunks/5304.js +2 -2
  61. package/.next/server/chunks/5420.js +1 -1
  62. package/.next/server/chunks/7594.js +5 -6
  63. package/.next/server/chunks/8443.js +1 -1
  64. package/.next/server/chunks/9032.js +1 -0
  65. package/.next/server/chunks/9460.js +2 -0
  66. package/.next/server/instrumentation.js +1 -1
  67. package/.next/server/middleware-build-manifest.js +1 -1
  68. package/.next/server/pages/404.html +1 -1
  69. package/.next/server/pages/500.html +1 -1
  70. package/.next/server/server-reference-manifest.json +1 -1
  71. package/.next/static/chunks/9780-3879ff424362f71a.js +1 -0
  72. package/.next/static/chunks/app/page-03ce7a25f33f4d70.js +24 -0
  73. package/.next/static/css/{ea117138d33e0b37.css → 1ad5c09cc7ca816b.css} +1 -1
  74. package/README.en.md +1 -1
  75. package/README.md +1 -1
  76. package/bin/pty-manager.cjs +65 -12
  77. package/bin/pty-process.cjs +135 -0
  78. package/bin/pty-worker.js +17 -3
  79. package/package.json +1 -1
  80. package/.next/server/chunks/8359.js +0 -2
  81. package/.next/server/chunks/9935.js +0 -1
  82. package/.next/static/chunks/9780-864f35ace9287b0b.js +0 -1
  83. package/.next/static/chunks/app/page-5f78e55ff0d87ec7.js +0 -24
  84. /package/.next/static/{vD56I5OFkAr4Y9TsF1L7c → qrH41YQOkbPr0RvEZs8IZ}/_buildManifest.js +0 -0
  85. /package/.next/static/{vD56I5OFkAr4Y9TsF1L7c → qrH41YQOkbPr0RvEZs8IZ}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text-muted:var(--text-muted);--color-status-running:var(--status-running)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.row-0{grid-row:0}.row-399{grid-row:399}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing) * 1)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-1{height:calc(var(--spacing) * 1)}.h-\[720px\]{height:720px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[760px\]{max-width:760px}.flex-1{flex:1}.\!shrink{flex-shrink:1!important}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.animate-\[pulse_1\.5s_ease-in-out_infinite\]{animation:pulse 1.5s ease-in-out infinite}.animate-spin{animation:var(--animate-spin)}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e+38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:color-mix(in srgb,var(--accent) 50%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 6%,transparent)}}.bg-status-running{background-color:var(--color-status-running)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.break-all{word-break:break-all}.text-\[var\(--error-text\)\]{color:var(--error-text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal}.ordinal,.tabular-nums{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[pidance\:err\]{pidance:err}.\[scrollbar-width\:none\]{scrollbar-width:none}@media (min-width:520px){.min-\[520px\]\:flex{display:flex}}@media (min-width:40rem){.sm\:inline{display:inline}}}:root{color-scheme:light;--bg:#fdfcfa;--bg-panel:#f7f6f4;--bg-elevated:#fff;--bg-hover:#0000000d;--bg-selected:#b350172b;--bg-subtle:#f4f3f1;--border:#e5e1de;--border-strong:#cbc7c2;--text:#393a34;--text-muted:#5c5c54;--text-dim:#797970;--accent:#b35017;--accent-hover:#9a4310;--accent-foreground:#fff;--user-bg:#f7f2ee;--assistant-bg:#fdfcfa;--tool-bg:#efeeec80;--code-bg:#f4f3f1;--status-running:#b35017;--status-waiting:#c99700;--status-unread:#2d72c4;--status-success:#5f8d3d;--status-warning:#8d6c15;--status-danger:#b7493f;--status-success-bg:#5f8d3d14;--status-success-border:#5f8d3d59;--status-success-foreground:#fff;--status-warning-bg:#8d6c1514;--status-warning-border:#8d6c1566;--status-danger-bg:#b7493f12;--status-danger-border:#b7493f66;--error-text:#a43d35;--diff-added-text:#47752b;--diff-added-bg:#5f8d3d17;--diff-added-border:#5f8d3d99;--diff-removed-text:#a43d35;--diff-removed-bg:#b7493f17;--diff-removed-border:#b7493f99;--diff-hunk-bg:#2d72c41f;--media-canvas:#000;--live-indicator-glow:0 0 6px #5f8d3d99;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#b35017;--focus-ring:#b3501755;--overlay:#39393420;--disabled-opacity:.48;--shadow-float:0 18px 50px #39393424;--shadow-input:0 1px 2px #39393412,0 0 0 1px #ffffff80 inset;--radius-xs:4px;--radius-sm:6px;--radius-md:9px;--radius-lg:13px;--radius-pill:999px}html.dark{color-scheme:dark;--bg:#120f0e;--bg-panel:#171615;--bg-elevated:#1c1a18;--bg-hover:#ffffff12;--bg-selected:#b9a5992b;--bg-subtle:#171616;--border:#242323;--border-strong:#504e4c;--text:#c9c5ba;--text-muted:#8f8b81;--text-dim:#77736b;--accent:#da7c47;--accent-hover:#eb8c57;--accent-foreground:#120f0e;--user-bg:#25170e;--assistant-bg:#120f0e;--tool-bg:#120f0e80;--code-bg:#0e0c0b;--status-running:#da7c47;--status-waiting:#eab308;--status-unread:#479fe6;--status-success:#76ad4f;--status-warning:#c67f13;--status-danger:#da5b4a;--status-success-bg:#76ad4f1f;--status-success-border:#76ad4f70;--status-success-foreground:#120f0e;--status-warning-bg:#c67f131f;--status-warning-border:#c67f1370;--status-danger-bg:#da5b4a1f;--status-danger-border:#da5b4a7a;--error-text:#ed7665;--diff-added-text:#8bc766;--diff-added-bg:#76ad4f1f;--diff-added-border:#76ad4fb3;--diff-removed-text:#ed7665;--diff-removed-bg:#da5b4a24;--diff-removed-border:#da5b4ab3;--diff-hunk-bg:#479fe624;--live-indicator-glow:0 0 6px #76ad4fb3;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#da7c47;--focus-ring:#da7c4755;--overlay:#0009;--disabled-opacity:.48;--shadow-float:0 20px 60px #00000070;--shadow-input:0 1px 2px #00000040,0 0 0 1px #ffffff08 inset}html[data-theme-style=fusion]{--bg:#fbfcfd;--bg-panel:#f3f6f7;--bg-elevated:#fff;--bg-hover:#163b4d0a;--bg-selected:#2e6f9520;--bg-subtle:#eef2f3;--border:#dce4e6;--border-strong:#bdcbd0;--text:#263439;--text-muted:#607077;--text-dim:#819096;--accent:#286e98;--accent-hover:#1e5c82;--accent-foreground:#fff;--user-bg:#eaf2f7;--assistant-bg:#fbfcfd;--tool-bg:#f0f5f4;--code-bg:#172126;--status-running:#b35017;--status-waiting:#cf9f1d;--status-unread:#286e98;--status-success:#49805d;--status-warning:#9a6a1a;--status-danger:#b34f58;--status-success-bg:#49805d14;--status-success-border:#49805d59;--status-success-foreground:#fff;--status-warning-bg:#9a6a1a14;--status-warning-border:#9a6a1a66;--status-danger-bg:#b34f5812;--status-danger-border:#b34f5866;--error-text:#a23f49;--diff-added-text:#39704d;--diff-added-bg:#49805d17;--diff-added-border:#49805d99;--diff-removed-text:#a23f49;--diff-removed-bg:#b34f5817;--diff-removed-border:#b34f5899;--diff-hunk-bg:#286e981f;--live-indicator-glow:0 0 6px #49805d99;--focus:#286e98;--focus-ring:#286e9844;--overlay:#18343d30;--shadow-float:0 18px 48px #163b4d20;--shadow-input:0 1px 2px #163b4d12,0 0 0 1px #fff inset}html.dark[data-theme-style=fusion]{--bg:#101719;--bg-panel:#141d20;--bg-elevated:#192428;--bg-hover:#d8edf212;--bg-selected:#6ba7c426;--bg-subtle:#172124;--border:#263337;--border-strong:#46585e;--text:#ced8d8;--text-muted:#8d9c9e;--text-dim:#708084;--accent:#69a7ca;--accent-hover:#7fb8d6;--accent-foreground:#0f1719;--user-bg:#162832;--assistant-bg:#101719;--tool-bg:#121d1f;--code-bg:#0b1113;--status-running:#da7c47;--status-waiting:#ecc94b;--status-unread:#69a7ca;--status-success:#79ad78;--status-warning:#d0a356;--status-danger:#dd777e;--status-success-bg:#79ad781f;--status-success-border:#79ad7870;--status-success-foreground:#101719;--status-warning-bg:#d0a3561f;--status-warning-border:#d0a35670;--status-danger-bg:#dd777e1f;--status-danger-border:#dd777e7a;--error-text:#ed8f95;--diff-added-text:#91c590;--diff-added-bg:#79ad781f;--diff-added-border:#79ad78b3;--diff-removed-text:#ed8f95;--diff-removed-bg:#dd777e24;--diff-removed-border:#dd777eb3;--diff-hunk-bg:#69a7ca24;--live-indicator-glow:0 0 6px #79ad78b3;--focus:#69a7ca;--focus-ring:#69a7ca55;--overlay:#0009;--shadow-float:0 20px 60px #0006;--shadow-input:0 1px 2px #0000003d,0 0 0 1px #ffffff08 inset}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}body,html{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:Aptos,Segoe UI Variable,Noto Sans SC,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px}body{height:100dvh}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace}code,pre{font-family:var(--font-mono)}.chat-selectable,.compaction-file-list,.markdown-code-block,.markdown-code-body,code,pre{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}.markdown-body{color:var(--text);word-break:break-word;font-size:14px;line-height:1.72}.markdown-body.markdown-body--extension{font-size:inherit;color:inherit;line-height:1.5}.markdown-body.markdown-body--extension p{margin:0 0 4px}.markdown-body.markdown-body--extension p:last-child{margin-bottom:0}.markdown-body.markdown-body--extension h1,.markdown-body.markdown-body--extension h2,.markdown-body.markdown-body--extension h3,.markdown-body.markdown-body--extension h4,.markdown-body.markdown-body--extension h5,.markdown-body.markdown-body--extension h6{margin:0 0 4px;font-size:1em;font-weight:650;line-height:1.35}.markdown-body.markdown-body--extension ol,.markdown-body.markdown-body--extension ul{margin:2px 0 4px}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--text);letter-spacing:0;margin:10px 0 5px;font-weight:600;line-height:1.35}.markdown-body h1{font-size:1.16em}.markdown-body h2{font-size:1.08em}.markdown-body h3{color:var(--text);font-size:.98em}@supports (color:color-mix(in lab,red,red)){.markdown-body h3{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body ol,.markdown-body ul{margin:5px 0 8px;padding-left:22px;list-style-position:outside}.markdown-body li{margin:3px 0;padding-left:2px}.markdown-body ul>li{list-style-type:disc}.markdown-body ol>li{list-style-type:decimal}.markdown-body li>p{margin:0}.markdown-body li::marker{color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body li::marker{color:color-mix(in srgb,var(--accent) 72%,var(--text-muted))}}.markdown-body li::marker{font-weight:600}.markdown-body strong{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body strong{color:color-mix(in srgb,var(--text) 88%,var(--accent))}}.markdown-body strong{font-weight:700}.markdown-body em{color:var(--text-muted)}.markdown-body a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body a{-webkit-text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}}.markdown-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.markdown-body .markdown-inline-code{background:var(--bg-subtle);color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);border-radius:5px;padding:1px 5px;font-size:.92em}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 70%,transparent)}}.markdown-body .contains-task-list{padding-left:0;list-style:none}.markdown-body .task-list-item{padding-left:25px;display:block;position:relative}.markdown-body .task-list-item::marker{content:""}.markdown-body .task-list-item>input[type=checkbox],.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child{appearance:none;border:1px solid var(--border);background:var(--bg);border-radius:4px;place-content:center;width:14px;height:14px;margin:0;display:inline-grid;position:absolute;top:.35em;left:0}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:color-mix(in srgb,var(--accent) 55%,var(--border))}}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}}.markdown-body .task-list-item>input[type=checkbox]:checked:before,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked:before{content:"";border:solid var(--accent);border-width:0 1.5px 1.5px 0;width:4px;height:8px;transform:rotate(45deg)translateY(-1px)}.markdown-body blockquote{border-left:3px solid var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-body blockquote{border-left:3px solid color-mix(in srgb,var(--border) 75%,var(--text-muted))}}.markdown-body blockquote{background:var(--bg-subtle);color:var(--text-muted);border-radius:0 6px 6px 0;margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:var(--radius-md);-webkit-touch-callout:default;width:100%;margin:8px 0}.markdown-table-scroll,.markdown-table-wrap{cursor:text;-webkit-user-select:text;user-select:text}.markdown-table-scroll{overflow:visible}.markdown-table-row{border-bottom:1px solid var(--border);align-items:stretch;font-size:13px;display:grid}.markdown-table-body .markdown-table-row:last-child{border-bottom:0}.markdown-table-td,.markdown-table-th{text-align:left;cursor:text;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text;-webkit-touch-callout:default;min-width:0;padding:6px 10px}.markdown-table-th{background:var(--bg-panel);color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-table-th{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-table-th{font-weight:650}.markdown-table-body .markdown-table-row:nth-child(2n) .markdown-table-td{background:var(--bg-subtle)}.markdown-body hr{background:linear-gradient(90deg,transparent,var(--border),transparent);border:none;height:1px;margin:12px 0}.markdown-body .katex-display{margin:.6em 0;padding:2px 0;overflow:auto hidden}.markdown-body .katex{font-size:1.05em}.markdown-user-message p{white-space:pre-wrap}.markdown-custom-message{line-height:1.32}.markdown-custom-message p{margin:0}.markdown-custom-message h1,.markdown-custom-message h2,.markdown-custom-message h3,.markdown-custom-message h4,.markdown-custom-message h5,.markdown-custom-message h6{margin:4px 0 2px;line-height:1.18}.markdown-custom-message ol,.markdown-custom-message ul{margin:2px 0 3px}.markdown-custom-message li{margin:0}.markdown-custom-message blockquote{margin:3px 0;padding:4px 8px}.markdown-custom-message .markdown-code-block,.markdown-custom-message .markdown-table-wrap{margin:4px 0}.markdown-compaction-message{line-height:1.5}.markdown-compaction-message p{margin:0 0 7px}.markdown-compaction-message h1,.markdown-compaction-message h2,.markdown-compaction-message h3,.markdown-compaction-message h4,.markdown-compaction-message h5,.markdown-compaction-message h6{margin:8px 0 3px;line-height:1.25}.markdown-compaction-message ol,.markdown-compaction-message ul{margin:4px 0 8px}.markdown-compaction-message li{margin:2px 0}.markdown-compaction-message .markdown-code-block,.markdown-compaction-message .markdown-table-wrap{margin:6px 0}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);margin-top:10px;padding-top:8px;font-size:12px}.compaction-file-details summary{cursor:pointer;font-weight:600;line-height:1.4}.compaction-file-section{margin-top:8px}.compaction-file-title{color:var(--text);margin-bottom:4px;font-size:11px;font-weight:650}.compaction-file-list{overscroll-behavior:auto;touch-action:auto;border:1px solid var(--border);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);border-radius:6px;margin:0;padding:7px 8px;font-size:11px;line-height:1.45;list-style:none;overflow:auto}.compaction-file-list li{overflow-wrap:anywhere}.compaction-file-list li+li{margin-top:3px}.markdown-code-block{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--code-bg);box-shadow:none;margin:6px 0;position:relative;overflow:hidden}.markdown-code-body{overscroll-behavior:auto;touch-action:auto;max-height:min(320px,45vh);overflow:auto}@media (max-width:640px){.markdown-code-body{max-height:min(240px,32vh)}}.markdown-code-header{background:var(--bg-panel);padding:5px 10px}@supports (color:color-mix(in lab,red,red)){.markdown-code-header{background:color-mix(in srgb,var(--bg-panel) 88%,var(--code-bg))}}.markdown-code-header{border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;gap:8px;font-size:11px;display:flex}.markdown-code-lang{color:var(--text-muted);font-family:var(--font-mono);font-weight:650}.markdown-code-actions{align-items:center;gap:6px;display:flex}.markdown-code-action{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;border-radius:5px;padding:2px 7px;font-size:11px;line-height:1.25}.markdown-code-action:hover:not(:disabled){color:var(--text);border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action:hover:not(:disabled){border-color:color-mix(in srgb,var(--border) 70%,var(--text-muted))}}.markdown-code-action:disabled{color:var(--text-dim);cursor:not-allowed;opacity:var(--disabled-opacity)}.chat-input-shell:focus-within{border-color:var(--focus)!important;box-shadow:var(--shadow-input),0 0 0 3px var(--focus-ring)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{box-shadow:var(--shadow-input),0 0 0 3px color-mix(in srgb,var(--focus-ring) 72%,transparent)!important}}.markdown-code-action.is-active{background:var(--bg-selected);color:var(--text)}.mermaid-block{background:var(--bg);padding:12px;overflow-x:auto}@supports (color:color-mix(in lab,red,red)){.mermaid-block{background:color-mix(in srgb,var(--bg) 92%,var(--bg-panel))}}.mermaid-block svg{max-width:none;display:block}.mermaid-block-loading{min-height:120px}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.file-viewer-toolbar{min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta{text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.file-viewer-controls{gap:6px}.file-viewer-action-slot{flex:0 0 24px;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:5px;height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-size:11px;font-weight:500}.file-viewer-mode-button:first-child{border-left:0}.file-viewer-mode-button:hover{filter:brightness(1.08)}.file-viewer-icon-button{box-sizing:border-box;border:1px solid var(--border);width:24px;height:24px;flex:0 0 24px}.file-viewer-icon-button:hover{color:var(--text);background:var(--bg-hover)!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.file-viewer-meta{display:none}}@media (max-width:380px){.file-viewer-toolbar{gap:6px!important;padding-inline:8px!important}.file-viewer-mode-button{padding-inline:6px}}.markdown-file-preview h1{font-size:1.8em}.markdown-file-preview h2{font-size:1.4em}.markdown-file-preview h3{font-size:1.15em}.markdown-file-preview p{margin:0 0 12px}.markdown-file-preview pre{border:1px solid var(--border);border-radius:6px;margin:12px 0;padding:12px 16px;font-size:13px;overflow-x:auto}.markdown-file-preview code,.markdown-file-preview pre{background:var(--bg-panel);font-family:var(--font-mono)}.markdown-file-preview code{border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes sidebar-running-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(-6px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-5px)scale(.995)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}}.chat-jump-bottom{z-index:45;border:1px solid var(--border);background:var(--bg-panel);width:32px;height:32px;color:var(--text-muted);cursor:pointer;opacity:0;pointer-events:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .15s,transform .15s,background-color .15s,color .15s;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)translateY(6px)scale(.92);box-shadow:0 1px 2px #0f172a0f,0 8px 24px -12px #0f172a2e}.chat-jump-bottom.is-visible{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)scale(1)}.chat-jump-bottom:hover{background:var(--bg-hover);color:var(--text)}@media (prefers-reduced-motion:reduce){.chat-jump-bottom,.chat-jump-bottom.is-visible{transition:opacity .001ms;transform:translate(-50%)}}@keyframes saved-pop{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-success) 55%,transparent);transform:scale(1)}40%{box-shadow:0 0 0 6px color-mix(in srgb,var(--status-success) 25%,transparent);transform:scale(1.08)}to{transform:scale(1);box-shadow:0 0 #0000}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-dragging{transition:none}.sidebar-container.sidebar-open{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-closed{width:0;min-width:0;border-right:none!important}.sidebar-inner{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}}.sidebar-inner{flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex}.sidebar-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;right:0}.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.sidebar-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.sidebar-resize-handle{display:none}}.chat-column-resize-layer{pointer-events:none;z-index:31;position:absolute;top:0;bottom:0}.chat-column-resize-handle{cursor:col-resize;pointer-events:auto;touch-action:none;border-radius:3px;width:6px;position:absolute;top:0;bottom:0}.chat-column-resize-handle.dragging,.chat-column-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.chat-column-resize-handle.dragging,.chat-column-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.chat-column-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.chat-column-resize-layer{display:none}}.sidebar-pagination-btn{height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:11px;transition:background .12s,color .12s;display:inline-flex}.sidebar-pagination-btn:hover{background:var(--bg-hover);color:var(--text)}.sidebar-pagination-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (min-width:641px){.workspace-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.workspace-container.workspace-dragging{transition:none}.workspace-container.workspace-closed{border-left:none!important}}@media (max-width:640px){.chat-stats-center{display:none!important}.sidebar-container{width:280px;max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;transform:translate(-100%)}.changes-panel{z-index:300;transition:transform .25s,box-shadow .25s;inset:0;border-left:none!important;width:100%!important;min-width:0!important;position:fixed!important}.changes-panel.changes-panel-open{transform:translate(0);box-shadow:-4px 0 20px #00000026}.changes-panel.changes-panel-closed{box-shadow:none;transform:translate(100%)}.changes-panel>.changes-panel{height:100%;box-shadow:none;transition:none;position:relative;left:auto;right:auto;transform:none;width:100%!important}.changes-panel-resize-handle{display:none!important}.workspace-container{transition:transform .25s,box-shadow .25s;top:0;bottom:0;right:0;width:100%!important;min-width:0!important;position:fixed!important}.workspace-container.workspace-open{transform:translate(0);box-shadow:-4px 0 20px #00000026}.workspace-container.workspace-closed{box-shadow:none;transform:translate(100%);border-left:none!important}.workspace-container>.workspace-inner{width:100%!important;min-width:0!important}}.sidebar-icon-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.sidebar-icon-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.sidebar-icon-btn:active:not(:disabled){background:var(--bg-selected)}.sidebar-icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar-icon-btn:disabled{color:var(--text-dim)}@media (hover:hover) and (pointer:fine){.sidebar-indent-indicator{opacity:0;pointer-events:none}.sidebar-row:focus-within>.sidebar-indent-indicator,.sidebar-row:hover>.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-row:focus-within .sidebar-indicator-icon,.sidebar-row:hover .sidebar-indicator-icon{opacity:0;pointer-events:none}}@media (hover:none),(pointer:coarse){.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-indicator-icon{opacity:0;pointer-events:none}}.sidebar-chevron-always{opacity:1;pointer-events:auto}.sidebar-indicator-icon{transition:opacity .12s}.extension-panel-overlay{z-index:95;padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));background:var(--overlay);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.extension-panel-inline{background:var(--bg);flex-shrink:0;justify-content:center;display:flex}.extension-panel-shell{border:1px solid var(--accent);flex-direction:column;max-height:min(52vh,560px);display:flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.extension-panel-shell{border:1px solid color-mix(in srgb,var(--accent) 18%,var(--border))}}.extension-panel-shell{background:var(--bg-panel);box-shadow:0 16px 40px var(--text);border-radius:12px}@supports (color:color-mix(in lab,red,red)){.extension-panel-shell{box-shadow:0 16px 40px color-mix(in srgb,var(--text) 12%,transparent)}}.extension-panel-shell{font-family:inherit}.extension-panel-shell--overlay{max-height:min(760px,calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom)))}.extension-panel-header{border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:44px;padding:8px 12px 8px 14px;display:flex}.extension-panel-title{overscroll-behavior:contain;min-width:0;max-height:min(30vh,240px);color:var(--text);flex:1;font-size:14px;font-weight:650;line-height:1.4;overflow-y:auto}.extension-panel-shell--expanded{max-height:min(78vh,900px)}.extension-panel-shell--expanded .extension-panel-title{max-height:60vh}.extension-panel-header-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.extension-panel-header{cursor:pointer;-webkit-user-select:none;user-select:none}.extension-panel-header:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.extension-panel-header:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}}.extension-panel-header:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.extension-panel-chevron{color:var(--text-dim);flex-shrink:0;align-items:center;transition:transform .15s;display:inline-flex}.extension-panel-chevron.is-expanded{transform:rotate(90deg)}@media (prefers-reduced-motion:reduce){.extension-panel-chevron{transition:none}}.extension-panel-body{overscroll-behavior:auto;touch-action:auto;min-height:0;color:var(--text);-webkit-user-select:text;user-select:text;flex:auto;padding:12px 14px;font-size:14px;line-height:1.55;overflow-y:auto}.extension-panel-footer{border-top:1px solid var(--border);background:var(--bg-subtle);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;display:flex}.extension-panel-hint,.extension-panel-status{color:var(--text-dim);margin-left:auto;font-size:12px;line-height:1.4}.extension-panel-copy{color:var(--text-muted);overflow-wrap:anywhere;font-size:14px;line-height:1.55}.extension-panel-editor{border:1px solid var(--border);background:var(--bg);width:100%;min-height:120px;max-height:320px;resize:vertical;box-sizing:border-box;border-radius:8px;outline:none;padding:10px 12px;line-height:1.55;display:block;overflow-y:auto}.extension-panel-ansi,.extension-panel-editor{color:var(--text);font-family:var(--font-mono);font-size:13px}.extension-panel-ansi{white-space:pre;-webkit-user-select:text;user-select:text;margin:0;line-height:1.5;overflow-x:auto}.extension-panel-keytrap{opacity:0;pointer-events:none;border:0;width:1px;height:1px;padding:0;position:absolute}.extension-option-list{flex-direction:column;gap:8px;display:flex}.extension-option-btn{border:1px solid var(--border);background:var(--bg);width:100%;min-height:40px;color:var(--text);font:inherit;text-align:left;white-space:normal;overflow-wrap:anywhere;cursor:pointer;border-radius:8px;padding:10px 12px;font-size:14px;line-height:1.45;overflow:hidden}.extension-option-btn:hover:not(:disabled){background:var(--bg-hover)}.extension-option-btn:disabled{color:var(--text-dim);cursor:not-allowed}@media (max-width:640px){.extension-panel-shell{max-height:min(70vh,calc(100dvh - 24px - env(safe-area-inset-bottom)))}.extension-panel-shell--expanded{max-height:calc(100dvh - 96px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}.extension-panel-shell--expanded .extension-panel-title{max-height:56vh}.extension-card-btn,.extension-option-btn{min-height:44px}}.extension-card-btn{border:1px solid var(--border);background:var(--bg);min-height:36px;color:var(--text-muted);font:inherit;cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-size:13px;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.extension-card-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.extension-card-btn:disabled{cursor:not-allowed;opacity:.55}.extension-card-btn--primary{background:var(--accent);color:var(--accent-foreground);border-color:#0000}.extension-card-btn--primary:hover:not(:disabled){background:var(--accent);color:var(--accent-foreground);filter:brightness(1.06)}.guide-selectors{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:10px;display:flex}.guide-selector{background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:5px;height:28px;padding:0 6px;transition:background .12s,border-color .12s;display:inline-flex}.guide-selector:hover{background:var(--bg-hover)}.guide-selector:focus-within{background:var(--bg-hover);border-color:var(--accent)}.guide-selector-icon{color:var(--text-dim);flex-shrink:0}.guide-select{width:160px;min-width:0;max-width:160px;color:var(--text);font:inherit;cursor:pointer;text-overflow:ellipsis;background:0 0;border:none;outline:none;font-size:12.5px}.guide-select:disabled{color:var(--text-dim);cursor:default}@media (max-width:640px){.guide-selectors{flex-wrap:nowrap}.guide-selector{flex:1;min-width:0}.guide-select{width:100%;max-width:none}}.sidebar-icon-btn--active,.sidebar-icon-btn--active:hover:not(:disabled){background:var(--bg-selected);color:var(--accent)}.sidebar-icon-btn--danger:hover:not(:disabled){background:var(--status-danger-bg);color:var(--status-danger)}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:color-mix(in srgb,var(--status-success) 18%,transparent)}}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){color:var(--status-success)}.sidebar-row .sidebar-icon-btn--hover{opacity:0}.sidebar-row .sidebar-icon-btn--hover:focus-visible,.sidebar-row:focus-within .sidebar-icon-btn--hover,.sidebar-row:hover .sidebar-icon-btn--hover{opacity:1}@media (max-width:640px){.sidebar-toolbar{gap:12px!important}}.settings-layout{height:min(72dvh,660px);min-height:0;display:flex}.settings-nav-list{flex-direction:column;gap:2px;padding:10px 8px;display:flex}.settings-nav-item{border-radius:var(--radius-sm);width:100%;color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;font-size:13px;font-weight:400;transition:background .12s,color .12s;display:flex;position:relative}.settings-nav-item:hover{background:var(--bg-hover);color:var(--text)}.settings-nav-item.is-active{background:var(--bg-selected);color:var(--text);font-weight:600}.settings-nav-item.is-active:before{border-radius:var(--radius-pill);background:var(--accent);content:"";width:2px;position:absolute;top:7px;bottom:7px;left:3px}.settings-content-pane,.settings-scroll-region{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.settings-content-pane{background:var(--bg);overflow:hidden}.settings-scroll-region{scrollbar-gutter:stable;overflow-y:auto}.settings-page-content{width:min(100%,700px);padding:24px 28px 32px}.settings-choice{margin-bottom:26px}.settings-segmented-control{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-panel);width:fit-content;max-width:100%;box-shadow:var(--shadow-input);gap:2px;padding:3px;display:flex}.settings-segmented-option{border-radius:var(--radius-sm);min-width:96px;height:32px;color:var(--text-muted);white-space:nowrap;cursor:pointer;background:0 0;border:none;padding:0 14px;font-size:12.5px;transition:background .12s,color .12s,box-shadow .12s}.settings-segmented-option:hover{color:var(--text)}.settings-segmented-option.is-active{background:var(--bg-elevated);color:var(--text);box-shadow:0 1px 3px var(--text)}@supports (color:color-mix(in lab,red,red)){.settings-segmented-option.is-active{box-shadow:0 1px 3px color-mix(in srgb,var(--text) 12%,transparent)}}.settings-segmented-option.is-active{font-weight:600}.settings-empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;height:100%;padding:32px 24px;display:flex}.app-top-bar{border-bottom:1px solid var(--border);background:var(--bg-panel);flex-shrink:0;align-items:center;height:36px;display:flex}.session-lineage{margin-left:6px;font-size:12px}.session-lineage,.session-lineage-crumbs{align-items:center;gap:2px;min-width:0;display:flex}.session-lineage-crumbs{overflow:hidden}.session-lineage-gap,.session-lineage-sep{color:var(--text-dim);flex-shrink:0}.session-lineage-crumb,.session-lineage-current{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:180px;padding:0 2px;overflow:hidden}.session-lineage-crumb{color:var(--text-muted);font:inherit;cursor:pointer;background:0 0;border:none}.session-lineage-crumb:hover{color:var(--text)}.session-lineage-crumb:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-current{color:var(--text);align-items:center;gap:4px;display:inline-flex}.session-lineage-trigger{height:24px;color:var(--text-muted);font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;flex-shrink:0;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.session-lineage-trigger:hover,.session-lineage-trigger[aria-expanded=true]{background:var(--bg-selected);color:var(--text)}.session-lineage-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-trigger-label{white-space:nowrap}.session-lineage-trigger-running{white-space:nowrap;color:var(--status-warning)}.session-lineage-title{min-width:0;max-width:260px;height:24px;color:var(--text);font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.session-lineage-title:hover,.session-lineage-title[aria-expanded=true]{background:var(--bg-selected)}.session-lineage-title:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-title .session-lineage-trigger-label{text-overflow:ellipsis;overflow:hidden}.session-lineage-dot{background:var(--status-success);border-radius:50%;flex-shrink:0;width:6px;height:6px}.session-lineage-panel{padding:4px 0}.session-lineage-note{color:var(--status-warning);padding:2px 10px 6px;font-size:11px}.session-lineage-row{height:28px;color:var(--text-muted);cursor:pointer;outline:none;align-items:center;gap:6px;padding-right:10px;display:flex}.session-lineage-row:hover{background:var(--bg-selected);color:var(--text)}.session-lineage-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-row.is-current{color:var(--text)}.session-lineage-row.needs-attention{color:var(--status-warning)}.session-lineage-row-toggle{width:14px;height:14px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.session-lineage-row-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.session-lineage-row-tag{border:1px solid var(--border);color:var(--text-dim);border-radius:999px;flex-shrink:0;padding:0 5px;font-size:10px}.session-lineage-row-attention{color:var(--status-warning);flex-shrink:0;font-size:11px}.session-lineage-row-meta{color:var(--text-dim);font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto;font-size:11px}.workspace-header{border-bottom:1px solid var(--border);align-items:center;gap:4px;height:40px;padding:0 8px 0 12px}.changes-panel,.workspace-header{background:var(--bg-panel);flex-shrink:0;display:flex}.changes-panel{border-left:1px solid var(--border);flex-direction:column;align-self:stretch;min-width:0;height:100%;min-height:0;position:relative;overflow:hidden}.changes-panel>.changes-panel{border-left:none;flex:auto;height:100%;min-height:0;width:100%!important;min-width:0!important}.changes-panel-content{flex:1;grid-template-rows:minmax(120px,36%) minmax(0,1fr);min-height:0;display:grid}.changes-panel-diff,.changes-panel-list{min-height:0;overflow:auto}.changes-panel-list{border-bottom:1px solid var(--border)}.changes-panel-hint{color:var(--text-dim);padding:18px 14px;font-size:11.5px;line-height:1.5}.changes-panel-hint.is-error{color:var(--status-danger)}.changes-panel-resize-handle{z-index:10;cursor:col-resize;touch-action:none;width:6px;position:absolute;top:0;bottom:0;left:-3px}.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.secondary-panel-inner{flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.secondary-panel-tabs{flex:none;min-width:0;min-height:0}.secondary-panel-body{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex;overflow:hidden}.workspace-navigation-rail{border-left:1px solid var(--border);background:var(--bg);flex-direction:column;align-items:center;gap:4px;padding:8px 0;display:flex}.workspace-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;left:0}.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}@media (max-width:640px){.workspace-resize-handle{display:none}}.file-row-actions{background:var(--bg-panel);border:1px solid var(--border);opacity:0;visibility:hidden;border-radius:6px;align-items:center;gap:2px;padding:1px;transition:opacity .12s,visibility .12s;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.file-row{border-radius:var(--radius-xs);transition:background .12s}.file-row:focus-within,.file-row:hover{background:var(--bg-hover)}.file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.file-row-actions:has([data-menu-open=true]),.file-row:focus-within .file-row-actions,.file-row:hover .file-row-actions{opacity:1;visibility:visible}.file-row-action-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:background .12s,color .12s;display:inline-flex}.file-row-action-btn:hover{background:var(--bg-hover);color:var(--text)}.file-row-action-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (pointer:coarse){.file-row-actions{opacity:1;visibility:visible}.file-row .file-row-badge{display:none}}.git-file-row{cursor:pointer;width:100%;height:26px;color:var(--text);text-align:left;border-radius:var(--radius-xs);background:0 0;border:none;align-items:center;gap:6px;padding:0 8px;font-size:12px;transition:background .12s,color .12s;display:flex}.git-file-row:hover{background:var(--bg-hover)}.git-file-row.is-selected{background:var(--bg-selected);color:var(--text)}.git-file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (hover:none),(pointer:coarse){.sidebar-row .sidebar-icon-btn--hover{opacity:1}.sidebar-icon-btn{width:28px;height:28px;position:relative}.sidebar-icon-btn:after{content:"";position:absolute;inset:-4px -2px}}@media (max-width:640px){.app-top-bar{height:44px}.app-top-bar>button:not(.app-top-bar-stats){width:44px!important;height:44px!important}.app-top-bar-stats{min-width:0;max-width:min(48vw,168px);overflow:hidden;gap:4px!important;height:44px!important;padding:0 8px!important}.app-top-bar-stats>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.session-lineage{margin-left:4px}.session-lineage-crumbs{max-width:28vw}.session-lineage-crumb,.session-lineage-current{max-width:84px}.session-lineage-title{max-width:42vw}.session-lineage-trigger-running{display:none}.session-lineage-row{height:34px}.workspace-header{height:44px;padding-right:6px}.workspace-header .sidebar-icon-btn,.workspace-navigation-rail .sidebar-icon-btn{width:36px;height:36px}.workspace-navigation-rail{gap:8px;padding-top:8px}.settings-layout{height:min(78dvh,680px)}.settings-nav-list{padding:10px}.settings-page-content{padding:20px 16px 28px}.settings-segmented-control{width:100%;overflow-x:auto}.settings-segmented-option{flex:1 0 auto;min-width:0;height:40px}.chat-input-shell{padding:9px 8px 9px 12px!important}.chat-input-shell button{min-height:40px}.file-row{min-height:44px}.file-row>svg{width:12px;height:12px}.file-row-icon svg{width:18px;height:18px}.file-row-action-btn{width:32px;height:32px}}.message-file-action-btn{min-width:28px;min-height:28px}.message-file-open-btn{min-height:28px}@media (pointer:coarse){.message-file-action-btn{min-width:40px;min-height:40px}.message-file-open-btn{min-height:40px}}.sidebar-row .sidebar-icon-btn--hover.sidebar-icon-btn--active{opacity:1}@media (hover:none),(pointer:coarse){.sidebar-chevron-btn:after{content:"";position:absolute;inset:-5px -3px}}.file-viewer-toolbar{min-width:0}.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;min-width:72px;overflow:hidden}.file-viewer-meta{white-space:nowrap;flex-shrink:0}.file-viewer-controls{flex-shrink:0;align-items:center;gap:3px;margin-left:auto;display:flex}.file-viewer-icon-button{width:26px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.file-viewer-icon-button:hover:not(:disabled),.file-viewer-icon-button[data-active=true]{color:var(--text);background:var(--bg-selected);border-color:var(--border)}.file-viewer-icon-button.is-save:not(:disabled){color:var(--accent)}.file-close-confirm__button:focus-visible,.file-editor-notice button:focus-visible,.file-viewer-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.file-viewer-icon-button:disabled{opacity:.34;cursor:not-allowed}.file-viewer-toolbar-separator{background:var(--border);flex:none;width:1px;height:16px;margin:0 2px}.file-viewer-live-indicator{border-radius:50%;flex:none;width:6px;height:6px}.file-source-editor{box-sizing:border-box;resize:none;background:var(--bg);width:100%;min-width:max-content;height:100%;min-height:0;color:var(--text);caret-color:var(--accent);font-family:var(--font-mono);tab-size:2;white-space:pre;border:0;outline:0;flex:auto;margin:0;padding:14px 18px;font-size:13px;line-height:1.6;display:block;overflow:auto}.file-source-editor.is-wrapped{white-space:pre-wrap;overflow-wrap:anywhere;min-width:100%}.file-close-confirm,.file-editor-notice{border-bottom:1px solid var(--border);background:var(--accent);align-items:center;gap:10px;min-height:34px;padding:5px 10px 5px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.file-close-confirm,.file-editor-notice{background:color-mix(in srgb,var(--accent) 7%,var(--bg-panel))}}.file-close-confirm,.file-editor-notice{color:var(--text-muted);flex:none;font-size:11.5px}.file-editor-notice.is-warning{background:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{background:color-mix(in srgb,var(--status-warning) 10%,var(--bg-panel))}}.file-editor-notice.is-warning{color:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{color:color-mix(in srgb,var(--status-warning) 72%,var(--text))}}.file-editor-notice.is-error{background:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-error{background:color-mix(in srgb,var(--status-danger) 9%,var(--bg-panel))}}.file-editor-notice.is-error{color:var(--status-danger)}.file-editor-notice.is-success{background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-success{background:color-mix(in srgb,var(--status-success) 8%,var(--bg-panel))}}.file-editor-notice.is-success{color:var(--status-success)}.file-editor-notice__actions{align-items:center;gap:5px;margin-left:auto;display:flex}.file-close-confirm__button,.file-editor-notice button{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--text-muted);font:inherit;cursor:pointer;white-space:nowrap;border-radius:5px;padding:2px 8px}.file-close-confirm__button:hover,.file-editor-notice button:hover{color:var(--text);background:var(--bg-hover)}.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{color:var(--status-danger);border-color:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{border-color:color-mix(in srgb,var(--status-danger) 35%,var(--border))}}.file-close-confirm{background:var(--status-warning);min-height:36px}@supports (color:color-mix(in lab,red,red)){.file-close-confirm{background:color-mix(in srgb,var(--status-warning) 7%,var(--bg-panel))}}.file-close-confirm__message{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-right:auto;overflow:hidden}.file-close-confirm__button{align-items:center;gap:5px;display:inline-flex}.file-tab-dirty-dot{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 2px var(--accent);border-radius:50%}@supports (color:color-mix(in lab,red,red)){.file-tab-dirty-dot{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 12%,transparent)}}.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:file-editor-pulse .9s ease-in-out infinite alternate}.file-save-spinner{border:2px solid var(--accent);width:11px;height:11px}@supports (color:color-mix(in lab,red,red)){.file-save-spinner{border:2px solid color-mix(in srgb,var(--accent) 28%,transparent)}}.file-save-spinner{border-top-color:var(--accent);border-radius:50%;animation-name:file-editor-spin;animation-duration:.65s;animation-timing-function:linear;animation-iteration-count:infinite}.file-viewer-context-label{z-index:2;border-bottom:1px solid var(--border);background:var(--bg-panel);color:var(--text-dim);padding:5px 12px;font-size:10.5px;position:sticky;top:0}@keyframes file-editor-spin{to{transform:rotate(1turn)}}@keyframes file-editor-pulse{to{opacity:.45}}@media (max-width:640px){.file-viewer-toolbar{gap:6px!important;padding-left:8px!important;padding-right:0!important}.file-viewer-meta{display:none}.file-viewer-controls{scrollbar-width:none;max-width:68vw;padding-right:8px;overflow-x:auto}.file-viewer-controls::-webkit-scrollbar{display:none}.file-close-confirm,.file-editor-notice{flex-wrap:wrap;align-items:flex-start}.file-editor-notice__actions{width:100%;margin-left:0}.file-close-confirm__message{flex-basis:100%;width:100%}.file-close-confirm__button span{display:none}.file-close-confirm__button{justify-content:center;width:28px;padding:0}.file-source-editor{padding:12px}}@media (prefers-reduced-motion:reduce){.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:none}}.pidance-terminal-surface{background:var(--bg)}.pidance-terminal-xterm{min-width:0;min-height:0}.pidance-terminal-xterm .xterm{height:100%}.pidance-terminal-xterm .xterm-viewport{background:0 0!important}.pidance-terminal-xterm .xterm-screen{background:0 0}.tool-row-running{position:relative;overflow:hidden}.tool-row-running:after{content:"";pointer-events:none;background:linear-gradient(90deg,transparent 0,var(--status-running) 42%,var(--status-running) 50%,var(--status-running) 58%,transparent 100%);position:absolute;inset:0}@supports (color:color-mix(in lab,red,red)){.tool-row-running:after{background:linear-gradient(90deg,transparent 0,color-mix(in srgb,var(--status-running) 18%,transparent) 42%,color-mix(in srgb,var(--status-running) 32%,transparent) 50%,color-mix(in srgb,var(--status-running) 18%,transparent) 58%,transparent 100%)}}.tool-row-running:after{animation:tool-row-sweep 1.6s linear infinite;transform:translate(-100%)}@keyframes tool-row-sweep{to{transform:translate(100%)}}@media (prefers-reduced-motion:reduce){.tool-row-running:after{opacity:.4;animation:none;transform:none}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text-muted:var(--text-muted);--color-status-running:var(--status-running)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.row-0{grid-row:0}.row-399{grid-row:399}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing) * 1)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-1{height:calc(var(--spacing) * 1)}.h-\[720px\]{height:720px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[760px\]{max-width:760px}.flex-1{flex:1}.\!shrink{flex-shrink:1!important}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.animate-\[pulse_1\.5s_ease-in-out_infinite\]{animation:pulse 1.5s ease-in-out infinite}.animate-spin{animation:var(--animate-spin)}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e+38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:color-mix(in srgb,var(--accent) 50%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 6%,transparent)}}.bg-status-running{background-color:var(--color-status-running)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.break-all{word-break:break-all}.text-\[var\(--error-text\)\]{color:var(--error-text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal}.ordinal,.tabular-nums{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.sepia{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[pidance\:err\]{pidance:err}.\[scrollbar-width\:none\]{scrollbar-width:none}@media (min-width:520px){.min-\[520px\]\:flex{display:flex}}@media (min-width:40rem){.sm\:inline{display:inline}}}:root{color-scheme:light;--bg:#fdfcfa;--bg-panel:#f7f6f4;--bg-elevated:#fff;--bg-hover:#0000000d;--bg-selected:#b350172b;--bg-subtle:#f4f3f1;--border:#e5e1de;--border-strong:#cbc7c2;--text:#393a34;--text-muted:#5c5c54;--text-dim:#797970;--accent:#b35017;--accent-hover:#9a4310;--accent-foreground:#fff;--user-bg:#f7f2ee;--assistant-bg:#fdfcfa;--tool-bg:#efeeec80;--code-bg:#f4f3f1;--status-running:#b35017;--status-waiting:#c99700;--status-unread:#2d72c4;--status-success:#5f8d3d;--status-warning:#8d6c15;--status-danger:#b7493f;--status-success-bg:#5f8d3d14;--status-success-border:#5f8d3d59;--status-success-foreground:#fff;--status-warning-bg:#8d6c1514;--status-warning-border:#8d6c1566;--status-danger-bg:#b7493f12;--status-danger-border:#b7493f66;--error-text:#a43d35;--diff-added-text:#47752b;--diff-added-bg:#5f8d3d17;--diff-added-border:#5f8d3d99;--diff-removed-text:#a43d35;--diff-removed-bg:#b7493f17;--diff-removed-border:#b7493f99;--diff-hunk-bg:#2d72c41f;--media-canvas:#000;--live-indicator-glow:0 0 6px #5f8d3d99;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#b35017;--focus-ring:#b3501755;--overlay:#39393420;--disabled-opacity:.48;--shadow-float:0 18px 50px #39393424;--shadow-input:0 1px 2px #39393412,0 0 0 1px #ffffff80 inset;--radius-xs:4px;--radius-sm:6px;--radius-md:9px;--radius-lg:13px;--radius-pill:999px}html.dark{color-scheme:dark;--bg:#120f0e;--bg-panel:#171615;--bg-elevated:#1c1a18;--bg-hover:#ffffff12;--bg-selected:#b9a5992b;--bg-subtle:#171616;--border:#242323;--border-strong:#504e4c;--text:#c9c5ba;--text-muted:#8f8b81;--text-dim:#77736b;--accent:#da7c47;--accent-hover:#eb8c57;--accent-foreground:#120f0e;--user-bg:#25170e;--assistant-bg:#120f0e;--tool-bg:#120f0e80;--code-bg:#0e0c0b;--status-running:#da7c47;--status-waiting:#eab308;--status-unread:#479fe6;--status-success:#76ad4f;--status-warning:#c67f13;--status-danger:#da5b4a;--status-success-bg:#76ad4f1f;--status-success-border:#76ad4f70;--status-success-foreground:#120f0e;--status-warning-bg:#c67f131f;--status-warning-border:#c67f1370;--status-danger-bg:#da5b4a1f;--status-danger-border:#da5b4a7a;--error-text:#ed7665;--diff-added-text:#8bc766;--diff-added-bg:#76ad4f1f;--diff-added-border:#76ad4fb3;--diff-removed-text:#ed7665;--diff-removed-bg:#da5b4a24;--diff-removed-border:#da5b4ab3;--diff-hunk-bg:#479fe624;--live-indicator-glow:0 0 6px #76ad4fb3;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#da7c47;--focus-ring:#da7c4755;--overlay:#0009;--disabled-opacity:.48;--shadow-float:0 20px 60px #00000070;--shadow-input:0 1px 2px #00000040,0 0 0 1px #ffffff08 inset}html[data-theme-style=fusion]{--bg:#fbfcfd;--bg-panel:#f3f6f7;--bg-elevated:#fff;--bg-hover:#163b4d0a;--bg-selected:#2e6f9520;--bg-subtle:#eef2f3;--border:#dce4e6;--border-strong:#bdcbd0;--text:#263439;--text-muted:#607077;--text-dim:#819096;--accent:#286e98;--accent-hover:#1e5c82;--accent-foreground:#fff;--user-bg:#eaf2f7;--assistant-bg:#fbfcfd;--tool-bg:#f0f5f4;--code-bg:#172126;--status-running:#b35017;--status-waiting:#cf9f1d;--status-unread:#286e98;--status-success:#49805d;--status-warning:#9a6a1a;--status-danger:#b34f58;--status-success-bg:#49805d14;--status-success-border:#49805d59;--status-success-foreground:#fff;--status-warning-bg:#9a6a1a14;--status-warning-border:#9a6a1a66;--status-danger-bg:#b34f5812;--status-danger-border:#b34f5866;--error-text:#a23f49;--diff-added-text:#39704d;--diff-added-bg:#49805d17;--diff-added-border:#49805d99;--diff-removed-text:#a23f49;--diff-removed-bg:#b34f5817;--diff-removed-border:#b34f5899;--diff-hunk-bg:#286e981f;--live-indicator-glow:0 0 6px #49805d99;--focus:#286e98;--focus-ring:#286e9844;--overlay:#18343d30;--shadow-float:0 18px 48px #163b4d20;--shadow-input:0 1px 2px #163b4d12,0 0 0 1px #fff inset}html.dark[data-theme-style=fusion]{--bg:#101719;--bg-panel:#141d20;--bg-elevated:#192428;--bg-hover:#d8edf212;--bg-selected:#6ba7c426;--bg-subtle:#172124;--border:#263337;--border-strong:#46585e;--text:#ced8d8;--text-muted:#8d9c9e;--text-dim:#708084;--accent:#69a7ca;--accent-hover:#7fb8d6;--accent-foreground:#0f1719;--user-bg:#162832;--assistant-bg:#101719;--tool-bg:#121d1f;--code-bg:#0b1113;--status-running:#da7c47;--status-waiting:#ecc94b;--status-unread:#69a7ca;--status-success:#79ad78;--status-warning:#d0a356;--status-danger:#dd777e;--status-success-bg:#79ad781f;--status-success-border:#79ad7870;--status-success-foreground:#101719;--status-warning-bg:#d0a3561f;--status-warning-border:#d0a35670;--status-danger-bg:#dd777e1f;--status-danger-border:#dd777e7a;--error-text:#ed8f95;--diff-added-text:#91c590;--diff-added-bg:#79ad781f;--diff-added-border:#79ad78b3;--diff-removed-text:#ed8f95;--diff-removed-bg:#dd777e24;--diff-removed-border:#dd777eb3;--diff-hunk-bg:#69a7ca24;--live-indicator-glow:0 0 6px #79ad78b3;--focus:#69a7ca;--focus-ring:#69a7ca55;--overlay:#0009;--shadow-float:0 20px 60px #0006;--shadow-input:0 1px 2px #0000003d,0 0 0 1px #ffffff08 inset}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}body,html{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:Aptos,Segoe UI Variable,Noto Sans SC,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px}body{height:100dvh}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace}code,pre{font-family:var(--font-mono)}.chat-selectable,.compaction-file-list,.markdown-code-block,.markdown-code-body,code,pre{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}.markdown-body{color:var(--text);word-break:break-word;font-size:14px;line-height:1.72}.markdown-body.markdown-body--extension{font-size:inherit;color:inherit;line-height:1.5}.markdown-body.markdown-body--extension p{margin:0 0 4px}.markdown-body.markdown-body--extension p:last-child{margin-bottom:0}.markdown-body.markdown-body--extension h1,.markdown-body.markdown-body--extension h2,.markdown-body.markdown-body--extension h3,.markdown-body.markdown-body--extension h4,.markdown-body.markdown-body--extension h5,.markdown-body.markdown-body--extension h6{margin:0 0 4px;font-size:1em;font-weight:650;line-height:1.35}.markdown-body.markdown-body--extension ol,.markdown-body.markdown-body--extension ul{margin:2px 0 4px}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--text);letter-spacing:0;margin:10px 0 5px;font-weight:600;line-height:1.35}.markdown-body h1{font-size:1.16em}.markdown-body h2{font-size:1.08em}.markdown-body h3{color:var(--text);font-size:.98em}@supports (color:color-mix(in lab,red,red)){.markdown-body h3{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body ol,.markdown-body ul{margin:5px 0 8px;padding-left:22px;list-style-position:outside}.markdown-body li{margin:3px 0;padding-left:2px}.markdown-body ul>li{list-style-type:disc}.markdown-body ol>li{list-style-type:decimal}.markdown-body li>p{margin:0}.markdown-body li::marker{color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body li::marker{color:color-mix(in srgb,var(--accent) 72%,var(--text-muted))}}.markdown-body li::marker{font-weight:600}.markdown-body strong{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body strong{color:color-mix(in srgb,var(--text) 88%,var(--accent))}}.markdown-body strong{font-weight:700}.markdown-body em{color:var(--text-muted)}.markdown-body a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body a{-webkit-text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}}.markdown-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.markdown-body .markdown-inline-code{background:var(--bg-subtle);color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);border-radius:5px;padding:1px 5px;font-size:.92em}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 70%,transparent)}}.markdown-body .contains-task-list{padding-left:0;list-style:none}.markdown-body .task-list-item{padding-left:25px;display:block;position:relative}.markdown-body .task-list-item::marker{content:""}.markdown-body .task-list-item>input[type=checkbox],.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child{appearance:none;border:1px solid var(--border);background:var(--bg);border-radius:4px;place-content:center;width:14px;height:14px;margin:0;display:inline-grid;position:absolute;top:.35em;left:0}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:color-mix(in srgb,var(--accent) 55%,var(--border))}}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}}.markdown-body .task-list-item>input[type=checkbox]:checked:before,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked:before{content:"";border:solid var(--accent);border-width:0 1.5px 1.5px 0;width:4px;height:8px;transform:rotate(45deg)translateY(-1px)}.markdown-body blockquote{border-left:3px solid var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-body blockquote{border-left:3px solid color-mix(in srgb,var(--border) 75%,var(--text-muted))}}.markdown-body blockquote{background:var(--bg-subtle);color:var(--text-muted);border-radius:0 6px 6px 0;margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:var(--radius-md);-webkit-touch-callout:default;width:100%;margin:8px 0}.markdown-table-scroll,.markdown-table-wrap{cursor:text;-webkit-user-select:text;user-select:text}.markdown-table-scroll{overflow:visible}.markdown-table-row{border-bottom:1px solid var(--border);align-items:stretch;font-size:13px;display:grid}.markdown-table-body .markdown-table-row:last-child{border-bottom:0}.markdown-table-td,.markdown-table-th{text-align:left;cursor:text;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text;-webkit-touch-callout:default;min-width:0;padding:6px 10px}.markdown-table-th{background:var(--bg-panel);color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-table-th{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-table-th{font-weight:650}.markdown-table-body .markdown-table-row:nth-child(2n) .markdown-table-td{background:var(--bg-subtle)}.markdown-body hr{background:linear-gradient(90deg,transparent,var(--border),transparent);border:none;height:1px;margin:12px 0}.markdown-body .katex-display{margin:.6em 0;padding:2px 0;overflow:auto hidden}.markdown-body .katex{font-size:1.05em}.markdown-user-message p{white-space:pre-wrap}.markdown-custom-message{line-height:1.32}.markdown-custom-message p{margin:0}.markdown-custom-message h1,.markdown-custom-message h2,.markdown-custom-message h3,.markdown-custom-message h4,.markdown-custom-message h5,.markdown-custom-message h6{margin:4px 0 2px;line-height:1.18}.markdown-custom-message ol,.markdown-custom-message ul{margin:2px 0 3px}.markdown-custom-message li{margin:0}.markdown-custom-message blockquote{margin:3px 0;padding:4px 8px}.markdown-custom-message .markdown-code-block,.markdown-custom-message .markdown-table-wrap{margin:4px 0}.markdown-compaction-message{line-height:1.5}.markdown-compaction-message p{margin:0 0 7px}.markdown-compaction-message h1,.markdown-compaction-message h2,.markdown-compaction-message h3,.markdown-compaction-message h4,.markdown-compaction-message h5,.markdown-compaction-message h6{margin:8px 0 3px;line-height:1.25}.markdown-compaction-message ol,.markdown-compaction-message ul{margin:4px 0 8px}.markdown-compaction-message li{margin:2px 0}.markdown-compaction-message .markdown-code-block,.markdown-compaction-message .markdown-table-wrap{margin:6px 0}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);margin-top:10px;padding-top:8px;font-size:12px}.compaction-file-details summary{cursor:pointer;font-weight:600;line-height:1.4}.compaction-file-section{margin-top:8px}.compaction-file-title{color:var(--text);margin-bottom:4px;font-size:11px;font-weight:650}.compaction-file-list{overscroll-behavior:auto;touch-action:auto;border:1px solid var(--border);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);border-radius:6px;margin:0;padding:7px 8px;font-size:11px;line-height:1.45;list-style:none;overflow:auto}.compaction-file-list li{overflow-wrap:anywhere}.compaction-file-list li+li{margin-top:3px}.markdown-code-block{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--code-bg);box-shadow:none;margin:6px 0;position:relative;overflow:hidden}.markdown-code-body{overscroll-behavior:auto;touch-action:auto;max-height:min(320px,45vh);overflow:auto}@media (max-width:640px){.markdown-code-body{max-height:min(240px,32vh)}}.markdown-code-header{background:var(--bg-panel);padding:5px 10px}@supports (color:color-mix(in lab,red,red)){.markdown-code-header{background:color-mix(in srgb,var(--bg-panel) 88%,var(--code-bg))}}.markdown-code-header{border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;gap:8px;font-size:11px;display:flex}.markdown-code-lang{color:var(--text-muted);font-family:var(--font-mono);font-weight:650}.markdown-code-actions{align-items:center;gap:6px;display:flex}.markdown-code-action{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;border-radius:5px;padding:2px 7px;font-size:11px;line-height:1.25}.markdown-code-action:hover:not(:disabled){color:var(--text);border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action:hover:not(:disabled){border-color:color-mix(in srgb,var(--border) 70%,var(--text-muted))}}.markdown-code-action:disabled{color:var(--text-dim);cursor:not-allowed;opacity:var(--disabled-opacity)}.chat-input-shell:focus-within{border-color:var(--focus)!important;box-shadow:var(--shadow-input),0 0 0 3px var(--focus-ring)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{box-shadow:var(--shadow-input),0 0 0 3px color-mix(in srgb,var(--focus-ring) 72%,transparent)!important}}.markdown-code-action.is-active{background:var(--bg-selected);color:var(--text)}.mermaid-block{background:var(--bg);padding:12px;overflow-x:auto}@supports (color:color-mix(in lab,red,red)){.mermaid-block{background:color-mix(in srgb,var(--bg) 92%,var(--bg-panel))}}.mermaid-block svg{max-width:none;display:block}.mermaid-block-loading{min-height:120px}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.file-viewer-toolbar{min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta{text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.file-viewer-controls{gap:6px}.file-viewer-action-slot{flex:0 0 24px;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:5px;height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-size:11px;font-weight:500}.file-viewer-mode-button:first-child{border-left:0}.file-viewer-mode-button:hover{filter:brightness(1.08)}.file-viewer-icon-button{box-sizing:border-box;border:1px solid var(--border);width:24px;height:24px;flex:0 0 24px}.file-viewer-icon-button:hover{color:var(--text);background:var(--bg-hover)!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.file-viewer-meta{display:none}}@media (max-width:380px){.file-viewer-toolbar{gap:6px!important;padding-inline:8px!important}.file-viewer-mode-button{padding-inline:6px}}.markdown-file-preview h1{font-size:1.8em}.markdown-file-preview h2{font-size:1.4em}.markdown-file-preview h3{font-size:1.15em}.markdown-file-preview p{margin:0 0 12px}.markdown-file-preview pre{border:1px solid var(--border);border-radius:6px;margin:12px 0;padding:12px 16px;font-size:13px;overflow-x:auto}.markdown-file-preview code,.markdown-file-preview pre{background:var(--bg-panel);font-family:var(--font-mono)}.markdown-file-preview code{border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes sidebar-running-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(-6px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-5px)scale(.995)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}}.chat-jump-bottom{z-index:45;border:1px solid var(--border);background:var(--bg-panel);width:32px;height:32px;color:var(--text-muted);cursor:pointer;opacity:0;pointer-events:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .15s,transform .15s,background-color .15s,color .15s;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)translateY(6px)scale(.92);box-shadow:0 1px 2px #0f172a0f,0 8px 24px -12px #0f172a2e}.chat-jump-bottom.is-visible{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)scale(1)}.chat-jump-bottom:hover{background:var(--bg-hover);color:var(--text)}@media (prefers-reduced-motion:reduce){.chat-jump-bottom,.chat-jump-bottom.is-visible{transition:opacity .001ms;transform:translate(-50%)}}@keyframes saved-pop{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-success) 55%,transparent);transform:scale(1)}40%{box-shadow:0 0 0 6px color-mix(in srgb,var(--status-success) 25%,transparent);transform:scale(1.08)}to{transform:scale(1);box-shadow:0 0 #0000}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-dragging{transition:none}.sidebar-container.sidebar-open{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-closed{width:0;min-width:0;border-right:none!important}.sidebar-inner{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}}.sidebar-inner{flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex}.sidebar-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;right:0}.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.sidebar-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.sidebar-resize-handle{display:none}}.chat-column-resize-layer{pointer-events:none;z-index:31;position:absolute;top:0;bottom:0}.chat-column-resize-handle{cursor:col-resize;pointer-events:auto;touch-action:none;border-radius:3px;width:6px;position:absolute;top:0;bottom:0}.chat-column-resize-handle.dragging,.chat-column-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.chat-column-resize-handle.dragging,.chat-column-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.chat-column-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.chat-column-resize-layer{display:none}}.sidebar-pagination-btn{height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:11px;transition:background .12s,color .12s;display:inline-flex}.sidebar-pagination-btn:hover{background:var(--bg-hover);color:var(--text)}.sidebar-pagination-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (min-width:641px){.workspace-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.workspace-container.workspace-dragging{transition:none}.workspace-container.workspace-closed{border-left:none!important}}@media (max-width:640px){.chat-stats-center{display:none!important}.sidebar-container{width:280px;max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;transform:translate(-100%)}.changes-panel{z-index:300;transition:transform .25s,box-shadow .25s;inset:0;border-left:none!important;width:100%!important;min-width:0!important;position:fixed!important}.changes-panel.changes-panel-open{transform:translate(0);box-shadow:-4px 0 20px #00000026}.changes-panel.changes-panel-closed{box-shadow:none;transform:translate(100%)}.changes-panel>.changes-panel{height:100%;box-shadow:none;transition:none;position:relative;left:auto;right:auto;transform:none;width:100%!important}.changes-panel-resize-handle{display:none!important}.workspace-container{transition:transform .25s,box-shadow .25s;top:0;bottom:0;right:0;width:100%!important;min-width:0!important;position:fixed!important}.workspace-container.workspace-open{transform:translate(0);box-shadow:-4px 0 20px #00000026}.workspace-container.workspace-closed{box-shadow:none;transform:translate(100%);border-left:none!important}.workspace-container>.workspace-inner{width:100%!important;min-width:0!important}}.sidebar-icon-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.sidebar-icon-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.sidebar-icon-btn:active:not(:disabled){background:var(--bg-selected)}.sidebar-icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar-icon-btn:disabled{color:var(--text-dim)}@media (hover:hover) and (pointer:fine){.sidebar-indent-indicator{opacity:0;pointer-events:none}.sidebar-row:focus-within>.sidebar-indent-indicator,.sidebar-row:hover>.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-row:focus-within .sidebar-indicator-icon,.sidebar-row:hover .sidebar-indicator-icon{opacity:0;pointer-events:none}}@media (hover:none),(pointer:coarse){.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-indicator-icon{opacity:0;pointer-events:none}}.sidebar-chevron-always{opacity:1;pointer-events:auto}.sidebar-indicator-icon{transition:opacity .12s}.extension-panel-overlay{z-index:95;padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));background:var(--overlay);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.extension-panel-inline{background:var(--bg);flex-shrink:0;justify-content:center;display:flex}.extension-panel-shell{border:1px solid var(--accent);flex-direction:column;max-height:min(52vh,560px);display:flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.extension-panel-shell{border:1px solid color-mix(in srgb,var(--accent) 18%,var(--border))}}.extension-panel-shell{background:var(--bg-panel);box-shadow:0 16px 40px var(--text);border-radius:12px}@supports (color:color-mix(in lab,red,red)){.extension-panel-shell{box-shadow:0 16px 40px color-mix(in srgb,var(--text) 12%,transparent)}}.extension-panel-shell{font-family:inherit}.extension-panel-shell--overlay{max-height:min(760px,calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom)))}.extension-panel-header{border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:44px;padding:8px 12px 8px 14px;display:flex}.extension-panel-title{overscroll-behavior:contain;min-width:0;max-height:min(30vh,240px);color:var(--text);flex:1;font-size:14px;font-weight:650;line-height:1.4;overflow-y:auto}.extension-panel-shell--expanded{max-height:min(78vh,900px)}.extension-panel-shell--expanded .extension-panel-title{max-height:60vh}.extension-panel-header-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.extension-panel-header{cursor:pointer;-webkit-user-select:none;user-select:none}.extension-panel-header:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.extension-panel-header:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}}.extension-panel-header:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.extension-panel-chevron{color:var(--text-dim);flex-shrink:0;align-items:center;transition:transform .15s;display:inline-flex}.extension-panel-chevron.is-expanded{transform:rotate(90deg)}@media (prefers-reduced-motion:reduce){.extension-panel-chevron{transition:none}}.extension-panel-body{overscroll-behavior:auto;touch-action:auto;min-height:0;color:var(--text);-webkit-user-select:text;user-select:text;flex:auto;padding:12px 14px;font-size:14px;line-height:1.55;overflow-y:auto}.extension-panel-footer{border-top:1px solid var(--border);background:var(--bg-subtle);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;display:flex}.extension-panel-hint,.extension-panel-status{color:var(--text-dim);margin-left:auto;font-size:12px;line-height:1.4}.extension-panel-copy{color:var(--text-muted);overflow-wrap:anywhere;font-size:14px;line-height:1.55}.extension-panel-editor{border:1px solid var(--border);background:var(--bg);width:100%;min-height:120px;max-height:320px;resize:vertical;box-sizing:border-box;border-radius:8px;outline:none;padding:10px 12px;line-height:1.55;display:block;overflow-y:auto}.extension-panel-ansi,.extension-panel-editor{color:var(--text);font-family:var(--font-mono);font-size:13px}.extension-panel-ansi{white-space:pre;-webkit-user-select:text;user-select:text;margin:0;line-height:1.5;overflow-x:auto}.extension-panel-keytrap{opacity:0;pointer-events:none;border:0;width:1px;height:1px;padding:0;position:absolute}.extension-option-list{flex-direction:column;gap:8px;display:flex}.extension-option-btn{border:1px solid var(--border);background:var(--bg);width:100%;min-height:40px;color:var(--text);font:inherit;text-align:left;white-space:normal;overflow-wrap:anywhere;cursor:pointer;border-radius:8px;padding:10px 12px;font-size:14px;line-height:1.45;overflow:hidden}.extension-option-btn:hover:not(:disabled){background:var(--bg-hover)}.extension-option-btn:disabled{color:var(--text-dim);cursor:not-allowed}@media (max-width:640px){.extension-panel-shell{max-height:min(70vh,calc(100dvh - 24px - env(safe-area-inset-bottom)))}.extension-panel-shell--expanded{max-height:calc(100dvh - 96px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}.extension-panel-shell--expanded .extension-panel-title{max-height:56vh}.extension-card-btn,.extension-option-btn{min-height:44px}}.extension-card-btn{border:1px solid var(--border);background:var(--bg);min-height:36px;color:var(--text-muted);font:inherit;cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-size:13px;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.extension-card-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.extension-card-btn:disabled{cursor:not-allowed;opacity:.55}.extension-card-btn--primary{background:var(--accent);color:var(--accent-foreground);border-color:#0000}.extension-card-btn--primary:hover:not(:disabled){background:var(--accent);color:var(--accent-foreground);filter:brightness(1.06)}.guide-selectors{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:10px;display:flex}.guide-selector{background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:5px;height:28px;padding:0 6px;transition:background .12s,border-color .12s;display:inline-flex}.guide-selector:hover{background:var(--bg-hover)}.guide-selector:focus-within{background:var(--bg-hover);border-color:var(--accent)}.guide-selector-icon{color:var(--text-dim);flex-shrink:0}.guide-select{width:160px;min-width:0;max-width:160px;color:var(--text);font:inherit;cursor:pointer;text-overflow:ellipsis;background:0 0;border:none;outline:none;font-size:12.5px}.guide-select:disabled{color:var(--text-dim);cursor:default}@media (max-width:640px){.guide-selectors{flex-wrap:nowrap}.guide-selector{flex:1;min-width:0}.guide-select{width:100%;max-width:none}}.sidebar-icon-btn--active,.sidebar-icon-btn--active:hover:not(:disabled){background:var(--bg-selected);color:var(--accent)}.sidebar-icon-btn--danger:hover:not(:disabled){background:var(--status-danger-bg);color:var(--status-danger)}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:color-mix(in srgb,var(--status-success) 18%,transparent)}}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){color:var(--status-success)}.sidebar-row .sidebar-icon-btn--hover{opacity:0}.sidebar-row .sidebar-icon-btn--hover:focus-visible,.sidebar-row:focus-within .sidebar-icon-btn--hover,.sidebar-row:hover .sidebar-icon-btn--hover{opacity:1}@media (max-width:640px){.sidebar-toolbar{gap:12px!important}}.settings-layout{height:min(72dvh,660px);min-height:0;display:flex}.settings-nav-list{flex-direction:column;gap:2px;padding:10px 8px;display:flex}.settings-nav-item{border-radius:var(--radius-sm);width:100%;color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;font-size:13px;font-weight:400;transition:background .12s,color .12s;display:flex;position:relative}.settings-nav-item:hover{background:var(--bg-hover);color:var(--text)}.settings-nav-item.is-active{background:var(--bg-selected);color:var(--text);font-weight:600}.settings-nav-item.is-active:before{border-radius:var(--radius-pill);background:var(--accent);content:"";width:2px;position:absolute;top:7px;bottom:7px;left:3px}.settings-content-pane,.settings-scroll-region{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.settings-content-pane{background:var(--bg);overflow:hidden}.settings-scroll-region{scrollbar-gutter:stable;overflow-y:auto}.settings-page-content{width:min(100%,700px);padding:24px 28px 32px}.settings-choice{margin-bottom:26px}.settings-segmented-control{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-panel);width:fit-content;max-width:100%;box-shadow:var(--shadow-input);gap:2px;padding:3px;display:flex}.settings-segmented-option{border-radius:var(--radius-sm);min-width:96px;height:32px;color:var(--text-muted);white-space:nowrap;cursor:pointer;background:0 0;border:none;padding:0 14px;font-size:12.5px;transition:background .12s,color .12s,box-shadow .12s}.settings-segmented-option:hover{color:var(--text)}.settings-segmented-option.is-active{background:var(--bg-elevated);color:var(--text);box-shadow:0 1px 3px var(--text)}@supports (color:color-mix(in lab,red,red)){.settings-segmented-option.is-active{box-shadow:0 1px 3px color-mix(in srgb,var(--text) 12%,transparent)}}.settings-segmented-option.is-active{font-weight:600}.settings-empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;height:100%;padding:32px 24px;display:flex}.app-top-bar{border-bottom:1px solid var(--border);background:var(--bg-panel);flex-shrink:0;align-items:center;height:36px;display:flex}.session-lineage{margin-left:6px;font-size:12px}.session-lineage,.session-lineage-crumbs{align-items:center;gap:2px;min-width:0;display:flex}.session-lineage-crumbs{overflow:hidden}.session-lineage-gap,.session-lineage-sep{color:var(--text-dim);flex-shrink:0}.session-lineage-crumb,.session-lineage-current{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:180px;padding:0 2px;overflow:hidden}.session-lineage-crumb{color:var(--text-muted);font:inherit;cursor:pointer;background:0 0;border:none}.session-lineage-crumb:hover{color:var(--text)}.session-lineage-crumb:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-current{color:var(--text);align-items:center;gap:4px;display:inline-flex}.session-lineage-trigger{height:24px;color:var(--text-muted);font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;flex-shrink:0;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.session-lineage-trigger:hover,.session-lineage-trigger[aria-expanded=true]{background:var(--bg-selected);color:var(--text)}.session-lineage-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-trigger-label{white-space:nowrap}.session-lineage-trigger-running{white-space:nowrap;color:var(--status-warning)}.session-lineage-title{min-width:0;max-width:260px;height:24px;color:var(--text);font:inherit;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.session-lineage-title:hover,.session-lineage-title[aria-expanded=true]{background:var(--bg-selected)}.session-lineage-title:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-title .session-lineage-trigger-label{text-overflow:ellipsis;overflow:hidden}.session-lineage-dot{background:var(--status-success);border-radius:50%;flex-shrink:0;width:6px;height:6px}.session-lineage-panel{padding:4px 0}.session-lineage-note{color:var(--status-warning);padding:2px 10px 6px;font-size:11px}.session-lineage-row{height:28px;color:var(--text-muted);cursor:pointer;outline:none;align-items:center;gap:6px;padding-right:10px;display:flex}.session-lineage-row:hover{background:var(--bg-selected);color:var(--text)}.session-lineage-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-lineage-row.is-current{color:var(--text)}.session-lineage-row.needs-attention{color:var(--status-warning)}.session-lineage-row-toggle{width:14px;height:14px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.session-lineage-row-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.session-lineage-row-tag{border:1px solid var(--border);color:var(--text-dim);border-radius:999px;flex-shrink:0;padding:0 5px;font-size:10px}.session-lineage-row-attention{color:var(--status-warning);flex-shrink:0;font-size:11px}.session-lineage-row-meta{color:var(--text-dim);font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto;font-size:11px}.workspace-header{border-bottom:1px solid var(--border);align-items:center;gap:4px;height:40px;padding:0 8px 0 12px}.changes-panel,.workspace-header{background:var(--bg-panel);flex-shrink:0;display:flex}.changes-panel{border-left:1px solid var(--border);flex-direction:column;align-self:stretch;min-width:0;height:100%;min-height:0;position:relative;overflow:hidden}.changes-panel>.changes-panel{border-left:none;flex:auto;height:100%;min-height:0;width:100%!important;min-width:0!important}.changes-panel-content{flex:1;grid-template-rows:minmax(120px,36%) minmax(0,1fr);min-height:0;display:grid}.changes-panel-diff,.changes-panel-list{min-height:0;overflow:auto}.changes-panel-list{border-bottom:1px solid var(--border)}.changes-panel-hint{color:var(--text-dim);padding:18px 14px;font-size:11.5px;line-height:1.5}.changes-panel-hint.is-error{color:var(--status-danger)}.changes-panel-resize-handle{z-index:10;cursor:col-resize;touch-action:none;width:6px;position:absolute;top:0;bottom:0;left:-3px}.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.secondary-panel-inner{flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.secondary-panel-tabs{flex:none;min-width:0;min-height:0}.secondary-panel-body{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex;overflow:hidden}.workspace-navigation-rail{border-left:1px solid var(--border);background:var(--bg);flex-direction:column;align-items:center;gap:4px;padding:8px 0;display:flex}.workspace-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;left:0}.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}@media (max-width:640px){.workspace-resize-handle{display:none}}.file-row-actions{background:var(--bg-panel);border:1px solid var(--border);opacity:0;visibility:hidden;border-radius:6px;align-items:center;gap:2px;padding:1px;transition:opacity .12s,visibility .12s;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.file-row{border-radius:var(--radius-xs);transition:background .12s}.file-row:focus-within,.file-row:hover{background:var(--bg-hover)}.file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.file-row-actions:has([data-menu-open=true]),.file-row:focus-within .file-row-actions,.file-row:hover .file-row-actions{opacity:1;visibility:visible}.file-row-action-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:background .12s,color .12s;display:inline-flex}.file-row-action-btn:hover{background:var(--bg-hover);color:var(--text)}.file-row-action-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (pointer:coarse){.file-row-actions{opacity:1;visibility:visible}.file-row .file-row-badge{display:none}}.git-file-row{cursor:pointer;width:100%;height:26px;color:var(--text);text-align:left;border-radius:var(--radius-xs);background:0 0;border:none;align-items:center;gap:6px;padding:0 8px;font-size:12px;transition:background .12s,color .12s;display:flex}.git-file-row:hover{background:var(--bg-hover)}.git-file-row.is-selected{background:var(--bg-selected);color:var(--text)}.git-file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (hover:none),(pointer:coarse){.sidebar-row .sidebar-icon-btn--hover{opacity:1}.sidebar-icon-btn{width:28px;height:28px;position:relative}.sidebar-icon-btn:after{content:"";position:absolute;inset:-4px -2px}}@media (max-width:640px){.app-top-bar{height:44px}.app-top-bar>button:not(.app-top-bar-stats){width:44px!important;height:44px!important}.app-top-bar-stats{min-width:0;max-width:min(48vw,168px);overflow:hidden;gap:4px!important;height:44px!important;padding:0 8px!important}.app-top-bar-stats>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.session-lineage{margin-left:4px}.session-lineage-crumbs{max-width:28vw}.session-lineage-crumb,.session-lineage-current{max-width:84px}.session-lineage-title{max-width:42vw}.session-lineage-trigger-running{display:none}.session-lineage-row{height:34px}.workspace-header{height:44px;padding-right:6px}.workspace-header .sidebar-icon-btn,.workspace-navigation-rail .sidebar-icon-btn{width:36px;height:36px}.workspace-navigation-rail{gap:8px;padding-top:8px}.settings-layout{height:min(78dvh,680px)}.settings-nav-list{padding:10px}.settings-page-content{padding:20px 16px 28px}.settings-segmented-control{width:100%;overflow-x:auto}.settings-segmented-option{flex:1 0 auto;min-width:0;height:40px}.chat-input-shell{padding:9px 8px 9px 12px!important}.chat-input-shell button{min-height:40px}.file-row{min-height:44px}.file-row>svg{width:12px;height:12px}.file-row-icon svg{width:18px;height:18px}.file-row-action-btn{width:32px;height:32px}}.message-file-action-btn{min-width:28px;min-height:28px}.message-file-open-btn{min-height:28px}@media (pointer:coarse){.message-file-action-btn{min-width:40px;min-height:40px}.message-file-open-btn{min-height:40px}}.sidebar-row .sidebar-icon-btn--hover.sidebar-icon-btn--active{opacity:1}@media (hover:none),(pointer:coarse){.sidebar-chevron-btn:after{content:"";position:absolute;inset:-5px -3px}}.file-viewer-toolbar{min-width:0}.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;min-width:72px;overflow:hidden}.file-viewer-meta{white-space:nowrap;flex-shrink:0}.file-viewer-controls{flex-shrink:0;align-items:center;gap:3px;margin-left:auto;display:flex}.file-viewer-icon-button{width:26px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.file-viewer-icon-button:hover:not(:disabled),.file-viewer-icon-button[data-active=true]{color:var(--text);background:var(--bg-selected);border-color:var(--border)}.file-viewer-icon-button.is-save:not(:disabled){color:var(--accent)}.file-close-confirm__button:focus-visible,.file-editor-notice button:focus-visible,.file-viewer-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.file-viewer-icon-button:disabled{opacity:.34;cursor:not-allowed}.file-viewer-toolbar-separator{background:var(--border);flex:none;width:1px;height:16px;margin:0 2px}.file-viewer-live-indicator{border-radius:50%;flex:none;width:6px;height:6px}.file-source-editor{box-sizing:border-box;resize:none;background:var(--bg);width:100%;min-width:max-content;height:100%;min-height:0;color:var(--text);caret-color:var(--accent);font-family:var(--font-mono);tab-size:2;white-space:pre;border:0;outline:0;flex:auto;margin:0;padding:14px 18px;font-size:13px;line-height:1.6;display:block;overflow:auto}.file-source-editor.is-wrapped{white-space:pre-wrap;overflow-wrap:anywhere;min-width:100%}.file-close-confirm,.file-editor-notice{border-bottom:1px solid var(--border);background:var(--accent);align-items:center;gap:10px;min-height:34px;padding:5px 10px 5px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.file-close-confirm,.file-editor-notice{background:color-mix(in srgb,var(--accent) 7%,var(--bg-panel))}}.file-close-confirm,.file-editor-notice{color:var(--text-muted);flex:none;font-size:11.5px}.file-editor-notice.is-warning{background:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{background:color-mix(in srgb,var(--status-warning) 10%,var(--bg-panel))}}.file-editor-notice.is-warning{color:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{color:color-mix(in srgb,var(--status-warning) 72%,var(--text))}}.file-editor-notice.is-error{background:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-error{background:color-mix(in srgb,var(--status-danger) 9%,var(--bg-panel))}}.file-editor-notice.is-error{color:var(--status-danger)}.file-editor-notice.is-success{background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-success{background:color-mix(in srgb,var(--status-success) 8%,var(--bg-panel))}}.file-editor-notice.is-success{color:var(--status-success)}.file-editor-notice__actions{align-items:center;gap:5px;margin-left:auto;display:flex}.file-close-confirm__button,.file-editor-notice button{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--text-muted);font:inherit;cursor:pointer;white-space:nowrap;border-radius:5px;padding:2px 8px}.file-close-confirm__button:hover,.file-editor-notice button:hover{color:var(--text);background:var(--bg-hover)}.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{color:var(--status-danger);border-color:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{border-color:color-mix(in srgb,var(--status-danger) 35%,var(--border))}}.file-close-confirm{background:var(--status-warning);min-height:36px}@supports (color:color-mix(in lab,red,red)){.file-close-confirm{background:color-mix(in srgb,var(--status-warning) 7%,var(--bg-panel))}}.file-close-confirm__message{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-right:auto;overflow:hidden}.file-close-confirm__button{align-items:center;gap:5px;display:inline-flex}.file-tab-dirty-dot{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 2px var(--accent);border-radius:50%}@supports (color:color-mix(in lab,red,red)){.file-tab-dirty-dot{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 12%,transparent)}}.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:file-editor-pulse .9s ease-in-out infinite alternate}.file-save-spinner{border:2px solid var(--accent);width:11px;height:11px}@supports (color:color-mix(in lab,red,red)){.file-save-spinner{border:2px solid color-mix(in srgb,var(--accent) 28%,transparent)}}.file-save-spinner{border-top-color:var(--accent);border-radius:50%;animation-name:file-editor-spin;animation-duration:.65s;animation-timing-function:linear;animation-iteration-count:infinite}.file-viewer-context-label{z-index:2;border-bottom:1px solid var(--border);background:var(--bg-panel);color:var(--text-dim);padding:5px 12px;font-size:10.5px;position:sticky;top:0}@keyframes file-editor-spin{to{transform:rotate(1turn)}}@keyframes file-editor-pulse{to{opacity:.45}}@media (max-width:640px){.file-viewer-toolbar{gap:6px!important;padding-left:8px!important;padding-right:0!important}.file-viewer-meta{display:none}.file-viewer-controls{scrollbar-width:none;max-width:68vw;padding-right:8px;overflow-x:auto}.file-viewer-controls::-webkit-scrollbar{display:none}.file-close-confirm,.file-editor-notice{flex-wrap:wrap;align-items:flex-start}.file-editor-notice__actions{width:100%;margin-left:0}.file-close-confirm__message{flex-basis:100%;width:100%}.file-close-confirm__button span{display:none}.file-close-confirm__button{justify-content:center;width:28px;padding:0}.file-source-editor{padding:12px}}@media (prefers-reduced-motion:reduce){.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:none}}.pidance-terminal-surface{background:var(--bg)}.pidance-terminal-xterm{min-width:0;min-height:0}.pidance-terminal-xterm .xterm{height:100%}.pidance-terminal-xterm .xterm-viewport{background:0 0!important}.pidance-terminal-xterm .xterm-screen{background:0 0}.tool-row-running{position:relative;overflow:hidden}.tool-row-running:after{content:"";pointer-events:none;background:linear-gradient(90deg,transparent 0,var(--status-running) 42%,var(--status-running) 50%,var(--status-running) 58%,transparent 100%);position:absolute;inset:0}@supports (color:color-mix(in lab,red,red)){.tool-row-running:after{background:linear-gradient(90deg,transparent 0,color-mix(in srgb,var(--status-running) 18%,transparent) 42%,color-mix(in srgb,var(--status-running) 32%,transparent) 50%,color-mix(in srgb,var(--status-running) 18%,transparent) 58%,transparent 100%)}}.tool-row-running:after{animation:tool-row-sweep 1.6s linear infinite;transform:translate(-100%)}@keyframes tool-row-sweep{to{transform:translate(100%)}}@media (prefers-reduced-motion:reduce){.tool-row-running:after{opacity:.4;animation:none;transform:none}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
package/README.en.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  Pidance is an open-source web client for the [Pi](https://github.com/badlogic/pi-mono) coding agent. It reads local Pi session files directly and preserves Pi SDK session and runtime semantics, bringing live chat, project files, Git, subagents, and configuration into one browser workspace. Pi remains the source of truth for data and execution semantics; Pidance provides a clearer and more complete interface.
12
12
 
13
- > Current version: `0.2.39` · npm package: `@henlii/pidance` · CLI: `pidance`
13
+ > Current version: `0.2.40` · npm package: `@henlii/pidance` · CLI: `pidance`
14
14
 
15
15
  ## Design principles
16
16
 
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  Pidance 是面向 [Pi](https://github.com/badlogic/pi-mono) coding agent 的开源 Web 客户端。它直接读取本机 Pi 会话文件,并沿用 Pi SDK 的会话与运行时语义,把实时对话、项目文件、Git、工作树、子代理和配置管理汇集到一个浏览器工作区。Pi 仍是数据与执行语义的事实来源;Pidance 负责提供更清晰、更完整的操作界面。
12
12
 
13
- > 当前版本:`0.2.39` · npm 包:`@henlii/pidance` · CLI:`pidance`
13
+ > 当前版本:`0.2.40` · npm 包:`@henlii/pidance` · CLI:`pidance`
14
14
 
15
15
  ## 设计原则
16
16
 
@@ -4,6 +4,7 @@
4
4
  const { existsSync, realpathSync } = require("fs");
5
5
  const { WebSocketServer } = require("ws");
6
6
  const { resolveShell } = require("./pty-shell.cjs");
7
+ const { killPtyProcess, disposeWorkerChild } = require("./pty-process.cjs");
7
8
  const ptyWss = new WebSocketServer({ noServer: true });
8
9
 
9
10
  function sanitizeEnv(env) {
@@ -68,17 +69,57 @@ function startPtySession(options) {
68
69
  dispose: () => {
69
70
  if (disposed) return;
70
71
  disposed = true;
72
+ killPtyProcess(proc);
73
+ },
74
+ };
75
+ }
76
+
77
+ const PTY_HEARTBEAT_MS = 30_000;
78
+ const PTY_HEARTBEAT_MAX_MISSED = 2;
79
+ // 取舍:看的是 WebSocket 协议级 ping/pong(浏览器自动回 pong),**不是**终端有没有输出,
80
+ // 所以前台跑 `sleep 600` 之类不会因为「没输出」被判死。代价是:手机锁屏后网络栈不再回 pong,
81
+ // 连续 3 拍(约 90 秒)没有任何 pong 就会 terminate → 面板重连时是**新** shell。
82
+ // 要更宽松就调大这两个常量;不要改成按终端输出判活(那会杀掉长任务)。
83
+
84
+ /**
85
+ * 判断这条连接是真死还是只是安静:手机掉网、进程被冻住时 TCP 不会发 FIN,
86
+ * 服务端会一直攥着 ws 和它背后的 shell(孤儿进程,还占着端口/内存)。
87
+ * 按 ping/pong 收尾,连续几轮没有 pong 就 terminate(触发 close → dispose)。
88
+ * 计时器与 readyState 判定可注入,单测用假计时器驱动。
89
+ */
90
+ function startPtyHeartbeat(ws, options = {}) {
91
+ const intervalMs = options.intervalMs ?? PTY_HEARTBEAT_MS;
92
+ const maxMissed = options.maxMissed ?? PTY_HEARTBEAT_MAX_MISSED;
93
+ const setIntervalFn = options.setIntervalFn ?? setInterval;
94
+ const clearIntervalFn = options.clearIntervalFn ?? clearInterval;
95
+ const isOpen = options.isOpen ?? (() => ws.readyState === 1);
96
+ let missedPongs = 0;
97
+ const onPong = () => {
98
+ missedPongs = 0;
99
+ };
100
+ ws.on("pong", onPong);
101
+ const timer = setIntervalFn(() => {
102
+ if (!isOpen()) return;
103
+ if (missedPongs >= maxMissed) {
71
104
  try {
72
- if (proc.pid > 0) process.kill(-proc.pid, "SIGTERM");
73
- } catch {
74
- /* 进程组可能已不在 */
75
- }
76
- try {
77
- proc.kill("SIGTERM");
105
+ ws.terminate();
78
106
  } catch {
79
- /* 已退出 */
107
+ /* 已断开 */
80
108
  }
81
- },
109
+ return;
110
+ }
111
+ missedPongs += 1;
112
+ try {
113
+ ws.ping();
114
+ } catch {
115
+ /* 已断开 */
116
+ }
117
+ }, intervalMs);
118
+ // unref:别让心跳计时器把进程吊在退出前。
119
+ if (timer && typeof timer.unref === "function") timer.unref();
120
+ return () => {
121
+ clearIntervalFn(timer);
122
+ if (typeof ws.off === "function") ws.off("pong", onPong);
82
123
  };
83
124
  }
84
125
 
@@ -86,10 +127,13 @@ function attachPtyToWebSocket(ws, cwd) {
86
127
  const { spawn } = require("child_process");
87
128
  const path = require("path");
88
129
  const workerPath = path.join(__dirname, "pty-worker.js");
130
+ let disposed = false;
89
131
  const child = spawn(process.execPath, [workerPath, cwd, "80", "24"], {
90
132
  stdio: ["pipe", "pipe", "pipe"],
91
133
  env: process.env,
92
134
  });
135
+ // stdin 在子进程已退出后写入会异步抛 EPIPE:这里吞掉,避免拆连接时崩服务端。
136
+ child.stdin.on("error", () => {});
93
137
  child.stderr.setEncoding("utf8");
94
138
  child.stderr.on("data", (data) => console.warn("[pidance] pty-worker stderr", data));
95
139
  child.on("error", (error) => console.warn("[pidance] pty-worker spawn", error.message));
@@ -98,7 +142,10 @@ function attachPtyToWebSocket(ws, cwd) {
98
142
  write: (data) => child.stdin.write(`${JSON.stringify({ type: "in", d: data })}\n`),
99
143
  resize: (cols, rows) => child.stdin.write(`${JSON.stringify({ type: "rs", cols, rows })}\n`),
100
144
  dispose: () => {
101
- try { child.kill("SIGTERM"); } catch { /* ignore */ }
145
+ if (disposed) return;
146
+ disposed = true;
147
+ // 先请 worker 自己收尾,再按平台决定强杀时机(Windows 上不能同拍强杀,见 disposeWorkerChild)。
148
+ disposeWorkerChild(child);
102
149
  },
103
150
  };
104
151
  child.stdout.setEncoding("utf8");
@@ -135,8 +182,14 @@ function attachPtyToWebSocket(ws, cwd) {
135
182
  if (parsed && parsed.type === "in" && typeof parsed.d === "string") session.write(parsed.d);
136
183
  if (parsed && parsed.type === "rs" && parsed.cols > 0 && parsed.rows > 0) session.resize(parsed.cols, parsed.rows);
137
184
  });
138
- ws.on("close", () => session.dispose());
139
- ws.on("error", () => session.dispose());
185
+ // 心跳与 dispose 一起收:连接没了就别再 ping(也避免计时器残留)。
186
+ const stopHeartbeat = startPtyHeartbeat(ws);
187
+ const disposeSession = () => {
188
+ stopHeartbeat();
189
+ session.dispose();
190
+ };
191
+ ws.on("close", disposeSession);
192
+ ws.on("error", disposeSession);
140
193
  try { ws.send(JSON.stringify({ type: "out", d: "\r\n[pidance] terminal ready\r\n" })); } catch { /* ignore */ }
141
194
  return session;
142
195
  }
@@ -148,4 +201,4 @@ function completePtyUpgrade(req, socket, head, cwd) {
148
201
  });
149
202
  }
150
203
 
151
- module.exports = { startPtySession, tryLoadNodePty, resolvePtyCwd, attachPtyToWebSocket, completePtyUpgrade };
204
+ module.exports = { startPtySession, tryLoadNodePty, resolvePtyCwd, attachPtyToWebSocket, completePtyUpgrade, startPtyHeartbeat };
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * PTY 子进程的收尾规则(bin/pty-manager.cjs 与 bin/pty-worker.js 共用一份)。
5
+ *
6
+ * 为什么不能只 `proc.kill(signal)`:node-pty 的 Unix 实现就是只杀那一个 pid
7
+ * (`node_modules/node-pty/lib/unixTerminal.js` 的 `kill` 里是 `process.kill(this.pid, signal)`),
8
+ * 而 shell 在**同一进程组**里起的后代(例如 `sh -c "sleep 600 & wait"` 那种同组后台作业)会被留下。
9
+ *
10
+ * forkpty 会让 shell 成为会话/进程组组长,所以先补一刀 `-pid` 打整组,再按 pid 收尾
11
+ * (组长可能已不在,两步都要容错)。
12
+ *
13
+ * 边界(别把组杀想得比它更大):交互式 bash 里直接敲的 `sleep 600 &` 会被 job control 放进
14
+ * **另一个**进程组,`kill(-shellPid)` **打不中**它 —— 逃出会话组的后代本来就要按 SID 遍历进程树才收得掉,
15
+ * 那是平台相关的产品取舍,这里不做。
16
+ *
17
+ * Windows 上 `process.kill(-pid)` 会抛错(不支持杀进程组),而 node-pty 的
18
+ * `WindowsTerminal.kill(signal)` 在真正清理(`_close()` / `_agent.kill()`)**之前**就
19
+ * `throw new Error("Signals not supported on windows.")`(`node_modules/node-pty/lib/windowsTerminal.js`)——
20
+ * 所以 win32 必须**不传 signal** 地调用 `kill()`,否则那条真正的 ConPTY 清理会被空 catch 当成「已经退出」吞掉。
21
+ */
22
+ function killPtyProcess(proc, signal = "SIGTERM", platform = process.platform) {
23
+ if (!proc || !(proc.pid > 0)) return;
24
+ // 进程组那一刀只在支持它的平台做(Windows 传负 pid 会抛)。
25
+ if (platform !== "win32") {
26
+ try {
27
+ process.kill(-proc.pid, signal);
28
+ } catch {
29
+ /* 进程组可能已不在 */
30
+ }
31
+ }
32
+ if (typeof proc.kill === "function") {
33
+ try {
34
+ // Windows:不能传 signal,否则 node-pty 在真正清理前就抛错(见文件头)。
35
+ if (platform === "win32") proc.kill();
36
+ else proc.kill(signal);
37
+ } catch {
38
+ /* 已退出 */
39
+ }
40
+ }
41
+ }
42
+
43
+ /**
44
+ * 请 pty-worker 自己收尾(发一条 {type:"bye"} 帧)。
45
+ * 为什么不能只靠 child.kill:Windows 上 Node 会忽略信号种类直接强杀 worker,
46
+ * worker 里的信号处理跑不到 → node-pty 的真实清理也跑不到。帧发不出去就返回 false,
47
+ * 由调用方继续走强杀兜底。
48
+ */
49
+ function requestWorkerShutdown(child) {
50
+ try {
51
+ if (!child || !child.stdin || child.stdin.writable === false) return false;
52
+ child.stdin.write(`${JSON.stringify({ type: "bye" })}\n`);
53
+ return true;
54
+ } catch {
55
+ return false;
56
+ }
57
+ }
58
+
59
+ /** 请 worker 自己收尾之后等它退出的上限(Windows 上必须等:见 disposeWorkerChild)。 */
60
+ const WORKER_SHUTDOWN_GRACE_MS = 2000;
61
+
62
+ /**
63
+ * 关掉一条终端时收尾 pty-worker。
64
+ *
65
+ * Linux:worker 收到 SIGTERM 会跑自己的 shutdown(killPtyProcess + exit),所以直接发信号。
66
+ * Windows:`child.kill` 会**忽略信号种类、强制结束**(Node 文档:similar to SIGKILL),
67
+ * 同一次同步调用里就把 worker 结束了 —— 它下一次事件循环才会读到 stdin,所以先写 bye 帧再立刻
68
+ * 强杀等于 bye 从来没送到,worker 里的 node-pty 真实清理也跑不到。因此 win32 上先发 bye,
69
+ * 让它自己退出;只有超时未退才强杀。
70
+ */
71
+ function disposeWorkerChild(child, options = {}) {
72
+ const platform = options.platform ?? process.platform;
73
+ const graceMs = options.graceMs ?? WORKER_SHUTDOWN_GRACE_MS;
74
+ const setTimer = options.setTimer ?? setTimeout;
75
+ const clearTimer = options.clearTimer ?? clearTimeout;
76
+ const kill = () => {
77
+ try {
78
+ child.kill("SIGTERM");
79
+ } catch {
80
+ /* 已退出 */
81
+ }
82
+ };
83
+ // 只在真的要等它的平台上发 bye 帧:非 win32 的路径与改动前逐字一致(就一次 SIGTERM)。
84
+ if (platform === "win32" && requestWorkerShutdown(child)) {
85
+ const timer = setTimer(kill, graceMs);
86
+ if (timer && typeof timer.unref === "function") timer.unref();
87
+ if (typeof child.once === "function") child.once("exit", () => clearTimer(timer));
88
+ return;
89
+ }
90
+ kill();
91
+ }
92
+
93
+ const PARENT_WATCH_MS = 5000;
94
+ /** 连续探不到父进程几次才收尾(见 startParentWatchdog)。 */
95
+ const PARENT_WATCH_MISSES = 2;
96
+
97
+ /**
98
+ * 父进程被硬杀(SIGKILL / 崩溃 / 被强制结束)时不会发 SIGTERM,PTY worker 会连同
99
+ * 它下面的 shell 一起变成孤儿 —— 实测:改前(没有看护)worker 在父进程被 SIGKILL
100
+ * 之后一直活着,改后退出。定期确认父进程还在,不在了就收尾。
101
+ * 依赖与计时器可注入,单测用假计时器驱动。
102
+ */
103
+ function startParentWatchdog(options = {}) {
104
+ const parentPid = options.parentPid ?? process.ppid;
105
+ const intervalMs = options.intervalMs ?? PARENT_WATCH_MS;
106
+ const missThreshold = options.missThreshold ?? PARENT_WATCH_MISSES;
107
+ const setIntervalFn = options.setIntervalFn ?? setInterval;
108
+ const clearIntervalFn = options.clearIntervalFn ?? clearInterval;
109
+ // 只看「进程不存在」(ESRCH):EPERM 是「存在但不是我们能碰的」,绝不能当死亡,
110
+ // 否则一次权限异常就会在 5 秒后拆掉用户的终端。
111
+ const isAlive = options.isAlive ?? ((pid) => {
112
+ try {
113
+ process.kill(pid, 0);
114
+ return true;
115
+ } catch (error) {
116
+ return error && error.code === "EPERM";
117
+ }
118
+ });
119
+ const onGone = options.onGone ?? (() => {});
120
+ // 连续两次探不到才收尾:杀错(拆掉用户正在用的终端)比晚 5 秒收尾严重得多。
121
+ let missed = 0;
122
+ const timer = setIntervalFn(() => {
123
+ if (isAlive(parentPid)) {
124
+ missed = 0;
125
+ return;
126
+ }
127
+ missed += 1;
128
+ if (missed >= missThreshold) onGone();
129
+ }, intervalMs);
130
+ // unref:看护计时器不该把进程吊住,worker 是靠 pty 活着的。
131
+ if (timer && typeof timer.unref === "function") timer.unref();
132
+ return () => clearIntervalFn(timer);
133
+ }
134
+
135
+ module.exports = { killPtyProcess, startParentWatchdog, requestWorkerShutdown, disposeWorkerChild };
package/bin/pty-worker.js CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  const pty = require("node-pty");
5
5
  const { resolveShell } = require("./pty-shell.cjs");
6
+ const { killPtyProcess, startParentWatchdog } = require("./pty-process.cjs");
6
7
 
7
8
  const cwd = process.argv[2] || process.cwd();
8
9
  const cols = Number(process.argv[3]) || 80;
@@ -48,10 +49,23 @@ process.stdin.on("data", (chunk) => {
48
49
  try { msg = JSON.parse(line); } catch { continue; }
49
50
  if (msg.type === "in" && typeof msg.d === "string") proc.write(msg.d);
50
51
  if (msg.type === "rs" && msg.cols > 0 && msg.rows > 0) proc.resize(msg.cols, msg.rows);
52
+ // 父进程请求收尾:Windows 上 child.kill 会忽略信号种类直接强杀 worker,
53
+ // worker 侧的信号处理跑不到,所以正常关闭走这条显式请求。
54
+ if (msg.type === "bye") shutdown();
51
55
  }
52
56
  });
53
57
 
54
- process.on("SIGTERM", () => {
55
- try { proc.kill("SIGTERM"); } catch { /* ignore */ }
58
+ // 收尾:Linux 走父进程的 SIGTERM / SIGINT,Windows 走父进程发来的 bye 帧
59
+ // (那边 child.kill 会忽略信号种类直接强杀,信号处理跑不到);异常路径由下面的父进程看护兜底。
60
+ let exiting = false;
61
+ const shutdown = () => {
62
+ if (exiting) return;
63
+ exiting = true;
64
+ killPtyProcess(proc);
56
65
  process.exit(0);
57
- });
66
+ };
67
+ process.on("SIGTERM", shutdown);
68
+ process.on("SIGINT", shutdown);
69
+ // 父进程真的没了才收尾:stdin EOF 不等于父进程退出(写端关闭就会 EOF,
70
+ // 而父进程可能还在),所以这里看的是父进程本身还在不在。
71
+ startParentWatchdog({ onGone: shutdown });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@henlii/pidance",
3
- "version": "0.2.39",
3
+ "version": "0.2.40",
4
4
  "description": "Pidance:面向 Pi coding agent 的开源 Web 客户端",
5
5
  "homepage": "https://github.com/henlii/pidance#readme",
6
6
  "repository": {