toyon 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +72 -46
  2. package/bin/toyon.js +57 -13
  3. package/dist/bridge.js +1 -1
  4. package/dist/cli.js +1908 -71
  5. package/dist/daemon.js +6491 -4820
  6. package/dist/shell/assets/{Editor-D-PlbMSY.js → Editor-CgKsVXHS.js} +189 -179
  7. package/dist/shell/assets/{XTerm-CM_FJEwN.js → XTerm-CMRoVDAh.js} +1 -1
  8. package/dist/shell/assets/cssMode-Dg15kh0f.js +1 -0
  9. package/dist/shell/assets/{freemarker2-DVAK5zoJ.js → freemarker2-CU21n-BA.js} +2 -2
  10. package/dist/shell/assets/grammar-DGBFIuP2.js +12 -0
  11. package/dist/shell/assets/handlebars-DVAbWe34.js +1 -0
  12. package/dist/shell/assets/html-BkxU7kNX.js +1 -0
  13. package/dist/shell/assets/htmlMode-Brl4kLPo.js +1 -0
  14. package/dist/shell/assets/index-DUmxVabc.css +1 -0
  15. package/dist/shell/assets/index-WHwsRrlj.js +232 -0
  16. package/dist/shell/assets/javascript-DoIo3Pg8.js +1 -0
  17. package/dist/shell/assets/{jsonMode-HgW1GXQH.js → jsonMode-B9qq6lCy.js} +1 -1
  18. package/dist/shell/assets/liquid-Cn1aqWby.js +1 -0
  19. package/dist/shell/assets/{lspLanguageFeatures-CvNG6b_1.js → lspLanguageFeatures-C5ez8E_9.js} +1 -1
  20. package/dist/shell/assets/mdx-1MuVz0xd.js +1 -0
  21. package/dist/shell/assets/python-DFhVdcGk.js +1 -0
  22. package/dist/shell/assets/razor-BitqUXpg.js +1 -0
  23. package/dist/shell/assets/tsMode-loK_YDOL.js +1 -0
  24. package/dist/shell/assets/wasm-inlined-CG6Dc4jp.js +1 -0
  25. package/dist/shell/assets/xml-Cc4ljERX.js +1 -0
  26. package/dist/shell/assets/yaml-0hpVC8PU.js +1 -0
  27. package/dist/shell/index.html +35 -4
  28. package/dist/shell/manifest.json +1 -1
  29. package/package.json +2 -2
  30. package/dist/shell/assets/cssMode-Bkqyr9Lr.js +0 -1
  31. package/dist/shell/assets/handlebars-Bdtj7uMl.js +0 -1
  32. package/dist/shell/assets/html-B1pqTvyA.js +0 -1
  33. package/dist/shell/assets/htmlMode-CBtvzewS.js +0 -1
  34. package/dist/shell/assets/index-GBQLHG7z.css +0 -1
  35. package/dist/shell/assets/index-jy_zeFGs.js +0 -230
  36. package/dist/shell/assets/javascript-FNavUzsm.js +0 -1
  37. package/dist/shell/assets/liquid-6wkVlojW.js +0 -1
  38. package/dist/shell/assets/mdx-C-byKky3.js +0 -1
  39. package/dist/shell/assets/python-BEJMbP4i.js +0 -1
  40. package/dist/shell/assets/razor-DeXWW25R.js +0 -1
  41. package/dist/shell/assets/tsMode-DMwJnvD-.js +0 -11
  42. package/dist/shell/assets/typescript-Cj57ccSp.js +0 -1
  43. package/dist/shell/assets/workers-BZi9jqBp.js +0 -1
  44. package/dist/shell/assets/xml-DUDeQI0I.js +0 -1
  45. package/dist/shell/assets/yaml-BCD8Shg5.js +0 -1
