@kmugalkhod/lightcode 0.18.3 → 0.18.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@
7
7
  <meta name="theme-color" content="#0B0B0C" />
8
8
  <title>Lightcode</title>
9
9
 
10
- <link rel="stylesheet" crossorigin href="./index-yyexfy77.css"><script type="module" crossorigin src="./index-p8rvcn3g.js"></script></head>
10
+ <link rel="stylesheet" crossorigin href="./index-5dh9c5av.css"><script type="module" crossorigin src="./index-89rgdkry.js"></script></head>
11
11
  <body>
12
12
  <!--
13
13
  THESIS: One local coding workspace shared with the CLI; this surface rejects dashboard-card clutter and keeps the project conversation central.
package/cli.js CHANGED
@@ -124,7 +124,7 @@ var init_logger = __esm(() => {
124
124
  });
125
125
 
126
126
  // packages/shared/src/version.ts
127
- var lightcodeVersion = "0.18.3";
127
+ var lightcodeVersion = "0.18.5";
128
128
 
129
129
  // packages/shared/src/index.ts
130
130
  var productName = "Lightcode";
@@ -2485,7 +2485,7 @@ var init_schema8 = __esm(() => {
2485
2485
 
2486
2486
  // packages/ai/src/read-file/schema.ts
2487
2487
  import { z as z18 } from "zod";
2488
- var readFileDescription = "Read file content from the working directory. Prefer a startLine/endLine range over whole files \u2014 large files are truncated head+tail.", readFileInputSchema, readFileProviderInputSchema, readFileOutputSchema;
2488
+ var readFileDescription = "Read file content from the working directory. Each call returns about 6,000 characters (roughly 150 lines); longer content is truncated head+tail. Small files: read them whole. Long files: find the spot with grep first, then read a startLine/endLine range of about 100-150 lines around it.", readFileInputSchema, readFileProviderInputSchema, readFileOutputSchema;
2489
2489
  var init_schema9 = __esm(() => {
2490
2490
  init_base_schemas();
2491
2491
  readFileInputSchema = z18.object({
@@ -3608,7 +3608,7 @@ ${environmentContext.trim()}` : "");
3608
3608
  var cwdPromptPlaceholder = "{cwd}", defaultCodingAgentSystemPrompt, toolCallingDisciplineAddendum;
3609
3609
  var init_coding_agent_prompt = __esm(() => {
3610
3610
  init_coding_agent_modes();
3611
- defaultCodingAgentSystemPrompt = "You are a coding agent working inside the user's project at this working directory: {cwd}. " + 'You can already see the project \u2014 proactively read it. When the user asks you to review, explain, or work on "my code"/"this", inspect the working directory yourself with list_files, glob_search, grep, and read_file; NEVER ask the user to paste or share code that lives in this directory \u2014 open it. ' + "Use tools for filesystem and codebase tasks instead of guessing, and only interact with files under the working directory. " + "Prefer dedicated tools \u2014 glob_search for paths, grep for text search, structured git tools for repository inspection \u2014 and bash only when those are not enough. " + "Check the available skill descriptions for every task. When a skill is explicitly named or clearly matches the task, load it with the skill tool before acting and follow its instructions within the user's scope and tool permissions. Skill files may be installed outside the workspace; use the skill tool to read their relative supporting resources. Never claim to have used a skill you have not loaded. " + `Inspect context before risky operations. Progress notes: before a major tool action you may emit ONE short note (one sentence, ~15 words) saying what you are about to do. After a tool returns, mention a finding only if it changes your plan, and state it as fact grounded in what the tool actually returned \u2014 cite the file/line/symbol. NEVER claim you found, changed, or fixed something before a tool result confirms it. Skip notes for routine reads, and do not restate the todo list in prose.
3611
+ defaultCodingAgentSystemPrompt = "You are a coding agent working inside the user's project at this working directory: {cwd}. " + 'You can already see the project \u2014 proactively read it. When the user asks you to review, explain, or work on "my code"/"this", inspect the working directory yourself with list_files, glob_search, grep, and read_file; NEVER ask the user to paste or share code that lives in this directory \u2014 open it. ' + "Use tools for filesystem and codebase tasks instead of guessing, and only interact with files under the working directory. " + "Prefer dedicated tools \u2014 glob_search for paths, grep for text search, structured git tools for repository inspection \u2014 and bash only when those are not enough. " + "Gather context efficiently \u2014 every tool round trip costs the user seconds. Locate before you read: use grep or glob_search to find the relevant files and line numbers, then read those regions in generous ranges (about 100-150 lines) instead of many small slices or re-reading the same file. When several reads or searches do not depend on each other, request them together in one step. Skip generated output (dist/, build/, minified bundles, node_modules) unless the task is about it. Stop exploring once you have enough evidence to act or answer. " + "Check the available skill descriptions for every task. When a skill is explicitly named or clearly matches the task, load it with the skill tool before acting and follow its instructions within the user's scope and tool permissions. Skill files may be installed outside the workspace; use the skill tool to read their relative supporting resources. Never claim to have used a skill you have not loaded. " + `Inspect context before risky operations. Progress notes: before a major tool action you may emit ONE short note (one sentence, ~15 words) saying what you are about to do. After a tool returns, mention a finding only if it changes your plan, and state it as fact grounded in what the tool actually returned \u2014 cite the file/line/symbol. NEVER claim you found, changed, or fixed something before a tool result confirms it. Skip notes for routine reads, and do not restate the todo list in prose.
3612
3612
 
3613
3613
  ` + `Task list discipline \u2014 use the todo_write tool to keep a visible, evolving checklist:
3614
3614
  ` + `- Create the list FIRST. For any task with roughly three or more distinct steps, or any multi-file or multi-stage work, call todo_write as your very first action \u2014 before reading or editing \u2014 with every step listed and all of them set to pending.
@@ -3623,7 +3623,7 @@ var init_coding_agent_prompt = __esm(() => {
3623
3623
  ` + `When the task is complete, end with a short summary (a few lines) grounded in the todos you actually completed and the real file diffs \u2014 name the files you edited, do not list steps you did not verify, and do not repeat the todo card verbatim. If anything is incomplete or you are blocked, say so plainly.
3624
3624
 
3625
3625
  ` + "Long-running processes (dev servers, watchers): never run them as plain foreground bash \u2014 the bash tool enforces a timeout and will kill them. Start them detached with output redirected to a log " + '(Windows: start /B cmd /c "npm run dev > dev.log 2>&1"; Unix: nohup npm run dev > dev.log 2>&1 &), then read the log to confirm startup and the actual port (do not assume the default). ' + "Never kill processes or free ports you did not open yourself.";
3626
- toolCallingDisciplineAddendum = "Invoke tools only through the function-calling interface. " + "Never write tool calls as XML or plain text such as <tool_call>, <function_call>, <invoke>, or bare JSON in your message. " + "Tool arguments must be valid JSON matching the tool's schema. " + "Call one tool at a time and wait for its result before deciding the next step.";
3626
+ toolCallingDisciplineAddendum = "Invoke tools only through the function-calling interface. " + "Never write tool calls as XML or plain text such as <tool_call>, <function_call>, <invoke>, or bare JSON in your message. " + "Tool arguments must be valid JSON matching the tool's schema. " + "You may request several independent tool calls in one response; wait for their results before making calls that depend on them.";
3627
3627
  });
3628
3628
 
3629
3629
  // packages/ai/src/common/coerce-tool-input.ts
@@ -7688,12 +7688,19 @@ async function artifactizeLargeToolOutputs(messages, options = {}) {
7688
7688
  if (previewCharacters < MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS) {
7689
7689
  throw new RangeError(`Tool-output artifact previews must allow at least ${MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS} characters.`);
7690
7690
  }
7691
+ const currentTurnThreshold = Math.max(0, Math.floor(options.currentTurnThresholdCharacters ?? thresholdCharacters));
7692
+ let currentTurnStart = 0;
7693
+ messages.forEach((message, index) => {
7694
+ if (message.role === "user")
7695
+ currentTurnStart = index + 1;
7696
+ });
7691
7697
  const uniqueArtifacts = new Map;
7692
7698
  let artifactizedOutputs = 0;
7693
7699
  let savedCharacters = 0;
7694
7700
  const providerMessages = [];
7695
- for (const message of messages) {
7701
+ for (const [index, message] of messages.entries()) {
7696
7702
  options.signal?.throwIfAborted();
7703
+ const limit = index >= currentTurnStart ? currentTurnThreshold : thresholdCharacters;
7697
7704
  if (!Array.isArray(message.content)) {
7698
7705
  providerMessages.push(message);
7699
7706
  continue;
@@ -7707,7 +7714,7 @@ async function artifactizeLargeToolOutputs(messages, options = {}) {
7707
7714
  }
7708
7715
  const output = part.output;
7709
7716
  const serialized = serializeToolResultOutput(output);
7710
- if (serialized.length <= thresholdCharacters) {
7717
+ if (serialized.length <= limit) {
7711
7718
  providerContent.push(part);
7712
7719
  continue;
7713
7720
  }
@@ -7791,7 +7798,7 @@ async function toolOutputArtifactExists(handleOrDigest, dataDir = getLightcodeDa
7791
7798
  throw error;
7792
7799
  }
7793
7800
  }
7794
- var TOOL_OUTPUT_ARTIFACT_HANDLE_PREFIX = "lightcode-artifact://tool-output/sha256/", DEFAULT_TOOL_OUTPUT_ARTIFACT_THRESHOLD_CHARACTERS, DEFAULT_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 2400, MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 512, SHA256_PATTERN, ARTIFACT_PREVIEW_MARKER = "[Lightcode tool-output artifact]";
7801
+ var TOOL_OUTPUT_ARTIFACT_HANDLE_PREFIX = "lightcode-artifact://tool-output/sha256/", DEFAULT_TOOL_OUTPUT_ARTIFACT_THRESHOLD_CHARACTERS, DEFAULT_CURRENT_TURN_TOOL_OUTPUT_THRESHOLD_CHARACTERS = 16000, DEFAULT_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 2400, MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 512, SHA256_PATTERN, ARTIFACT_PREVIEW_MARKER = "[Lightcode tool-output artifact]";
7795
7802
  var init_tool_output_artifacts = __esm(() => {
7796
7803
  init_src();
7797
7804
  DEFAULT_TOOL_OUTPUT_ARTIFACT_THRESHOLD_CHARACTERS = DEFAULT_TOOL_TEXT_OUTPUT_CHARS;
@@ -9210,7 +9217,8 @@ function createCodingAgent({
9210
9217
  originalInputTokens: context.originalInputTokens
9211
9218
  });
9212
9219
  const artifactized = await artifactizeLargeToolOutputs(messages, {
9213
- signal: context.assemblyAbortSignal
9220
+ signal: context.assemblyAbortSignal,
9221
+ currentTurnThresholdCharacters: DEFAULT_CURRENT_TURN_TOOL_OUTPUT_THRESHOLD_CHARACTERS
9214
9222
  });
9215
9223
  const assembled = assembler.assembleModelMessages(artifactized.messages, {
9216
9224
  preserveRecentTokens: context.preserveRecentTokens
@@ -16805,6 +16813,7 @@ __export(exports_runtime, {
16805
16813
  DEFAULT_PRUNE_QUANTIZE_USER_TURNS: () => DEFAULT_PRUNE_QUANTIZE_USER_TURNS,
16806
16814
  DEFAULT_PRUNE_MIN_OUTPUT_CHARS: () => DEFAULT_PRUNE_MIN_OUTPUT_CHARS,
16807
16815
  DEFAULT_INPUT_BUDGET_SAFETY_FRACTION: () => DEFAULT_INPUT_BUDGET_SAFETY_FRACTION,
16816
+ DEFAULT_CURRENT_TURN_TOOL_OUTPUT_THRESHOLD_CHARACTERS: () => DEFAULT_CURRENT_TURN_TOOL_OUTPUT_THRESHOLD_CHARACTERS,
16808
16817
  DEFAULT_CONTEXT_WINDOW_TOKENS: () => DEFAULT_CONTEXT_WINDOW_TOKENS,
16809
16818
  CheckpointConflictError: () => CheckpointConflictError,
16810
16819
  ANTHROPIC_TOOL_OPTIONAL_PARAMETER_BUDGET: () => ANTHROPIC_TOOL_OPTIONAL_PARAMETER_BUDGET
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kmugalkhod/lightcode",
3
- "version": "0.18.3",
3
+ "version": "0.18.5",
4
4
  "description": "Lightcode — a local AI coding agent with terminal and browser interfaces.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/server.js CHANGED
@@ -2002,7 +2002,7 @@ var init_schema8 = __esm(() => {
2002
2002
 
2003
2003
  // packages/ai/src/read-file/schema.ts
2004
2004
  import { z as z19 } from "zod";
2005
- var readFileDescription = "Read file content from the working directory. Prefer a startLine/endLine range over whole files \u2014 large files are truncated head+tail.", readFileInputSchema, readFileProviderInputSchema, readFileOutputSchema;
2005
+ var readFileDescription = "Read file content from the working directory. Each call returns about 6,000 characters (roughly 150 lines); longer content is truncated head+tail. Small files: read them whole. Long files: find the spot with grep first, then read a startLine/endLine range of about 100-150 lines around it.", readFileInputSchema, readFileProviderInputSchema, readFileOutputSchema;
2006
2006
  var init_schema9 = __esm(() => {
2007
2007
  init_base_schemas();
2008
2008
  readFileInputSchema = z19.object({
@@ -3068,7 +3068,7 @@ ${environmentContext.trim()}` : "");
3068
3068
  var cwdPromptPlaceholder = "{cwd}", defaultCodingAgentSystemPrompt, toolCallingDisciplineAddendum;
3069
3069
  var init_coding_agent_prompt = __esm(() => {
3070
3070
  init_coding_agent_modes();
3071
- defaultCodingAgentSystemPrompt = "You are a coding agent working inside the user's project at this working directory: {cwd}. " + 'You can already see the project \u2014 proactively read it. When the user asks you to review, explain, or work on "my code"/"this", inspect the working directory yourself with list_files, glob_search, grep, and read_file; NEVER ask the user to paste or share code that lives in this directory \u2014 open it. ' + "Use tools for filesystem and codebase tasks instead of guessing, and only interact with files under the working directory. " + "Prefer dedicated tools \u2014 glob_search for paths, grep for text search, structured git tools for repository inspection \u2014 and bash only when those are not enough. " + "Check the available skill descriptions for every task. When a skill is explicitly named or clearly matches the task, load it with the skill tool before acting and follow its instructions within the user's scope and tool permissions. Skill files may be installed outside the workspace; use the skill tool to read their relative supporting resources. Never claim to have used a skill you have not loaded. " + `Inspect context before risky operations. Progress notes: before a major tool action you may emit ONE short note (one sentence, ~15 words) saying what you are about to do. After a tool returns, mention a finding only if it changes your plan, and state it as fact grounded in what the tool actually returned \u2014 cite the file/line/symbol. NEVER claim you found, changed, or fixed something before a tool result confirms it. Skip notes for routine reads, and do not restate the todo list in prose.
3071
+ defaultCodingAgentSystemPrompt = "You are a coding agent working inside the user's project at this working directory: {cwd}. " + 'You can already see the project \u2014 proactively read it. When the user asks you to review, explain, or work on "my code"/"this", inspect the working directory yourself with list_files, glob_search, grep, and read_file; NEVER ask the user to paste or share code that lives in this directory \u2014 open it. ' + "Use tools for filesystem and codebase tasks instead of guessing, and only interact with files under the working directory. " + "Prefer dedicated tools \u2014 glob_search for paths, grep for text search, structured git tools for repository inspection \u2014 and bash only when those are not enough. " + "Gather context efficiently \u2014 every tool round trip costs the user seconds. Locate before you read: use grep or glob_search to find the relevant files and line numbers, then read those regions in generous ranges (about 100-150 lines) instead of many small slices or re-reading the same file. When several reads or searches do not depend on each other, request them together in one step. Skip generated output (dist/, build/, minified bundles, node_modules) unless the task is about it. Stop exploring once you have enough evidence to act or answer. " + "Check the available skill descriptions for every task. When a skill is explicitly named or clearly matches the task, load it with the skill tool before acting and follow its instructions within the user's scope and tool permissions. Skill files may be installed outside the workspace; use the skill tool to read their relative supporting resources. Never claim to have used a skill you have not loaded. " + `Inspect context before risky operations. Progress notes: before a major tool action you may emit ONE short note (one sentence, ~15 words) saying what you are about to do. After a tool returns, mention a finding only if it changes your plan, and state it as fact grounded in what the tool actually returned \u2014 cite the file/line/symbol. NEVER claim you found, changed, or fixed something before a tool result confirms it. Skip notes for routine reads, and do not restate the todo list in prose.
3072
3072
 
3073
3073
  ` + `Task list discipline \u2014 use the todo_write tool to keep a visible, evolving checklist:
3074
3074
  ` + `- Create the list FIRST. For any task with roughly three or more distinct steps, or any multi-file or multi-stage work, call todo_write as your very first action \u2014 before reading or editing \u2014 with every step listed and all of them set to pending.
@@ -3083,7 +3083,7 @@ var init_coding_agent_prompt = __esm(() => {
3083
3083
  ` + `When the task is complete, end with a short summary (a few lines) grounded in the todos you actually completed and the real file diffs \u2014 name the files you edited, do not list steps you did not verify, and do not repeat the todo card verbatim. If anything is incomplete or you are blocked, say so plainly.
3084
3084
 
3085
3085
  ` + "Long-running processes (dev servers, watchers): never run them as plain foreground bash \u2014 the bash tool enforces a timeout and will kill them. Start them detached with output redirected to a log " + '(Windows: start /B cmd /c "npm run dev > dev.log 2>&1"; Unix: nohup npm run dev > dev.log 2>&1 &), then read the log to confirm startup and the actual port (do not assume the default). ' + "Never kill processes or free ports you did not open yourself.";
3086
- toolCallingDisciplineAddendum = "Invoke tools only through the function-calling interface. " + "Never write tool calls as XML or plain text such as <tool_call>, <function_call>, <invoke>, or bare JSON in your message. " + "Tool arguments must be valid JSON matching the tool's schema. " + "Call one tool at a time and wait for its result before deciding the next step.";
3086
+ toolCallingDisciplineAddendum = "Invoke tools only through the function-calling interface. " + "Never write tool calls as XML or plain text such as <tool_call>, <function_call>, <invoke>, or bare JSON in your message. " + "Tool arguments must be valid JSON matching the tool's schema. " + "You may request several independent tool calls in one response; wait for their results before making calls that depend on them.";
3087
3087
  });
3088
3088
 
3089
3089
  // packages/ai/src/common/coerce-tool-input.ts
@@ -7080,12 +7080,19 @@ async function artifactizeLargeToolOutputs(messages, options = {}) {
7080
7080
  if (previewCharacters < MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS) {
7081
7081
  throw new RangeError(`Tool-output artifact previews must allow at least ${MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS} characters.`);
7082
7082
  }
7083
+ const currentTurnThreshold = Math.max(0, Math.floor(options.currentTurnThresholdCharacters ?? thresholdCharacters));
7084
+ let currentTurnStart = 0;
7085
+ messages.forEach((message, index) => {
7086
+ if (message.role === "user")
7087
+ currentTurnStart = index + 1;
7088
+ });
7083
7089
  const uniqueArtifacts = new Map;
7084
7090
  let artifactizedOutputs = 0;
7085
7091
  let savedCharacters = 0;
7086
7092
  const providerMessages = [];
7087
- for (const message of messages) {
7093
+ for (const [index, message] of messages.entries()) {
7088
7094
  options.signal?.throwIfAborted();
7095
+ const limit = index >= currentTurnStart ? currentTurnThreshold : thresholdCharacters;
7089
7096
  if (!Array.isArray(message.content)) {
7090
7097
  providerMessages.push(message);
7091
7098
  continue;
@@ -7099,7 +7106,7 @@ async function artifactizeLargeToolOutputs(messages, options = {}) {
7099
7106
  }
7100
7107
  const output = part.output;
7101
7108
  const serialized = serializeToolResultOutput(output);
7102
- if (serialized.length <= thresholdCharacters) {
7109
+ if (serialized.length <= limit) {
7103
7110
  providerContent.push(part);
7104
7111
  continue;
7105
7112
  }
@@ -7131,7 +7138,7 @@ async function artifactizeLargeToolOutputs(messages, options = {}) {
7131
7138
  savedCharacters
7132
7139
  };
7133
7140
  }
7134
- var TOOL_OUTPUT_ARTIFACT_HANDLE_PREFIX = "lightcode-artifact://tool-output/sha256/", DEFAULT_TOOL_OUTPUT_ARTIFACT_THRESHOLD_CHARACTERS, DEFAULT_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 2400, MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 512, SHA256_PATTERN, ARTIFACT_PREVIEW_MARKER = "[Lightcode tool-output artifact]";
7141
+ var TOOL_OUTPUT_ARTIFACT_HANDLE_PREFIX = "lightcode-artifact://tool-output/sha256/", DEFAULT_TOOL_OUTPUT_ARTIFACT_THRESHOLD_CHARACTERS, DEFAULT_CURRENT_TURN_TOOL_OUTPUT_THRESHOLD_CHARACTERS = 16000, DEFAULT_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 2400, MIN_TOOL_OUTPUT_ARTIFACT_PREVIEW_CHARACTERS = 512, SHA256_PATTERN, ARTIFACT_PREVIEW_MARKER = "[Lightcode tool-output artifact]";
7135
7142
  var init_tool_output_artifacts = __esm(() => {
7136
7143
  init_src();
7137
7144
  DEFAULT_TOOL_OUTPUT_ARTIFACT_THRESHOLD_CHARACTERS = DEFAULT_TOOL_TEXT_OUTPUT_CHARS;
@@ -8617,7 +8624,8 @@ function createCodingAgent({
8617
8624
  originalInputTokens: context.originalInputTokens
8618
8625
  });
8619
8626
  const artifactized = await artifactizeLargeToolOutputs(messages, {
8620
- signal: context.assemblyAbortSignal
8627
+ signal: context.assemblyAbortSignal,
8628
+ currentTurnThresholdCharacters: DEFAULT_CURRENT_TURN_TOOL_OUTPUT_THRESHOLD_CHARACTERS
8621
8629
  });
8622
8630
  const assembled = assembler.assembleModelMessages(artifactized.messages, {
8623
8631
  preserveRecentTokens: context.preserveRecentTokens
@@ -14621,7 +14629,8 @@ async function runSubagentToolTask(input, context2, deps) {
14621
14629
  abortSignal: context2.abortSignal,
14622
14630
  prepareStep: async ({ messages }) => {
14623
14631
  const artifactized = await artifactizeLargeToolOutputs(messages, {
14624
- signal: context2.abortSignal
14632
+ signal: context2.abortSignal,
14633
+ currentTurnThresholdCharacters: DEFAULT_CURRENT_TURN_TOOL_OUTPUT_THRESHOLD_CHARACTERS
14625
14634
  });
14626
14635
  const turn = assembler.assembleModelMessages(artifactized.messages, {
14627
14636
  preserveRecentTokens
@@ -1 +0,0 @@
1
- @font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/app/geist-latin.woff2)format(woff2)}:root{--buncss-light: ;--buncss-dark:initial;color-scheme:dark;font-synthesis:none;--base:#0b0b0c;--sidebar:#0e0e0f;--panel:#0b0b0c;--elevated:#1d1d20;--hover:#17171a;--inset:#141416;--border:#262629;--border-soft:#1c1c1f;--border-strong:#36363b;--accent:#5cc8bb;--accent-soft:#5cc8bb1f;--accent-border:#5cc8bb59;--accent-text:#9be3d9;--primary:#ececec;--primary-hover:#fff;--on-primary:#0b0b0c;--text:#ececec;--text-secondary:#a3a3a9;--text-muted:#727279;--text-faint:#55555b;--success:#86cf98;--warning:#e2bd78;--error:#ef8a80;--info:#9db8f2;--focus:#ececec8c;--mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-family:Geist Variable,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0}body{overflow:hidden;background:var(--base);color:var(--text);text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;min-width:320px;font-size:14px;line-height:1.5}button,textarea,input,select{color:inherit;font:inherit}button,select,label,summary{-webkit-tap-highlight-color:transparent}button{border:0}button:not(:disabled),select:not(:disabled),summary{cursor:pointer}label:has(input:not(:disabled)){cursor:pointer}button:disabled,select:disabled,textarea:disabled,input:disabled{cursor:not-allowed;opacity:.5}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}::selection{color:var(--text);background:#2f4d49}*{scrollbar-width:thin;scrollbar-color:#2a2a2e transparent}.sr-only{position:absolute;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0}.app-shell{display:grid;grid-template-columns:252px minmax(0,1fr);background:var(--base);width:100%;height:100dvh}.session-rail{position:relative;z-index:30;display:flex;overflow:hidden;background:var(--sidebar);border-right:1px solid var(--border-soft);flex-direction:column;min-width:0;height:100%}.rail-header{display:flex;justify-content:space-between;align-items: center;min-height:52px;padding:0 10px 0 18px}.brand-lockup{display:flex;color:var(--text);letter-spacing:-.01em;align-items: center;gap:8px;font-size:14px;font-weight:600}.brand-mark,.authorization-mark{display:inline-flex;color:var(--text);justify-content:center;align-items: center}.rail-nav{display:grid;gap:1px;padding:2px 8px 6px}.rail-nav-item{display:flex;color:var(--text-secondary);text-align:left;background:0 0;border-radius:8px;align-items: center;gap:10px;width:100%;min-height:32px;padding:0 10px;transition:background-color .14s ease-out,color .14s ease-out;font-size:13.5px}.rail-nav-item>svg{color:var(--text-muted);flex:none}.rail-nav-item:hover:not(:disabled),.rail-nav-item:focus-within{background:var(--hover);color:var(--text)}.rail-nav-item kbd{color:var(--text-faint);opacity:0;margin-left:auto;transition:opacity .14s ease-out;font-family:inherit;font-size:11px}.rail-nav-item:hover kbd,.rail-nav-item:focus-within kbd{opacity:1}.rail-nav-item:focus-visible kbd{opacity:1}.session-search input{outline:none;background:0 0;border:0;width:100%;min-width:0;padding:6px 0;font-size:13.5px}.session-search input::placeholder{color:var(--text-secondary);opacity:1}.session-search input::-webkit-search-cancel-button{display:none}.project-button-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.rail-section-heading{display:flex;color:var(--text-muted);justify-content:space-between;align-items: center;padding:16px 18px 6px;font-size:12px;font-weight:500}.session-list{overflow-y:auto;scrollbar-color:transparent transparent;flex:1;min-height:80px;padding:0 8px 16px}.session-list:hover{scrollbar-color:#2a2a2e transparent}.session-item{position:relative;display:flex;color:var(--text-secondary);text-align:left;background:0 0;border-radius:8px;align-items: center;gap:10px;width:100%;min-height:32px;padding:0 10px;transition:background-color .14s ease-out,color .14s ease-out;font-size:13.5px}.session-item:hover{background:var(--hover);color:var(--text)}.session-item.active{background:var(--elevated);color:var(--text)}.session-marker{display:none}.session-spinner{border:1.5px solid var(--accent);animation:spin .9s linear infinite;border-top-color:#0000;border-radius:50%;flex:none;width:12px;height:12px}.session-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.rail-state{display:flex;color:var(--text-muted);align-items: flex-start;gap:8px;padding:6px 10px}.rail-state p{margin:0;font-size:12.5px}.rail-state button{background:var(--elevated);border-radius:6px;min-height:28px;padding:2px 10px;font-size:12px}.session-skeleton,.folder-skeleton,.conversation-skeleton{display:grid;gap:12px;padding:12px}.session-skeleton span,.folder-skeleton span,.conversation-skeleton span{display:block;background:var(--elevated);animation:skeleton-pulse 1.4s ease-in-out infinite alternate;border-radius:4px;height:10px}.session-skeleton span:first-child{width:82%}.session-skeleton span:nth-child(2){width:74%}.session-skeleton span:nth-child(3){width:68%}.session-skeleton span:nth-child(4){width:61%}.folder-skeleton span:first-child{width:58%}.folder-skeleton span:nth-child(2){width:71%}.folder-skeleton span:nth-child(3){width:84%}.folder-skeleton span:nth-child(4){width:67%}.folder-skeleton span:nth-child(5){width:79%}.folder-skeleton span:nth-child(6){width:62%}.folder-skeleton span:nth-child(7){width:75%}@keyframes skeleton-pulse{0%{opacity:.45}to{opacity:.95}}.workspace-main{display:flex;overflow:hidden;background:var(--panel);flex-direction:column;min-width:0;min-height:0}.top-bar{display:flex;flex:none;align-items: center;gap:8px;min-height:52px;padding:0 12px 0 22px}.top-bar-title{overflow:hidden;color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;margin:0;font-size:13.5px;font-weight:500}.top-bar-actions{display:flex;flex:0 auto;align-items: center;gap:4px;min-width:0}.top-bar .icon-button{color:var(--text-secondary);width:36px;height:36px}.chat-surface{position:relative;display:flex;overflow:hidden;flex-direction:column;flex:1;min-width:0;min-height:0}.chat-with-changes{display:flex;flex:1;min-height:0}.changes-toggle{display:inline-flex;color:var(--text-muted);background:0 0;border-radius:8px;justify-content:center;align-items: center;gap:6px;min-width:32px;height:32px;padding:0 8px;transition:background-color .14s ease-out,color .14s ease-out;font-size:12px}.changes-toggle:hover,.changes-toggle.active{background:var(--elevated);color:var(--text)}.changes-count{background:var(--elevated);color:var(--text-secondary);font-family:var(--mono);border-radius:999px;padding:0 6px;font-size:10px;line-height:16px}.changes-toggle.active .changes-count{background:var(--border-strong)}.workspace-controls{display:flex;color:var(--text-muted);align-items: center;gap:2px;min-width:0}.workspace-path{display:flex;color:var(--text-secondary);text-align:left;background:0 0;border-radius:8px;align-items: center;gap:7px;min-width:0;max-width:260px;height:32px;padding:0 9px;transition:background-color .14s ease-out,color .14s ease-out;font-size:13px}.workspace-path:hover:not(:disabled){background:var(--elevated);color:var(--text)}.workspace-icon{display:inline-flex;color:var(--text-muted);align-items: center}.workspace-path-copy{min-width:0}.workspace-path-copy strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.workspace-path>svg:last-child{color:var(--text-muted);flex:none}.ribbon-status{display:flex;color:var(--text-muted);white-space:nowrap;align-items: center;gap:7px;margin-right:4px;font-size:12px}.live-dot{display:inline-block;background:var(--warning);border-radius:50%;flex:none;width:6px;height:6px}.live-dot.active{background:var(--accent);animation:live-pulse 1.1s ease-out infinite alternate}@keyframes live-pulse{0%{opacity:.55}to{opacity:1}}.ribbon-model,.ribbon-select{position:relative;display:inline-flex;color:var(--text-muted);white-space:nowrap;background:0 0;border-radius:999px;flex:none;align-items: center;gap:4px;min-width:0;height:32px;padding:0 10px;transition:background-color .14s ease-out,color .14s ease-out;font-size:13px}.ribbon-model{flex-shrink:1;max-width:220px}.ribbon-model>span{overflow:hidden;text-overflow:ellipsis}.ribbon-model>svg,.ribbon-select>svg{opacity:.7;flex:none}.ribbon-model:hover:not(:disabled),.ribbon-select:hover:not(.disabled){background:var(--elevated);color:var(--text)}.ribbon-select select{position:absolute;z-index:1;appearance:none;outline:0;color:inherit;opacity:0;background:0 0;border:0;width:100%;height:100%;font-size:13px;inset:0}.ribbon-select>svg,.ribbon-select-value{pointer-events:none}.ribbon-select-value{min-width:0}.ribbon-select.disabled{opacity:.55}.ribbon-select select:focus-visible{outline:0}.ribbon-select:focus-within{outline:2px solid var(--focus);outline-offset:1px}.changes-panel{display:flex;border-left:1px solid var(--border);background:var(--base);flex-direction:column;flex:none;width:min(460px,38vw);min-width:320px;min-height:0}@media (max-width:1099px){.changes-panel{position:fixed;z-index:75;width:min(460px,100vw);min-width:0;inset:0 0 0 auto;box-shadow:-18px 0 44px #00000080}}.changes-panel-header{display:flex;border-bottom:1px solid var(--border-soft);align-items: center;gap:8px;min-height:50px;padding:8px 10px 8px 14px}.changes-panel-header h2{display:flex;color:var(--text);align-items: center;gap:7px;margin:0;font-size:13px;font-weight:650}.changes-branch{overflow:hidden;color:var(--text-muted);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;margin-right:auto;font-size:11px}.changes-list{overflow-y:auto;list-style:none;flex:none;max-height:42%;margin:0;padding:6px}.changes-row{display:grid;grid-template-columns:20px minmax(0,1fr)auto;color:var(--text-secondary);text-align:left;background:0 0;border-radius:7px;align-items: center;gap:8px;width:100%;min-height:40px;padding:5px 8px}.changes-row:hover,.changes-row.selected{background:var(--elevated);color:var(--text)}.change-kind{font-family:var(--mono);text-align:center;font-size:11px;font-weight:700}.change-kind.created,.change-kind.untracked{color:var(--success)}.change-kind.modified,.change-kind.renamed{color:var(--warning)}.change-kind.deleted{color:var(--error)}.changes-path{display:grid;min-width:0}.changes-path strong,.changes-path small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.changes-path strong{font-size:12px;font-weight:600}.changes-path small{color:var(--text-muted);font-family:var(--mono);font-size:10px}.changes-stats{display:inline-flex;font-family:var(--mono);gap:6px;font-size:10px}.changes-stats .added{color:var(--success)}.changes-stats .removed{color:var(--error)}.changes-diff{overflow:auto;border-top:1px solid var(--border-soft);flex:1;min-height:0;padding:10px}.changes-diff .diff-view{font-family:var(--mono);white-space:pre;margin:0;font-size:11px;line-height:1.55}.changes-state,.changes-hint{display:flex;color:var(--text-muted);align-items: center;gap:8px;margin:0;padding:14px;font-size:12px}.changes-state p{margin:0}.conversation-scroll{overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;flex:1;min-height:0}.conversation-column{width:min(100%,760px);margin:0 auto;padding-inline-start:24px;padding-inline-end:24px}.conversation-scroll>.conversation-column{display:flex;flex-direction:column;min-height:100%;padding-top:20px;padding-bottom:32px}.conversation-empty{display:grid;text-align:center;justify-items:center;margin:auto 0;padding:48px 0 80px}.conversation-empty h2,.authorization-gate h1{color:var(--text);letter-spacing:-.02em;margin:0;font-size:24px;font-weight:500;line-height:1.25}.conversation-empty p{color:var(--text-muted);max-width:52ch;margin:10px 0 0;font-size:14.5px}.chat-message{display:grid;grid-template-columns:minmax(0,1fr);content-visibility:auto;contain-intrinsic-size:auto 160px;padding:12px 0}.streaming-message-text p{white-space:pre-wrap}.chat-message.role-user{justify-items:end;padding-top:20px}.role-user .message-parts{background:var(--elevated);border-radius:18px;max-width:min(80%,600px);padding:10px 16px}.role-user .message-text{font-size:14.5px;line-height:1.6}.message-parts{min-width:0}.message-text{color:var(--text);font-size:15px;line-height:1.7}.message-text p{white-space:normal;overflow-wrap:anywhere;max-width:72ch;margin:0 0 15px}.message-text p:last-child{margin-bottom:0}.message-text :-webkit-any(h1,h2,h3,h4,h5,h6){color:var(--text);letter-spacing:-.018em;max-width:46ch;margin:28px 0 12px;font-size:22px;font-weight:680;line-height:1.3}.message-text :-moz-any(h1,h2,h3,h4,h5,h6){color:var(--text);letter-spacing:-.018em;max-width:46ch;margin:28px 0 12px;font-size:22px;font-weight:680;line-height:1.3}.message-text :is(h1,h2,h3,h4,h5,h6){color:var(--text);letter-spacing:-.018em;max-width:46ch;margin:28px 0 12px;font-size:22px;font-weight:680;line-height:1.3}.message-text h2{font-size:20px}.message-text :-webkit-any(h3,h4,h5,h6){font-size:17px}.message-text :-moz-any(h3,h4,h5,h6){font-size:17px}.message-text :is(h3,h4,h5,h6){font-size:17px}.message-text>:first-child{margin-top:0}.message-text>:last-child{margin-bottom:0}.message-parts>.message-text+.message-text{margin-top:20px}.message-text li>p{margin-bottom:8px}.message-text hr{border:0;border-top:1px solid var(--border);margin-block-start:24px;margin-block-end:24px}.message-text .task-list-item{list-style:none}.message-text input[type=checkbox]{accent-color:var(--accent);margin-right:8px}.markdown-table-scroll{overflow-x:auto;border:1px solid var(--border);border-radius:8px;max-width:100%;margin-block-start:20px;margin-block-end:20px}.markdown-table-scroll table{border-collapse:collapse;text-align:left;width:100%;font-size:14px;line-height:1.6}.markdown-table-scroll :-webkit-any(th,td){vertical-align:top;border-bottom:1px solid var(--border-soft);overflow-wrap:anywhere;min-width:120px;padding:12px 16px}.markdown-table-scroll :-moz-any(th,td){vertical-align:top;border-bottom:1px solid var(--border-soft);overflow-wrap:anywhere;min-width:120px;padding:12px 16px}.markdown-table-scroll :is(th,td){vertical-align:top;border-bottom:1px solid var(--border-soft);overflow-wrap:anywhere;min-width:120px;padding:12px 16px}.markdown-table-scroll th{background:var(--inset);color:var(--text-secondary);font-weight:600}.markdown-table-scroll tr:last-child td{border-bottom:0}.message-text ul,.message-text ol{max-width:72ch;margin:0 0 15px;padding-left:22px}.message-text li+li{margin-top:4px}.message-text blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);white-space:pre-wrap;max-width:72ch;margin:12px 0 15px;padding-left:13px}.message-text a{color:var(--info);text-underline-offset:2px}.inline-code,.message-text :not(pre)>code{background:var(--elevated);color:#e2e3e6;font-family:var(--mono);overflow-wrap:anywhere;border-radius:5px;padding:1px 6px;font-size:.9em}.code-block{overflow:hidden;border:1px solid var(--border);background:var(--inset);border-radius:11px;margin:14px 0 18px}.code-header{display:flex;border-bottom:1px solid var(--border-soft);color:var(--text-muted);font-family:var(--mono);justify-content:space-between;align-items: center;min-height:34px;padding:0 12px;font-size:11px}.code-header button{color:var(--text-secondary);font-family:inherit;font-size:inherit;background:0 0;min-height:44px}.code-block pre,.tool-details pre,.authorization-gate pre{overflow:auto;font-family:var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:12px;line-height:1.65}.code-block pre{color:#e2e3e6;white-space:pre;overflow-wrap:normal;padding:14px 16px 17px}.activity-group{margin:4px 0 10px}.activity-summary{display:inline-flex;color:var(--text-muted);background:0 0;align-items: center;gap:6px;min-height:30px;padding:0;transition:color .14s ease-out;font-size:13.5px}.activity-summary:hover{color:var(--text-secondary)}.activity-summary>svg{transition:transform .16s ease-out}.activity-group.open>.activity-summary>svg{transform:rotate(90deg)}.activity-list{position:relative;display:grid;gap:0;margin:2px 0 10px}.activity-list:has(>.activity-item+.activity-item):before{position:absolute;background:var(--border);content:"";width:1px;top:15px;bottom:15px;left:9.5px}.activity-item{position:relative;min-width:0}.activity-item>summary{display:flex;color:var(--text-muted);list-style:none;align-items: center;gap:10px;min-height:30px;transition:color .14s ease-out;font-size:13.5px}.activity-item>summary::-webkit-details-marker{display:none}.activity-item>summary:hover{color:var(--text-secondary)}.activity-icon{position:relative;z-index:1;display:inline-grid;background:var(--panel);color:var(--text-faint);border-radius:50%;flex:none;place-items: center;width:20px;height:20px}.activity-item>summary:hover .activity-icon{color:var(--text-muted)}.activity-spinner{border:1.5px solid var(--text-secondary);animation:spin .8s linear infinite;border-top-color:#0000;border-radius:50%;width:11px;height:11px}.activity-label{display:flex;overflow:hidden;white-space:nowrap;align-items:baseline;gap:7px;min-width:0}.activity-verb{flex:none}.activity-target{overflow:hidden;color:var(--text-secondary);font-family:var(--mono);text-overflow:ellipsis;min-width:0;font-size:12px}.activity-item:not(.state-output-available):not(.state-output-error):not(.state-output-denied):not(.reasoning-part)>summary{color:var(--text)}.activity-item.state-output-error>summary,.activity-item.state-output-error .activity-icon{color:var(--error)}.activity-item.state-output-denied>summary .activity-verb{color:var(--text-faint);text-decoration:line-through}.activity-item.state-approval-requested>summary,.activity-item.state-approval-requested .activity-icon{color:var(--warning)}.activity-note{flex:none;font-size:12px}.tool-badge{color:var(--text-faint);font-family:var(--mono);white-space:nowrap;flex:none;font-size:11px}.tool-badge.failed{color:var(--error)}.activity-chevron{color:var(--text-faint);opacity:0;flex:none;transition:opacity .14s ease-out,transform .16s ease-out}.activity-item>summary:hover .activity-chevron,.activity-item[open]>summary .activity-chevron{opacity:1}.activity-item>summary:focus-visible .activity-chevron{opacity:1}.activity-item[open]>summary .activity-chevron{transform:rotate(90deg)}.tool-details{display:grid;gap:10px;padding:4px 0 12px 30px}.reasoning-body{padding:2px 0 10px 30px}.reasoning-body .message-text{color:var(--text-muted);font-size:13.5px;line-height:1.65}.shimmer{background:linear-gradient(90deg,var(--text-muted)0%,var(--text-muted)35%,var(--text)50%,var(--text-muted)65%,var(--text-muted)100%);color:#0000;animation:shimmer 2s linear infinite;background-size:250% 100%;-webkit-background-clip:text;background-clip:text}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-150% 0}}.tool-view{display:grid;gap:6px;min-width:0}.tool-view-path,.tool-view-note{color:var(--text-muted);font-family:var(--mono);overflow-wrap:anywhere;font-size:11px}.tool-view-list{display:grid;grid-auto-rows:max-content;overflow:auto;color:var(--text-secondary);font-family:var(--mono);list-style:none;gap:2px;max-height:240px;margin:0;padding:0;font-size:11px}.tool-view-list li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-details pre.diff-view{white-space:pre;overflow-wrap:normal}.diff-line.added{color:var(--success);background:#8bd49c14}.diff-line.removed{color:var(--error);background:#f28b8214}.diff-line.hunk{color:var(--info)}.diff-line.meta{color:var(--text-muted)}.tool-details pre.command-line{color:var(--text)}.tool-details pre.command-output.failed{border-color:#f28b8259}.tool-event .tool-raw summary{display:inline-flex;color:var(--text-muted);cursor:pointer;min-height:32px;padding:0;font-size:11px}.tool-raw{display:grid;gap:10px}.tool-raw>div>span,.tool-details>div:not(.tool-view)>span{display:block;color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px;font-size:10px;font-weight:650}.tool-details pre{border:1px solid var(--border-soft);background:var(--base);color:var(--text-secondary);border-radius:7px;max-height:280px;padding:10px}.source-link,.attachment-line{display:flex;color:var(--info);text-decoration:none;align-items: center;gap:7px;width:max-content;max-width:100%;margin:8px 0;font-size:12px}.source-link span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-link:not(.static):hover{text-decoration:underline}.source-link.static,.attachment-line{color:var(--text-muted)}.slash-command-menu{position:absolute;z-index:45;overflow:hidden;border:1px solid var(--border-strong);background:var(--inset);border-radius:11px;bottom:calc(100% + 8px);left:0;right:0;box-shadow:0 16px 38px #0000006b}.slash-command-menu-header{display:flex;border-bottom:1px solid var(--border-soft);color:var(--text-muted);letter-spacing:.02em;text-transform:uppercase;justify-content:space-between;align-items: center;gap:12px;min-height:34px;padding:7px 10px 6px 12px;font-size:10px}.slash-command-menu-header span:last-child{letter-spacing:0;text-transform:none}.slash-command-menu kbd{border:1px solid var(--border);background:var(--elevated);color:var(--text-secondary);font:inherit;border-radius:4px;padding:1px 4px}.slash-command-options{overflow-y:auto;overscroll-behavior:contain;max-height:min(390px,48dvh);padding:5px}.slash-command-option{display:grid;grid-template-columns:27px minmax(0,1fr)auto;color:var(--text-secondary);text-align:left;background:0 0;border-radius:7px;align-items: center;gap:8px;width:100%;min-height:49px;padding:6px 9px}.appearance-starter .slash-command-options{max-height:min(310px,34dvh)}.appearance-starter .slash-command-menu{top:calc(100% + 8px);bottom:auto}.slash-command-option:hover,.slash-command-option.selected{background:var(--elevated);color:var(--text)}.slash-command-option.selected{box-shadow:inset 2px 0 0 var(--accent)}.slash-command-icon{display:grid;border:1px solid var(--border-soft);background:var(--inset);color:var(--text-muted);border-radius:6px;place-items: center;width:26px;height:26px}.slash-command-copy{display:grid;gap:2px;min-width:0}.slash-command-copy>span{display:flex;align-items:baseline;gap:7px;min-width:0}.slash-command-copy code{color:var(--accent-text);font-size:12px;font-weight:650}.slash-command-copy small,.slash-command-enter{color:var(--text-muted);font-size:10px}.slash-command-copy>small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slash-command-enter{opacity:0}.slash-command-option.selected .slash-command-enter{opacity:1}.slash-command-empty{color:var(--text-muted);text-align:center;padding:18px 12px;font-size:12px}.slash-command-empty code{color:var(--accent-text)}.command-result{display:grid;grid-template-columns:26px minmax(0,1fr)auto;overflow-y:auto;border:1px solid var(--border);background:var(--elevated);color:var(--text-secondary);border-radius:9px;align-items: start;gap:8px;max-height:min(250px,36dvh);margin-bottom:7px;padding:9px 9px 9px 10px}.command-result.tone-success{border-color:#315446}.command-result.tone-error{border-color:#674244}.command-result-icon{display:grid;color:var(--accent-text);place-items: center;width:24px;height:24px}.command-result.tone-success .command-result-icon{color:#8bd6ac}.command-result.tone-error .command-result-icon{color:#f4aaa3}.command-result>div{min-width:0}.command-result strong{display:block;color:var(--text);font-size:11px}.command-result p{color:var(--text-secondary);overflow-wrap:anywhere;white-space:pre-wrap;margin:3px 0 0;font:10.5px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.command-result>button{display:grid;color:var(--text-muted);border-radius:6px;place-items: center;width:28px;height:28px}.command-result>button:hover{background:var(--inset);color:var(--text)}.context-meter{display:inline-flex;font-family:var(--mono);white-space:nowrap;align-items: center;gap:6px;margin-left:auto}.context-meter-bar{position:relative;overflow:hidden;background:var(--border-soft);border-radius:999px;width:44px;height:4px}.context-meter-bar>span{position:absolute;border-radius:inherit;background:var(--text-muted);inset:0 auto 0 0}.context-meter.warning{color:var(--warning)}.context-meter.warning .context-meter-bar>span{background:var(--warning)}.context-meter.critical{color:var(--error)}.context-meter.critical .context-meter-bar>span{background:var(--error)}.inline-spinner{display:inline-block;animation:spin .8s linear infinite;border:2px solid;border-top-color:#0000;border-radius:50%;flex:none;width:14px;height:14px}@keyframes spin{to{transform:rotate(360deg)}}.model-picker{overflow:hidden;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:14px;width:min(560px,100% - 32px);max-height:calc(100dvh - 48px);padding:0}.model-picker::backdrop{background:#000000a6}.model-picker-content{display:flex;flex-direction:column;max-height:calc(100dvh - 50px);padding:24px}.model-picker header{display:flex;justify-content:space-between;align-items: flex-start;gap:16px;margin-bottom:20px}.model-picker h2{letter-spacing:-.035em;margin:0;font-size:23px;font-weight:550}.model-picker header p{color:var(--text-muted);margin:6px 0 0;font-size:12px}.model-search{flex-shrink:0}.model-list{overflow-y:auto;min-height:100px;margin:16px -8px}.model-option{display:flex;text-align:left;background:0 0;border-radius:8px;align-items: center;gap:16px;width:100%;min-height:64px;padding:12px}.model-option:hover:not(:disabled){background:var(--elevated)}.model-option.selected{background:var(--accent-soft);color:var(--accent-text)}.model-option>span:first-child{flex:1;min-width:0}.model-option strong,.model-option small{display:block;overflow-wrap:anywhere}.model-option strong{font-size:14px;font-weight:550}.model-option small{font:11px var(--mono);color:var(--text-muted);margin-top:4px}.model-option.selected small{color:var(--accent-text)}.model-capability{white-space:nowrap;font-size:11px}.model-picker footer{display:flex;border-top:1px solid var(--border);color:var(--text-muted);flex-shrink:0;justify-content:space-between;align-items: center;gap:10px;padding-top:16px;font-size:11px}.model-list-empty,.model-picker-error{color:var(--text-secondary);padding:12px;font-size:13px}.model-picker-error{color:var(--error)}.authorization-gate{display:grid;background:var(--base);align-content: center;justify-items:start;width:min(100% - 40px,560px);height:100%;margin:0 auto}.authorization-mark{border:1px solid var(--accent-border);background:var(--accent-soft);border-radius:13px;width:48px;height:48px;margin-bottom:22px}.authorization-gate p{color:var(--text-secondary);margin:13px 0 17px;font-size:15px}.authorization-gate pre{border:1px solid var(--border);background:var(--inset);color:var(--accent-text);border-radius:9px;min-width:190px;padding:11px 14px}.authorization-gate small{color:var(--text-muted);max-width:58ch;margin-top:13px}.project-browser-backdrop{position:fixed;z-index:80;display:grid;background:#06090dc7;place-items: center;padding:24px;inset:0}.project-browser{display:grid;grid-template-rows:auto auto minmax(0,1fr)auto;overflow:hidden;border:1px solid var(--border-strong);background:var(--panel);border-radius:14px;width:min(100%,1040px);height:min(700px,100dvh - 48px);box-shadow:0 24px 64px #0000008c}.pb-header{display:flex;justify-content:space-between;align-items: flex-start;gap:12px;padding:16px 18px 12px}.pb-header h1{letter-spacing:-.015em;margin:0;font-size:17px;font-weight:660}.pb-header p{color:var(--text-muted);margin:3px 0 0;font-size:12px}.pb-toolbar{display:flex;border-bottom:1px solid var(--border-soft);align-items: center;gap:8px;padding:0 14px 12px 12px}.pb-address{display:flex;overflow-x:auto;border:1px solid var(--border);background:var(--inset);color:var(--text-muted);white-space:nowrap;scrollbar-width:none;border-radius:8px;flex:auto;align-items: center;gap:1px;min-width:0;min-height:34px;padding:2px 6px;font-size:12px}.pb-crumb-group{display:inline-flex;align-items: center}.pb-crumb{color:var(--text-secondary);background:0 0;border-radius:5px;padding:4px 6px}.pb-crumb.home{display:inline-flex;color:var(--text-muted);padding:4px 5px}.pb-crumb:hover:not(:disabled){background:var(--elevated);color:var(--text)}.pb-crumb[aria-current=location]{color:var(--text);font-weight:600}.pb-crumb-label{color:var(--text-secondary);padding:0 6px}.pb-filter{display:flex;border:1px solid var(--border);background:var(--inset);color:var(--text-muted);border-radius:8px;flex:0 0 220px;align-items: center;gap:7px;min-height:34px;padding:0 10px}.pb-filter:focus-within{border-color:var(--accent-border)}.pb-filter input{outline:0;color:var(--text);font:inherit;background:0 0;border:0;width:100%;min-width:0;font-size:12px}.pb-main{display:grid;grid-template-columns:210px minmax(0,1fr);min-height:0}.pb-sidebar{display:flex;overflow-y:auto;border-right:1px solid var(--border-soft);background:var(--base);flex-direction:column;gap:1px;min-height:0;padding:10px 8px}.pb-sidebar h2{color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;margin:12px 8px 4px;font-size:10.5px;font-weight:650}.pb-side-item{display:flex;color:var(--text-secondary);text-align:left;background:0 0;border-radius:7px;align-items: center;gap:9px;min-height:32px;padding:5px 9px;font-size:12.5px}.pb-side-item>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pb-side-item>svg{color:var(--text-muted);flex:none}.pb-side-item:hover:not(:disabled){background:var(--elevated);color:var(--text)}.pb-side-item.active{background:var(--accent-soft);color:var(--accent-text)}.pb-side-item.active>svg{color:var(--accent-text)}.pb-side-item.missing{opacity:.5;text-decoration:line-through}.pb-content{overflow-y:auto;min-height:0;padding:10px 12px}.pb-list{display:grid;align-content: start;gap:1px}.pb-list.loading{opacity:.55;pointer-events:none}.pb-row{display:flex;color:var(--text-muted);border-radius:7px;align-items: center;gap:6px;padding-right:8px}.pb-row:hover,.pb-row:focus-within{background:var(--elevated)}.pb-row-main{display:flex;color:var(--text-secondary);text-align:left;background:0 0;border-radius:7px;flex:auto;align-items: center;gap:10px;min-width:0;min-height:36px;padding:6px 10px;font-size:13px}.pb-row-main>svg{color:var(--accent-text);flex:none}.pb-row:hover .pb-row-main{color:var(--text)}.pb-row-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pb-row-main .entry-note{margin-left:auto}.pb-row-open{border:1px solid var(--border);background:var(--panel);color:var(--text-secondary);opacity:0;border-radius:6px;flex:none;padding:3px 11px;font-size:11.5px}.pb-row:hover .pb-row-open,.pb-row:focus-within .pb-row-open{opacity:1}.pb-row-open:hover:not(:disabled){border-color:var(--accent-border);color:var(--accent-text)}.pb-row.file .pb-row-main,.pb-row.file .pb-row-main>svg{color:var(--text-muted)}@media (hover:none){.pb-row-open{opacity:1}}.pb-home{display:grid;gap:22px;padding:6px 4px}.pb-home h2{color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;margin:0 0 9px;font-size:10.5px;font-weight:650}.pb-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}.pb-card{display:flex;border:1px solid var(--border);background:var(--inset);color:var(--text-secondary);text-align:left;border-radius:10px;align-items: center;gap:11px;min-width:0;padding:11px 12px}.pb-card>svg{color:var(--accent-text);flex:none}.pb-card>span{display:grid;gap:2px;min-width:0}.pb-card strong{overflow:hidden;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600}.pb-card small{overflow:hidden;color:var(--text-muted);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px}.pb-card:hover:not(:disabled),.pb-tile:hover:not(:disabled){border-color:var(--border-strong);background:var(--elevated)}.pb-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.pb-tile{display:grid;border:1px solid var(--border);background:var(--inset);color:var(--text-secondary);text-align:left;border-radius:10px;justify-items:start;gap:3px;min-width:0;padding:12px}.pb-tile>svg{color:var(--accent-text);margin-bottom:6px}.pb-tile strong{color:var(--text);font-size:13px;font-weight:600}.pb-tile small{overflow:hidden;color:var(--text-muted);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:10px}.pb-tile.missing{opacity:.55;border-style:dashed}.pb-footer{display:flex;border-top:1px solid var(--border-soft);background:var(--base);justify-content:space-between;align-items: center;gap:16px;min-height:60px;padding:10px 14px 10px 16px}.pb-footer.has-root-confirmation{min-height:74px}.pb-footer-info{display:grid;gap:5px;min-width:0}.pb-footer .selected-path{max-width:440px}.pb-view-options{display:flex;gap:14px}.project-browser-backdrop.compact{padding:0}.compact .project-browser{border:0;border-radius:0;width:100%;height:100dvh}.compact .pb-main{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.compact .pb-sidebar{overflow-x:auto;overflow-y:hidden;border-right:0;border-bottom:1px solid var(--border-soft);flex-direction:row;gap:6px;padding:8px}.compact .pb-sidebar h2{display:none}.compact .pb-side-item{border:1px solid var(--border);flex:none;min-height:40px}.compact .pb-toolbar{flex-wrap:wrap}.compact .pb-filter{flex:100%;min-height:40px}.compact .pb-row-main{min-height:44px}.compact .pb-footer{flex-direction:column;align-items:stretch;gap:8px}.compact .project-browser-actions{flex-wrap:wrap;justify-content:flex-end}.compact .pb-footer .selected-path{max-width:100%}.compact .project-browser .icon-button{width:44px;height:44px}.icon-button{display:inline-flex;color:var(--text-muted);background:0 0;border-radius:8px;justify-content:center;align-items: center;width:34px;height:34px}.icon-button:hover:not(:disabled){background:var(--elevated);color:var(--text)}.icon-button.compact{width:28px;height:28px}.picker-fallback-notice{display:grid;grid-template-columns:auto minmax(0,1fr)auto;border:1px solid var(--border);background:var(--inset);color:var(--text-secondary);border-radius:9px;align-items: center;gap:10px;margin:2px 2px 8px;padding:10px 12px}.picker-fallback-notice.info>svg{color:var(--info)}.picker-fallback-notice.error>svg{color:var(--error)}.picker-fallback-notice>span{display:grid;min-width:0}.picker-fallback-notice strong{color:var(--text);font-size:12px}.picker-fallback-notice small{color:var(--text-muted);font-size:11px}.picker-fallback-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.picker-pending-banner{position:fixed;z-index:90;display:grid;grid-template-columns:auto minmax(0,1fr)auto;border:1px solid var(--border);background:var(--elevated);color:var(--accent-text);border-radius:10px;align-items: center;gap:10px;width:min(440px,100vw - 32px);padding:10px 12px;bottom:16px;right:16px;box-shadow:0 12px 32px #00000073}.picker-pending-banner>span:not(.inline-spinner){display:grid;gap:3px;min-width:0}.picker-pending-banner strong{color:var(--text);font-size:12px}.picker-pending-banner small{color:var(--text-muted);font-size:11px;line-height:1.45}.launch-folder-offer{display:flex;border:1px solid var(--border-soft);background:0 0;border-radius:12px;flex-wrap:wrap;justify-content:space-between;align-items: center;gap:10px 14px;margin-top:12px;padding:10px 10px 10px 14px}.launch-folder-offer>span{display:grid;flex:220px;gap:2px;min-width:0}.launch-folder-offer strong{overflow:hidden;color:var(--text);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;font-size:12px}.launch-folder-offer small{color:var(--text-muted);font-size:11px}.launch-folder-offer .launch-folder-broad{color:var(--warning)}.starter-recent-projects{display:flex;flex-wrap:wrap;align-items: center;gap:6px}.starter-recent-projects small{color:var(--text-muted);margin-right:4px;font-size:11px}.starter-recent-projects button{display:inline-flex;overflow:hidden;border:1px solid var(--border);background:var(--inset);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;align-items: center;gap:6px;max-width:220px;min-height:32px;padding:4px 11px;font-size:12px}.starter-recent-projects button:hover:not(:disabled){border-color:var(--border-strong);color:var(--text)}.folder-loading-status{position:sticky;z-index:2;display:flex;border:1px solid var(--border-soft);background:color-mix(in srgb,var(--panel)92%,transparent);color:var(--text-muted);backdrop-filter:blur(6px);border-radius:7px;align-items: center;gap:8px;min-height:36px;margin:0 2px 6px;padding:7px 10px;font-size:11px;top:0}.entry-note{color:var(--text-muted);font-family:var(--mono);font-size:10px}.browser-state{display:grid;color:var(--text-muted);text-align:center;align-content: center;justify-items:center;min-height:220px;padding:28px}.browser-state h2{color:var(--text);margin:13px 0 3px;font-size:15px;font-weight:640}.browser-state p{max-width:50ch;margin:0 0 14px;font-size:12px}.error-state>svg{color:var(--error)}.load-more-button{border:1px solid var(--border);background:var(--inset);color:var(--text-secondary);border-radius:8px;min-height:38px;margin:9px}.checkbox-control{display:flex;color:var(--text-muted);white-space:nowrap;align-items: center;gap:8px;font-size:11px}.checkbox-control input{accent-color:var(--accent);width:15px;height:15px}.broad-root-warning{display:grid;grid-template-columns:auto minmax(180px,1fr);color:var(--warning);align-items: start;gap:2px 8px;max-width:520px;font-size:11px}.broad-root-warning>svg{margin-top:1px}.broad-root-warning button{grid-column:2;color:var(--text-secondary);text-decoration:underline;background:0 0;width:max-content;padding:1px 0;font-size:11px}.project-browser-actions{justify-content:flex-end;min-width:0}.selected-path{overflow:hidden;color:var(--text-muted);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;max-width:310px;font-size:10px}.agent-working{display:flex;color:var(--text-muted);align-items:baseline;gap:8px;padding:10px 0 4px;font-size:13.5px}.agent-working-time{color:var(--text-faint);font-variant-numeric:tabular-nums;font-size:12.5px}.conversation-controls{position:relative;z-index:4;background:var(--panel);flex:none;padding:0 0 18px}.conversation-controls:before{position:absolute;background:linear-gradient(to bottom,transparent,var(--panel));content:"";pointer-events:none;height:28px;top:-28px;left:0;right:0}.inline-error,.new-session-error{display:flex;color:#f2aaa3;background:#1c1213;border:1px solid #4a2a2c;border-radius:12px;align-items: center;gap:9px;margin-bottom:10px;padding:9px 12px;font-size:12.5px}.inline-error span{flex:1}.inline-error button{color:var(--text);background:0 0;font-weight:600}.new-session-error{margin:12px 0 0}.approval-dock,.prompt-dock{overflow:hidden;border:1px solid var(--border);background:var(--inset);border-radius:16px;margin-bottom:10px}.approval-row{display:grid;grid-template-columns:auto minmax(0,1fr)auto;align-items: center;gap:12px;padding:12px 14px}.approval-row+.approval-row{border-top:1px solid var(--border-soft)}.approval-icon{display:inline-flex;color:var(--warning)}.approval-row strong,.prompt-dock strong{color:var(--text);font-size:13px;font-weight:600}.approval-row p,.prompt-dock p{color:var(--text-secondary);margin:2px 0;font-size:13px}.approval-row small{color:var(--text-muted);font-size:11.5px}.approval-actions,.project-browser-actions,.prompt-options,.prompt-custom{display:flex;align-items: center;gap:8px}.prompt-options{flex-wrap:wrap}.prompt-dock{display:grid;gap:10px;padding:14px}.prompt-custom input{border:1px solid var(--border);outline:0;background:var(--base);border-radius:10px;flex:1;min-width:0;min-height:34px;padding:6px 11px}.prompt-custom input:focus-visible{border-color:var(--border-strong)}.primary-button,.secondary-button{display:inline-flex;border-radius:999px;justify-content:center;align-items: center;gap:7px;min-height:34px;padding:6px 14px;transition:background-color .14s ease-out,border-color .14s ease-out,color .14s ease-out;font-size:13px;font-weight:500}.primary-button{background:var(--primary);color:var(--on-primary)}.primary-button:hover:not(:disabled){background:var(--primary-hover)}.primary-button:disabled{background:var(--elevated);color:var(--text-muted);opacity:1}.secondary-button{border:1px solid var(--border);color:var(--text-secondary);background:0 0}.secondary-button:hover:not(:disabled){border-color:var(--border-strong);background:var(--elevated);color:var(--text)}.compact-primary{min-height:32px;padding:5px 12px}.jump-to-latest{display:flex;border:1px solid var(--border);background:var(--inset);color:var(--text-secondary);border-radius:999px;align-items: center;gap:6px;min-height:32px;margin:0 auto 12px;padding:4px 12px;font-size:12.5px}.jump-to-latest:hover{color:var(--text)}.command-composer-shell{position:relative;isolation:isolate}.composer,.starter-composer{position:relative;overflow:hidden;border:1px solid var(--border);background:var(--inset);border-radius:22px;transition:border-color .16s ease-out,box-shadow .16s ease-out;box-shadow:0 14px 40px #00000059}.composer:focus-within,.starter-composer:focus-within{border-color:var(--border-strong)}.composer.disabled{opacity:.75}.command-composer-shell.is-streaming:before{position:absolute;z-index:-1;content:"";filter:blur(14px);pointer-events:none;animation:composer-glow 2.6s ease-in-out infinite alternate;background:radial-gradient(#5cc8bb8c,#5cc8bb00 70%);border-radius:50%;height:54px;top:-22px;left:12%;right:12%}@keyframes composer-glow{0%{opacity:.45;transform:scaleX(.92)}to{opacity:1;transform:scaleX(1)}}.composer textarea,.starter-composer textarea{display:block;resize:none;outline:0;color:var(--text);field-sizing:content;background:0 0;border:0;width:100%;min-height:54px;max-height:240px;padding:16px 20px 4px;font-size:15px;line-height:1.55}.starter-composer textarea{min-height:88px;padding-top:18px}.composer textarea::placeholder,.starter-composer textarea::placeholder,.prompt-custom input::placeholder{color:var(--text-muted);opacity:1}.composer-toolbar,.starter-toolbar{display:flex;align-items: center;gap:2px;min-height:50px;padding:4px 10px 10px}.composer-toolbar-spacer{flex:1}.composer-command-trigger{display:inline-grid;color:var(--text-muted);font-family:var(--mono);background:0 0;border-radius:50%;flex:none;place-items: center;width:32px;height:32px;transition:background-color .14s ease-out,color .14s ease-out;font-size:15px}.composer-command-trigger:hover{background:var(--elevated);color:var(--text)}.workspace-controls-agent{overflow-x:auto;scrollbar-width:none;flex:0 auto}.workspace-controls-agent::-webkit-scrollbar{display:none}.draft-status{color:var(--text-muted);margin-right:8px;font-size:12px}.send-button,.abort-button{display:inline-grid;background:var(--primary);color:var(--on-primary);border-radius:50%;flex:none;place-items: center;width:34px;height:34px;margin-left:6px;transition:background-color .14s ease-out,transform .14s ease-out}.send-button:hover:not(:disabled),.abort-button:hover{background:var(--primary-hover)}.send-button:active:not(:disabled),.abort-button:active{transform:scale(.94)}.send-button:disabled{background:var(--elevated);color:var(--text-muted);opacity:1}.abort-button svg{fill:currentColor}.button-loading{border:2px solid #8a8a90;border-top-color:var(--on-primary);animation:spin .8s linear infinite;border-radius:50%;width:13px;height:13px}.context-meter{color:var(--text-faint);margin:0 6px 0 0;font-size:11px}.context-meter-bar{width:36px}.slash-command-menu,.command-result{border-radius:16px}.slash-command-option.selected{box-shadow:none}.slash-command-copy code,.slash-command-empty code{color:var(--text)}.model-option.selected{background:var(--elevated);color:var(--text)}.model-option.selected small{color:var(--text-secondary)}.model-search{display:flex;border:1px solid var(--border);color:var(--text-muted);background:var(--inset);border-radius:10px;align-items: center;gap:8px;min-height:40px;padding:0 12px}.model-search:focus-within{border-color:var(--border-strong)}.model-search input{outline:none;background:0 0;border:0;width:100%;min-width:0;padding:9px 0;font-size:13.5px}.new-session-surface{display:flex;flex-direction:column;flex:1;min-height:0}.new-session-body{display:grid;overflow-y:auto;flex:1;place-items: center;min-height:0;padding:24px 24px 12vh}.new-session-inner{width:min(100%,720px)}.new-session-title{text-align:center;margin-bottom:24px}.new-session-title h1{color:var(--text);letter-spacing:-.025em;text-wrap:balance;overflow-wrap:anywhere;margin:0;font-size:clamp(24px,2.3vw,30px);font-weight:500;line-height:1.25}.title-project{color:var(--text-secondary)}.starter-description{color:var(--text-muted);margin:10px 0 0;font-size:14.5px}.starter-suggestions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:16px}.starter-suggestions button{display:inline-flex;border:1px solid var(--border);color:var(--text-secondary);background:0 0;border-radius:999px;align-items: center;gap:7px;min-height:32px;padding:4px 13px 4px 11px;transition:background-color .14s ease-out,border-color .14s ease-out,color .14s ease-out;font-size:13px}.starter-suggestions button>svg{color:var(--text-muted)}.starter-suggestions button:hover:not(:disabled){border-color:var(--border-strong);background:var(--elevated);color:var(--text)}.starter-projects{display:grid;overflow:hidden;border:1px solid var(--border-soft);border-radius:16px;margin-top:20px}.starter-project{display:flex;color:var(--text-muted);text-align:left;background:0 0;align-items: center;gap:12px;min-height:52px;padding:8px 16px;transition:background-color .14s ease-out}.starter-project+.starter-project{border-top:1px solid var(--border-soft)}.starter-project:hover:not(:disabled){background:var(--hover)}.starter-project-copy{display:grid;flex:1;min-width:0}.starter-project-copy strong,.starter-project-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.starter-project-copy strong{color:var(--text);font-size:13.5px;font-weight:500}.starter-project-copy small{color:var(--text-muted);font-size:12px}.starter-project-action{color:var(--text-muted);font-size:12.5px}.starter-project:hover .starter-project-action{color:var(--text)}.rail-scrim,.mobile-only{display:none}@media (max-width:760px){.app-shell{display:block}.mobile-only{display:inline-flex}.session-rail{position:fixed;z-index:70;visibility:hidden;width:min(86vw,300px);transition:transform .19s cubic-bezier(.16,1,.3,1),visibility 0s linear .19s;inset:0 auto 0 0;transform:translate(-102%)}.session-rail.open{visibility:visible;transition-delay:0s;transform:translate(0)}.rail-scrim{position:fixed;z-index:60;display:block;background:#0009;width:100%;height:100%;inset:0}.rail-header .icon-button{width:44px;height:44px}.rail-nav-item,.session-item{min-height:44px}.workspace-main{width:100%;height:100dvh}.top-bar{padding:0 8px}.top-bar .icon-button{width:44px;height:44px}.workspace-path{max-width:44vw;height:44px}.changes-toggle{min-width:44px;height:44px}.conversation-column{padding-inline-start:16px;padding-inline-end:16px}.conversation-scroll>.conversation-column{padding-top:8px;padding-bottom:20px}.conversation-controls{padding-bottom:10px}.role-user .message-parts{max-width:88%}.composer-toolbar,.starter-toolbar{padding-inline-start:6px;padding-inline-end:6px}.ribbon-model{max-width:120px}.context-meter{display:none}.send-button,.abort-button{width:40px;height:40px}.composer-command-trigger,.ribbon-model,.ribbon-select{min-height:40px}.slash-command-menu-header span:last-child{display:none}.slash-command-option{min-height:52px}.approval-row{grid-template-columns:auto minmax(0,1fr)}.approval-actions{grid-column:2;justify-content:flex-start}.approval-actions button,.prompt-options button,.prompt-custom button,.prompt-custom input,.command-result>button,.starter-suggestions button,.jump-to-latest,.model-picker .icon-button{min-height:44px}.command-result>button,.model-picker .icon-button{width:44px;min-width:44px}.new-session-body{align-items: start;padding:16vh 16px 24px}.model-picker-content{padding:18px}.model-capability{white-space:normal;text-align:right;max-width:76px}}@media (max-width:460px){.ribbon-model{max-width:96px}.ribbon-select{padding-inline-start:8px;padding-inline-end:8px}.approval-actions,.prompt-options{flex-direction:column;align-items:stretch}.primary-button,.secondary-button{width:100%}.project-browser-actions{flex-wrap:wrap}}@media (prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}