@@ -0,0 +1 @@
1
+ import{l as e}from"./Editor-CgKsVXHS.js";import"./index-WHwsRrlj.js";import"./grammar-DGBFIuP2.js";const i={comments:{blockComment:["<!--","-->"]},brackets:[["<",">"]],autoClosingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],onEnterRules:[{beforeText:new RegExp("<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:e.IndentAction.Indent}}]},a={defaultToken:"",tokenPostfix:".xml",ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,""],{include:"@whitespace"},[/(<)(@qualifiedName)/,[{token:"delimiter"},{token:"tag",next:"@tag"}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:"delimiter"},{token:"tag"},"",{token:"delimiter"}]],[/(<\?)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/(<\!)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/<\!\[CDATA\[/,{token:"delimiter.cdata",next:"@cdata"}],[/&\w+;/,"string.escape"]],cdata:[[/[^\]]+/,""],[/\]\]>/,{token:"delimiter.cdata",next:"@pop"}],[/\]/,""]],tag:[[/[ \t\r\n]+/,""],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,["attribute.name","","attribute.value"]],[/@qualifiedName/,"attribute.name"],[/\?>/,{token:"delimiter",next:"@pop"}],[/(\/)(>)/,[{token:"tag"},{token:"delimiter",next:"@pop"}]],[/>/,{token:"delimiter",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/<!--/,{token:"comment",next:"@comment"}]],comment:[[/[^<\-]+/,"comment.content"],[/-->/,{token:"comment",next:"@pop"}],[/<!--/,"comment.content.invalid"],[/[<\-]/,"comment.content"]]}};export{i as conf,a as language};
@@ -0,0 +1 @@
1
+ import{l as e}from"./Editor-CgKsVXHS.js";import"./index-WHwsRrlj.js";import"./grammar-DGBFIuP2.js";const r={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\s*$/,action:{indentAction:e.IndentAction.Indent}}]},l={tokenPostfix:".yaml",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["true","True","TRUE","false","False","FALSE","null","Null","Null","~"],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/%[^ ]+.*$/,"meta.directive"],[/---/,"operators.directivesEnd"],[/\.{3}/,"operators.documentEnd"],[/[-?:](?= )/,"operators"],{include:"@anchor"},{include:"@tagHandle"},{include:"@flowCollections"},{include:"@blockStyle"},[/@numberInteger(?![ \t]*\S+)/,"number"],[/@numberFloat(?![ \t]*\S+)/,"number.float"],[/@numberOctal(?![ \t]*\S+)/,"number.octal"],[/@numberHex(?![ \t]*\S+)/,"number.hex"],[/@numberInfinity(?![ \t]*\S+)/,"number.infinity"],[/@numberNaN(?![ \t]*\S+)/,"number.nan"],[/@numberDate(?![ \t]*\S+)/,"number.date"],[/(".*?"|'.*?'|[^#'"]*?)([ \t]*)(:)( |$)/,["type","white","operators","white"]],{include:"@flowScalars"},[/.+?(?=(\s+#|$))/,{cases:{"@keywords":"keyword","@default":"string"}}]],object:[{include:"@whitespace"},{include:"@comment"},[/\}/,"@brackets","@pop"],[/,/,"delimiter.comma"],[/:(?= )/,"operators"],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,"type"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\},]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],array:[{include:"@whitespace"},{include:"@comment"},[/\]/,"@brackets","@pop"],[/,/,"delimiter.comma"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\],]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],multiString:[[/^( +).+$/,"string","@multiStringContinued.$1"]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":"string","@default":{token:"@rematch",next:"@popall"}}}]],whitespace:[[/[ \t\r\n]+/,"white"]],comment:[[/#.*$/,"comment"]],flowCollections:[[/\[/,"@brackets","@array"],[/\{/,"@brackets","@object"]],flowScalars:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'[^']*'/,"string"],[/"/,"string","@doubleQuotedString"]],doubleQuotedString:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],blockStyle:[[/[>|][0-9]*[+-]?$/,"operators","@multiString"]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,"number"],[/@numberFloat(?=[ \t]*[,\]\}])/,"number.float"],[/@numberOctal(?=[ \t]*[,\]\}])/,"number.octal"],[/@numberHex(?=[ \t]*[,\]\}])/,"number.hex"],[/@numberInfinity(?=[ \t]*[,\]\}])/,"number.infinity"],[/@numberNaN(?=[ \t]*[,\]\}])/,"number.nan"],[/@numberDate(?=[ \t]*[,\]\}])/,"number.date"]],tagHandle:[[/\![^ ]*/,"tag"]],anchor:[[/[&*][^ ]+/,"namespace"]]}};export{r as conf,l as language};
@@ -2,13 +2,19 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
5
+ <!-- resizes-content: the on-screen keyboard shrinks the layout viewport rather than sliding a
6
+ visual one over it, so the chat's own bottom pinning keeps the newest row above the box.
7
+ viewport-fit=cover is what gives env(safe-area-inset-*) a value on a notched phone. -->
8
+ <meta
9
+ name="viewport"
10
+ content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content"
11
+ />
6
12
  <meta name="theme-color" content="#32302d" />
7
13
  <link rel="manifest" href="/manifest.json" />
8
14
  <link rel="icon" href="/icon.svg" type="image/svg+xml" />
9
15
  <title>Toyon</title>
10
- <script type="module" crossorigin src="/assets/index-jy_zeFGs.js"></script>
11
- <link rel="stylesheet" crossorigin href="/assets/index-GBQLHG7z.css">
16
+ <script type="module" crossorigin src="/assets/index-WHwsRrlj.js"></script>
17
+ <link rel="stylesheet" crossorigin href="/assets/index-DUmxVabc.css">
12
18
  </head>
13
19
  <body>
14
20
  <div id="root"></div>
@@ -18,13 +24,38 @@
18
24
  // knowing the project rather than painting a placeholder and correcting it. The token is
19
25
  // where ws.ts will look for it: the fragment on a fresh link, storage on every load after.
20
26
  // Nothing here is trusted beyond the first paint; the socket's own hello replaces it.
27
+ //
28
+ // A phone that scanned a pairing code arrives with `#pair=` instead. The code is traded for
29
+ // the token before anything else, and the phone goes on to add this machine to toyon.cloud,
30
+ // which is where it opens from after that. The fragment leaves the address first, so a
31
+ // reload never spends the code twice; a spent code falls through to whatever token the
32
+ // phone already holds, and without one the page says how to get a new code.
21
33
  window.toyonBoot = (() => {
22
- try {
34
+ const hello = () => {
23
35
  const token = (location.hash.match(/token=([a-f0-9]+)/) || [])[1] || localStorage.getItem("toyon-token");
24
36
  if (!token) return Promise.resolve(null);
25
37
  return fetch(`/bootstrap?token=${token}`)
26
38
  .then((r) => (r.ok ? r.json() : null))
27
39
  .catch(() => null);
40
+ };
41
+ try {
42
+ const code = (location.hash.match(/pair=([A-Za-z0-9_-]+)/) || [])[1];
43
+ if (!code) return hello();
44
+ history.replaceState(null, "", location.pathname + location.search);
45
+ return fetch("/pair/redeem", {
46
+ method: "POST",
47
+ headers: { "content-type": "application/json" },
48
+ body: JSON.stringify({ code }),
49
+ })
50
+ .then((r) => (r.ok ? r.json() : null))
51
+ .catch(() => null)
52
+ .then((paired) => {
53
+ if (!paired || !paired.token) return hello();
54
+ localStorage.setItem("toyon-token", paired.token);
55
+ location.replace(`https://toyon.cloud/#add=${encodeURIComponent(location.origin)}`);
56
+ // nothing paints while the page is leaving
57
+ return new Promise(() => {});
58
+ });
28
59
  } catch {
29
60
  return Promise.resolve(null);
30
61
  }
@@ -2,7 +2,7 @@
2
2
  "id": "/",
3
3
  "name": "Toyon",
4
4
  "short_name": "Toyon",
5
- "description": "Checking an agent's work means running it. Toyon gives every chat its own copy of your web app, with a live preview.",
5
+ "description": "Toyon is where you ask for changes to your web app and try them as they happen. Every chat gets its own running copy with a live preview.",
6
6
  "start_url": "/",
7
7
  "display": "standalone",
8
8
  "display_override": [
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "toyon",
3
- "version": "0.2.0",
4
- "description": "Checking an agent's work means running it. Toyon gives every chat its own copy of your web app, with a live preview.",
3
+ "version": "0.4.0",
4
+ "description": "Toyon is where coding agents work on your web app while you check each change by using it. Every chat gets its own running copy with a live preview.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "homepage": "https://toyon.dev",
@@ -1 +0,0 @@
1
- import{c as h}from"./workers-BZi9jqBp.js";import{C as c,H as u,D as p,a as m,R as f,b as _,c as w,d as k,F as v,e as D,S as P,f as R,g as I}from"./lspLanguageFeatures-CvNG6b_1.js";import{h as y,i as T,j as U,t as x,k as j}from"./lspLanguageFeatures-CvNG6b_1.js";import{l as s}from"./Editor-D-PlbMSY.js";import"./index-jy_zeFGs.js";const C=120*1e3;class W{constructor(n){this._defaults=n,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>C&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=h({moduleId:"vs/language/css/cssWorker",createWorker:()=>new Worker(new URL("/assets/css.worker-CqwWTjeG.js",import.meta.url),{type:"module"}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...n){let e;return this._getClient().then(a=>{e=a}).then(a=>{if(this._worker)return this._worker.withSyncedResources(n)}).then(a=>e)}}function L(o){const n=[],e=[],a=new W(o);n.push(a);const r=(...t)=>a.getLanguageServiceWorker(...t);function l(){const{languageId:t,modeConfiguration:i}=o;g(e),i.completionItems&&e.push(s.registerCompletionItemProvider(t,new c(r,["/","-",":"]))),i.hovers&&e.push(s.registerHoverProvider(t,new u(r))),i.documentHighlights&&e.push(s.registerDocumentHighlightProvider(t,new p(r))),i.definitions&&e.push(s.registerDefinitionProvider(t,new m(r))),i.references&&e.push(s.registerReferenceProvider(t,new f(r))),i.documentSymbols&&e.push(s.registerDocumentSymbolProvider(t,new _(r))),i.rename&&e.push(s.registerRenameProvider(t,new w(r))),i.colors&&e.push(s.registerColorProvider(t,new k(r))),i.foldingRanges&&e.push(s.registerFoldingRangeProvider(t,new v(r))),i.diagnostics&&e.push(new D(t,r,o.onDidChange)),i.selectionRanges&&e.push(s.registerSelectionRangeProvider(t,new P(r))),i.documentFormattingEdits&&e.push(s.registerDocumentFormattingEditProvider(t,new R(r))),i.documentRangeFormattingEdits&&e.push(s.registerDocumentRangeFormattingEditProvider(t,new I(r)))}return l(),n.push(d(e)),d(n)}function d(o){return{dispose:()=>g(o)}}function g(o){for(;o.length;)o.pop().dispose()}export{c as CompletionAdapter,m as DefinitionAdapter,D as DiagnosticsAdapter,k as DocumentColorAdapter,R as DocumentFormattingEditProvider,p as DocumentHighlightAdapter,y as DocumentLinkAdapter,I as DocumentRangeFormattingEditProvider,_ as DocumentSymbolAdapter,v as FoldingRangeAdapter,u as HoverAdapter,f as ReferenceAdapter,w as RenameAdapter,P as SelectionRangeAdapter,W as WorkerManager,T as fromPosition,U as fromRange,L as setupMode,x as toRange,j as toTextEdit};
@@ -1 +0,0 @@
1
- import{l as e}from"./Editor-D-PlbMSY.js";import"./index-jy_zeFGs.js";const t=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],m={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["{{!--","--}}"]},brackets:[["<!--","-->"],["<",">"],["{{","}}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${t.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${t.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:e.IndentAction.Indent}}]},r={defaultToken:"",tokenPostfix:"",tokenizer:{root:[[/\{\{!--/,"comment.block.start.handlebars","@commentBlock"],[/\{\{!/,"comment.start.handlebars","@comment"],[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.root"}],[/<!DOCTYPE/,"metatag.html","@doctype"],[/<!--/,"comment.html","@commentHtml"],[/(<)(\w+)(\/>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)(\w+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/</,"delimiter.html"],[/\{/,"delimiter.html"],[/[^<{]+/]],doctype:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/[^>]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/\}\}/,"comment.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentBlock:[[/--\}\}/,"comment.block.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentHtml:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],handlebarsInSimpleState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3"}],{include:"handlebarsRoot"}],handlebarsInEmbeddedState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"handlebarsRoot"}],handlebarsRoot:[[/"[^"]*"/,"string.handlebars"],[/[#/][^\s}]+/,"keyword.helper.handlebars"],[/else\b/,"keyword.helper.handlebars"],[/[\s]+/],[/[^}]/,"variable.parameter.handlebars"]]}};export{m as conf,r as language};
@@ -1 +0,0 @@
1
- import{l as e}from"./Editor-D-PlbMSY.js";import"./index-jy_zeFGs.js";const t=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],r={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["<!--","-->"]},brackets:[["<!--","-->"],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${t.join("|")}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${t.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:e.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*<!--\\s*#region\\b.*-->"),end:new RegExp("^\\s*<!--\\s*#endregion\\b.*-->")}}},o={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,"metatag","@doctype"],[/<!--/,"comment","@comment"],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/</,"delimiter"],[/[^<]+/]],doctype:[[/[^>]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"module"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/'module'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}};export{r as conf,o as language};
@@ -1 +0,0 @@
1
- import{c as D}from"./workers-BZi9jqBp.js";import{H as d,D as l,h as c,F as u,b as h,S as m,c as p,f as w,g as _,C as R}from"./lspLanguageFeatures-CvNG6b_1.js";import{a as b,e as y,d as T,R as U,i as x,j as M,t as j,k as O}from"./lspLanguageFeatures-CvNG6b_1.js";import{l as t}from"./Editor-D-PlbMSY.js";import"./index-jy_zeFGs.js";const I=120*1e3;class f{constructor(n){this._defaults=n,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>I&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=D({moduleId:"vs/language/html/htmlWorker",createWorker:()=>new Worker(new URL("/assets/html.worker-DhJ4VZMp.js",import.meta.url),{type:"module"}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...n){let e;return this._getClient().then(r=>{e=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(n)}).then(r=>e)}}class v extends R{constructor(n){super(n,[".",":","<",'"',"=","/"])}}function F(i){const n=new f(i),e=(...o)=>n.getLanguageServiceWorker(...o);let r=i.languageId;t.registerCompletionItemProvider(r,new v(e)),t.registerHoverProvider(r,new d(e)),t.registerDocumentHighlightProvider(r,new l(e)),t.registerLinkProvider(r,new c(e)),t.registerFoldingRangeProvider(r,new u(e)),t.registerDocumentSymbolProvider(r,new h(e)),t.registerSelectionRangeProvider(r,new m(e)),t.registerRenameProvider(r,new p(e)),r==="html"&&(t.registerDocumentFormattingEditProvider(r,new w(e)),t.registerDocumentRangeFormattingEditProvider(r,new _(e)))}function L(i){const n=[],e=[],r=new f(i);n.push(r);const o=(...s)=>r.getLanguageServiceWorker(...s);function P(){const{languageId:s,modeConfiguration:a}=i;k(e),a.completionItems&&e.push(t.registerCompletionItemProvider(s,new v(o))),a.hovers&&e.push(t.registerHoverProvider(s,new d(o))),a.documentHighlights&&e.push(t.registerDocumentHighlightProvider(s,new l(o))),a.links&&e.push(t.registerLinkProvider(s,new c(o))),a.documentSymbols&&e.push(t.registerDocumentSymbolProvider(s,new h(o))),a.rename&&e.push(t.registerRenameProvider(s,new p(o))),a.foldingRanges&&e.push(t.registerFoldingRangeProvider(s,new u(o))),a.selectionRanges&&e.push(t.registerSelectionRangeProvider(s,new m(o))),a.documentFormattingEdits&&e.push(t.registerDocumentFormattingEditProvider(s,new w(o))),a.documentRangeFormattingEdits&&e.push(t.registerDocumentRangeFormattingEditProvider(s,new _(o)))}return P(),n.push(g(e)),g(n)}function g(i){return{dispose:()=>k(i)}}function k(i){for(;i.length;)i.pop().dispose()}export{R as CompletionAdapter,b as DefinitionAdapter,y as DiagnosticsAdapter,T as DocumentColorAdapter,w as DocumentFormattingEditProvider,l as DocumentHighlightAdapter,c as DocumentLinkAdapter,_ as DocumentRangeFormattingEditProvider,h as DocumentSymbolAdapter,u as FoldingRangeAdapter,d as HoverAdapter,U as ReferenceAdapter,p as RenameAdapter,m as SelectionRangeAdapter,f as WorkerManager,x as fromPosition,M as fromRange,L as setupMode,F as setupMode1,j as toRange,O as toTextEdit};
@@ -1 +0,0 @@
1
- @layer tokens,base,surfaces;@layer base{:root{--icon-inline-size: 13px}.icon-inline{width:var(--icon-inline-size);height:var(--icon-inline-size);vertical-align:-2px}}@layer tokens,base,surfaces;@layer base{.spinner{display:inline-block;flex-shrink:0;width:13px;height:13px;vertical-align:-2px;border-radius:50%;border:1.3px solid color-mix(in srgb,currentColor 25%,transparent);border-top-color:currentColor;animation:spin .8s linear infinite}.spinner-dot{width:8px;height:8px;vertical-align:0;border-width:1.5px;color:var(--text1)}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{border-color:currentColor;animation:pulse 1.2s ease-in-out infinite}}}@layer tokens,base,surfaces;@layer base{:where(.float){position:fixed;inset:auto;margin:0;border:0;padding:0;background:none;color:inherit;overflow:visible;width:auto;height:auto}@media(display-mode:window-controls-overlay){.float{-webkit-app-region:no-drag;app-region:no-drag}}}@layer tokens,base,surfaces;@layer base{.kbd{display:inline-flex;align-items:baseline;white-space:nowrap;font:var(--type-ui-sm);font-variant-numeric:tabular-nums;letter-spacing:.04em}.kbd-mod{margin-right:1px}.kbd-chip{justify-content:center;padding:3px 6px;color:var(--text0);background:var(--sunken);border:1px solid var(--border0);border-radius:var(--radius)}}@layer tokens,base,surfaces;@layer base{.tooltip{pointer-events:none;max-width:320px;width:max-content;padding:4px 8px;font:var(--type-ui);color:var(--text0);background:var(--surface1);border:1px solid var(--border1);border-radius:var(--radius-md);box-shadow:var(--elevation-float);white-space:pre-line;overflow-wrap:anywhere;animation:tooltip-in-bottom 90ms ease-out}.tooltip[data-side=top]{animation-name:tooltip-in-top}.tooltip[data-side=left]{animation-name:tooltip-in-left}.tooltip[data-side=right]{animation-name:tooltip-in-right}.tooltip[data-side=left]{text-align:right}.tooltip-key{margin-left:12px;color:var(--text1)}.tooltip-line{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.tooltip-pair{display:grid;grid-template-columns:auto auto;column-gap:12px;align-items:baseline}.tooltip-pair>span{text-align:right}.tooltip-pair .tooltip-key{margin-left:0}.tooltip-also{color:var(--text1)}.tooltip-lead{color:var(--text1);text-align:left}.tooltip-lead:last-child{text-align:right}.tooltip-detail{color:var(--text1)}.tooltip-dot{display:inline-block;vertical-align:middle;margin-right:6px}@keyframes tooltip-in-bottom{0%{opacity:0;transform:translateY(-2px)}}@keyframes tooltip-in-top{0%{opacity:0;transform:translateY(2px)}}@keyframes tooltip-in-left{0%{opacity:0;transform:translate(2px)}}@keyframes tooltip-in-right{0%{opacity:0;transform:translate(-2px)}}}@layer tokens,base,surfaces;@layer base{.btn{display:inline-flex;align-items:center;justify-content:center;--btn-gap: 4px;--btn-pad-x: 8px;gap:var(--btn-gap);line-height:1.4;color:var(--text1);border-radius:var(--radius);padding:1px var(--btn-pad-x);white-space:nowrap}.btn-md{padding:4px var(--btn-pad-x)}.btn-lg{padding:4px 16px}.btn:hover{color:var(--text0);background:var(--element0)}.btn:disabled{color:var(--text2);cursor:default;background:none}.btn-outline{border:1px solid var(--border1)}.btn-outline:hover{background:none;color:inherit;border-color:currentColor}.btn-outline:disabled{color:var(--text2);border-color:var(--border0)}.btn-icon{width:20px;height:20px;padding:2px;display:grid;place-items:center;color:var(--text1);border-radius:var(--radius);line-height:1}.btn-icon:hover{color:var(--text0);background:var(--element0)}.btn-icon:disabled{color:var(--text2);cursor:default;background:none}.btn-field{color:var(--text0);background:var(--sunken);border-color:var(--border0)}.btn-field:hover{color:var(--accent);background:var(--sunken);border-color:var(--accent)}.btn-field:disabled,.btn-field:disabled:hover{background:var(--sunken);border-color:var(--border0)}.btn-inline{display:inline;padding:0;border-radius:0;font:inherit;line-height:inherit;color:inherit;white-space:normal;text-decoration:underline dotted var(--border1);text-underline-offset:.2em}.btn-inline:hover{color:var(--text0);background:none;text-decoration:underline solid currentColor}.tone-primary{color:var(--accent)}.tone-quiet{color:var(--text2)}.tone-danger{color:var(--red)}.tone-strong{color:var(--text0)}.btn.on,.btn-icon.on{color:var(--accent)}.tone-chrome.on{color:var(--text0);background:var(--element1)}.tone-chrome:hover{color:var(--text0)}.btn-mono{font:var(--type-mono)}.btn-busy{position:relative}.btn-busy:disabled{color:transparent}.btn-busy>.spinner{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;color:var(--text2)}.deep-link{border-color:var(--border0);align-self:center}.deep-link:hover{color:var(--blue);border-color:var(--border1)}}@layer tokens,base,surfaces;@layer base{.crash{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:24px;text-align:center;background:var(--surface0)}.crash.in-pane{position:absolute;inset:var(--row-height-sm) 0 0 0}.crash-title{font:var(--type-ui);color:var(--text0)}.crash-body{max-width:520px;font:var(--type-mono);color:var(--text2);overflow-wrap:anywhere}}@layer tokens,base,surfaces;@layer base{.view{height:100%;overflow:auto;width:min(var(--view-measure),100%);margin:0 auto;padding:var(--view-top) var(--view-inset);display:flex;flex-direction:column;gap:var(--view-gap);color:var(--text0);font:var(--type-ui)}.view>p{margin:0}.view-anchored{padding-top:var(--view-anchor)}.view-wide{width:min(var(--view-measure-wide),100%);gap:var(--view-gap-wide)}}@layer tokens,base,surfaces;@layer base{.form-title{font:var(--type-ui-xl);color:var(--text0);overflow-wrap:anywhere}.form-head{display:flex;align-items:baseline;gap:10px;min-width:0}.form-body{display:flex;min-height:var(--form-body)}.form-body textarea{flex:1;width:100%;resize:none}.form-body-lg{min-height:var(--form-body-lg)}.form-body-lg>.composer{flex:1;background:none;border-top:none;padding:0}.form-knobs{display:flex;align-items:center;gap:var(--view-gap);min-width:0}.form-go{margin-left:auto}.form-sign{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text2);font:var(--type-mono)}}@layer tokens,base,surfaces;@layer base{.status-line{color:var(--text1);white-space:pre-wrap}.status-actions{display:flex;gap:8px}.status-tail{max-height:40vh;overflow:auto;font:var(--type-mono-sm);color:var(--text1);white-space:pre-wrap;overflow-wrap:anywhere}}@layer tokens,base,surfaces;@layer base{.field{background:var(--sunken);border:1px solid var(--border0);border-radius:var(--radius);color:var(--text0);font:var(--type-mono);padding:3px 8px;outline:none}.field:focus{border-color:var(--border1)}.field-md{padding:5px 8px;line-height:1.6}.field-lg{border-radius:var(--radius-md);padding:8px 10px}.field-ui{font:var(--type-ui)}.field-lead{font:var(--type-ui-xl)}.field-rule{background:none;border:none;border-bottom:1px solid var(--border0);border-radius:0;padding-left:0}.field-rule:focus{border-bottom-color:var(--border1)}.field-bare{background:none;border:none;border-radius:0;padding:0}}@layer tokens,base,surfaces;@layer base{.key-hints{display:flex;flex-wrap:wrap;gap:4px 12px;margin-inline:var(--picker-bleed, 0);padding:7px var(--picker-inset, 10px);color:var(--text2);font:var(--type-ui-sm);border-top:1px solid var(--border0)}.key-hint{display:inline-flex;align-items:baseline;gap:4px}}@layer tokens,base,surfaces;@layer base{.inline-picker{background:var(--surface1);border:1px solid var(--border1);border-radius:var(--radius-md);box-shadow:var(--elevation-float);padding:4px;overflow:hidden;--picker-bleed: -4px;--picker-inset: 8px}.inline-picker .picker-list{max-height:min(280px,40vh);margin-top:0}.inline-picker .key-hints{border-top:1px solid var(--border0);margin-top:4px;padding-top:6px}.picker-cmd{gap:8px}.picker-name{flex:0 0 auto;color:var(--text0)}.picker-desc{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-row.dim .picker-label{color:var(--text1)}.overlay-box.picker{padding:8px;--picker-bleed: -8px;--picker-inset: 18px;overflow:hidden}.overlay-box.picker input{width:100%}.overlay-box.picker .picker-input{margin:-8px -8px 0;padding:12px var(--picker-inset);background:var(--sunken);border-bottom:1px solid var(--border0);border-radius:var(--radius-lg) var(--radius-lg) 0 0}.overlay-box.anchored{--picker-inset: 8px}.overlay-box.anchored .picker-input{padding-block:5px}.picker-chip{padding:1px 8px;flex:none;display:inline-flex;align-items:center;min-height:20px;max-width:160px;background:var(--surface2);border-radius:var(--radius);color:var(--text0);font:var(--type-mono);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.picker-input{display:flex;align-items:center;gap:6px}.picker-input .btn-icon{flex:none}.picker-caret{position:relative;display:flex;flex:1;min-width:0}.picker-ghost{position:absolute;top:0;right:0;bottom:0;left:0;font:var(--type-mono);color:var(--text2);white-space:pre;overflow:hidden;pointer-events:none}.picker-typed{visibility:hidden}.picker-ghost-param{text-decoration:underline dotted;text-underline-offset:3px}.picker-list{max-height:50vh;overflow-y:auto;margin:6px var(--picker-bleed, 0) 0}.picker-list .empty{padding-inline:var(--picker-inset, 10px)}.picker-item{position:relative;display:block;width:100%;text-align:left;font:var(--type-mono);color:var(--text1);min-height:var(--row-height-sm);padding:4px var(--picker-inset, 10px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-row{display:flex;align-items:center;gap:12px}.picker-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.picker-hint{flex-shrink:0}.picker-item .hit{font-weight:inherit;color:var(--accent)}.picker-item:hover{background:var(--element0);--row-dim-color: var(--text1)}.picker-item[data-state~=cursor]{background:var(--element1);color:var(--text0);--row-dim-color: var(--text1)}}@layer tokens,base,surfaces;@layer base{.ring{display:inline-block;flex-shrink:0;vertical-align:-2px;transform:rotate(-90deg)}.ring circle{fill:none;stroke:currentColor;stroke-width:1.5}.ring .ring-track{opacity:.25}.ring .ring-fill{stroke-linecap:round}}@layer tokens,base,surfaces;@layer base{.chip-picker{display:inline-flex;align-items:center}.chip-picker>.overlay-box.anchored{width:min(360px,calc(100vw - 16px))}.chip-picker .picker-list{max-height:min(280px,40vh)}.chip-picker-lead{flex:none;max-width:160px;overflow:hidden;text-overflow:ellipsis}.chip-picker>.overlay-box.anchored[data-side=top]{display:flex;flex-direction:column-reverse}.chip-picker>.overlay-box.anchored[data-side=top] .picker-input{margin:0 -8px -8px;border-bottom:0;border-top:1px solid var(--border0);border-radius:0 0 var(--radius-lg) var(--radius-lg)}.chip-picker>.overlay-box.anchored[data-side=top] .picker-list{margin:0 var(--picker-bleed, 0) 6px}.chip-picker>.overlay-box.anchored[data-align=end] .picker-input{flex-direction:row-reverse}.chip-option{display:flex;flex-direction:column;gap:1px;min-width:0}.chip-option-name{color:var(--text0)}.chip-option-suffix{color:var(--text1)}.chip-option-desc{font:var(--type-ui-sm);white-space:normal;overflow-wrap:anywhere}.chip-option-off{opacity:.45}}@layer tokens,base,surfaces;@layer base{.overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--scrim);display:grid;justify-items:center;align-content:start;padding-top:clamp(72px,18vh,220px);z-index:1}.overlay-box{width:min(560px,90%);background:var(--surface1);box-shadow:var(--elevation-overlay);border:1px solid var(--border0);border-radius:var(--radius-lg);padding:14px}.overlay-box.anchored{width:min(460px,calc(100vw - 60px));box-shadow:var(--elevation-float)}}@layer tokens,base,surfaces;@layer surfaces{.mode-chip.mode-held{color:var(--yellow)}.model-chip,.effort-chip{max-width:16em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@layer tokens,base,surfaces;@layer base{.check{display:inline-flex;align-items:center;gap:8px;cursor:default}.check:has(.check-box:disabled){color:var(--text2)}.check-box{accent-color:var(--accent);margin:0;flex-shrink:0}}@layer tokens,base,surfaces;@layer surfaces{.chat-dock{width:380px;flex:0 1 auto;min-width:var(--dock-min);background:var(--surface1);border-left:1px solid var(--border0);display:flex;flex-direction:column;position:relative}.app[data-chat-side=left] .chat-dock{border-left:0;border-right:1px solid var(--border0)}.chat-centre{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column}.chat-centre .chat-log,.chat-centre .draft-intro,.chat-centre .chat-input{padding-inline:max(12px,calc((100% - var(--chat-measure)) / 2))}.chat-centre .chat-centre-note{margin:0}.chat-centre .chat-input{--composer-min: 120px;background:var(--sunken-floor)}.chat-centre .chat-input .pick-chip{background:var(--surface0)}.chat-wrap{flex:1;min-height:0;position:relative;display:flex}.chat-log{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px}.chat-log>*:first-child,.chat-log>.tool-row[open]:first-child{margin-top:auto}.chat-log>*{flex-shrink:0}.jump-down{position:absolute;bottom:10px;left:50%;transform:translate(-50%);background:var(--element0);border:1px solid var(--border1);border-radius:var(--radius-pill);padding:3px 12px;color:var(--text0);box-shadow:0 2px 10px var(--shadow)}.jump-down:hover{border-color:var(--accent);color:var(--accent)}.msg-user{background:var(--surface2);border-radius:var(--radius-md);padding:8px 10px;align-self:flex-end;max-width:92%;white-space:pre-wrap}.msg-user[data-state~=cursor]{--row-edge-color: var(--accent);background:var(--element1);border-start-start-radius:0;border-end-start-radius:0}.queued-msg{opacity:.65;border:1px dashed var(--border1);background:var(--surface1);display:flex;gap:8px;align-items:baseline}.queued-tag{font:var(--type-ui-sm);color:var(--yellow);flex-shrink:0}.queued-text{flex:1;overflow-wrap:break-word;min-width:0}.queued-actions{display:flex;gap:4px;flex-shrink:0}.msg-assistant{white-space:pre-wrap;color:var(--text0);max-width:100%;overflow-wrap:break-word}.msg-assistant[data-state~=cursor]{--row-edge-color: var(--accent);background:var(--element1);margin:-4px -6px;padding:4px 6px;max-width:calc(100% + 12px)}.msg-assistant.md{white-space:normal;line-height:1.6}.md p{margin:0 0 8px}.md p:last-child{margin-bottom:0}.md ul,.md ol{margin:0 0 8px;padding-left:20px}.md li{margin:2px 0}.md h1,.md h2,.md h3,.md h4{font-weight:var(--weight-strong);margin:10px 0 4px;color:var(--text0)}.md pre{background:var(--code);border-radius:var(--radius-md);padding:8px 10px;overflow-x:auto;margin:0 0 8px;font:var(--type-mono)}.md pre code{background:none;padding:0;font-size:inherit;line-height:inherit;overflow-wrap:normal}.md a{color:var(--blue)}.md blockquote{border-left:3px solid var(--border1);margin:0 0 8px;padding-left:10px;color:var(--text1)}.md strong{color:var(--text0)}.md hr{border:none;border-top:1px solid var(--border0);margin:10px 0}.md table{border-collapse:collapse;margin:0 0 8px}.md th,.md td{border:1px solid var(--border0);padding:3px 8px}.msg-error{color:var(--red)}.auth-card{margin:6px 0;padding:10px 12px;border:1px solid var(--border0);border-radius:var(--radius-lg);background:var(--surface0)}.auth-card.done{color:var(--text2)}.auth-title{color:var(--text0);margin-bottom:8px}.auth-card.done .auth-title{color:var(--text2);margin-bottom:0}.auth-methods{display:flex;flex-wrap:wrap;gap:6px}.auth-hint{margin-top:8px}.auth-key{display:flex;gap:6px;margin-top:8px}.auth-key .field{flex:1}.working-row{display:flex;align-items:center;gap:10px;color:var(--text2);font-style:italic}.chat-archived{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.chat-archived p{margin:0}.working-quiet{margin-left:6px;font-variant-numeric:tabular-nums}.tool-row{font:var(--type-mono);color:var(--text2);margin:-5px -12px}.tool-row[open]{margin:-5px -12px 0;background:var(--sunken);border-bottom:1px solid var(--border0);position:relative}.tool-row[data-state~=cursor]{position:relative}.tool-row[data-state~=cursor]>summary{background:var(--element0)}.tool-row[open]:before,.tool-row[data-state~=cursor]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent)}.tool-row summary{min-height:var(--row-height-sm);padding:0 var(--row-inset);cursor:pointer;list-style:none;display:flex;gap:6px;align-items:center;min-width:0}.tool-row summary::-webkit-details-marker{display:none}.tool-row summary:hover,.tool-row[open]>summary{background:var(--element1)}.tool-row summary:hover .tool-hint,.tool-row[open]>summary .tool-hint{color:var(--text0)}.tool-row summary:hover .tool-icon,.tool-row[open]>summary .tool-icon{color:var(--text1)}.tool-row summary:hover .tool-name,.tool-row[open]>summary .tool-name{color:var(--text1)}.tool-row summary:hover .live-text,.tool-row[open]>summary .live-text{--live-dim: var(--text1)}.tool-row .tool-name{color:var(--text2);flex:0 0 auto;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-row .tool-icon{flex:0 0 auto;width:13px;height:13px;color:var(--text2)}.tool-row.error .tool-icon{color:var(--red)}.tool-row.nested summary{padding-left:30px;position:relative}.tool-row.nested summary:before{content:"";position:absolute;left:17px;top:0;bottom:0;width:1px;background:var(--border0)}.tool-row.nested[open]:before{left:17px}.tool-row.nested[open]>summary:before{display:none}.tool-row.nested .tool-out,.tool-row.nested .tool-block.cmd{padding-left:30px}.tool-row.spawn .tool-name,.tool-row.spawn .tool-hint{color:var(--text1)}.tool-row .spawn-run{display:flex;flex-direction:column;gap:10px;padding:5px 12px}.tool-row .spawn-run+.tool-part{border-top:1px solid var(--border0)}.tool-row .tool-hint,.blocked-row .tool-hint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text2)}.tool-row .tool-hint{flex:1 1 auto;min-width:0}.tool-row.error .tool-name{color:var(--red)}.tool-row .tool-count{font-variant-numeric:tabular-nums;flex:0 0 auto;color:var(--text1)}.tool-row .tool-part+.tool-part{border-top:1px solid var(--border0)}.tool-row .tool-out{display:flex;flex-direction:column;gap:6px;padding:6px 12px;background:var(--surface1)}.tool-row .tool-note{font:var(--type-mono-sm);margin:0;color:var(--text1);white-space:pre-wrap}.tool-row .thought-out{font:var(--type-ui);line-height:1.6;color:var(--text1)}.tool-row .tool-block{font:var(--type-mono-sm);margin:0;overflow-x:auto;color:var(--text1)}.tool-row .tool-block.cmd{padding:6px 12px;background:var(--sunken);color:var(--text0);white-space:pre-wrap;word-break:break-word}.tool-row .tool-out .tool-block.diff{margin:0 -12px}.tool-row .tool-out .tool-block.diff:first-child{margin-top:-6px}.tool-row .tool-out .tool-block.diff:last-child{margin-bottom:-6px}.tool-row .tool-block.diff .dl{display:block;padding-left:12px;min-width:100%;width:max-content}.tool-row .dl.add,.tool-row .dl.del{color:var(--text0)}.tool-row .dl.add{background:var(--diff-add)}.tool-row .dl.del{background:var(--diff-del)}.tool-row .dl.add .ch{background:var(--diff-add-word)}.tool-row .dl.del .ch{background:var(--diff-del-word)}.tool-row .dl.hunk{width:auto;padding:0;height:1px;margin:6px 0;background:var(--surface2)}.tool-row .dl.hunk:first-child{display:none}.tool-row .dl.meta{color:var(--text2)}.tool-row .dl.more{border:0;border-top:1px solid var(--border0);margin-top:4px;padding:5px 12px;background:none;color:var(--text2);font:inherit;text-align:left;cursor:pointer}.tool-row .dl.more:disabled{cursor:default}.tool-row .dl.more:not(:disabled):hover{color:var(--text0);background:var(--surface2)}.live-text{--live-dim: var(--text2);background:linear-gradient(90deg,var(--live-dim) 30%,var(--text0) 45%,var(--text0) 55%,var(--live-dim) 70%);background-size:300% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:shine 2.6s linear infinite}@keyframes shine{0%{background-position:150% 0}to{background-position:-150% 0}}@media(prefers-reduced-motion:reduce){.live-text{background:none;-webkit-text-fill-color:currentColor;color:var(--text0);animation:none}}.blocked-row,.graft-row,.landed-row{padding:4px 8px;font:var(--type-mono);color:var(--text1);background:var(--surface0);border-left:2px solid var(--red)}.blocked-row .blocked-tag,.blocked-row .graft-tag,.blocked-row .landed-tag,.graft-row .blocked-tag,.graft-row .graft-tag,.graft-row .landed-tag,.landed-row .blocked-tag,.landed-row .graft-tag,.landed-row .landed-tag{color:var(--red);font:var(--type-ui-sm)}.blocked-row .tool-name,.graft-row .tool-name,.landed-row .tool-name{color:var(--text1)}.graft-row,.landed-row,.blocked-row .blocked-head{display:flex;align-items:center;gap:8px}.landed-row .landed-text{flex:1;min-width:0;overflow-wrap:anywhere}.landed-row{border-left-color:var(--accent)}.landed-row .landed-tag{color:var(--accent)}.composer-notice{overflow-wrap:anywhere}.blocked-row .blocked-why{margin-top:2px;font:var(--type-ui-sm)}.graft-row{border-left-color:var(--accent)}.graft-row .graft-tag{color:var(--accent)}.chat-dock .chat-input{--composer-min: 160px}.paste-chip .pick-file{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.composer-ghost{position:absolute;top:0;right:0;bottom:0;left:0;font:var(--type-ui);color:var(--text2);white-space:pre-wrap;overflow:hidden;pointer-events:none}.composer-field.shell .composer-ghost{font:var(--type-mono)}.composer-field.recalled .field{color:var(--text1)}.composer-placeholder{color:var(--text1)}.composer-subline{opacity:.8}.chat-input .pick-chip{background:var(--surface1)}.composer-term{position:relative}.composer-term-dot{position:absolute;top:1px;right:1px;width:5px;height:5px;border-radius:50%;background:var(--red);box-shadow:0 0 0 1.5px var(--surface0)}.composer-term:hover .composer-term-dot,.composer-term.on .composer-term-dot{box-shadow:0 0 0 1.5px var(--border0)}.composer-verb{pointer-events:auto}.spawn-left{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0}.spawn-left>.btn-icon{margin-left:6px}.spawn-left>.chip-picker:first-child>.btn{margin-left:calc(-1 * var(--btn-pad-x))}.spawn-tools{display:flex;align-items:center;gap:20px;flex-shrink:0}.draft-intro{flex:1;min-height:0;overflow:visible;padding:12px 10px;display:flex;flex-direction:column;justify-content:flex-end;gap:6px;font:var(--type-ui);color:var(--text0)}.draft-intro .hint{margin:0}.draft-intro b{color:var(--text1);font:var(--type-mono)}.draft-notes{margin-top:4px;padding-top:8px;border-top:1px solid var(--border0);display:flex;flex-direction:column;gap:6px}.draft-note{font-variant-numeric:tabular-nums}.draft-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.draft-row>.btn:first-child{margin-left:calc(-1 * var(--btn-pad-x))}.draft-runs>.chip-picker>.btn{margin-right:calc(-1 * var(--btn-pad-x))}.draft-variants{display:flex;align-items:center;gap:2px}.draft-variants>span{margin-left:4px}.draft-runs{display:flex;align-items:center;gap:6px;margin-left:auto}.pick-chip{padding:4px 8px;display:flex;align-items:center;gap:8px;margin-bottom:6px;background:var(--sunken);border:1px solid var(--border1);border-left:3px solid var(--accent);border-radius:var(--radius);font:var(--type-mono);color:var(--text0)}.pick-chip .pick-target{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pick-chip .pick-file{color:var(--text2)}.pick-chip .pick-open{padding:0;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:2px}.pick-chip .pick-open:hover{text-decoration-color:currentColor}.pick-chip.in-chat{margin:6px 0 0;padding:2px 6px;cursor:default;display:inline-flex}.pick-chip.in-chat:hover{border-color:var(--accent)}.pick-chip .image-link{display:flex;align-items:center;gap:8px;flex:1;min-width:0;color:inherit;text-decoration:none}.image-chip .image-thumb{width:40px;height:40px;object-fit:cover;border-radius:var(--radius);background:var(--surface2);flex:none}.image-chip.in-chat{display:flex;padding:3px 6px}.image-peek{pointer-events:none;background:var(--surface1);border:1px solid var(--border1);border-radius:var(--radius-md);box-shadow:var(--elevation-float);overflow:hidden;animation:tooltip-in-left 90ms ease-out}.image-peek[data-side=right]{animation-name:tooltip-in-right}.image-peek img{display:block;width:auto;height:auto;max-width:min(640px,45vw);max-height:70vh;background:var(--surface2)}.msg-attachments{display:flex;flex-direction:column;gap:4px;padding-top:2px;margin-bottom:6px}.msg-attachments:last-child{margin-bottom:0}.msg-attachments .pick-chip.in-chat{margin:0}.chat-dock.drop-over:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;box-shadow:inset 0 0 0 1px var(--accent)}.ask-card{min-width:0;margin:6px 0;padding:10px 12px;border:1px solid var(--border0);border-left:2px solid var(--accent);border-radius:var(--radius-lg);background:var(--surface0);outline:none;--picker-bleed: -12px;--picker-inset: 12px;overflow:hidden}.ask-card.done{border-left-color:var(--border0);color:var(--text2)}.ask-card:focus-visible{border-color:var(--border1)}.ask-lead{color:var(--text0);margin-bottom:8px}.ask-card.done .ask-lead{color:var(--text2);margin-bottom:4px}.ask-block+.ask-block{margin-top:10px;padding-top:10px;border-top:1px solid var(--border0)}.ask-header{color:var(--text2);margin-bottom:2px}.ask-text{color:var(--text1);margin-bottom:6px}.ask-options{margin:6px var(--picker-bleed) 0}.ask-opt{font:var(--type-ui);align-items:baseline;white-space:normal;--row-edge-x: 6px}.ask-opt .picker-desc{white-space:normal;overflow:visible}.ask-num{flex:none;justify-content:flex-end;min-width:10px}.ask-opt[data-state~=checked]{--row-edge-color: var(--accent)}.ask-opt.deny .picker-name{color:var(--red)}.ask-preview{margin:6px 0 0;padding:6px 8px;background:var(--sunken);border-radius:var(--radius);color:var(--text1);overflow-x:auto;white-space:pre}.ask-note{display:block;width:100%;margin-top:6px;resize:vertical}.ask-foot{display:flex;align-items:center;gap:8px;margin-top:10px}.ask-keys{margin-top:10px;margin-bottom:-10px}.ask-detail{max-height:40vh;overflow-y:auto;margin-bottom:10px;padding:8px 10px;background:var(--sunken);border-radius:var(--radius)}.ask-answered{color:var(--text2)}.ask-answered .ask-header{margin-right:6px}}@layer tokens,base,surfaces;@layer base{.pane{position:relative;isolation:isolate;border-top:1px solid var(--border0);background:var(--surface0);--tabs-ground: var(--surface0);--tabs-strip: var(--sunken-floor);flex-shrink:1}.pane .pane-head{display:flex;gap:12px;padding:0 16px;min-height:var(--row-height-sm);align-items:center}.pane .pane-head-tabs{padding:0;gap:0}.pane .pane-head-tabs .tabs{flex:1}.pane .pane-title{flex:1;font:var(--type-mono);color:var(--text1)}.pane-resize{position:absolute;top:-3px;left:0;right:0;height:6px;cursor:row-resize;z-index:1}.pane-resize:hover{background:var(--element0)}body.resizing .pane-resize{background:var(--element0)}}@layer tokens,base,surfaces;@layer base{.tabs{display:flex;align-items:stretch;min-height:var(--tabs-height, var(--row-height-sm));flex-shrink:0;min-width:0;background:var(--tabs-strip, var(--sunken))}.tabs-list{display:flex;align-items:stretch;min-width:0;overflow-x:auto;scrollbar-width:none}.tabs-list::-webkit-scrollbar{display:none}.tabs-fill .tabs-list{flex:1}.tab{position:relative;display:flex;align-items:stretch;flex-shrink:0;color:var(--text1);font:var(--type-ui-sm)}.tab:hover{color:var(--text0)}.tab[data-state~=current]{background:var(--tabs-ground, var(--surface0));color:var(--text0)}.tabs-fill .tab{flex:1;min-width:0}.tabs-mono .tab{font:var(--type-mono-sm)}.tab-btn{flex:1;min-width:0;display:inline-flex;align-items:center;gap:6px;padding:0 var(--row-inset);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabs-fill .tab-btn{justify-content:center}.tab-count{color:var(--text2);font-variant-numeric:tabular-nums}.tab-trailed .tab-btn{padding-right:calc(var(--row-inset) + 26px)}.tab-trail{position:absolute;top:0;bottom:0;right:6px;display:flex;align-items:center}.tabs-end{margin-left:auto;display:flex;align-items:center;gap:12px;padding:0 16px 0 12px;flex-shrink:0}}@layer tokens,base,surfaces;@layer surfaces{.design-pane{height:55%;min-height:160px;min-width:0;display:flex;flex-direction:column}.design-pane.full{flex:1;min-height:0;height:auto}.design-body{min-width:0;overflow:auto;padding:28px 20px 80px;color:var(--text0);font:var(--type-ui)}.design-section{margin-bottom:52px}.design-h{font:var(--type-ui-lg);font-weight:var(--weight-title);color:var(--text0);margin:0 0 16px;display:flex;align-items:baseline;gap:8px}.design-note{font:var(--type-ui-sm);color:var(--text2);font-weight:400}.design-gap{margin:0;padding:8px 10px;background:var(--sunken);color:var(--text2);font:var(--type-ui-sm);line-height:1.5}.design-tag{padding:0 5px;background:var(--sunken);color:var(--text2);font:var(--type-mono);margin-left:auto}.design-tail>summary{display:flex;align-items:center;gap:10px;width:calc(100% + 40px);margin-left:-40px;min-height:var(--row-height-sm);padding:0 10px 0 2px;cursor:pointer;color:var(--text2);font:var(--type-ui);list-style:none}.design-tail>summary:hover{background:var(--element0);color:var(--text1);--row-dim-color: var(--text1)}.design-tail>summary::-webkit-details-marker{display:none}.design-group{margin-bottom:30px}.design-group-name{display:block;font:var(--type-mono);color:var(--text1);margin-bottom:9px}.design-grid{display:grid;grid-template-columns:repeat(auto-fit,var(--design-cell));justify-content:start}.design-breakout{min-width:0}.design-cell{display:flex;flex-direction:column;min-width:0;border:1px solid var(--border0);margin:0 -1px -1px 0}.design-sample{height:96px;display:flex;align-items:center;justify-content:center;background:var(--sunken)}.design-fill{display:block;width:100%;height:100%}.design-faces{display:flex;flex-direction:column;gap:22px}.design-face-group{display:flex;flex-direction:column}.design-face-family{font:var(--type-mono);color:var(--text1)}.design-face,.design-face-head{display:flex;align-items:baseline;gap:10px;min-width:0;width:calc(100% + 40px);margin-left:-40px;padding:2px 10px 2px 40px}.design-face:hover,.design-face-head:hover{background:var(--element0);--row-edge-color: var(--accent);--row-dim-color: var(--text1)}.design-face-head{margin-bottom:2px}.design-face-sample{color:var(--text0);white-space:nowrap}.design-face-name{font:var(--type-mono-sm);white-space:nowrap}.design-plate{display:flex;flex-direction:column;padding:5px 7px 6px}.design-cell-name{font:var(--type-mono);color:var(--text0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.design-cell-line{display:flex;align-items:baseline;gap:8px;min-width:0}.design-cell-value{font-variant-numeric:tabular-nums;flex:1;min-width:0}.design-cell-note{flex-shrink:0}.design-cell[data-kind=color] .design-cell-value,.design-cell-note{color:var(--text2)}.design-cell-value,.design-cell-note{font:var(--type-mono);color:var(--text1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.design-scale{display:block;height:3px;margin-top:5px;background:var(--border1)}.design-rows{list-style:none;margin:0;padding:0}.design-row{display:flex;align-items:center;gap:10px;width:calc(100% + 40px);margin-left:-40px;min-height:var(--row-height-sm);text-align:left;padding:0 10px 0 2px;border:0;background:none;color:inherit;font:inherit;cursor:pointer}.design-row:disabled{cursor:default}.design-row:hover:not(:disabled),.design-row:focus-visible{background:var(--element0);--row-edge-color: var(--accent);--row-dim-color: var(--text1);outline:none}.design-count{width:28px;flex-shrink:0;text-align:right;font:var(--type-mono)}.design-name{color:var(--text0);font:var(--type-mono);flex-shrink:0}.design-path{font:var(--type-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.design-variants{display:flex;flex-wrap:wrap;gap:5px}.design-variant{padding:0 5px;background:var(--sunken);color:var(--text2);font:var(--type-mono)}.design-section{max-width:1500px;margin-inline:auto}.design-h,.design-group-name,.design-rows,.design-faces,.design-gap,.design-tail{max-width:var(--design-column);margin-inline:auto}}@layer tokens,base,surfaces;@layer surfaces{.editor-pane{height:45%;min-height:120px;display:flex;flex-direction:column}.editor-pane.full{flex:1;min-height:0;height:auto}.editor-pane .monaco-editor .diff-hidden-lines .center{font:var(--type-ui-sm)}.editor-note{display:flex;align-items:center;gap:8px;min-height:var(--row-height-sm);padding:0 16px;border-bottom:1px solid var(--border0);background:var(--surface1);font:var(--type-ui-sm)}.editor-note-text{flex:1;color:var(--text0)}.editor-body{position:relative;flex:1;min-height:0}.editor-monaco{position:absolute;top:0;right:0;bottom:0;left:0}}@layer tokens,base,surfaces;@layer surfaces{.chats-hit{white-space:normal;padding:5px var(--picker-inset, 10px)}.chats-where{display:flex;gap:6px;align-items:baseline;min-width:0;color:var(--text1)}.chats-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chats-said{flex:none;margin-inline-start:auto}.chats-text{display:block;color:var(--text1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chats-hit[data-state~=cursor] .chats-name,.chats-hit[data-state~=cursor] .chats-text{color:var(--text0)}}@layer tokens,base,surfaces;@layer surfaces{.folder-row .picker-label{flex:0 1 auto}.folder-row .picker-hint{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl}.new-project-row .picker-label{display:flex;align-items:center;gap:6px}.keys-card{background:var(--surface1);border:1px solid var(--border1);border-radius:var(--radius-lg);padding:18px 24px 20px;box-shadow:var(--elevation-overlay);font:var(--type-ui);color:var(--text0);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:40px;row-gap:0;align-items:start}.keys-stack{display:grid;gap:12px;width:min(560px,90%)}.keys-card.keys-settings{display:block;padding:12px 24px}.keys-chip{min-width:0}.keys-v{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.keys-setting{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:var(--row-height)}.keys-row{display:grid;grid-template-columns:40px 1fr;gap:12px;align-items:center;min-height:var(--row-height-sm)}.keys-row .kbd{justify-self:start;color:var(--text0)}.keys-d{color:var(--text1)}.agent-page-back{display:flex;align-items:center;min-height:var(--row-height)}.keys-h{display:flex;align-items:flex-end;min-height:var(--row-height-sm);padding:0 0 2px 2px}.theme-kinds{display:inline-flex;gap:6px;align-items:center}.theme-kinds .kind{width:44px;text-align:center;border:1px solid transparent;border-radius:var(--radius);padding:0}.theme-kinds .kind[data-state~=current]{color:var(--accent)}.search-hit{white-space:normal;padding:5px var(--picker-inset, 10px)}.search-loc,.search-text{display:block;color:var(--text1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-hit[data-state~=cursor] .search-loc,.search-hit[data-state~=cursor] .search-text{color:var(--text0)}.ref-row .picker-label{display:flex;align-items:center;gap:6px}.qo-file{display:flex;align-items:baseline;gap:8px}.qo-file .xy{width:12px}.qo-file .name{color:var(--text0);flex-shrink:0}.qo-file .dir{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;direction:rtl;text-align:left}}@layer tokens,base,surfaces;@layer surfaces{.term-pane{min-height:140px;display:flex;flex-direction:column}.term-body{flex:1;min-height:0;padding:2px 8px 4px}.term-host{height:100%}.term-host .xterm .xterm-viewport{background-color:transparent}}@layer tokens,base,surfaces;@layer base{.form-row{display:flex;gap:12px;align-items:flex-start;min-height:var(--row-height)}.form-label{width:56px;flex-shrink:0;min-height:var(--row-height);display:flex;align-items:center;color:var(--text1)}.form-control{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.form-control>.field{width:100%}.form-control textarea.field{resize:none}}@layer tokens,base,surfaces;@layer surfaces{.center{position:relative;flex:1 0 320px;min-width:0;background:var(--surface0);display:flex;flex-direction:column;isolation:isolate}.center-area{flex:1;min-height:80px;display:flex;flex-direction:column}.frames-wrap{flex:1;min-height:0;position:relative}.frames-wrap iframe{width:100%;height:100%;border:none;background:#fff}.new-project-field{flex:0 1 auto;min-width:0;max-width:100%}.new-project-url{margin:0;font:var(--type-mono);color:var(--text1);overflow-wrap:anywhere}.new-project-where{display:flex;align-items:center;gap:6px;min-height:var(--row-height);min-width:0;flex:0 1 auto}.new-project-parent{color:var(--text0);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.new-project-folder{flex-shrink:0}.new-project-identity{display:flex;gap:8px}.new-project-identity>.field{flex:1;min-width:0}.agent-ask{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.new-project-open{align-self:flex-start;margin-left:calc(-1 * var(--btn-pad-x))}.setup-proc{display:flex;gap:6px;align-items:center}.setup-name{width:90px;flex-shrink:0}.setup-cmd{flex:1;min-width:0}.setup-land{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.import-idle,.import-error{color:var(--text2)}}@layer surfaces{.boot-procs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.boot-proc{display:grid;grid-template-columns:auto 1fr auto;align-items:center;column-gap:12px}.boot-proc .boot-name{font:var(--type-mono);color:var(--text0)}.boot-proc .boot-status{color:var(--text1)}.boot-proc .boot-detail{grid-column:1 / -1;color:var(--text0)}.boot-proc.boot-bad .boot-status{color:var(--red)}}@layer tokens,base,surfaces;@layer surfaces{.changes-dock{width:220px;flex:0 1 auto;min-width:var(--dock-min);background:var(--surface1);--tabs-ground: var(--surface1);--tabs-strip: var(--sunken);--tabs-height: var(--row-height);border-right:1px solid var(--border0);display:flex;flex-direction:column;overflow:hidden}.changes-list{flex:1;min-height:0;overflow-y:auto;outline:none}.changes-dock.collapsed,.chat-dock.collapsed{display:none}.app[data-chat-side=left] .changes-dock{border-right:0;border-left:1px solid var(--border0)}.log-row[data-state~=current]{background:var(--element1);color:var(--text0)}.log-row[data-state~=current],.log-row[data-state~=cursor]{--row-edge-color: var(--accent)}.log-row .subject{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-row .at{font:var(--type-mono-sm);margin-left:auto;padding-left:8px;flex-shrink:0}.changes-list.history .git-file{padding-left:28px}.changes-list .section-title{padding:10px 12px 4px}.git-file[data-state~=current]{background:var(--element1);color:var(--text0)}.git-file[data-state~=current],.git-file[data-state~=cursor]{--row-edge-color: var(--accent)}.git-file .xy{width:18px}.git-file .path{display:flex;align-items:baseline;gap:6px;flex:1;min-width:0}.git-file .name{flex-shrink:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.git-file .dir{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.counts{font:var(--type-mono-sm);margin-left:auto;padding-left:8px;flex-shrink:0;display:inline-flex;gap:5px;opacity:.75;font-variant-numeric:tabular-nums}.counts .add{color:var(--green)}.counts .del{color:var(--red)}.commit-box{flex-shrink:0}.commit-box textarea{field-sizing:content;min-height:3lh;max-height:8lh}.commit-where{display:flex;align-items:center;gap:6px;min-width:0}.commit-where>:not(.branch-name){flex-shrink:0;white-space:nowrap}.branch-name{color:var(--text1);font:var(--type-mono-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit-acts{display:flex;align-items:center;gap:4px;flex-shrink:0}}@layer tokens,base,surfaces;@layer surfaces{.rail-item,.rail-disc-item{--row-edge-x: calc(var(--rail-inner) - 100cqw)}.rail-item:hover{--dot-gap: var(--element0)}.rail-item[data-state~=current]{--row-edge-color: var(--accent);color:var(--text0);background:var(--element1);--dot-gap: var(--element1)}.rail-item[data-state~=checked]{--row-edge-color: var(--aqua);background:var(--element1)}.rail-item .branch,.rail-disc-item .branch{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.rail{--rail-gut: 30px}.rail-gut{position:absolute;left:var(--rail-far-l);right:var(--rail-far-r);top:0;bottom:0;width:var(--rail-gut);display:flex;align-items:center;justify-content:center}.rail-plus{display:flex}.rail-graft{display:flex;border-top:1px solid var(--border0);align-items:center;padding:4px 6px;gap:2px}.rail-graft-check{accent-color:var(--accent);pointer-events:none;margin:0}.rail-counts{display:flex;gap:6px;flex-shrink:0;font:var(--type-mono);font-variant-numeric:tabular-nums}.rail-count{width:3ch;text-align:right}.rail-item .rail-badge,.rail-disc-item .rail-badge{font:var(--type-mono);flex-shrink:0}.rail-item .rail-badge.clickable,.rail-disc-item .rail-badge.clickable{padding:1px 4px;border-radius:var(--radius-xs)}.rail-item .rail-badge.clickable:hover,.rail-disc-item .rail-badge.clickable:hover{background:var(--element0)}.rail-item .rail-badge .act,.rail-item .rail-badge.clickable:hover .num,.rail-disc-item .rail-badge .act,.rail-disc-item .rail-badge.clickable:hover .num{display:none}.rail-item .rail-badge.clickable:hover .act,.rail-disc-item .rail-badge.clickable:hover .act{display:inline}.rail-item .rail-more,.rail-disc-item .rail-more{display:none;padding:2px;border-radius:var(--radius-xs)}.rail-item:hover .rail-more,.rail-disc-item:hover .rail-more{display:flex}.rail-item .rail-at,.rail-disc-item .rail-at{font:var(--type-mono-sm);font-variant-numeric:tabular-nums}.rail-item:hover .rail-at,.rail-item.menu-open .rail-at,.rail-disc-item:hover .rail-at,.rail-disc-item.menu-open .rail-at{display:none}.rail-item.menu-open,.rail-disc-item.menu-open{background:var(--element1);--dot-gap: var(--element1)}.rail-item.menu-open .rail-more,.rail-disc-item.menu-open .rail-more{display:flex;color:var(--text0);background:var(--element1)}.rail-item .rail-more:hover,.rail-disc-item .rail-more:hover{color:var(--text0);background:var(--element0)}.rail{--rail-width: 280px;--rail-inner: calc(var(--rail-width) - 1px);--rail-near-r: 0;--rail-near-l: auto;--rail-far-r: auto;--rail-far-l: 0;--rail-pad-l: var(--rail-gut);--rail-pad-r: 16px;--rail-dot-ml: 12px;--rail-dot-mr: 0;--rail-shadow-x: -10px;width:40px;flex-shrink:0;position:relative;overflow:visible}.rail-panel{position:absolute;top:0;right:var(--rail-near-r);left:var(--rail-near-l);bottom:0;width:100%;min-width:40px;display:flex;flex-direction:column;background:var(--surface1);border-left:1px solid var(--border0);overflow:hidden;container-type:size;z-index:2;clip-path:inset(0 0 0 -32px);transition:width .12s ease .12s,box-shadow .12s ease .12s}.rail:hover .rail-panel,.rail.hold .rail-panel{width:var(--rail-width);box-shadow:var(--rail-shadow-x) 0 20px -10px var(--shadow);transition:width .12s ease 50ms,box-shadow .12s ease 50ms}.rail.pinned{width:var(--rail-width)}.rail.pinned .rail-panel{box-shadow:none}.rail-list{position:absolute;top:0;right:var(--rail-near-r);left:var(--rail-near-l);bottom:var(--row-height);width:var(--rail-inner);overflow-y:auto;background:var(--surface1)}.rail-foot{position:absolute;right:var(--rail-near-r);left:var(--rail-near-l);bottom:0;width:var(--rail-inner);height:var(--row-height);display:flex;align-items:center;justify-content:flex-end;padding:0 10px;background:var(--surface1);opacity:0;pointer-events:none;transition:opacity .12s ease .12s}.rail:hover .rail-foot,.rail.hold .rail-foot,.rail.pinned .rail-foot{opacity:1;pointer-events:auto;transition:opacity .12s ease 50ms}.rail .rail-main-strip{position:absolute;right:var(--rail-near-r);left:var(--rail-near-l);top:0;bottom:0;width:40px;margin:0;display:flex;align-items:center;justify-content:center;transition:opacity .12s ease .12s}.rail-main-dot{opacity:0;transition:opacity .12s ease .12s}.rail:hover .rail-main-strip,.rail.hold .rail-main-strip,.rail.pinned .rail-main-strip{opacity:0;transition:opacity .12s ease 50ms}.rail:hover .rail-main-dot,.rail.hold .rail-main-dot,.rail.pinned .rail-main-dot{opacity:1;transition:opacity .12s ease 50ms}.rail .rail-item:hover .rail-main-strip{opacity:1;transition:opacity .12s ease}.rail .rail-item:hover .rail-main-dot{opacity:0;transition:opacity .12s ease}.rail .rail-item .rail-main-verb,.rail .rail-item:hover .rail-main-name{display:none}.rail .rail-item:hover .rail-main-verb{display:inline}.rail-disc-head,.rail-disc-item{display:none}.rail:hover .rail-disc-head,.rail.hold .rail-disc-head,.rail.pinned .rail-disc-head{height:var(--row-height-sm);width:100%;display:flex;align-items:center;position:relative;gap:8px;padding:0 var(--rail-pad-r) 0 var(--rail-pad-l);margin-top:14px;font:var(--type-ui-sm);color:var(--text2);text-align:left}.rail-disc-head:hover{color:var(--text1)}.rail-disc-caret{transition:transform .12s ease}.rail-disc-caret.shut{transform:rotate(-90deg)}.rail:hover .rail-disc-item,.rail.hold .rail-disc-item,.rail.pinned .rail-disc-item{display:flex;padding:0 var(--rail-pad-r) 0 var(--rail-pad-l);min-height:var(--row-height-sm)}.rail-disc-item[data-state~=current]{--row-edge-color: var(--accent);color:var(--text0);background:var(--element1)}.rail-disc-item.menu-open{background:var(--element1)}.rail-lock{display:flex}.rail .rail-item .rail-lock,.rail .rail-disc-item .rail-lock{margin-left:calc(var(--rail-dot-ml) - 2.5px);margin-right:calc(var(--rail-dot-mr) - 2.5px)}.rail.offline .rail-item .dot{background:var(--fault);animation:none;box-shadow:none}.rail.offline .rail-disc-item .dot.discovered{background:none;box-shadow:inset 0 0 0 1px var(--fault)}.rail .rail-item{height:var(--row-height);padding:0 var(--rail-pad-r) 0 var(--rail-pad-l)}.rail .rail-item .dot,.rail .rail-disc-item .dot,.rail .rail-item .spinner,.rail .rail-disc-item .spinner,.rail .rail-glyph{margin-left:var(--rail-dot-ml);margin-right:var(--rail-dot-mr)}.rail-item .dot.clickable{position:relative;cursor:pointer}.rail-item .dot.clickable:after{content:"";position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px}.rail-item .dot.clickable:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--red) 35%,transparent)}.rail-label{flex:1;text-align:left}.rail .rail-item .branch{white-space:nowrap}.app[data-chat-side=left] .rail{--rail-near-r: auto;--rail-near-l: 0;--rail-far-r: 0;--rail-far-l: auto;--rail-pad-l: 16px;--rail-pad-r: var(--rail-gut);--rail-dot-ml: 0;--rail-dot-mr: 12px;--rail-shadow-x: 10px}.app[data-chat-side=left] .rail .rail-item .dot,.app[data-chat-side=left] .rail .rail-disc-item .dot,.app[data-chat-side=left] .rail .rail-item .spinner,.app[data-chat-side=left] .rail .rail-disc-item .spinner,.app[data-chat-side=left] .rail .rail-glyph{order:-1}.app[data-chat-side=left] .rail .rail-foot{flex-direction:row-reverse}.app[data-chat-side=left] .rail .rail-item:before,.app[data-chat-side=left] .rail .rail-disc-item:before{left:auto;right:var(--row-edge-x, 0)}.app[data-chat-side=left] .rail .rail-panel{border-left:0;border-right:1px solid var(--border0);clip-path:inset(0 -32px 0 0)}}@layer tokens,base,surfaces;@layer surfaces{.bar-path{flex:1;min-width:0;color:var(--text1);padding:3px 10px}.bar-path:focus{color:var(--text0)}.bar-route{display:flex;flex:1;min-width:0}.bar-route .overlay-box.anchored{border-radius:var(--radius) var(--radius) var(--radius-lg) var(--radius-lg);--picker-inset: 10px}.bar-route .overlay-box.anchored .picker-input{padding:3px 10px;border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0}.bar-route .overlay-box .picker-list{max-height:min(340px,50vh)}.bar-route-path{flex:0 1 auto;min-width:0;max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-route-param{text-decoration:underline dotted;text-underline-offset:3px}.top-bar{position:relative;display:flex;align-items:center;gap:8px;background:var(--surface1);border-bottom:1px solid var(--border0);padding:4px 10px;font:var(--type-mono-sm);font-variant-numeric:tabular-nums;color:var(--text2);min-height:38px}.app.zen{grid-template-rows:1fr}.app.zen .top-bar{display:none}@media(display-mode:window-controls-overlay){.top-bar{-webkit-app-region:drag;app-region:drag;padding-left:calc(env(titlebar-area-x,0px) + 10px);padding-right:calc(100vw - env(titlebar-area-x,0px) - env(titlebar-area-width,100vw) + 10px);min-height:calc(max(38px,env(titlebar-area-height,38px)) + 1px)}.top-bar button,.top-bar input,.top-bar .bar-center{-webkit-app-region:no-drag;app-region:no-drag}.app.zen{grid-template-rows:auto 1fr}.app.zen .top-bar{display:flex}.app.zen .top-bar>:not(.bar-zen-title,.bar-grow,.bar-tools),.app.zen .bar-tools>:not(.bar-zen){display:none}.app.zen .top-bar .bar-zen-title{display:block}}.bar-zen-title{display:none;position:absolute;inset-inline:0;text-align:center;pointer-events:none;color:var(--text2)}.bar-center{position:absolute;display:flex;align-items:center;gap:4px}.bar-lead{display:flex;align-items:center;gap:inherit;min-width:0}.top-bar .btn{min-height:20px}.bar-project{display:flex;align-items:center}.bar-pill{flex:none}.bar-project .overlay-box .picker-list{max-height:min(340px,50vh)}.bar-project-name{overflow:hidden;text-overflow:ellipsis;max-width:160px}.top-bar .bar-grow{flex:1}.top-bar .bar-tools{display:flex;align-items:center;gap:20px}}@layer tokens,base,surfaces;@layer base{.menu{width:220px;background:var(--surface1);border:1px solid var(--border1);border-radius:var(--radius-md);overflow:hidden auto;max-height:calc(100vh - 8px);padding:4px 0;box-shadow:var(--elevation-float);display:flex;flex-direction:column}.menu button{color:var(--text0)}.menu button.row-tall{height:auto;padding-top:4px;padding-bottom:4px}.menu .menu-text{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;gap:1px}.menu .menu-key{margin-left:auto;flex:none}.menu .menu-sep{height:1px;margin:4px 0;border:0;background:var(--border0)}.menu .menu-check{width:14px;flex:none;display:flex;justify-content:center}.menu button.disabled{color:var(--text2);cursor:default}.menu button.disabled:hover{background:none}.menu .menu-label,.menu .menu-detail{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu .menu-detail{font:var(--type-ui-sm)}.menu button:hover,.menu button[data-state~=cursor]{background:var(--element0)}.menu button.danger{color:var(--red)}}@layer tokens,base,surfaces;@layer surfaces{.app{display:grid;grid-template-rows:auto 1fr;height:100%}.app.zen .changes-dock,.app.zen .chat-dock,.app.zen .rail,.app.zen .dock-resize,.app.zen .pane{display:none}.docks{display:flex;min-height:0;--dock-min: 170px;min-width:0;isolation:isolate}.dock-resize{position:relative;width:0;flex-shrink:0;z-index:1}.dock-resize:after{content:"";position:absolute;top:0;bottom:0;width:6px;cursor:col-resize;background:transparent;transition:background .1s}.dock-resize.left:after{right:0}.dock-resize.right:after{left:0}.dock-resize:hover:after,.dock-resize.active:after{background:var(--element1)}body.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.resizing iframe{pointer-events:none}}@layer tokens,base,surfaces;@layer tokens{:root{color-scheme:dark;--surface0: #32302d;--surface1: #3d3835;--surface2: #504943;--element0: #504943;--element1: #675c55;--border0: #504943;--border1: #675c55;--text0: #e6dcb6;--text1: #9e927e;--text2: #6a6055;--green: #78c945;--red: #ff4929;--yellow: #fcbe03;--blue: #69a9e8;--aqua: #4dc7a7;--orange: #fa891e;--purple: #ca94ca;--diff-add: #6fae5f29;--diff-del: #c07f6a29;--diff-add-word: #6fae5f17;--diff-del-word: #c07f6a17;--accent: var(--red);--fault: var(--orange);--sunken: #342f2d;--sunken-floor: #292725;--scrim: #32302db3;--shadow: #00000066;--code: color-mix(in srgb, var(--text0) 6%, transparent);--syntax-comment: #6a6055;--syntax-keyword: #fa891e;--syntax-string: #78c945;--syntax-number: #ca94ca;--syntax-type: #fcbe03;--syntax-function: #4dc7a7;--syntax-variable: #69a9e8;--radius-xs: 3px;--radius: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-pill: 999px;--row-height-sm: 24px;--row-height: 32px;--row-inset: 12px;--view-inset: 24px;--view-top: 48px;--view-anchor: max(var(--view-top), 24vh);--view-measure: 560px;--view-gap: 12px;--view-measure-wide: 720px;--view-gap-wide: 16px;--chat-measure: 720px;--form-body: 96px;--form-body-lg: 120px;--elevation-float: 0 6px 20px var(--shadow);--elevation-overlay: 0 10px 36px var(--shadow);--face-ui: -apple-system, "Segoe UI", sans-serif;--face-mono: ui-monospace, "SF Mono", Menlo, "DejaVu Sans Mono", monospace;--type-ui-sm: 400 11px / 1.4 var(--face-ui);--type-ui: 400 13px / 1.5 var(--face-ui);--type-ui-lg: 400 20px / 28px var(--face-ui);--type-ui-xl: 400 24px / 32px var(--face-ui);--type-mono-sm: 400 var(--size-mono-sm) var(--face-mono);--type-mono: 400 var(--size-mono) var(--face-mono);--size-mono: 12px;--size-mono-sm: 11px;--weight-strong: 500;--weight-title: 600}}@layer tokens,base,surfaces;@layer base{*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;background:var(--surface0);color:var(--text0);font:var(--type-ui)}html,body{overflow:hidden;overscroll-behavior:none}button{background:none;border:none;color:inherit;font:inherit;cursor:pointer}code{font:var(--type-mono);padding:1px 5px;border-radius:var(--radius-xs);background:var(--code);-webkit-box-decoration-break:clone;box-decoration-break:clone;overflow-wrap:anywhere}a code{color:inherit}.sy-comment{color:var(--syntax-comment);font-style:italic}.sy-keyword{color:var(--syntax-keyword)}.sy-string{color:var(--syntax-string)}.sy-number{color:var(--syntax-number)}.sy-type{color:var(--syntax-type)}.sy-function{color:var(--syntax-function)}.sy-variable{color:var(--syntax-variable)}.row{display:flex;align-items:center;gap:8px;width:100%;min-height:var(--row-height);padding:0 var(--row-inset);text-align:left;color:var(--text1);position:relative}.row-sm{min-height:var(--row-height-sm);font:var(--type-mono)}.row:hover,.row.menu-open{background:var(--element0);color:var(--text0)}.row-dim{color:var(--row-dim-color, var(--text2))}.row:hover,.row[data-state~=current],.row.menu-open{--row-dim-color: var(--text1)}.row-quiet{color:var(--text2)}.row-quiet:hover,.row-quiet.menu-open{color:var(--text1)}.row-edge{position:relative}.row-edge:before{content:""}.row-edge:before,.row-current{position:absolute;left:var(--row-edge-x, 0);top:0;bottom:0;width:2px;background:var(--row-edge-color, transparent)}.dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.dot.running{background:var(--green)}.dot.starting{background:var(--text2)}.dot.working{background:var(--green);animation:pulse 1.2s ease-in-out infinite}.dot.waiting{background:var(--accent)}.dot.crashed{background:var(--red)}.dot.failed{background:var(--red)}.dot.idle{background:var(--surface2)}.dot.asleep{background:var(--surface2);opacity:.6}.dot.landed{background:var(--aqua)}.dot.discovered{background:none;box-shadow:inset 0 0 0 1.5px var(--text2)}.dot.unseen{box-shadow:0 0 0 1px var(--dot-gap, var(--surface1)),0 0 0 2.5px var(--text2)}@keyframes pulse{50%{opacity:.3}}@media(prefers-reduced-motion:reduce){.dot.working{background:var(--yellow);animation:none}}.row-current{--row-edge-color: var(--accent)}.section-title{font:var(--type-ui-sm);color:var(--text2)}.empty{padding:4px 12px;color:var(--text2)}.hint{color:var(--text2)}.composer{display:flex;flex-direction:column;min-height:var(--composer-min, 0);background:var(--sunken);border-top:1px solid var(--border0);padding:10px;position:relative}.composer textarea{flex:1;width:100%;min-height:0;resize:none}.composer .hint{margin-top:4px}.composer-field{position:relative;display:flex;flex:1;min-height:0}.composer-knobs{display:flex;justify-content:space-between;align-items:center;gap:8px}.composer-knobs .btn{min-height:20px}.composer-notes{margin-top:4px;padding-top:8px;border-top:1px solid var(--border0);display:flex;flex-direction:column;gap:6px}.composer-notes .hint{margin:0}.composer-note{display:flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums}.composer-note>.btn{margin-left:auto}.xy{color:var(--yellow);flex-shrink:0}.xy.added{color:var(--green)}.xy.deleted{color:var(--red)}.badge-ahead,.badge-landed{color:var(--aqua)}.badge-dirty{color:var(--yellow)}.badge-variant{color:var(--purple)}.badge-profile{color:var(--blue)}.badge-mode{color:var(--yellow)}.badge-new{color:var(--green)}.badge-changed{color:var(--yellow)}}