OcDash Deploy commited on
Commit
4e705e2
·
1 Parent(s): cc5137a

feat: initial OcDash deployment - dashboard SPA with project management

Browse files

- Standalone SolidJS SPA served via nginx
- Sticky left bar (42px) with Help + Settings
- Dashboard home: project list (left) + orchestrator chat (right)
- Project view: collapsible sessions panel + full chat interface
- HF Spaces API integration for project CRUD
- Global notification system

Dockerfile CHANGED
@@ -1,7 +1,12 @@
1
- FROM python:3.12-slim
2
  WORKDIR /app
3
- COPY requirements.txt .
4
- RUN pip install --no-cache-dir -r requirements.txt
5
  COPY . .
6
- EXPOSE 7860
7
- CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
 
 
 
 
 
 
1
+ FROM node:20-alpine AS base
2
  WORKDIR /app
3
+ COPY package.json ./
4
+ RUN npm install
5
  COPY . .
6
+ RUN npm run build
7
+
8
+ FROM nginx:alpine
9
+ COPY --from=base /app/dist /usr/share/nginx/html
10
+ COPY nginx.conf /etc/nginx/conf.d/default.conf
11
+ EXPOSE 80
12
+ CMD ["nginx", "-g", "daemon off;"]
README.md CHANGED
@@ -1,15 +1,13 @@
1
  ---
2
- title: OpenCode Dashboard
3
- emoji: 🤖
4
  colorFrom: indigo
5
- colorTo: purple
6
  sdk: docker
7
- app_port: 7860
8
  pinned: false
9
  ---
10
 
11
- # OpenCode Dashboard
12
 
13
- Multi-project orchestrator for Hugging Face Spaces.
14
-
15
- Set `HF_TOKEN` as a Space secret to enable Spaces management.
 
1
  ---
2
+ title: OcDash
3
+ emoji:
4
  colorFrom: indigo
5
+ colorTo: blue
6
  sdk: docker
7
+ app_port: 80
8
  pinned: false
9
  ---
10
 
11
+ # OcDash
12
 
13
+ OpenCode Dashboard - Multi-project orchestration hub for Hugging Face Spaces.
 
 
assets/amoled-CTKLNjMY.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const f="https://opencode.ai/desktop-theme.json",t="AMOLED",e="amoled",n={palette:{neutral:"#f0f0f0",ink:"#0a0a0a",primary:"#6200ff",accent:"#ff0080",success:"#00e676",warning:"#ffab00",error:"#ff1744",info:"#00b0ff",diffAdd:"#00e676",diffDelete:"#ff1744"},overrides:{"syntax-comment":"#757575","syntax-keyword":"#d500f9","syntax-string":"#00e676","syntax-primitive":"#00b0ff","syntax-property":"#ff9100","syntax-constant":"#6200ff"}},a={palette:{neutral:"#000000",ink:"#ffffff",primary:"#b388ff",accent:"#ff4081",success:"#00ff88",warning:"#ffea00",error:"#ff1744",info:"#18ffff",diffAdd:"#00ff88",diffDelete:"#ff1744"},overrides:{"syntax-comment":"#555555","syntax-keyword":"#ff00ff","syntax-string":"#00ff88","syntax-primitive":"#18ffff","syntax-property":"#ffea00","syntax-constant":"#b388ff"}},s={$schema:f,name:t,id:e,light:n,dark:a};export{f as $schema,a as dark,s as default,e as id,n as light,t as name};
assets/aura-D4OP0z-q.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",f="Aura",t="aura",e={palette:{neutral:"#f5f0ff",ink:"#2d2640",primary:"#a277ff",accent:"#d94f4f",success:"#40bf7a",warning:"#d9a24a",error:"#d94f4f",info:"#5bb8d9",diffAdd:"#b3e6cc",diffDelete:"#f5b3b3"},overrides:{"syntax-comment":"#8d88a3","syntax-keyword":"#7b5ae0","syntax-string":"#2b8a57","syntax-primitive":"#2f78b8","syntax-property":"#a96a22","syntax-type":"#2b8a57","syntax-constant":"#d94f4f"}},n={palette:{neutral:"#15141b",ink:"#edecee",primary:"#a277ff",accent:"#ff6767",success:"#61ffca",warning:"#ffca85",error:"#ff6767",info:"#82e2ff",diffAdd:"#61ffca",diffDelete:"#ff6767"},overrides:{"syntax-comment":"#6d6a7e","syntax-keyword":"#a277ff","syntax-string":"#61ffca","syntax-primitive":"#82e2ff","syntax-property":"#ffca85","syntax-type":"#61ffca","syntax-constant":"#ff6767"}},s={$schema:a,name:f,id:t,light:e,dark:n};export{a as $schema,n as dark,s as default,t as id,e as light,f as name};
assets/ayu-C-7mtaZC.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",n="Ayu",f="ayu",e={palette:{neutral:"#fdfaf4",ink:"#4f5964",primary:"#4aa8c8",accent:"#ef7d71",success:"#5fb978",warning:"#ea9f41",error:"#e6656a",info:"#2f9bce",diffAdd:"#b1d780",diffDelete:"#e6656a"},overrides:{"syntax-comment":"#6e7681","syntax-keyword":"#c76a1a","syntax-string":"#6f8f00","syntax-primitive":"#b87500","syntax-property":"#2f86b7","syntax-type":"#227fc0","syntax-constant":"#a37acc"}},t={palette:{neutral:"#0f1419",ink:"#d6dae0",primary:"#3fb7e3",accent:"#f2856f",success:"#78d05c",warning:"#e4a75c",error:"#f58572",info:"#66c6f1",diffAdd:"#59c57c",diffDelete:"#f58572"},overrides:{"syntax-comment":"#5a6673","syntax-keyword":"#ff8f40","syntax-string":"#aad94c","syntax-primitive":"#ffb454","syntax-property":"#39bae6","syntax-type":"#59c2ff","syntax-constant":"#d2a6ff"}},s={$schema:a,name:"Ayu",id:"ayu",light:e,dark:t};export{a as $schema,t as dark,s as default,f as id,e as light,n as name};
assets/carbonfox-DDZsuZPB.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Carbonfox",f="carbonfox",n={palette:{neutral:"#8e8e8e",ink:"#161616",primary:"#0072c3",accent:"#da1e28",success:"#198038",warning:"#f1c21b",error:"#da1e28",info:"#0043ce",interactive:"#0f62fe",diffAdd:"#198038",diffDelete:"#da1e28"},overrides:{"syntax-comment":"#6f6f6f","syntax-keyword":"#8a3ffc","syntax-string":"#198038","syntax-primitive":"#0f62fe","syntax-property":"#0043ce","syntax-type":"#8a5f00","syntax-constant":"#da1e28"}},a={palette:{neutral:"#393939",ink:"#f2f4f8",primary:"#33b1ff",accent:"#ff8389",success:"#42be65",warning:"#f1c21b",error:"#ff8389",info:"#78a9ff",interactive:"#4589ff",diffAdd:"#42be65",diffDelete:"#ff8389"},overrides:{"syntax-comment":"#6f6f6f","syntax-keyword":"#be95ff","syntax-string":"#42be65","syntax-primitive":"#33b1ff","syntax-property":"#78a9ff","syntax-type":"#f1c21b","syntax-constant":"#ff8389"}},s={$schema:e,name:t,id:f,light:n,dark:a};export{e as $schema,a as dark,s as default,f as id,n as light,t as name};
assets/catppuccin-frappe-BbhwKQAy.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",a="Catppuccin Frappe",n="catppuccin-frappe",t={palette:{neutral:"#303446",ink:"#c6d0f5",primary:"#8da4e2",accent:"#f4b8e4",success:"#a6d189",warning:"#e5c890",error:"#e78284",info:"#81c8be"},overrides:{"text-weak":"#b5bfe2","syntax-comment":"#949cb8","syntax-keyword":"#ca9ee6","syntax-string":"#a6d189","syntax-primitive":"#8da4e2","syntax-variable":"#e78284","syntax-property":"#99d1db","syntax-type":"#e5c890","syntax-constant":"#ef9f76","syntax-operator":"#99d1db","syntax-punctuation":"#c6d0f5","syntax-object":"#e78284","markdown-heading":"#ca9ee6","markdown-text":"#c6d0f5","markdown-link":"#8da4e2","markdown-link-text":"#99d1db","markdown-code":"#a6d189","markdown-block-quote":"#e5c890","markdown-emph":"#e5c890","markdown-strong":"#ef9f76","markdown-horizontal-rule":"#a5adce","markdown-list-item":"#8da4e2","markdown-list-enumeration":"#99d1db","markdown-image":"#8da4e2","markdown-image-text":"#99d1db","markdown-code-block":"#c6d0f5"}},d={palette:{neutral:"#303446",ink:"#c6d0f5",primary:"#8da4e2",accent:"#f4b8e4",success:"#a6d189",warning:"#e5c890",error:"#e78284",info:"#81c8be"},overrides:{"text-weak":"#b5bfe2","syntax-comment":"#949cb8","syntax-keyword":"#ca9ee6","syntax-string":"#a6d189","syntax-primitive":"#8da4e2","syntax-variable":"#e78284","syntax-property":"#99d1db","syntax-type":"#e5c890","syntax-constant":"#ef9f76","syntax-operator":"#99d1db","syntax-punctuation":"#c6d0f5","syntax-object":"#e78284","markdown-heading":"#ca9ee6","markdown-text":"#c6d0f5","markdown-link":"#8da4e2","markdown-link-text":"#99d1db","markdown-code":"#a6d189","markdown-block-quote":"#e5c890","markdown-emph":"#e5c890","markdown-strong":"#ef9f76","markdown-horizontal-rule":"#a5adce","markdown-list-item":"#8da4e2","markdown-list-enumeration":"#99d1db","markdown-image":"#8da4e2","markdown-image-text":"#99d1db","markdown-code-block":"#c6d0f5"}},o={$schema:e,name:a,id:n,light:t,dark:d};export{e as $schema,d as dark,o as default,n as id,t as light,a as name};
assets/catppuccin-macchiato-BG2vmDCz.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="Catppuccin Macchiato",t="catppuccin-macchiato",n={palette:{neutral:"#24273a",ink:"#cad3f5",primary:"#8aadf4",accent:"#f5bde6",success:"#a6da95",warning:"#eed49f",error:"#ed8796",info:"#8bd5ca"},overrides:{"text-weak":"#b8c0e0","syntax-comment":"#939ab7","syntax-keyword":"#c6a0f6","syntax-string":"#a6da95","syntax-primitive":"#8aadf4","syntax-variable":"#ed8796","syntax-property":"#91d7e3","syntax-type":"#eed49f","syntax-constant":"#f5a97f","syntax-operator":"#91d7e3","syntax-punctuation":"#cad3f5","syntax-object":"#ed8796","markdown-heading":"#c6a0f6","markdown-text":"#cad3f5","markdown-link":"#8aadf4","markdown-link-text":"#91d7e3","markdown-code":"#a6da95","markdown-block-quote":"#eed49f","markdown-emph":"#eed49f","markdown-strong":"#f5a97f","markdown-horizontal-rule":"#a5adcb","markdown-list-item":"#8aadf4","markdown-list-enumeration":"#91d7e3","markdown-image":"#8aadf4","markdown-image-text":"#91d7e3","markdown-code-block":"#cad3f5"}},d={palette:{neutral:"#24273a",ink:"#cad3f5",primary:"#8aadf4",accent:"#f5bde6",success:"#a6da95",warning:"#eed49f",error:"#ed8796",info:"#8bd5ca"},overrides:{"text-weak":"#b8c0e0","syntax-comment":"#939ab7","syntax-keyword":"#c6a0f6","syntax-string":"#a6da95","syntax-primitive":"#8aadf4","syntax-variable":"#ed8796","syntax-property":"#91d7e3","syntax-type":"#eed49f","syntax-constant":"#f5a97f","syntax-operator":"#91d7e3","syntax-punctuation":"#cad3f5","syntax-object":"#ed8796","markdown-heading":"#c6a0f6","markdown-text":"#cad3f5","markdown-link":"#8aadf4","markdown-link-text":"#91d7e3","markdown-code":"#a6da95","markdown-block-quote":"#eed49f","markdown-emph":"#eed49f","markdown-strong":"#f5a97f","markdown-horizontal-rule":"#a5adcb","markdown-list-item":"#8aadf4","markdown-list-enumeration":"#91d7e3","markdown-image":"#8aadf4","markdown-image-text":"#91d7e3","markdown-code-block":"#cad3f5"}},o={$schema:a,name:e,id:t,light:n,dark:d};export{a as $schema,d as dark,o as default,t as id,n as light,e as name};
assets/catppuccin-ukvyfYoH.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Catppuccin",a="catppuccin",n={palette:{neutral:"#f5e0dc",ink:"#4c4f69",primary:"#7287fd",accent:"#d20f39",success:"#40a02b",warning:"#df8e1d",error:"#d20f39",info:"#04a5e5",diffAdd:"#a6d189",diffDelete:"#e78284"},overrides:{"syntax-comment":"#6c7086","syntax-keyword":"#8839ef","syntax-primitive":"#1e66f5","syntax-constant":"#ca6702"}},c={palette:{neutral:"#1e1e2e",ink:"#cdd6f4",primary:"#b4befe",accent:"#f38ba8",success:"#a6d189",warning:"#f4b8e4",error:"#f38ba8",info:"#89dceb",diffAdd:"#94e2d5",diffDelete:"#f38ba8"},overrides:{"syntax-comment":"#6c7086","syntax-keyword":"#cba6f7","syntax-primitive":"#89b4fa","syntax-constant":"#fab387"}},d={$schema:e,name:t,id:a,light:n,dark:c};export{e as $schema,c as dark,d as default,a as id,n as light,t as name};
assets/cobalt2-DAVdkIoy.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const f="https://opencode.ai/desktop-theme.json",a="Cobalt2",t="cobalt2",n={palette:{neutral:"#ffffff",ink:"#193549",primary:"#0066cc",accent:"#00acc1",success:"#4caf50",warning:"#ff9800",error:"#e91e63",info:"#ff5722"},overrides:{"text-weak":"#5c6b7d","syntax-comment":"#5c6b7d","syntax-keyword":"#ff5722","syntax-string":"#4caf50","syntax-primitive":"#ff9800","syntax-variable":"#193549","syntax-property":"#00acc1","syntax-type":"#00acc1","syntax-constant":"#e91e63","syntax-operator":"#ff5722","syntax-punctuation":"#193549","syntax-object":"#193549","markdown-heading":"#ff9800","markdown-text":"#193549","markdown-link":"#0066cc","markdown-link-text":"#00acc1","markdown-code":"#4caf50","markdown-block-quote":"#5c6b7d","markdown-emph":"#ff5722","markdown-strong":"#e91e63","markdown-horizontal-rule":"#d3dae3","markdown-list-item":"#0066cc","markdown-list-enumeration":"#00acc1","markdown-image":"#0066cc","markdown-image-text":"#00acc1","markdown-code-block":"#193549"}},e={palette:{neutral:"#193549",ink:"#ffffff",primary:"#0088ff",accent:"#2affdf",success:"#9eff80",warning:"#ffc600",error:"#ff0088",info:"#ff9d00",diffAdd:"#b9ff9f",diffDelete:"#ff5fb3"},overrides:{"text-weak":"#adb7c9","syntax-comment":"#0088ff","syntax-keyword":"#ff9d00","syntax-string":"#9eff80","syntax-primitive":"#ffc600","syntax-variable":"#ffffff","syntax-property":"#2affdf","syntax-type":"#2affdf","syntax-constant":"#ff628c","syntax-operator":"#ff9d00","syntax-punctuation":"#ffffff","syntax-object":"#ffffff","markdown-heading":"#ffc600","markdown-text":"#ffffff","markdown-link":"#0088ff","markdown-link-text":"#2affdf","markdown-code":"#9eff80","markdown-block-quote":"#adb7c9","markdown-emph":"#ff9d00","markdown-strong":"#ff628c","markdown-horizontal-rule":"#2d5a7b","markdown-list-item":"#0088ff","markdown-list-enumeration":"#2affdf","markdown-image":"#0088ff","markdown-image-text":"#2affdf","markdown-code-block":"#ffffff"}},o={$schema:f,name:a,id:t,light:n,dark:e};export{f as $schema,e as dark,o as default,t as id,n as light,a as name};
assets/cursor-CX4xD2IP.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",a="Cursor",t="cursor",n={palette:{neutral:"#fcfcfc",ink:"#141414",primary:"#6f9ba6",accent:"#6f9ba6",success:"#1f8a65",warning:"#db704b",error:"#cf2d56",info:"#3c7cab",interactive:"#206595",diffAdd:"#55a583",diffDelete:"#e75e78"},overrides:{"text-weak":"#141414ad","syntax-comment":"#141414ad","syntax-keyword":"#b3003f","syntax-string":"#9e94d5","syntax-primitive":"#db704b","syntax-variable":"#141414","syntax-property":"#141414ad","syntax-type":"#206595","syntax-constant":"#b8448b","syntax-operator":"#141414","syntax-punctuation":"#141414","syntax-object":"#141414","markdown-heading":"#206595","markdown-text":"#141414","markdown-link":"#206595","markdown-link-text":"#141414ad","markdown-code":"#1f8a65","markdown-block-quote":"#141414ad","markdown-emph":"#141414","markdown-strong":"#141414","markdown-horizontal-rule":"#141414ad","markdown-list-item":"#141414","markdown-list-enumeration":"#141414ad","markdown-image":"#206595","markdown-image-text":"#141414ad","markdown-code-block":"#141414"}},o={palette:{neutral:"#181818",ink:"#e4e4e4",primary:"#88c0d0",accent:"#88c0d0",success:"#3fa266",warning:"#f1b467",error:"#e34671",info:"#81a1c1",interactive:"#82D2CE",diffAdd:"#70b489",diffDelete:"#fc6b83"},overrides:{"text-weak":"#e4e4e45e","syntax-comment":"#e4e4e45e","syntax-keyword":"#82D2CE","syntax-string":"#E394DC","syntax-primitive":"#EFB080","syntax-variable":"#e4e4e4","syntax-property":"#81a1c1","syntax-type":"#EFB080","syntax-constant":"#F8C762","syntax-operator":"#e4e4e4","syntax-punctuation":"#e4e4e4","syntax-object":"#e4e4e4","markdown-heading":"#AAA0FA","markdown-text":"#e4e4e4","markdown-link":"#82D2CE","markdown-link-text":"#81a1c1","markdown-code":"#E394DC","markdown-block-quote":"#e4e4e45e","markdown-emph":"#82D2CE","markdown-strong":"#F8C762","markdown-horizontal-rule":"#e4e4e45e","markdown-list-item":"#e4e4e4","markdown-list-enumeration":"#88c0d0","markdown-image":"#88c0d0","markdown-image-text":"#81a1c1","markdown-code-block":"#e4e4e4"}},r={$schema:e,name:a,id:t,light:n,dark:o};export{e as $schema,o as dark,r as default,t as id,n as light,a as name};
assets/dracula-Bwy36Hqr.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const f="https://opencode.ai/desktop-theme.json",t="Dracula",e="dracula",a={palette:{neutral:"#f8f8f2",ink:"#1f1f2f",primary:"#7c6bf5",accent:"#d16090",success:"#2fbf71",warning:"#f7a14d",error:"#d9536f",info:"#1d7fc5",diffAdd:"#9fe3b3",diffDelete:"#f8a1b8"},overrides:{"syntax-comment":"#7d7f97","syntax-keyword":"#d16090","syntax-string":"#596600","syntax-primitive":"#2f8f57","syntax-property":"#1d7fc5","syntax-constant":"#7c6bf5"}},n={palette:{neutral:"#1d1e28",ink:"#f8f8f2",primary:"#bd93f9",accent:"#ff79c6",success:"#50fa7b",warning:"#ffb86c",error:"#ff5555",info:"#8be9fd",diffAdd:"#2fb27d",diffDelete:"#ff6b81"},overrides:{"syntax-comment":"#6272a4","syntax-keyword":"#ff79c6","syntax-string":"#f1fa8c","syntax-primitive":"#50fa7b","syntax-property":"#8be9fd","syntax-constant":"#bd93f9"}},s={$schema:f,name:t,id:e,light:a,dark:n};export{f as $schema,n as dark,s as default,e as id,a as light,t as name};
assets/everforest-DCRF6ST7.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",t="Everforest",e="everforest",n={palette:{neutral:"#fdf6e3",ink:"#5c6a72",primary:"#8da101",accent:"#df69ba",success:"#8da101",warning:"#f57d26",error:"#f85552",info:"#35a77c",diffAdd:"#4db380",diffDelete:"#f52a65"},overrides:{"text-weak":"#a6b0a0","syntax-comment":"#a6b0a0","syntax-keyword":"#df69ba","syntax-string":"#8da101","syntax-primitive":"#8da101","syntax-variable":"#f85552","syntax-property":"#35a77c","syntax-type":"#dfa000","syntax-constant":"#f57d26","syntax-operator":"#35a77c","syntax-punctuation":"#5c6a72","syntax-object":"#f85552","markdown-heading":"#df69ba","markdown-text":"#5c6a72","markdown-link":"#8da101","markdown-link-text":"#35a77c","markdown-code":"#8da101","markdown-block-quote":"#dfa000","markdown-emph":"#dfa000","markdown-strong":"#f57d26","markdown-horizontal-rule":"#a6b0a0","markdown-list-item":"#8da101","markdown-list-enumeration":"#35a77c","markdown-image":"#8da101","markdown-image-text":"#35a77c","markdown-code-block":"#5c6a72"}},d={palette:{neutral:"#2d353b",ink:"#d3c6aa",primary:"#a7c080",accent:"#d699b6",success:"#a7c080",warning:"#e69875",error:"#e67e80",info:"#83c092",diffAdd:"#b8db87",diffDelete:"#e26a75"},overrides:{"text-weak":"#7a8478","syntax-comment":"#7a8478","syntax-keyword":"#d699b6","syntax-string":"#a7c080","syntax-primitive":"#a7c080","syntax-variable":"#e67e80","syntax-property":"#83c092","syntax-type":"#dbbc7f","syntax-constant":"#e69875","syntax-operator":"#83c092","syntax-punctuation":"#d3c6aa","syntax-object":"#e67e80","markdown-heading":"#d699b6","markdown-text":"#d3c6aa","markdown-link":"#a7c080","markdown-link-text":"#83c092","markdown-code":"#a7c080","markdown-block-quote":"#dbbc7f","markdown-emph":"#dbbc7f","markdown-strong":"#e69875","markdown-horizontal-rule":"#7a8478","markdown-list-item":"#a7c080","markdown-list-enumeration":"#83c092","markdown-image":"#a7c080","markdown-image-text":"#83c092","markdown-code-block":"#d3c6aa"}},o={$schema:a,name:t,id:e,light:n,dark:d};export{a as $schema,d as dark,o as default,e as id,n as light,t as name};
assets/flexoki-Cuz5xwiW.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const n="https://opencode.ai/desktop-theme.json",t="Flexoki",a="flexoki",o={palette:{neutral:"#FFFCF0",ink:"#100F0F",primary:"#205EA6",accent:"#BC5215",success:"#66800B",warning:"#BC5215",error:"#AF3029",info:"#24837B"},overrides:{"text-weak":"#6F6E69","syntax-comment":"#6F6E69","syntax-keyword":"#66800B","syntax-string":"#24837B","syntax-primitive":"#BC5215","syntax-variable":"#205EA6","syntax-property":"#24837B","syntax-type":"#AD8301","syntax-constant":"#5E409D","syntax-operator":"#6F6E69","syntax-punctuation":"#6F6E69","syntax-object":"#205EA6","markdown-heading":"#5E409D","markdown-text":"#100F0F","markdown-link":"#205EA6","markdown-link-text":"#24837B","markdown-code":"#24837B","markdown-block-quote":"#AD8301","markdown-emph":"#AD8301","markdown-strong":"#BC5215","markdown-horizontal-rule":"#6F6E69","markdown-list-item":"#BC5215","markdown-list-enumeration":"#24837B","markdown-image":"#A02F6F","markdown-image-text":"#24837B","markdown-code-block":"#100F0F"}},e={palette:{neutral:"#100F0F",ink:"#CECDC3",primary:"#DA702C",accent:"#8B7EC8",success:"#879A39",warning:"#DA702C",error:"#D14D41",info:"#3AA99F",interactive:"#4385BE"},overrides:{"text-weak":"#6F6E69","syntax-comment":"#6F6E69","syntax-keyword":"#879A39","syntax-string":"#3AA99F","syntax-primitive":"#DA702C","syntax-variable":"#4385BE","syntax-property":"#3AA99F","syntax-type":"#D0A215","syntax-constant":"#8B7EC8","syntax-operator":"#B7B5AC","syntax-punctuation":"#B7B5AC","syntax-object":"#4385BE","markdown-heading":"#8B7EC8","markdown-text":"#CECDC3","markdown-link":"#4385BE","markdown-link-text":"#3AA99F","markdown-code":"#3AA99F","markdown-block-quote":"#D0A215","markdown-emph":"#D0A215","markdown-strong":"#DA702C","markdown-horizontal-rule":"#6F6E69","markdown-list-item":"#DA702C","markdown-list-enumeration":"#3AA99F","markdown-image":"#CE5D97","markdown-image-text":"#3AA99F","markdown-code-block":"#CECDC3"}},r={$schema:n,name:t,id:a,light:o,dark:e};export{n as $schema,e as dark,r as default,a as id,o as light,t as name};
assets/github-DYnPGtRk.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",t="GitHub",n="github",e={palette:{neutral:"#ffffff",ink:"#24292f",primary:"#0969da",accent:"#1b7c83",success:"#1a7f37",warning:"#9a6700",error:"#cf222e",info:"#bc4c00"},overrides:{"text-weak":"#57606a","syntax-comment":"#57606a","syntax-keyword":"#cf222e","syntax-string":"#0969da","syntax-primitive":"#8250df","syntax-variable":"#bc4c00","syntax-property":"#1b7c83","syntax-type":"#bc4c00","syntax-constant":"#1b7c83","syntax-operator":"#cf222e","syntax-punctuation":"#24292f","syntax-object":"#bc4c00","markdown-heading":"#0969da","markdown-text":"#24292f","markdown-link":"#0969da","markdown-link-text":"#1b7c83","markdown-code":"#bf3989","markdown-block-quote":"#57606a","markdown-emph":"#9a6700","markdown-strong":"#bc4c00","markdown-horizontal-rule":"#d0d7de","markdown-list-item":"#0969da","markdown-list-enumeration":"#1b7c83","markdown-image":"#0969da","markdown-image-text":"#1b7c83","markdown-code-block":"#24292f"}},o={palette:{neutral:"#0d1117",ink:"#c9d1d9",primary:"#58a6ff",accent:"#39c5cf",success:"#3fb950",warning:"#e3b341",error:"#f85149",info:"#d29922"},overrides:{"text-weak":"#8b949e","syntax-comment":"#8b949e","syntax-keyword":"#ff7b72","syntax-string":"#39c5cf","syntax-primitive":"#bc8cff","syntax-variable":"#d29922","syntax-property":"#39c5cf","syntax-type":"#d29922","syntax-constant":"#58a6ff","syntax-operator":"#ff7b72","syntax-punctuation":"#c9d1d9","syntax-object":"#d29922","markdown-heading":"#58a6ff","markdown-text":"#c9d1d9","markdown-link":"#58a6ff","markdown-link-text":"#39c5cf","markdown-code":"#ff7b72","markdown-block-quote":"#8b949e","markdown-emph":"#e3b341","markdown-strong":"#d29922","markdown-horizontal-rule":"#30363d","markdown-list-item":"#58a6ff","markdown-list-enumeration":"#39c5cf","markdown-image":"#58a6ff","markdown-image-text":"#39c5cf","markdown-code-block":"#c9d1d9"}},r={$schema:a,name:t,id:n,light:e,dark:o};export{a as $schema,o as dark,r as default,n as id,e as light,t as name};
assets/gruvbox-D79fVyNx.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Gruvbox",n="gruvbox",a={palette:{neutral:"#fbf1c7",ink:"#3c3836",primary:"#076678",accent:"#9d0006",success:"#79740e",warning:"#b57614",error:"#9d0006",info:"#8f3f71",diffAdd:"#79740e",diffDelete:"#9d0006"},overrides:{"syntax-comment":"#928374","syntax-keyword":"#9d0006","syntax-primitive":"#076678","syntax-constant":"#8f3f71"}},s={palette:{neutral:"#282828",ink:"#ebdbb2",primary:"#83a598",accent:"#fb4934",success:"#b8bb26",warning:"#fabd2f",error:"#fb4934",info:"#d3869b",diffAdd:"#b8bb26",diffDelete:"#fb4934"},overrides:{"syntax-comment":"#928374","syntax-keyword":"#fb4934","syntax-primitive":"#83a598","syntax-constant":"#d3869b"}},r={$schema:e,name:t,id:n,light:a,dark:s};export{e as $schema,s as dark,r as default,n as id,a as light,t as name};
assets/index-BSf9pAXA.css ADDED
@@ -0,0 +1 @@
 
 
1
+ [data-component=button-v2]{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:6px;font-style:normal;font-weight:530;font-size:13px;line-height:1;color:var(--v2-text-text-base);text-shadow:none;font-variant-numeric:tabular-nums;letter-spacing:-.04px;user-select:none;cursor:pointer;outline:none}[data-component=button-v2]:focus{outline:none}[data-component=button-v2]:is(:focus-visible,[data-state=focus]):not(:disabled):not([data-variant=loading]){outline:2px solid var(--v2-border-border-focus);outline-offset:2.5px}[data-component=button-v2][data-size=normal]{height:28px;padding:0 11px}[data-component=button-v2][data-size=small]{height:24px;padding:0 9px;border-radius:4px}[data-component=button-v2][data-size=large]{height:32px;padding:0 15px}[data-component=button-v2][data-icon][data-size=small]{padding-left:9px}[data-component=button-v2][data-icon][data-size=normal]{padding-left:11px}[data-component=button-v2][data-icon][data-size=large]{padding-left:15px}[data-component=button-v2] [data-slot=icon-svg]{color:currentColor}[data-component=button-v2][data-variant=neutral]{background-color:var(--v2-background-bg-button-neutral);color:var(--v2-text-text-base);box-shadow:var(--v2-elevation-button-neutral)}[data-component=button-v2][data-variant=neutral]:is(:hover,[data-state=hover]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-hover) 0%,var(--v2-overlay-simple-overlay-hover) 100%),linear-gradient(90deg,var(--v2-background-bg-button-neutral) 0%,var(--v2-background-bg-button-neutral) 100%)}[data-component=button-v2][data-variant=neutral]:is(:active,[data-state=pressed]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-pressed) 0%,var(--v2-overlay-simple-overlay-pressed) 100%),linear-gradient(90deg,var(--v2-background-bg-button-neutral) 0%,var(--v2-background-bg-button-neutral) 100%)}[data-component=button-v2][data-variant=neutral]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}[data-component=button-v2][data-variant=danger]{background-color:var(--v2-background-bg-button-neutral);color:var(--v2-state-fg-danger);box-shadow:var(--v2-elevation-button-neutral)}[data-component=button-v2][data-variant=danger]:is(:hover,[data-state=hover]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-hover) 0%,var(--v2-overlay-simple-overlay-hover) 100%),linear-gradient(90deg,var(--v2-background-bg-button-neutral) 0%,var(--v2-background-bg-button-neutral) 100%)}[data-component=button-v2][data-variant=danger]:is(:active,[data-state=pressed]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-pressed) 0%,var(--v2-overlay-simple-overlay-pressed) 100%),linear-gradient(90deg,var(--v2-background-bg-button-neutral) 0%,var(--v2-background-bg-button-neutral) 100%)}[data-component=button-v2][data-variant=danger]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}[data-component=button-v2][data-variant=outline]{background-color:transparent;color:var(--v2-text-text-base);box-shadow:inset 0 0 0 1px var(--v2-border-border-muted)}[data-component=button-v2][data-variant=outline]:is(:hover,[data-state=hover]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-hover)}[data-component=button-v2][data-variant=outline]:is(:active,[data-state=pressed]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed)}[data-component=button-v2][data-variant=outline]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}[data-component=button-v2][data-variant=contrast]{background-image:linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%);color:var(--v2-text-text-contrast);text-shadow:0 .5px .5px rgba(0,0,0,.3);box-shadow:var(--v2-elevation-button-contrast)}[data-component=button-v2][data-variant=contrast]:is(:hover,[data-state=hover]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-contrast-hover) 0%,var(--v2-overlay-simple-overlay-contrast-hover) 100%),linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%)}[data-component=button-v2][data-variant=contrast]:is(:active,[data-state=pressed]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-contrast-pressed) 0%,var(--v2-overlay-simple-overlay-contrast-pressed) 100%),linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%)}[data-component=button-v2][data-variant=contrast]:is(:disabled,[data-state=disabled]){opacity:.4;cursor:not-allowed}[data-component=button-v2][data-variant=loading]{background:#f2f2f2;color:var(--v2-text-text-base);box-shadow:inset 0 0 0 .5px #00000014;cursor:default;pointer-events:none}[data-component=button-v2][data-variant=ghost]{background-color:transparent;color:var(--v2-text-text-base)}[data-component=button-v2][data-variant=ghost]:is(:hover,[data-state=hover]):not(:disabled):not([data-expanded]){background-color:var(--v2-overlay-simple-overlay-hover)}[data-component=button-v2][data-variant=ghost]:is(:active,[data-state=pressed]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed)}[data-component=button-v2][data-variant=ghost]:where([data-expanded]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed)}[data-component=button-v2][data-variant=ghost]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}[data-component=button-v2][data-variant=ghost-muted]{background-color:transparent;color:var(--v2-text-text-muted)}[data-component=button-v2][data-variant=ghost-muted] [data-slot=icon-svg]{color:var(--v2-icon-icon-muted)}[data-component=button-v2][data-variant=ghost-muted]:is(:hover,[data-state=hover]):not(:disabled):not([data-expanded]){background-color:var(--v2-overlay-simple-overlay-hover)}[data-component=button-v2][data-variant=ghost-muted]:is(:active,[data-state=pressed]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed)}[data-component=button-v2][data-variant=ghost-muted]:where([data-expanded]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed);color:var(--v2-text-text-base)}[data-component=button-v2][data-variant=ghost-muted]:where([data-expanded]):not(:disabled) [data-slot=icon-svg]{color:var(--v2-icon-icon-base)}[data-component=button-v2][data-variant=ghost-muted]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}[data-component=textarea-v2]{box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;padding:0 2px 2px 0;width:280px;min-height:80px;border:0;border-radius:6px;outline:1px solid transparent;outline-offset:0;background:linear-gradient(180deg,var(--v2-alpha-light-2) 0%,var(--v2-alpha-light-0) 100%),var(--v2-background-bg-base);box-shadow:var(--v2-elevation-button-neutral);flex:none;align-self:stretch;transition:background 85ms ease-out,outline-color 85ms ease-out,box-shadow 85ms ease-out}[data-component=textarea-v2]:where(:hover):not([data-disabled],[data-invalid]):not(:focus-within){background:linear-gradient(0deg,var(--v2-overlay-simple-overlay-hover),var(--v2-overlay-simple-overlay-hover)),linear-gradient(180deg,var(--v2-alpha-light-2) 0%,var(--v2-alpha-light-0) 100%),var(--v2-background-bg-base)}[data-component=textarea-v2]:where(:focus-within):not([data-disabled],[data-invalid]){outline-color:var(--v2-border-border-focus);box-shadow:none}[data-component=textarea-v2]:where([data-invalid]):not([data-disabled]){outline-color:var(--v2-state-fg-danger);box-shadow:none}[data-component=textarea-v2]:where([data-disabled]){opacity:.5;cursor:not-allowed}[data-component=textarea-v2] [data-slot=textarea-v2-textarea]{display:block;width:100%;min-width:0;min-height:80px;height:100%;padding:8px;margin:0;border:0;background:transparent;outline:none;resize:vertical;font-style:normal;font-weight:440;font-size:13px;line-height:1.35;letter-spacing:-.04px;color:var(--v2-text-text-base);font-variation-settings:"slnt" 0}[data-component=textarea-v2] [data-slot=textarea-v2-textarea]::placeholder{color:var(--v2-text-text-faint)}[data-component=textarea-v2][data-invalid]:not([data-disabled]) [data-slot=textarea-v2-textarea]{color:var(--v2-state-fg-danger);caret-color:var(--v2-state-fg-danger)}[data-component=textarea-v2][data-invalid]:not([data-disabled]) [data-slot=textarea-v2-textarea]::placeholder{color:var(--v2-state-fg-danger);opacity:1}*{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:geometricPrecision}[data-component=icon-button-v2]{display:inline-flex;align-items:center;justify-content:center;border-radius:6px;color:var(--v2-text-text-base);user-select:none;outline:none;padding:0;cursor:default}[data-component=icon-button-v2]:focus{outline:none}[data-component=icon-button-v2]:is(:focus-visible,[data-state=focus]):not(:disabled){outline:2px solid var(--v2-border-border-focus);outline-offset:2.5px}[data-component=icon-button-v2][data-size=small]{width:20px;height:20px;border-radius:4px}[data-component=icon-button-v2][data-size=normal]{width:24px;height:24px}[data-component=icon-button-v2][data-size=large]{width:28px;height:28px}[data-component=icon-button-v2] [data-slot=icon-svg]{color:currentColor}[data-component=icon-button-v2][data-variant=neutral]{background-color:var(--v2-background-bg-button-neutral);color:var(--v2-text-text-base);box-shadow:var(--v2-elevation-button-neutral)}[data-component=icon-button-v2][data-variant=neutral]:is(:hover,[data-state=hover]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-hover) 0%,var(--v2-overlay-simple-overlay-hover) 100%),linear-gradient(90deg,var(--v2-background-bg-button-neutral) 0%,var(--v2-background-bg-button-neutral) 100%)}[data-component=icon-button-v2][data-variant=neutral]:is(:active,[data-state=pressed]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-pressed) 0%,var(--v2-overlay-simple-overlay-pressed) 100%),linear-gradient(90deg,var(--v2-background-bg-button-neutral) 0%,var(--v2-background-bg-button-neutral) 100%)}[data-component=icon-button-v2][data-variant=neutral]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}[data-component=icon-button-v2][data-variant=contrast]{background-image:linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%);color:var(--v2-text-text-contrast);text-shadow:0 .5px .5px rgba(0,0,0,.3);box-shadow:var(--v2-elevation-button-contrast)}[data-component=icon-button-v2][data-variant=contrast]:is(:hover,[data-state=hover]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-contrast-hover) 0%,var(--v2-overlay-simple-overlay-contrast-hover) 100%),linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%)}[data-component=icon-button-v2][data-variant=contrast]:is(:active,[data-state=pressed]):not(:disabled){background-image:linear-gradient(90deg,var(--v2-overlay-simple-overlay-contrast-pressed) 0%,var(--v2-overlay-simple-overlay-contrast-pressed) 100%),linear-gradient(180deg,var(--v2-alpha-light-20) 0%,var(--v2-alpha-light-0) 100%),linear-gradient(90deg,var(--v2-background-bg-contrast) 0%,var(--v2-background-bg-contrast) 100%)}[data-component=icon-button-v2][data-variant=contrast]:is(:disabled,[data-state=disabled]){opacity:.4;cursor:not-allowed}[data-component=icon-button-v2][data-variant=ghost]{background-color:transparent;color:var(--v2-text-text-base)}[data-component=icon-button-v2][data-variant=ghost]:is(:hover,[data-state=hover],[data-expanded]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-hover)}[data-component=icon-button-v2][data-variant=ghost]:is(:active,[data-state=pressed]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed)}[data-component=icon-button-v2][data-variant=ghost]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}[data-component=icon-button-v2][data-variant=ghost-muted]{background-color:transparent;color:var(--v2-icon-icon-muted)}[data-component=icon-button-v2][data-variant=ghost-muted]:is(:hover,[data-state=hover],[data-expanded]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-hover)}[data-component=icon-button-v2][data-variant=ghost-muted]:is(:active,[data-state=pressed]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed);color:var(--v2-icon-icon-base)}[data-component=icon-button-v2][data-variant=ghost-muted]:where([data-expanded]):not(:disabled){background-color:var(--v2-overlay-simple-overlay-pressed);color:var(--v2-icon-icon-base)}[data-component=icon-button-v2][data-variant=ghost-muted]:is(:disabled,[data-state=disabled]){opacity:.5;cursor:not-allowed}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--text-base:1rem;--text-base--line-height: 1.5 ;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}:root{--v2-grey-50:#fff;--v2-grey-100:#fafafa;--v2-grey-200:#f2f2f2;--v2-grey-300:#eee;--v2-grey-400:#dbdbdb;--v2-grey-500:#aeaeae;--v2-grey-600:gray;--v2-grey-700:#5c5c5c;--v2-grey-800:#3a3a3a;--v2-grey-900:#2e2e2e;--v2-grey-1000:#242424;--v2-grey-1100:#161616;--v2-grey-1200:#080808;--v2-alpha-dark-100:#000;--v2-alpha-dark-90:#000000e5;--v2-alpha-dark-80:#000c;--v2-alpha-dark-70:#000000b2;--v2-alpha-dark-60:#0009;--v2-alpha-dark-50:#00000080;--v2-alpha-dark-40:#0006;--v2-alpha-dark-30:#0000004d;--v2-alpha-dark-24:#0000003d;--v2-alpha-dark-20:#0003;--v2-alpha-dark-16:#00000029;--v2-alpha-dark-14:#00000024;--v2-alpha-dark-12:#0000001f;--v2-alpha-dark-10:#0000001a;--v2-alpha-dark-8:#00000014;--v2-alpha-dark-6:#0000000f;--v2-alpha-dark-4:#0000000a;--v2-alpha-dark-2:#00000005;--v2-alpha-dark-0:#0000;--v2-alpha-light-100:#fff;--v2-alpha-light-90:#ffffffe5;--v2-alpha-light-80:#fffc;--v2-alpha-light-70:#ffffffb2;--v2-alpha-light-60:#fff9;--v2-alpha-light-50:#ffffff80;--v2-alpha-light-40:#fff6;--v2-alpha-light-30:#ffffff4d;--v2-alpha-light-24:#ffffff3d;--v2-alpha-light-20:#fff3;--v2-alpha-light-16:#ffffff29;--v2-alpha-light-14:#ffffff24;--v2-alpha-light-12:#ffffff1f;--v2-alpha-light-10:#ffffff1a;--v2-alpha-light-8:#ffffff14;--v2-alpha-light-6:#ffffff0f;--v2-alpha-light-4:#ffffff0a;--v2-alpha-light-2:#ffffff05;--v2-alpha-light-0:#fff0;--v2-red-100:#fceceb;--v2-red-200:#f6d5d3;--v2-red-300:#f2bbb7;--v2-red-400:#f29b96;--v2-red-500:#f17471;--v2-red-600:#f1484f;--v2-red-700:#d92e3c;--v2-red-800:#b82d35;--v2-red-900:#97252b;--v2-red-1000:#7a1f23;--v2-red-1100:#5f1a1c;--v2-red-1200:#461516;--v2-orange-100:#fdf2ed;--v2-orange-200:#ffe7dc;--v2-orange-300:#ffd8c6;--v2-orange-400:#ffc1a4;--v2-orange-500:#ffa478;--v2-orange-600:#ff8648;--v2-orange-700:#ee7330;--v2-orange-800:#d16427;--v2-orange-900:#b35624;--v2-orange-1000:#954c27;--v2-orange-1100:#723d22;--v2-orange-1200:#5a2c14;--v2-yellow-100:#fefaec;--v2-yellow-200:#fcefd0;--v2-yellow-300:#f7e5b5;--v2-yellow-400:#f3da9b;--v2-yellow-500:#f2cf76;--v2-yellow-600:#f6c251;--v2-yellow-700:#e7af36;--v2-yellow-800:#cb9f34;--v2-yellow-900:#ac8833;--v2-yellow-1000:#8e7231;--v2-yellow-1100:#68552b;--v2-yellow-1200:#4b4025;--v2-green-100:#e7f9ea;--v2-green-200:#d0f0d5;--v2-green-300:#b8e9c1;--v2-green-400:#96e3a6;--v2-green-500:#6bd586;--v2-green-600:#49c970;--v2-green-700:#2eaf5a;--v2-green-800:#198b43;--v2-green-900:#1d783c;--v2-green-1000:#196130;--v2-green-1100:#164c26;--v2-green-1200:#14361d;--v2-cyan-100:#e2f7fb;--v2-cyan-200:#c4edf4;--v2-cyan-300:#a3e4ef;--v2-cyan-400:#65d9eb;--v2-cyan-500:#00c5df;--v2-cyan-600:#00abcf;--v2-cyan-700:#0096b8;--v2-cyan-800:#007d9b;--v2-cyan-900:#006c85;--v2-cyan-1000:#005a6e;--v2-cyan-1100:#004756;--v2-cyan-1200:#00353f;--v2-blue-100:#ecf1fe;--v2-blue-200:#d7e2fc;--v2-blue-300:#c3d4fd;--v2-blue-400:#a2bcff;--v2-blue-500:#7698fd;--v2-blue-600:#3b5cf6;--v2-blue-700:#3250df;--v2-blue-800:#2c47c8;--v2-blue-900:#263fa9;--v2-blue-1000:#22388f;--v2-blue-1100:#1c2e70;--v2-blue-1200:#1b2852;--v2-purple-100:#ebecfe;--v2-purple-200:#d5d5fc;--v2-purple-300:#b9b8f5;--v2-purple-400:#9e99f7;--v2-purple-500:#8271f8;--v2-purple-600:#7152f4;--v2-purple-700:#623be2;--v2-purple-800:#5230c2;--v2-purple-900:#442aa1;--v2-purple-1000:#361f83;--v2-purple-1100:#2b1b6a;--v2-purple-1200:#221358;--v2-pink-100:#fdecf3;--v2-pink-200:#f7d5e4;--v2-pink-300:#fabcd8;--v2-pink-400:#f799c6;--v2-pink-500:#f26cb2;--v2-pink-600:#f64aab;--v2-pink-700:#e4429e;--v2-pink-800:#c83d8b;--v2-pink-900:#aa3576;--v2-pink-1000:#8c2d61;--v2-pink-1100:#6f284f;--v2-pink-1200:#5c1d3f}html[data-theme=oc-2] body:not([data-new-layout]){--text-diff-add-base:light-dark(#167517,#c4ffc0);--text-diff-delete-base:light-dark(#fa3012,#ec2f14);--syntax-comment:light-dark(#7a7a7a,#8f8f8f);--syntax-keyword:light-dark(#a753ae,#edb2f1);--syntax-string:#00ceb9;--syntax-primitive:light-dark(#034cff,#8cb0ff);--syntax-property:light-dark(#a753ae,#fab283);--syntax-type:light-dark(#8a6f00,#fcd53a);--syntax-critical:light-dark(#ff8c00,#fab283)}:root{color-scheme:light;--v2-background-bg-base:var(--v2-grey-50);--v2-background-bg-deep:var(--v2-grey-100);--v2-background-bg-layer-01:var(--v2-grey-100);--v2-background-bg-layer-02:var(--v2-grey-200);--v2-background-bg-layer-03:var(--v2-grey-300);--v2-background-bg-layer-04:var(--v2-grey-400);--v2-background-bg-inverse:var(--v2-grey-1100);--v2-background-bg-contrast:var(--v2-grey-1000);--v2-background-bg-button-neutral:var(--v2-grey-50);--v2-background-bg-accent:var(--v2-blue-600);--v2-text-text-base:var(--v2-grey-1100);--v2-text-text-muted:var(--v2-grey-700);--v2-text-text-faint:var(--v2-grey-600);--v2-text-text-inverse:var(--v2-grey-50);--v2-text-text-contrast:var(--v2-grey-50);--v2-text-text-accent:var(--v2-blue-600);--v2-text-text-accent-hover:var(--v2-blue-700);--v2-text-text-code-accent:var(--v2-blue-900);--v2-icon-icon-base:var(--v2-grey-800);--v2-icon-icon-muted:var(--v2-grey-600);--v2-icon-icon-inverse:var(--v2-grey-50);--v2-icon-icon-contrast:var(--v2-grey-100);--v2-icon-icon-accent:var(--v2-blue-600);--v2-icon-icon-accent-hover:var(--v2-blue-700);--v2-border-border-muted:var(--v2-alpha-dark-8);--v2-border-border-base:var(--v2-alpha-dark-10);--v2-border-border-strong:var(--v2-alpha-dark-20);--v2-border-border-inverse:var(--v2-grey-1000);--v2-border-border-focus:var(--v2-blue-500);--v2-overlay-simple-overlay-hover:var(--v2-alpha-dark-4);--v2-overlay-simple-overlay-pressed:var(--v2-alpha-dark-8);--v2-overlay-simple-overlay-contrast-hover:var(--v2-alpha-light-12);--v2-overlay-simple-overlay-contrast-pressed:var(--v2-alpha-light-24);--v2-overlay-simple-overlay-scrim:var(--v2-alpha-dark-40);--v2-overlay-gradient-depth-overlay-depth-top:var(--v2-alpha-light-100);--v2-overlay-gradient-depth-overlay-depth-bot:var(--v2-alpha-light-0);--v2-overlay-simple-tab-active-scrim:#fafafa00;--v2-overlay-simple-tab-hover-scrim:#eee0;--v2-overlay-simple-tab-scrim:#fafafa00;--v2-state-bg-success:var(--v2-green-100);--v2-state-fg-success:var(--v2-green-800);--v2-state-border-success:var(--v2-green-300);--v2-state-bg-warning:var(--v2-yellow-100);--v2-state-fg-warning:var(--v2-yellow-800);--v2-state-border-warning:var(--v2-yellow-300);--v2-state-bg-danger:var(--v2-red-100);--v2-state-fg-danger:var(--v2-red-800);--v2-state-border-danger:var(--v2-red-300);--v2-state-bg-info:var(--v2-blue-100);--v2-state-fg-info:var(--v2-blue-800);--v2-state-border-info:var(--v2-blue-300);--v2-avatar-fg:#fff;--v2-avatar-bg-orange:#ee7330;--v2-avatar-border-orange:#d16427;--v2-avatar-bg-yellow:#e7af36;--v2-avatar-border-yellow:#cb9f34;--v2-avatar-bg-cyan:#0096b8;--v2-avatar-border-cyan:#007d9b;--v2-avatar-bg-green:#2eaf5a;--v2-avatar-border-green:#198b43;--v2-avatar-bg-red:#d92e3c;--v2-avatar-border-red:#b82d35;--v2-avatar-bg-pink:#e4429e;--v2-avatar-border-pink:#c83d8b;--v2-avatar-bg-blue:#3250df;--v2-avatar-border-blue:#2c47c8;--v2-avatar-bg-purple:#623be2;--v2-avatar-border-purple:#5230c2;--v2-avatar-bg-gray:#5c5c5c;--v2-avatar-border-gray:#3a3a3a;--v2-elevation-raised:0px 2px 4px 0px var(--v2-alpha-dark-4), 0px 1px 2px -1px var(--v2-alpha-dark-8), 0px 0px 0px .5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-floating:0px 8px 16px 0px var(--v2-alpha-dark-4), 0px 4px 8px 0px var(--v2-alpha-dark-8), 0px 0px 0px .5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-overlay:0px 16px 32px 0px var(--v2-alpha-dark-4), 0px 8px 16px 0px var(--v2-alpha-dark-8), 0px 0px 0px .5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-button-neutral:0px 1px 1.5px 0px var(--v2-alpha-dark-10), 0px 0px 0px .5px var(--v2-alpha-dark-14), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-button-contrast:0px 1px 1.5px 0px var(--v2-alpha-dark-20), 0px 0px 0px .5px var(--v2-grey-800), inset 0px 1px 2px 0px var(--v2-alpha-light-14), inset 0px -1px 2px 0px var(--v2-alpha-dark-6), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-elements:0px .5px .5px 0px var(--v2-alpha-dark-40);--v2-elevation-switch-off:inset 0px 1px 1px 0px var(--v2-alpha-dark-8), inset 0px .5px .5px 0px var(--v2-alpha-dark-8), inset 0px 0px 0px .5px var(--v2-alpha-dark-10);--v2-elevation-switch-on:inset 0px 2px 2px 0px var(--v2-alpha-dark-10), inset 0px 1px 1px 0px var(--v2-alpha-dark-10), inset 0px 0px 0px .5px var(--v2-alpha-dark-20);--v2-illustration-illustration-layer-01:var(--v2-grey-300);--v2-illustration-illustration-layer-02:var(--v2-grey-400);--v2-illustration-illustration-layer-03:var(--v2-grey-500);--font-family-text:"Inter", sans-serif;--v2-font-family-sans:"Inter", sans-serif}[data-color-scheme=light]{color-scheme:light;--v2-background-bg-base:var(--v2-grey-50);--v2-background-bg-deep:var(--v2-grey-100);--v2-background-bg-layer-01:var(--v2-grey-100);--v2-background-bg-layer-02:var(--v2-grey-200);--v2-background-bg-layer-03:var(--v2-grey-300);--v2-background-bg-layer-04:var(--v2-grey-400);--v2-background-bg-inverse:var(--v2-grey-1100);--v2-background-bg-contrast:var(--v2-grey-1000);--v2-background-bg-button-neutral:var(--v2-grey-50);--v2-background-bg-accent:var(--v2-blue-600);--v2-text-text-base:var(--v2-grey-1100);--v2-text-text-muted:var(--v2-grey-700);--v2-text-text-faint:var(--v2-grey-600);--v2-text-text-inverse:var(--v2-grey-50);--v2-text-text-contrast:var(--v2-grey-50);--v2-text-text-accent:var(--v2-blue-600);--v2-text-text-accent-hover:var(--v2-blue-700);--v2-text-text-code-accent:var(--v2-blue-900);--v2-icon-icon-base:var(--v2-grey-800);--v2-icon-icon-muted:var(--v2-grey-600);--v2-icon-icon-inverse:var(--v2-grey-50);--v2-icon-icon-contrast:var(--v2-grey-100);--v2-icon-icon-accent:var(--v2-blue-600);--v2-icon-icon-accent-hover:var(--v2-blue-700);--v2-border-border-muted:var(--v2-alpha-dark-8);--v2-border-border-base:var(--v2-alpha-dark-10);--v2-border-border-strong:var(--v2-alpha-dark-20);--v2-border-border-inverse:var(--v2-grey-1000);--v2-border-border-focus:var(--v2-blue-500);--v2-overlay-simple-overlay-hover:var(--v2-alpha-dark-4);--v2-overlay-simple-overlay-pressed:var(--v2-alpha-dark-8);--v2-overlay-simple-overlay-contrast-hover:var(--v2-alpha-light-12);--v2-overlay-simple-overlay-contrast-pressed:var(--v2-alpha-light-24);--v2-overlay-simple-overlay-scrim:var(--v2-alpha-dark-40);--v2-overlay-gradient-depth-overlay-depth-top:var(--v2-alpha-light-100);--v2-overlay-gradient-depth-overlay-depth-bot:var(--v2-alpha-light-0);--v2-overlay-simple-tab-active-scrim:#fafafa00;--v2-overlay-simple-tab-hover-scrim:#eee0;--v2-overlay-simple-tab-scrim:#fafafa00;--v2-state-bg-success:var(--v2-green-100);--v2-state-fg-success:var(--v2-green-800);--v2-state-border-success:var(--v2-green-300);--v2-state-bg-warning:var(--v2-yellow-100);--v2-state-fg-warning:var(--v2-yellow-800);--v2-state-border-warning:var(--v2-yellow-300);--v2-state-bg-danger:var(--v2-red-100);--v2-state-fg-danger:var(--v2-red-800);--v2-state-border-danger:var(--v2-red-300);--v2-state-bg-info:var(--v2-blue-100);--v2-state-fg-info:var(--v2-blue-800);--v2-state-border-info:var(--v2-blue-300);--v2-elevation-raised:0px 2px 4px 0px var(--v2-alpha-dark-4), 0px 1px 2px -1px var(--v2-alpha-dark-8), 0px 0px 0px .5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-floating:0px 8px 16px 0px var(--v2-alpha-dark-4), 0px 4px 8px 0px var(--v2-alpha-dark-8), 0px 0px 0px .5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-overlay:0px 16px 32px 0px var(--v2-alpha-dark-4), 0px 8px 16px 0px var(--v2-alpha-dark-8), 0px 0px 0px .5px var(--v2-alpha-dark-12), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-button-neutral:0px 1px 1.5px 0px var(--v2-alpha-dark-10), 0px 0px 0px .5px var(--v2-alpha-dark-14), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-button-contrast:0px 1px 1.5px 0px var(--v2-alpha-dark-20), 0px 0px 0px .5px var(--v2-grey-800), inset 0px 1px 2px 0px var(--v2-alpha-light-14), inset 0px -1px 2px 0px var(--v2-alpha-dark-6), 0px 0px 0px 0px var(--v2-alpha-dark-0);--v2-elevation-elements:0px .5px .5px 0px var(--v2-alpha-dark-40);--v2-elevation-switch-off:inset 0px 1px 1px 0px var(--v2-alpha-dark-8), inset 0px .5px .5px 0px var(--v2-alpha-dark-8), inset 0px 0px 0px .5px var(--v2-alpha-dark-10);--v2-elevation-switch-on:inset 0px 2px 2px 0px var(--v2-alpha-dark-10), inset 0px 1px 1px 0px var(--v2-alpha-dark-10), inset 0px 0px 0px .5px var(--v2-alpha-dark-20);--v2-illustration-illustration-layer-01:var(--v2-grey-300);--v2-illustration-illustration-layer-02:var(--v2-grey-400);--v2-illustration-illustration-layer-03:var(--v2-grey-500);--v2-avatar-fg:#fff;--v2-avatar-bg-orange:#ee7330;--v2-avatar-border-orange:#d16427;--v2-avatar-bg-yellow:#e7af36;--v2-avatar-border-yellow:#cb9f34;--v2-avatar-bg-cyan:#0096b8;--v2-avatar-border-cyan:#007d9b;--v2-avatar-bg-green:#2eaf5a;--v2-avatar-border-green:#198b43;--v2-avatar-bg-red:#d92e3c;--v2-avatar-border-red:#b82d35;--v2-avatar-bg-pink:#e4429e;--v2-avatar-border-pink:#c83d8b;--v2-avatar-bg-blue:#3250df;--v2-avatar-border-blue:#2c47c8;--v2-avatar-bg-purple:#623be2;--v2-avatar-border-purple:#5230c2;--v2-avatar-bg-gray:#5c5c5c;--v2-avatar-border-gray:#3a3a3a}[data-color-scheme=dark]{color-scheme:dark;--v2-background-bg-base:var(--v2-grey-1100);--v2-background-bg-deep:var(--v2-grey-1200);--v2-background-bg-layer-01:var(--v2-grey-1000);--v2-background-bg-layer-02:var(--v2-grey-900);--v2-background-bg-layer-03:var(--v2-grey-800);--v2-background-bg-layer-04:var(--v2-grey-700);--v2-background-bg-inverse:var(--v2-grey-50);--v2-background-bg-contrast:var(--v2-grey-700);--v2-background-bg-button-neutral:var(--v2-alpha-light-6);--v2-background-bg-accent:var(--v2-blue-600);--v2-text-text-base:var(--v2-grey-100);--v2-text-text-muted:var(--v2-grey-500);--v2-text-text-faint:var(--v2-grey-600);--v2-text-text-inverse:var(--v2-grey-1100);--v2-text-text-contrast:var(--v2-grey-50);--v2-text-text-accent:var(--v2-blue-400);--v2-text-text-accent-hover:var(--v2-blue-300);--v2-text-text-code-accent:var(--v2-blue-400);--v2-icon-icon-base:var(--v2-grey-400);--v2-icon-icon-muted:var(--v2-grey-600);--v2-icon-icon-inverse:var(--v2-grey-1100);--v2-icon-icon-contrast:var(--v2-grey-100);--v2-icon-icon-accent:var(--v2-blue-400);--v2-icon-icon-accent-hover:var(--v2-blue-300);--v2-border-border-muted:var(--v2-alpha-light-8);--v2-border-border-base:var(--v2-alpha-light-10);--v2-border-border-strong:var(--v2-alpha-light-20);--v2-border-border-inverse:var(--v2-grey-100);--v2-border-border-focus:var(--v2-blue-500);--v2-overlay-simple-overlay-hover:var(--v2-alpha-light-6);--v2-overlay-simple-overlay-pressed:var(--v2-alpha-light-10);--v2-overlay-simple-overlay-contrast-hover:var(--v2-alpha-dark-24);--v2-overlay-simple-overlay-contrast-pressed:var(--v2-alpha-dark-40);--v2-overlay-simple-overlay-scrim:var(--v2-alpha-dark-60);--v2-overlay-gradient-depth-overlay-depth-top:var(--v2-alpha-light-100);--v2-overlay-gradient-depth-overlay-depth-bot:var(--v2-alpha-light-0);--v2-overlay-simple-tab-active-scrim:#24242400;--v2-overlay-simple-tab-hover-scrim:#3a3a3a00;--v2-overlay-simple-tab-scrim:#08080800;--v2-state-bg-success:var(--v2-green-1200);--v2-state-fg-success:var(--v2-green-500);--v2-state-border-success:var(--v2-green-900);--v2-state-bg-warning:var(--v2-yellow-1200);--v2-state-fg-warning:var(--v2-yellow-500);--v2-state-border-warning:var(--v2-yellow-900);--v2-state-bg-danger:var(--v2-red-1200);--v2-state-fg-danger:var(--v2-red-500);--v2-state-border-danger:var(--v2-red-900);--v2-state-bg-info:var(--v2-blue-1200);--v2-state-fg-info:var(--v2-blue-500);--v2-state-border-info:var(--v2-blue-900);--v2-avatar-fg:#fff;--v2-avatar-bg-orange:#723d22;--v2-avatar-border-orange:#ff8648;--v2-avatar-bg-yellow:#68552b;--v2-avatar-border-yellow:#e7af36;--v2-avatar-bg-cyan:#005a6e;--v2-avatar-border-cyan:#0096b8;--v2-avatar-bg-green:#196130;--v2-avatar-border-green:#49c970;--v2-avatar-bg-red:#7a1f23;--v2-avatar-border-red:#d92e3c;--v2-avatar-bg-pink:#8c2d61;--v2-avatar-border-pink:#e4429e;--v2-avatar-bg-blue:#263fa9;--v2-avatar-border-blue:#7698fd;--v2-avatar-bg-purple:#361f83;--v2-avatar-border-purple:#7152f4;--v2-avatar-bg-gray:#5c5c5c;--v2-avatar-border-gray:#aeaeae;--v2-elevation-raised:0px 2px 4px 0px var(--v2-alpha-dark-30), 0px 1px 2px 0px var(--v2-alpha-dark-30), 0px 0px 0px .5px var(--v2-alpha-light-16), 0px -.5px 0px 0px var(--v2-alpha-light-6);--v2-elevation-floating:0px 8px 16px 0px var(--v2-alpha-dark-30), 0px 4px 8px 0px var(--v2-alpha-dark-30), 0px 0px 0px .5px var(--v2-alpha-light-16), 0px -.5px 0px 0px var(--v2-alpha-light-6);--v2-elevation-overlay:0px 16px 32px 0px var(--v2-alpha-dark-30), 0px 8px 16px 0px var(--v2-alpha-dark-30), 0px 0px 0px .5px var(--v2-alpha-light-16), 0px -.5px 0px 0px var(--v2-alpha-light-6);--v2-elevation-button-neutral:0px 1px 2px 0px var(--v2-alpha-dark-40), 0px 0px 0px .5px var(--v2-alpha-light-20), 0px -.5px 0px 0px var(--v2-alpha-light-10);--v2-elevation-button-contrast:0px 1px 2px 0px var(--v2-alpha-dark-40), 0px 0px 0px .5px var(--v2-alpha-light-40), inset 0px 0px 0px 0px var(--v2-alpha-light-0), inset 0px 0px 0px 0px var(--v2-alpha-light-0), 0px -.5px 0px 0px var(--v2-alpha-light-30);--v2-elevation-elements:0px .5px .5px 0px var(--v2-alpha-dark-40);--v2-elevation-switch-off:inset 0px -.5px 0px 0px var(--v2-alpha-light-10), inset 0px 0px 0px 0px var(--v2-alpha-light-0), inset 0px 0px 0px .5px var(--v2-alpha-light-16);--v2-elevation-switch-on:inset 0px -.5px 0px 0px var(--v2-alpha-light-10), inset 0px 0px 0px 0px var(--v2-alpha-light-0), inset 0px 0px 0px .5px var(--v2-alpha-light-16);--v2-illustration-illustration-layer-01:var(--v2-grey-900);--v2-illustration-illustration-layer-02:var(--v2-grey-800);--v2-illustration-illustration-layer-03:var(--v2-grey-700)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.block{display:block}.flex{display:flex}.hidden{display:none}.inline{display:inline}.table{display:table}.h-dvh{height:100dvh}.flex-shrink{flex-shrink:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-col{flex-direction:column}.overflow-hidden{overflow:hidden}.overscroll-none{overscroll-behavior:none}.border{border-style:var(--tw-border-style);border-width:1px}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
assets/index-vUWicxNv.js ADDED
The diff for this file is too large to render. See raw diff
 
assets/kanagawa-PkxnAgRP.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",n="Kanagawa",t="kanagawa",e={palette:{neutral:"#F2E9DE",ink:"#54433A",primary:"#2D4F67",accent:"#D27E99",success:"#98BB6C",warning:"#D7A657",error:"#E82424",info:"#76946A",diffAdd:"#89AF5B",diffDelete:"#D61F1F"},overrides:{"text-weak":"#9E9389","syntax-comment":"#9E9389","syntax-keyword":"#957FB8","syntax-string":"#98BB6C","syntax-primitive":"#2D4F67","syntax-variable":"#54433A","syntax-property":"#76946A","syntax-type":"#C38D9D","syntax-constant":"#D7A657","syntax-operator":"#D27E99","syntax-punctuation":"#54433A","syntax-object":"#54433A","markdown-heading":"#957FB8","markdown-text":"#54433A","markdown-link":"#2D4F67","markdown-link-text":"#76946A","markdown-code":"#98BB6C","markdown-block-quote":"#9E9389","markdown-emph":"#C38D9D","markdown-strong":"#D7A657","markdown-horizontal-rule":"#9E9389","markdown-list-item":"#2D4F67","markdown-list-enumeration":"#76946A","markdown-image":"#2D4F67","markdown-image-text":"#76946A","markdown-code-block":"#54433A"}},o={palette:{neutral:"#1F1F28",ink:"#DCD7BA",primary:"#7E9CD8",accent:"#D27E99",success:"#98BB6C",warning:"#D7A657",error:"#E82424",info:"#76946A",diffAdd:"#A9D977",diffDelete:"#F24A4A"},overrides:{"text-weak":"#727169","syntax-comment":"#727169","syntax-keyword":"#957FB8","syntax-string":"#98BB6C","syntax-primitive":"#7E9CD8","syntax-variable":"#DCD7BA","syntax-property":"#76946A","syntax-type":"#C38D9D","syntax-constant":"#D7A657","syntax-operator":"#D27E99","syntax-punctuation":"#DCD7BA","syntax-object":"#DCD7BA","markdown-heading":"#957FB8","markdown-text":"#DCD7BA","markdown-link":"#7E9CD8","markdown-link-text":"#76946A","markdown-code":"#98BB6C","markdown-block-quote":"#727169","markdown-emph":"#C38D9D","markdown-strong":"#D7A657","markdown-horizontal-rule":"#727169","markdown-list-item":"#7E9CD8","markdown-list-enumeration":"#76946A","markdown-image":"#7E9CD8","markdown-image-text":"#76946A","markdown-code-block":"#DCD7BA"}},r={$schema:a,name:n,id:t,light:e,dark:o};export{a as $schema,o as dark,r as default,t as id,e as light,n as name};
assets/lucent-orng-3zCc1Xf5.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="Lucent Orng",n="lucent-orng",t={palette:{neutral:"#fff5f0",ink:"#1a1a1a",primary:"#EC5B2B",accent:"#c94d24",success:"#0062d1",warning:"#EC5B2B",error:"#d1383d",info:"#318795",diffDelete:"#f52a65"},overrides:{"text-weak":"#8a8a8a","syntax-comment":"#8a8a8a","syntax-keyword":"#EC5B2B","syntax-string":"#0062d1","syntax-primitive":"#c94d24","syntax-variable":"#d1383d","syntax-property":"#318795","syntax-type":"#b0851f","syntax-constant":"#EC5B2B","syntax-operator":"#318795","syntax-punctuation":"#1a1a1a","syntax-object":"#d1383d","markdown-heading":"#EC5B2B","markdown-text":"#1a1a1a","markdown-link":"#EC5B2B","markdown-link-text":"#318795","markdown-code":"#0062d1","markdown-block-quote":"#b0851f","markdown-emph":"#b0851f","markdown-strong":"#EC5B2B","markdown-horizontal-rule":"#8a8a8a","markdown-list-item":"#EC5B2B","markdown-list-enumeration":"#318795","markdown-image":"#EC5B2B","markdown-image-text":"#318795","markdown-code-block":"#1a1a1a"}},o={palette:{neutral:"#2a1a15",ink:"#eeeeee",primary:"#EC5B2B",accent:"#FFF7F1",success:"#6ba1e6",warning:"#EC5B2B",error:"#e06c75",info:"#56b6c2",diffDelete:"#e26a75"},overrides:{"text-weak":"#808080","syntax-comment":"#808080","syntax-keyword":"#EC5B2B","syntax-string":"#6ba1e6","syntax-primitive":"#EE7948","syntax-variable":"#e06c75","syntax-property":"#56b6c2","syntax-type":"#e5c07b","syntax-constant":"#FFF7F1","syntax-operator":"#56b6c2","syntax-punctuation":"#eeeeee","syntax-object":"#e06c75","markdown-heading":"#EC5B2B","markdown-text":"#eeeeee","markdown-link":"#EC5B2B","markdown-link-text":"#56b6c2","markdown-code":"#6ba1e6","markdown-block-quote":"#FFF7F1","markdown-emph":"#e5c07b","markdown-strong":"#EE7948","markdown-horizontal-rule":"#808080","markdown-list-item":"#EC5B2B","markdown-list-enumeration":"#56b6c2","markdown-image":"#EC5B2B","markdown-image-text":"#56b6c2","markdown-code-block":"#eeeeee"}},r={$schema:a,name:e,id:n,light:t,dark:o};export{a as $schema,o as dark,r as default,n as id,t as light,e as name};
assets/material-CDQyWXdQ.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="Material",t="material",n={palette:{neutral:"#fafafa",ink:"#263238",primary:"#6182b8",accent:"#39adb5",success:"#91b859",warning:"#ffb300",error:"#e53935",info:"#f4511e",interactive:"#39adb5"},overrides:{"text-weak":"#90a4ae","syntax-comment":"#90a4ae","syntax-keyword":"#7c4dff","syntax-string":"#91b859","syntax-primitive":"#6182b8","syntax-variable":"#263238","syntax-property":"#7c4dff","syntax-type":"#ffb300","syntax-constant":"#f4511e","syntax-operator":"#39adb5","syntax-punctuation":"#263238","syntax-object":"#263238","markdown-heading":"#6182b8","markdown-text":"#263238","markdown-link":"#39adb5","markdown-link-text":"#7c4dff","markdown-code":"#91b859","markdown-block-quote":"#90a4ae","markdown-emph":"#ffb300","markdown-strong":"#f4511e","markdown-horizontal-rule":"#e0e0e0","markdown-list-item":"#6182b8","markdown-list-enumeration":"#39adb5","markdown-image":"#39adb5","markdown-image-text":"#7c4dff","markdown-code-block":"#263238"}},f={palette:{neutral:"#263238",ink:"#eeffff",primary:"#82aaff",accent:"#89ddff",success:"#c3e88d",warning:"#ffcb6b",error:"#f07178",info:"#ffcb6b",interactive:"#89ddff"},overrides:{"text-weak":"#546e7a","syntax-comment":"#546e7a","syntax-keyword":"#c792ea","syntax-string":"#c3e88d","syntax-primitive":"#82aaff","syntax-variable":"#eeffff","syntax-property":"#c792ea","syntax-type":"#ffcb6b","syntax-constant":"#ffcb6b","syntax-operator":"#89ddff","syntax-punctuation":"#eeffff","syntax-object":"#eeffff","markdown-heading":"#82aaff","markdown-text":"#eeffff","markdown-link":"#89ddff","markdown-link-text":"#c792ea","markdown-code":"#c3e88d","markdown-block-quote":"#546e7a","markdown-emph":"#ffcb6b","markdown-strong":"#ffcb6b","markdown-horizontal-rule":"#37474f","markdown-list-item":"#82aaff","markdown-list-enumeration":"#89ddff","markdown-image":"#89ddff","markdown-image-text":"#c792ea","markdown-code-block":"#eeffff"}},o={$schema:a,name:e,id:t,light:n,dark:f};export{a as $schema,f as dark,o as default,t as id,n as light,e as name};
assets/matrix-BQ_S38An.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Matrix",a="matrix",n={palette:{neutral:"#eef3ea",ink:"#203022",primary:"#1cc24b",accent:"#c770ff",success:"#1cc24b",warning:"#e6ff57",error:"#ff4b4b",info:"#30b3ff",interactive:"#30b3ff",diffAdd:"#5dac7e",diffDelete:"#d53a3a"},overrides:{"text-weak":"#748476","syntax-comment":"#748476","syntax-keyword":"#c770ff","syntax-string":"#1cc24b","syntax-primitive":"#30b3ff","syntax-variable":"#203022","syntax-property":"#24f6d9","syntax-type":"#e6ff57","syntax-constant":"#ffa83d","syntax-operator":"#24f6d9","syntax-punctuation":"#203022","syntax-object":"#203022","markdown-heading":"#24f6d9","markdown-text":"#203022","markdown-link":"#30b3ff","markdown-link-text":"#24f6d9","markdown-code":"#1cc24b","markdown-block-quote":"#748476","markdown-emph":"#ffa83d","markdown-strong":"#e6ff57","markdown-horizontal-rule":"#748476","markdown-list-item":"#30b3ff","markdown-list-enumeration":"#24f6d9","markdown-image":"#30b3ff","markdown-image-text":"#24f6d9","markdown-code-block":"#203022"},v2Overrides:{"v2-text-text-base":"#353535","v2-text-text-muted":"#748476","v2-text-text-faint":"#748476","v2-background-bg-accent":"var(--v2-green-600)","v2-text-text-accent":"var(--v2-green-600)","v2-text-text-accent-hover":"var(--v2-green-700)","v2-icon-icon-accent":"var(--v2-green-600)","v2-icon-icon-accent-hover":"var(--v2-green-700)","v2-border-border-focus":"var(--v2-green-500)"}},r={palette:{neutral:"#0a0e0a",ink:"#62ff94",primary:"#2eff6a",accent:"#c770ff",success:"#62ff94",warning:"#e6ff57",error:"#ff4b4b",info:"#30b3ff",interactive:"#30b3ff",diffAdd:"#77ffaf",diffDelete:"#ff7171"},overrides:{"text-weak":"#8ca391","syntax-comment":"#8ca391","syntax-keyword":"#c770ff","syntax-string":"#1cc24b","syntax-primitive":"#30b3ff","syntax-variable":"#62ff94","syntax-property":"#24f6d9","syntax-type":"#e6ff57","syntax-constant":"#ffa83d","syntax-operator":"#24f6d9","syntax-punctuation":"#62ff94","syntax-object":"#62ff94","markdown-heading":"#00efff","markdown-text":"#62ff94","markdown-link":"#30b3ff","markdown-link-text":"#24f6d9","markdown-code":"#1cc24b","markdown-block-quote":"#8ca391","markdown-emph":"#ffa83d","markdown-strong":"#e6ff57","markdown-horizontal-rule":"#8ca391","markdown-list-item":"#30b3ff","markdown-list-enumeration":"#24f6d9","markdown-image":"#30b3ff","markdown-image-text":"#24f6d9","markdown-code-block":"#62ff94"},v2Overrides:{"v2-text-text-base":"#ececec","v2-text-text-muted":"#8ca391","v2-text-text-faint":"#8ca391","v2-background-bg-accent":"var(--v2-green-600)","v2-text-text-accent":"var(--v2-green-400)","v2-text-text-accent-hover":"var(--v2-green-300)","v2-icon-icon-accent":"var(--v2-green-400)","v2-icon-icon-accent-hover":"var(--v2-green-300)","v2-border-border-focus":"var(--v2-green-500)"}},f={$schema:e,name:t,id:a,light:n,dark:r};export{e as $schema,r as dark,f as default,a as id,n as light,t as name};
assets/mercury-CL9KPSEM.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="Mercury",n="mercury",t={palette:{neutral:"#ffffff",ink:"#363644",primary:"#5266eb",accent:"#8da4f5",success:"#036e43",warning:"#a44200",error:"#b0175f",info:"#007f95",interactive:"#465bd1"},overrides:{"text-weak":"#70707d","syntax-comment":"#70707d","syntax-keyword":"#465bd1","syntax-string":"#036e43","syntax-primitive":"#5266eb","syntax-variable":"#007f95","syntax-property":"#5266eb","syntax-type":"#007f95","syntax-constant":"#a44200","syntax-operator":"#465bd1","syntax-punctuation":"#363644","syntax-object":"#007f95","markdown-heading":"#1e1e2a","markdown-text":"#363644","markdown-link":"#465bd1","markdown-link-text":"#5266eb","markdown-code":"#036e43","markdown-block-quote":"#70707d","markdown-emph":"#a44200","markdown-strong":"#1e1e2a","markdown-horizontal-rule":"#7073931a","markdown-list-item":"#1e1e2a","markdown-list-enumeration":"#5266eb","markdown-image":"#465bd1","markdown-image-text":"#5266eb","markdown-code-block":"#363644"}},d={palette:{neutral:"#171721",ink:"#dddde5",primary:"#8da4f5",accent:"#8da4f5",success:"#77c599",warning:"#fc9b6f",error:"#fc92b4",info:"#77becf"},overrides:{"text-weak":"#9d9da8","syntax-comment":"#9d9da8","syntax-keyword":"#8da4f5","syntax-string":"#77c599","syntax-primitive":"#8da4f5","syntax-variable":"#77becf","syntax-property":"#a7b6f8","syntax-type":"#77becf","syntax-constant":"#fc9b6f","syntax-operator":"#8da4f5","syntax-punctuation":"#dddde5","syntax-object":"#77becf","markdown-heading":"#ffffff","markdown-text":"#dddde5","markdown-link":"#8da4f5","markdown-link-text":"#a7b6f8","markdown-code":"#77c599","markdown-block-quote":"#9d9da8","markdown-emph":"#fc9b6f","markdown-strong":"#f4f5f9","markdown-horizontal-rule":"#b4b7c81f","markdown-list-item":"#ffffff","markdown-list-enumeration":"#8da4f5","markdown-image":"#8da4f5","markdown-image-text":"#a7b6f8","markdown-code-block":"#dddde5"}},o={$schema:a,name:e,id:n,light:t,dark:d};export{a as $schema,d as dark,o as default,n as id,t as light,e as name};
assets/monokai-BmT5Sw19.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Monokai",a="monokai",n={palette:{neutral:"#fdf8ec",ink:"#292318",primary:"#bf7bff",accent:"#d9487c",success:"#4fb54b",warning:"#f1a948",error:"#e54b4b",info:"#2d9ad7",diffAdd:"#bfe7a3",diffDelete:"#f6a3ae"},overrides:{"syntax-comment":"#8a816f","syntax-keyword":"#d9487c","syntax-string":"#8a6500","syntax-primitive":"#3c8d2f","syntax-property":"#1f88c8","syntax-constant":"#9b5fe0"}},f={palette:{neutral:"#272822",ink:"#f8f8f2",primary:"#ae81ff",accent:"#f92672",success:"#a6e22e",warning:"#fd971f",error:"#f92672",info:"#66d9ef",diffAdd:"#4d7f2a",diffDelete:"#f4477c"},overrides:{"syntax-comment":"#75715e","syntax-keyword":"#f92672","syntax-string":"#e6db74","syntax-primitive":"#a6e22e","syntax-property":"#66d9ef","syntax-constant":"#ae81ff"}},s={$schema:e,name:t,id:a,light:n,dark:f};export{e as $schema,f as dark,s as default,a as id,n as light,t as name};
assets/nightowl-Pa1W3oWG.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Night Owl",a="nightowl",n={palette:{neutral:"#f0f0f0",ink:"#403f53",primary:"#4876d6",accent:"#aa0982",success:"#2aa298",warning:"#c96765",error:"#de3d3b",info:"#4876d6",diffAdd:"#2aa298",diffDelete:"#de3d3b"},overrides:{"syntax-comment":"#7a8181","syntax-keyword":"#994cc3","syntax-primitive":"#4876d6","syntax-constant":"#c96765"}},c={palette:{neutral:"#011627",ink:"#d6deeb",primary:"#82aaff",accent:"#f78c6c",success:"#c5e478",warning:"#ecc48d",error:"#ef5350",info:"#82aaff",diffAdd:"#c5e478",diffDelete:"#ef5350"},overrides:{"syntax-comment":"#637777","syntax-keyword":"#c792ea","syntax-string":"#ecc48d","syntax-primitive":"#82aaff","syntax-constant":"#f78c6c"}},s={$schema:e,name:t,id:a,light:n,dark:c};export{e as $schema,c as dark,s as default,a as id,n as light,t as name};
assets/nord-NfRmCUpk.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",a="Nord",t="nord",n={palette:{neutral:"#eceff4",ink:"#2e3440",primary:"#5e81ac",accent:"#bf616a",success:"#8fbcbb",warning:"#d08770",error:"#bf616a",info:"#81a1c1",diffAdd:"#a3be8c",diffDelete:"#bf616a"},overrides:{"syntax-comment":"#6b7282","syntax-keyword":"#5e81ac","syntax-string":"#6f8758","syntax-primitive":"#5e81ac","syntax-constant":"#8d6886"}},c={palette:{neutral:"#2e3440",ink:"#e5e9f0",primary:"#88c0d0",accent:"#d57780",success:"#a3be8c",warning:"#d08770",error:"#bf616a",info:"#81a1c1",diffAdd:"#81a1c1",diffDelete:"#bf616a"},overrides:{"syntax-comment":"#616e88","syntax-keyword":"#81a1c1","syntax-primitive":"#88c0d0","syntax-constant":"#b48ead"}},s={$schema:e,name:a,id:t,light:n,dark:c};export{e as $schema,c as dark,s as default,t as id,n as light,a as name};
assets/one-dark-Bjk1FzZz.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",n="One Dark",e="one-dark",t={palette:{neutral:"#fafafa",ink:"#383a42",primary:"#4078f2",accent:"#0184bc",success:"#50a14f",warning:"#c18401",error:"#e45649",info:"#986801",diffAdd:"#489447",diffDelete:"#d65145"},overrides:{"text-weak":"#a0a1a7","syntax-comment":"#a0a1a7","syntax-keyword":"#a626a4","syntax-string":"#50a14f","syntax-primitive":"#4078f2","syntax-variable":"#e45649","syntax-property":"#0184bc","syntax-type":"#c18401","syntax-constant":"#986801","syntax-operator":"#0184bc","syntax-punctuation":"#383a42","syntax-object":"#e45649","markdown-heading":"#a626a4","markdown-text":"#383a42","markdown-link":"#4078f2","markdown-link-text":"#0184bc","markdown-code":"#50a14f","markdown-block-quote":"#a0a1a7","markdown-emph":"#c18401","markdown-strong":"#986801","markdown-horizontal-rule":"#a0a1a7","markdown-list-item":"#4078f2","markdown-list-enumeration":"#0184bc","markdown-image":"#4078f2","markdown-image-text":"#0184bc","markdown-code-block":"#383a42"}},o={palette:{neutral:"#282c34",ink:"#abb2bf",primary:"#61afef",accent:"#56b6c2",success:"#98c379",warning:"#e5c07b",error:"#e06c75",info:"#d19a66",diffAdd:"#aad482",diffDelete:"#e8828b"},overrides:{"text-weak":"#5c6370","syntax-comment":"#5c6370","syntax-keyword":"#c678dd","syntax-string":"#98c379","syntax-primitive":"#61afef","syntax-variable":"#e06c75","syntax-property":"#56b6c2","syntax-type":"#e5c07b","syntax-constant":"#d19a66","syntax-operator":"#56b6c2","syntax-punctuation":"#abb2bf","syntax-object":"#e06c75","markdown-heading":"#c678dd","markdown-text":"#abb2bf","markdown-link":"#61afef","markdown-link-text":"#56b6c2","markdown-code":"#98c379","markdown-block-quote":"#5c6370","markdown-emph":"#e5c07b","markdown-strong":"#d19a66","markdown-horizontal-rule":"#5c6370","markdown-list-item":"#61afef","markdown-list-enumeration":"#56b6c2","markdown-image":"#61afef","markdown-image-text":"#56b6c2","markdown-code-block":"#abb2bf"}},r={$schema:a,name:n,id:e,light:t,dark:o};export{a as $schema,o as dark,r as default,e as id,t as light,n as name};
assets/onedarkpro-C4eYovZb.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",a="One Dark Pro",t="onedarkpro",n={palette:{neutral:"#f5f6f8",ink:"#2b303b",primary:"#528bff",accent:"#d85462",success:"#4fa66d",warning:"#d19a66",error:"#e06c75",info:"#61afef",diffAdd:"#c2ebcf",diffDelete:"#f7c1c5"},overrides:{"syntax-comment":"#6a717d","syntax-keyword":"#a626a4","syntax-primitive":"#4078f2","syntax-constant":"#986801"}},c={palette:{neutral:"#1e222a",ink:"#abb2bf",primary:"#61afef",accent:"#e06c75",success:"#98c379",warning:"#e5c07b",error:"#e06c75",info:"#56b6c2",diffAdd:"#4b815a",diffDelete:"#b2555f"},overrides:{"syntax-comment":"#5c6370","syntax-keyword":"#c678dd","syntax-primitive":"#61afef","syntax-constant":"#d19a66"}},r={$schema:e,name:a,id:t,light:n,dark:c};export{e as $schema,c as dark,r as default,t as id,n as light,a as name};
assets/opencode-D7rBuNi7.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="OpenCode",n="opencode",t={palette:{neutral:"#ffffff",ink:"#1a1a1a",primary:"#3b7dd8",accent:"#d68c27",success:"#3d9a57",warning:"#d68c27",error:"#d1383d",info:"#318795",diffAdd:"#4db380",diffDelete:"#f52a65"},overrides:{"text-weak":"#8a8a8a","syntax-comment":"#8a8a8a","syntax-keyword":"#d68c27","syntax-string":"#3d9a57","syntax-primitive":"#3b7dd8","syntax-variable":"#d1383d","syntax-property":"#318795","syntax-type":"#b0851f","syntax-constant":"#d68c27","syntax-operator":"#318795","syntax-punctuation":"#1a1a1a","syntax-object":"#d1383d","markdown-heading":"#d68c27","markdown-text":"#1a1a1a","markdown-link":"#3b7dd8","markdown-link-text":"#318795","markdown-code":"#3d9a57","markdown-block-quote":"#b0851f","markdown-emph":"#b0851f","markdown-strong":"#d68c27","markdown-horizontal-rule":"#8a8a8a","markdown-list-item":"#3b7dd8","markdown-list-enumeration":"#318795","markdown-image":"#3b7dd8","markdown-image-text":"#318795","markdown-code-block":"#1a1a1a"}},d={palette:{neutral:"#0a0a0a",ink:"#eeeeee",primary:"#fab283",accent:"#9d7cd8",success:"#7fd88f",warning:"#f5a742",error:"#e06c75",info:"#56b6c2",diffAdd:"#b8db87",diffDelete:"#e26a75"},overrides:{"text-weak":"#808080","syntax-comment":"#808080","syntax-keyword":"#9d7cd8","syntax-string":"#7fd88f","syntax-primitive":"#fab283","syntax-variable":"#e06c75","syntax-property":"#56b6c2","syntax-type":"#e5c07b","syntax-constant":"#f5a742","syntax-operator":"#56b6c2","syntax-punctuation":"#eeeeee","syntax-object":"#e06c75","markdown-heading":"#9d7cd8","markdown-text":"#eeeeee","markdown-link":"#fab283","markdown-link-text":"#56b6c2","markdown-code":"#7fd88f","markdown-block-quote":"#e5c07b","markdown-emph":"#e5c07b","markdown-strong":"#f5a742","markdown-horizontal-rule":"#808080","markdown-list-item":"#fab283","markdown-list-enumeration":"#56b6c2","markdown-image":"#fab283","markdown-image-text":"#56b6c2","markdown-code-block":"#eeeeee"}},o={$schema:a,name:e,id:n,light:t,dark:d};export{a as $schema,d as dark,o as default,n as id,t as light,e as name};
assets/orng-BM7q_Z0y.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="Orng",n="orng",t={palette:{neutral:"#ffffff",ink:"#1a1a1a",primary:"#EC5B2B",accent:"#c94d24",success:"#0062d1",warning:"#EC5B2B",error:"#d1383d",info:"#318795",diffDelete:"#f52a65"},overrides:{"text-weak":"#8a8a8a","syntax-comment":"#8a8a8a","syntax-keyword":"#EC5B2B","syntax-string":"#0062d1","syntax-primitive":"#c94d24","syntax-variable":"#d1383d","syntax-property":"#318795","syntax-type":"#b0851f","syntax-constant":"#EC5B2B","syntax-operator":"#318795","syntax-punctuation":"#1a1a1a","syntax-object":"#d1383d","markdown-heading":"#EC5B2B","markdown-text":"#1a1a1a","markdown-link":"#EC5B2B","markdown-link-text":"#318795","markdown-code":"#0062d1","markdown-block-quote":"#b0851f","markdown-emph":"#b0851f","markdown-strong":"#EC5B2B","markdown-horizontal-rule":"#8a8a8a","markdown-list-item":"#EC5B2B","markdown-list-enumeration":"#318795","markdown-image":"#EC5B2B","markdown-image-text":"#318795","markdown-code-block":"#1a1a1a"}},o={palette:{neutral:"#0a0a0a",ink:"#eeeeee",primary:"#EC5B2B",accent:"#FFF7F1",success:"#6ba1e6",warning:"#EC5B2B",error:"#e06c75",info:"#56b6c2",diffDelete:"#e26a75"},overrides:{"text-weak":"#808080","syntax-comment":"#808080","syntax-keyword":"#EC5B2B","syntax-string":"#6ba1e6","syntax-primitive":"#EE7948","syntax-variable":"#e06c75","syntax-property":"#56b6c2","syntax-type":"#e5c07b","syntax-constant":"#FFF7F1","syntax-operator":"#56b6c2","syntax-punctuation":"#eeeeee","syntax-object":"#e06c75","markdown-heading":"#EC5B2B","markdown-text":"#eeeeee","markdown-link":"#EC5B2B","markdown-link-text":"#56b6c2","markdown-code":"#6ba1e6","markdown-block-quote":"#FFF7F1","markdown-emph":"#e5c07b","markdown-strong":"#EE7948","markdown-horizontal-rule":"#808080","markdown-list-item":"#EC5B2B","markdown-list-enumeration":"#56b6c2","markdown-image":"#EC5B2B","markdown-image-text":"#56b6c2","markdown-code-block":"#eeeeee"}},r={$schema:a,name:e,id:n,light:t,dark:o};export{a as $schema,o as dark,r as default,n as id,t as light,e as name};
assets/osaka-jade-LSg9CtTT.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",n="Osaka Jade",t="osaka-jade",e={palette:{neutral:"#F6F5DD",ink:"#111c18",primary:"#1faa90",accent:"#3d7a52",success:"#3d7a52",warning:"#b5a020",error:"#c7392d",info:"#1faa90"},overrides:{"text-weak":"#53685B","syntax-comment":"#53685B","syntax-keyword":"#1faa90","syntax-string":"#3d7a52","syntax-primitive":"#3d7560","syntax-variable":"#111c18","syntax-property":"#3d7a52","syntax-type":"#3d7a52","syntax-constant":"#a8527a","syntax-operator":"#b5a020","syntax-punctuation":"#111c18","syntax-object":"#111c18","markdown-heading":"#1faa90","markdown-text":"#111c18","markdown-link":"#1faa90","markdown-link-text":"#3d7a52","markdown-code":"#3d7a52","markdown-block-quote":"#53685B","markdown-emph":"#a8527a","markdown-strong":"#111c18","markdown-horizontal-rule":"#53685B","markdown-list-item":"#1faa90","markdown-list-enumeration":"#1faa90","markdown-image":"#1faa90","markdown-image-text":"#3d7a52","markdown-code-block":"#111c18"}},o={palette:{neutral:"#111c18",ink:"#C1C497",primary:"#2DD5B7",accent:"#549e6a",success:"#549e6a",warning:"#E5C736",error:"#FF5345",info:"#2DD5B7",interactive:"#8CD3CB",diffAdd:"#63b07a",diffDelete:"#db9f9c"},overrides:{"text-weak":"#53685B","syntax-comment":"#53685B","syntax-keyword":"#2DD5B7","syntax-string":"#63b07a","syntax-primitive":"#509475","syntax-variable":"#C1C497","syntax-property":"#549e6a","syntax-type":"#549e6a","syntax-constant":"#D2689C","syntax-operator":"#459451","syntax-punctuation":"#C1C497","syntax-object":"#C1C497","markdown-heading":"#2DD5B7","markdown-text":"#C1C497","markdown-link":"#8CD3CB","markdown-link-text":"#549e6a","markdown-code":"#63b07a","markdown-block-quote":"#53685B","markdown-emph":"#D2689C","markdown-strong":"#C1C497","markdown-horizontal-rule":"#53685B","markdown-list-item":"#2DD5B7","markdown-list-enumeration":"#8CD3CB","markdown-image":"#8CD3CB","markdown-image-text":"#549e6a","markdown-code-block":"#C1C497"}},r={$schema:a,name:n,id:t,light:e,dark:o};export{a as $schema,o as dark,r as default,t as id,e as light,n as name};
assets/palenight-Djgtir2l.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="Palenight",n="palenight",t={palette:{neutral:"#fafafa",ink:"#292d3e",primary:"#4976eb",accent:"#00acc1",success:"#91b859",warning:"#ffb300",error:"#e53935",info:"#f4511e"},overrides:{"text-weak":"#8796b0","syntax-comment":"#8796b0","syntax-keyword":"#a854f2","syntax-string":"#91b859","syntax-primitive":"#4976eb","syntax-variable":"#292d3e","syntax-property":"#00acc1","syntax-type":"#ffb300","syntax-constant":"#f4511e","syntax-operator":"#00acc1","syntax-punctuation":"#292d3e","syntax-object":"#292d3e","markdown-heading":"#a854f2","markdown-text":"#292d3e","markdown-link":"#4976eb","markdown-link-text":"#00acc1","markdown-code":"#91b859","markdown-block-quote":"#8796b0","markdown-emph":"#ffb300","markdown-strong":"#f4511e","markdown-horizontal-rule":"#8796b0","markdown-list-item":"#4976eb","markdown-list-enumeration":"#00acc1","markdown-image":"#4976eb","markdown-image-text":"#00acc1","markdown-code-block":"#292d3e"}},o={palette:{neutral:"#292d3e",ink:"#a6accd",primary:"#82aaff",accent:"#89ddff",success:"#c3e88d",warning:"#ffcb6b",error:"#f07178",info:"#f78c6c"},overrides:{"text-weak":"#676e95","syntax-comment":"#676e95","syntax-keyword":"#c792ea","syntax-string":"#c3e88d","syntax-primitive":"#82aaff","syntax-variable":"#a6accd","syntax-property":"#89ddff","syntax-type":"#ffcb6b","syntax-constant":"#f78c6c","syntax-operator":"#89ddff","syntax-punctuation":"#a6accd","syntax-object":"#a6accd","markdown-heading":"#c792ea","markdown-text":"#a6accd","markdown-link":"#82aaff","markdown-link-text":"#89ddff","markdown-code":"#c3e88d","markdown-block-quote":"#676e95","markdown-emph":"#ffcb6b","markdown-strong":"#f78c6c","markdown-horizontal-rule":"#676e95","markdown-list-item":"#82aaff","markdown-list-enumeration":"#89ddff","markdown-image":"#82aaff","markdown-image-text":"#89ddff","markdown-code-block":"#a6accd"}},r={$schema:a,name:e,id:n,light:t,dark:o};export{a as $schema,o as dark,r as default,n as id,t as light,e as name};
assets/rosepine-DFf5RIYd.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const a="https://opencode.ai/desktop-theme.json",e="Rose Pine",n="rosepine",t={palette:{neutral:"#faf4ed",ink:"#575279",primary:"#31748f",accent:"#d7827e",success:"#286983",warning:"#ea9d34",error:"#b4637a",info:"#56949f"},overrides:{"text-weak":"#9893a5","syntax-comment":"#9893a5","syntax-keyword":"#286983","syntax-string":"#ea9d34","syntax-primitive":"#d7827e","syntax-variable":"#575279","syntax-property":"#d7827e","syntax-type":"#56949f","syntax-constant":"#907aa9","syntax-operator":"#797593","syntax-punctuation":"#797593","syntax-object":"#575279","markdown-heading":"#907aa9","markdown-text":"#575279","markdown-link":"#31748f","markdown-link-text":"#d7827e","markdown-code":"#286983","markdown-block-quote":"#9893a5","markdown-emph":"#ea9d34","markdown-strong":"#b4637a","markdown-horizontal-rule":"#dfdad9","markdown-list-item":"#31748f","markdown-list-enumeration":"#d7827e","markdown-image":"#31748f","markdown-image-text":"#d7827e","markdown-code-block":"#575279"}},o={palette:{neutral:"#191724",ink:"#e0def4",primary:"#9ccfd8",accent:"#ebbcba",success:"#31748f",warning:"#f6c177",error:"#eb6f92",info:"#9ccfd8"},overrides:{"text-weak":"#6e6a86","syntax-comment":"#6e6a86","syntax-keyword":"#31748f","syntax-string":"#f6c177","syntax-primitive":"#ebbcba","syntax-variable":"#e0def4","syntax-property":"#ebbcba","syntax-type":"#9ccfd8","syntax-constant":"#c4a7e7","syntax-operator":"#908caa","syntax-punctuation":"#908caa","syntax-object":"#e0def4","markdown-heading":"#c4a7e7","markdown-text":"#e0def4","markdown-link":"#9ccfd8","markdown-link-text":"#ebbcba","markdown-code":"#31748f","markdown-block-quote":"#6e6a86","markdown-emph":"#f6c177","markdown-strong":"#eb6f92","markdown-horizontal-rule":"#403d52","markdown-list-item":"#9ccfd8","markdown-list-enumeration":"#ebbcba","markdown-image":"#9ccfd8","markdown-image-text":"#ebbcba","markdown-code-block":"#e0def4"}},r={$schema:a,name:e,id:n,light:t,dark:o};export{a as $schema,o as dark,r as default,n as id,t as light,e as name};
assets/shadesofpurple-BtwY-YRg.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const f="https://opencode.ai/desktop-theme.json",e="Shades of Purple",t="shadesofpurple",a={palette:{neutral:"#f7ebff",ink:"#3b2c59",primary:"#7a5af8",accent:"#ff6bd5",success:"#3dd598",warning:"#f7c948",error:"#ff6bd5",info:"#62d4ff",diffAdd:"#c8f8da",diffDelete:"#ffc3ef"},overrides:{"syntax-comment":"#8e4be3","syntax-keyword":"#c45f00","syntax-string":"#2f8b32","syntax-primitive":"#a13bd6","syntax-property":"#008fb8","syntax-type":"#9d7a00","syntax-constant":"#e04d7a"}},n={palette:{neutral:"#1a102b",ink:"#f5f0ff",primary:"#c792ff",accent:"#ff7ac6",success:"#7be0b0",warning:"#ffd580",error:"#ff7ac6",info:"#7dd4ff",diffAdd:"#53c39f",diffDelete:"#d85aa0"},overrides:{"syntax-comment":"#b362ff","syntax-keyword":"#ff9d00","syntax-string":"#a5ff90","syntax-primitive":"#fb94ff","syntax-property":"#9effff","syntax-type":"#fad000","syntax-constant":"#ff628c"}},s={$schema:f,name:e,id:t,light:a,dark:n};export{f as $schema,n as dark,s as default,t as id,a as light,e as name};
assets/solarized-DsjFR-SU.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const t="https://opencode.ai/desktop-theme.json",e="Solarized",a="solarized",n={palette:{neutral:"#fdf6e3",ink:"#586e75",primary:"#268bd2",accent:"#d33682",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#2aa198",diffAdd:"#c6dc7a",diffDelete:"#f2a1a1"},overrides:{"syntax-comment":"#657b83","syntax-keyword":"#728600","syntax-string":"#1f8f88","syntax-primitive":"#268bd2","syntax-property":"#268bd2","syntax-constant":"#d33682"}},s={palette:{neutral:"#002b36",ink:"#93a1a1",primary:"#6c71c4",accent:"#d33682",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#2aa198",diffAdd:"#4c7654",diffDelete:"#c34b4b"},overrides:{"syntax-comment":"#586e75","syntax-keyword":"#859900","syntax-string":"#2aa198","syntax-primitive":"#268bd2","syntax-property":"#268bd2","syntax-constant":"#d33682"}},d={$schema:t,name:e,id:a,light:n,dark:s};export{t as $schema,s as dark,d as default,a as id,n as light,e as name};
assets/synthwave84-mo9EICVe.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",n="Synthwave '84",a="synthwave84",t={palette:{neutral:"#fafafa",ink:"#262335",primary:"#00bcd4",accent:"#9c27b0",success:"#4caf50",warning:"#ff9800",error:"#f44336",info:"#ff5722"},overrides:{"text-weak":"#5c5c8a","syntax-comment":"#5c5c8a","syntax-keyword":"#e91e63","syntax-string":"#ff9800","syntax-primitive":"#ff5722","syntax-variable":"#262335","syntax-property":"#9c27b0","syntax-type":"#00bcd4","syntax-constant":"#9c27b0","syntax-operator":"#e91e63","syntax-punctuation":"#262335","syntax-object":"#262335","markdown-heading":"#e91e63","markdown-text":"#262335","markdown-link":"#00bcd4","markdown-link-text":"#9c27b0","markdown-code":"#4caf50","markdown-block-quote":"#5c5c8a","markdown-emph":"#ff9800","markdown-strong":"#ff5722","markdown-horizontal-rule":"#e0e0e0","markdown-list-item":"#00bcd4","markdown-list-enumeration":"#9c27b0","markdown-image":"#00bcd4","markdown-image-text":"#9c27b0","markdown-code-block":"#262335"}},f={palette:{neutral:"#262335",ink:"#ffffff",primary:"#36f9f6",accent:"#b084eb",success:"#72f1b8",warning:"#fede5d",error:"#fe4450",info:"#ff8b39",diffAdd:"#97f1d8",diffDelete:"#ff5e5b"},overrides:{"text-weak":"#848bbd","syntax-comment":"#848bbd","syntax-keyword":"#ff7edb","syntax-string":"#fede5d","syntax-primitive":"#ff8b39","syntax-variable":"#ffffff","syntax-property":"#b084eb","syntax-type":"#36f9f6","syntax-constant":"#b084eb","syntax-operator":"#ff7edb","syntax-punctuation":"#ffffff","syntax-object":"#ffffff","markdown-heading":"#ff7edb","markdown-text":"#ffffff","markdown-link":"#36f9f6","markdown-link-text":"#b084eb","markdown-code":"#72f1b8","markdown-block-quote":"#848bbd","markdown-emph":"#fede5d","markdown-strong":"#ff8b39","markdown-horizontal-rule":"#495495","markdown-list-item":"#36f9f6","markdown-list-enumeration":"#b084eb","markdown-image":"#36f9f6","markdown-image-text":"#b084eb","markdown-code-block":"#ffffff"}},o={$schema:e,name:n,id:a,light:t,dark:f};export{e as $schema,f as dark,o as default,a as id,t as light,n as name};
assets/tokyonight-CbcoahaJ.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Tokyonight",n="tokyonight",a={palette:{neutral:"#e1e2e7",ink:"#273153",primary:"#2e7de9",accent:"#b15c00",success:"#587539",warning:"#8c6c3e",error:"#c94060",info:"#007197",diffAdd:"#4f8f7b",diffDelete:"#d05f7c"},overrides:{"syntax-comment":"#6b6f7a","syntax-keyword":"#9854f1","syntax-primitive":"#1f6fd4","syntax-property":"#007197","syntax-constant":"#b15c00"}},f={palette:{neutral:"#1a1b26",ink:"#c0caf5",primary:"#7aa2f7",accent:"#ff9e64",success:"#9ece6a",warning:"#e0af68",error:"#f7768e",info:"#7dcfff",diffAdd:"#41a6b5",diffDelete:"#c34043"},overrides:{"syntax-comment":"#565f89","syntax-keyword":"#bb9af7","syntax-primitive":"#7aa2f7","syntax-property":"#7dcfff","syntax-constant":"#ff9e64"}},c={$schema:e,name:t,id:n,light:a,dark:f};export{e as $schema,f as dark,c as default,n as id,a as light,t as name};
assets/vercel-CzCqZjzn.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const t="https://opencode.ai/desktop-theme.json",n="Vercel",a="vercel",e={palette:{neutral:"#FFFFFF",ink:"#171717",primary:"#0070F3",accent:"#8E4EC6",success:"#388E3C",warning:"#FF9500",error:"#DC3545",info:"#0070F3",diffAdd:"#46A758",diffDelete:"#E5484D"},overrides:{"text-weak":"#666666","syntax-comment":"#888888","syntax-keyword":"#E93D82","syntax-string":"#46A758","syntax-primitive":"#8E4EC6","syntax-variable":"#0070F3","syntax-property":"#12A594","syntax-type":"#12A594","syntax-constant":"#FFB224","syntax-operator":"#E93D82","syntax-punctuation":"#171717","syntax-object":"#0070F3","markdown-heading":"#8E4EC6","markdown-text":"#171717","markdown-link":"#0070F3","markdown-link-text":"#12A594","markdown-code":"#46A758","markdown-block-quote":"#666666","markdown-emph":"#FFB224","markdown-strong":"#E93D82","markdown-horizontal-rule":"#999999","markdown-list-item":"#171717","markdown-list-enumeration":"#0070F3","markdown-image":"#12A594","markdown-image-text":"#12A594","markdown-code-block":"#171717"}},o={palette:{neutral:"#000000",ink:"#EDEDED",primary:"#0070F3",accent:"#8E4EC6",success:"#46A758",warning:"#FFB224",error:"#E5484D",info:"#52A8FF",interactive:"#52A8FF",diffAdd:"#63C46D",diffDelete:"#FF6166"},overrides:{"text-weak":"#878787","syntax-comment":"#878787","syntax-keyword":"#F75590","syntax-string":"#63C46D","syntax-primitive":"#BF7AF0","syntax-variable":"#52A8FF","syntax-property":"#0AC7AC","syntax-type":"#0AC7AC","syntax-constant":"#F2A700","syntax-operator":"#F75590","syntax-punctuation":"#EDEDED","syntax-object":"#52A8FF","markdown-heading":"#BF7AF0","markdown-text":"#EDEDED","markdown-link":"#52A8FF","markdown-link-text":"#0AC7AC","markdown-code":"#63C46D","markdown-block-quote":"#878787","markdown-emph":"#F2A700","markdown-strong":"#F75590","markdown-horizontal-rule":"#454545","markdown-list-item":"#EDEDED","markdown-list-enumeration":"#52A8FF","markdown-image":"#0AC7AC","markdown-image-text":"#50E3C2","markdown-code-block":"#EDEDED"}},r={$schema:t,name:n,id:a,light:e,dark:o};export{t as $schema,o as dark,r as default,a as id,e as light,n as name};
assets/vesper-67WFNJYM.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const e="https://opencode.ai/desktop-theme.json",t="Vesper",n="vesper",s={palette:{neutral:"#F0F0F0",ink:"#101010",primary:"#FFC799",accent:"#B30000",success:"#99FFE4",warning:"#FFC799",error:"#FF8080",info:"#FFC799",diffAdd:"#99FFE4",diffDelete:"#FF8080"},overrides:{"syntax-comment":"#7a7a7a","syntax-keyword":"#6e6e6e","syntax-string":"#117e69","syntax-primitive":"#8d541c","syntax-property":"#101010","syntax-type":"#8d541c","syntax-constant":"#8d541c"}},a={palette:{neutral:"#101010",ink:"#FFF",primary:"#FFC799",accent:"#FF8080",success:"#99FFE4",warning:"#FFC799",error:"#FF8080",info:"#FFC799",diffAdd:"#99FFE4",diffDelete:"#FF8080"},overrides:{"syntax-comment":"#8b8b8b","syntax-keyword":"#a0a0a0","syntax-string":"#99ffe4","syntax-primitive":"#ffc799","syntax-property":"#ffffff","syntax-type":"#ffc799","syntax-constant":"#ffc799"}},F={$schema:e,name:t,id:n,light:s,dark:a};export{e as $schema,a as dark,F as default,n as id,s as light,t as name};
assets/zenburn-3iKGnI7X.js ADDED
@@ -0,0 +1 @@
 
 
1
+ const f="https://opencode.ai/desktop-theme.json",n="Zenburn",a="zenburn",t={palette:{neutral:"#ffffef",ink:"#3f3f3f",primary:"#5f7f8f",accent:"#5f8f8f",success:"#5f8f5f",warning:"#8f8f5f",error:"#8f5f5f",info:"#8f7f5f"},overrides:{"text-weak":"#6f6f6f","syntax-comment":"#5f7f5f","syntax-keyword":"#8f8f5f","syntax-string":"#8f5f5f","syntax-primitive":"#5f7f8f","syntax-variable":"#3f3f3f","syntax-property":"#5f8f8f","syntax-type":"#5f8f8f","syntax-constant":"#5f8f5f","syntax-operator":"#8f8f5f","syntax-punctuation":"#3f3f3f","syntax-object":"#3f3f3f","markdown-heading":"#8f8f5f","markdown-text":"#3f3f3f","markdown-link":"#5f7f8f","markdown-link-text":"#5f8f8f","markdown-code":"#5f8f5f","markdown-block-quote":"#6f6f6f","markdown-emph":"#8f8f5f","markdown-strong":"#8f7f5f","markdown-horizontal-rule":"#6f6f6f","markdown-list-item":"#5f7f8f","markdown-list-enumeration":"#5f8f8f","markdown-image":"#5f7f8f","markdown-image-text":"#5f8f8f","markdown-code-block":"#3f3f3f"}},e={palette:{neutral:"#3f3f3f",ink:"#dcdccc",primary:"#8cd0d3",accent:"#93e0e3",success:"#7f9f7f",warning:"#f0dfaf",error:"#cc9393",info:"#dfaf8f",diffAdd:"#8fb28f",diffDelete:"#dca3a3"},overrides:{"text-weak":"#9f9f9f","syntax-comment":"#7f9f7f","syntax-keyword":"#f0dfaf","syntax-string":"#cc9393","syntax-primitive":"#8cd0d3","syntax-variable":"#dcdccc","syntax-property":"#93e0e3","syntax-type":"#93e0e3","syntax-constant":"#8fb28f","syntax-operator":"#f0dfaf","syntax-punctuation":"#dcdccc","syntax-object":"#dcdccc","markdown-heading":"#f0dfaf","markdown-text":"#dcdccc","markdown-link":"#8cd0d3","markdown-link-text":"#93e0e3","markdown-code":"#7f9f7f","markdown-block-quote":"#9f9f9f","markdown-emph":"#e0cf9f","markdown-strong":"#dfaf8f","markdown-horizontal-rule":"#9f9f9f","markdown-list-item":"#8cd0d3","markdown-list-enumeration":"#93e0e3","markdown-image":"#8cd0d3","markdown-image-text":"#93e0e3","markdown-code-block":"#dcdccc"}},o={$schema:f,name:n,id:a,light:t,dark:e};export{f as $schema,e as dark,o as default,a as id,t as light,n as name};
index.html ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en" style="background-color: var(--v2-background-bg-deep, #fafafa)">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, interactive-widget=resizes-content, viewport-fit=cover" />
6
+ <title>OpenCode Dashboard</title>
7
+ <link rel="icon" type="image/png" href="/favicon-96x96-v3.png" sizes="96x96" />
8
+ <link rel="icon" type="image/svg+xml" href="/favicon-v3.svg" />
9
+ <link rel="shortcut icon" href="/favicon-v3.ico" />
10
+ <meta name="theme-color" content="#fafafa" />
11
+ <script type="module" crossorigin src="/assets/index-vUWicxNv.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-BSf9pAXA.css">
13
+ </head>
14
+ <body class="antialiased overscroll-none overflow-hidden bg-v2-background-bg-deep">
15
+ <noscript>You need to enable JavaScript to run this app.</noscript>
16
+ <div id="root" class="flex flex-col h-dvh bg-v2-background-bg-deep"></div>
17
+ </body>
18
+ </html>
main.py DELETED
@@ -1,336 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import asyncio
4
- import json
5
- import os
6
- import uuid
7
- from collections.abc import AsyncIterator
8
- from dataclasses import dataclass
9
- from datetime import datetime, timezone
10
- from enum import Enum
11
- from typing import Any
12
-
13
- from fastapi import FastAPI, HTTPException
14
- from fastapi.responses import HTMLResponse, StreamingResponse
15
- from pydantic import BaseModel
16
-
17
-
18
- # ── Types ─────────────────────────────────────────────────────
19
-
20
- class State(str, Enum):
21
- CREATED = "created"
22
- PLANNING = "planning"
23
- BUILDING = "building"
24
- RUNNING = "running"
25
- DONE = "done"
26
- FAILED = "failed"
27
-
28
-
29
- @dataclass
30
- class Entry:
31
- id: str
32
- name: str
33
- goal: str
34
- state: State = State.CREATED
35
- created: str = ""
36
- error: str | None = None
37
- space_id: str = ""
38
- space_url: str = ""
39
-
40
-
41
- # ── Event Bus ─────────────────────────────────────────────────
42
-
43
- class Bus:
44
- def __init__(self) -> None:
45
- self._qs: list[asyncio.Queue[bytes]] = []
46
-
47
- def sub(self) -> asyncio.Queue[bytes]:
48
- q: asyncio.Queue[bytes] = asyncio.Queue(500)
49
- self._qs.append(q)
50
- return q
51
-
52
- def unsub(self, q: asyncio.Queue[bytes]) -> None:
53
- if q in self._qs:
54
- self._qs.remove(q)
55
-
56
- async def pub(self, kind: str, payload: dict[str, Any]) -> None:
57
- msg = json.dumps({"cat": kind, "payload": payload, "ts": datetime.now(timezone.utc).isoformat()}).encode()
58
- for q in self._qs:
59
- try:
60
- q.put_nowait(msg)
61
- except asyncio.QueueFull:
62
- pass
63
-
64
- async def stream(self) -> AsyncIterator[bytes]:
65
- q = self.sub()
66
- try:
67
- while True:
68
- try:
69
- yield b"data: " + await asyncio.wait_for(q.get(), 30) + b"\n\n"
70
- except asyncio.TimeoutError:
71
- yield b": keep\n\n"
72
- finally:
73
- self.unsub(q)
74
-
75
-
76
- bus = Bus()
77
-
78
-
79
- # ── Store ─────────────────────────────────────────────────────
80
-
81
- class Store:
82
- def __init__(self) -> None:
83
- self._data: dict[str, Entry] = {}
84
-
85
- async def add(self, goal: str, name: str | None = None) -> Entry:
86
- e = Entry(
87
- id=uuid.uuid4().hex[:12],
88
- name=name or goal[:30],
89
- goal=goal,
90
- created=datetime.now(timezone.utc).isoformat(),
91
- )
92
- self._data[e.id] = e
93
- await bus.pub("project.created", {"id": e.id, "goal": goal})
94
- return e
95
-
96
- def get(self, eid: str) -> Entry | None:
97
- return self._data.get(eid)
98
-
99
- def all(self) -> list[Entry]:
100
- return list(self._data.values())
101
-
102
- async def drop(self, eid: str) -> bool:
103
- e = self._data.pop(eid, None)
104
- if e:
105
- await bus.pub("notification", {"message": f"Deleted {e.name}"})
106
- return True
107
- return False
108
-
109
-
110
- store = Store()
111
-
112
-
113
- # ── HF Manager ────────────────────────────────────────────────
114
-
115
- class HF:
116
- def __init__(self) -> None:
117
- self._token: str | None = None
118
- self._user: str | None = None
119
- self._ok = False
120
-
121
- async def setup(self) -> None:
122
- self._token = os.environ.get("HF_TOKEN")
123
- if not self._token:
124
- await bus.pub("notification", {"message": "Set HF_TOKEN to enable Spaces"})
125
- return
126
- try:
127
- import httpx
128
- async with httpx.AsyncClient() as c:
129
- r = await c.get("https://huggingface.co/api/whoami", headers={"Authorization": f"Bearer {self._token}"})
130
- if r.is_success:
131
- self._user = r.json().get("name", "")
132
- self._ok = True
133
- await bus.pub("notification", {"message": f"HF: {self._user}"})
134
- except Exception:
135
- pass
136
-
137
- @property
138
- def ready(self) -> bool:
139
- return self._ok
140
-
141
- @property
142
- def user(self) -> str | None:
143
- return self._user
144
-
145
- async def create(self, name: str, secrets: dict[str, str] | None = None, template_repo: str | None = None) -> dict[str, Any]:
146
- if not self._ok:
147
- return {"error": "no hf token"}
148
- try:
149
- import httpx
150
- sn = name.lower().replace(" ", "-").replace("_", "-")
151
- rid = f"{self._user}/{sn}"
152
- async with httpx.AsyncClient() as c:
153
- if template_repo:
154
- # Duplicate from template
155
- r = await c.post(
156
- f"https://huggingface.co/api/repos/{template_repo}/duplicate",
157
- headers={"Authorization": f"Bearer {self._token}", "Content-Type": "application/json"},
158
- json={"name": sn, "type": "space"},
159
- )
160
- else:
161
- # Create blank
162
- r = await c.post(
163
- "https://huggingface.co/api/repos/create",
164
- headers={"Authorization": f"Bearer {self._token}", "Content-Type": "application/json"},
165
- json={"name": sn, "type": "space", "sdk": "docker"},
166
- )
167
-
168
- if not r.is_success:
169
- return {"error": r.text[:200]}
170
-
171
- if secrets:
172
- for k, v in secrets.items():
173
- await c.post(
174
- f"https://huggingface.co/api/spaces/{rid}/secrets",
175
- headers={"Authorization": f"Bearer {self._token}", "Content-Type": "application/json"},
176
- json={"key": k, "value": v},
177
- )
178
- await bus.pub("notification", {"message": f"Space ready: {rid}"})
179
- return {"space": rid, "url": f"https://huggingface.co/spaces/{rid}"}
180
- except Exception as e:
181
- return {"error": str(e)}
182
-
183
- async def delete(self, name: str) -> dict[str, Any]:
184
- if not self._ok:
185
- return {"error": "no hf token"}
186
- try:
187
- import httpx
188
- rid = f"{self._user}/{name}" if "/" not in name else name
189
- async with httpx.AsyncClient() as c:
190
- await c.delete(
191
- f"https://huggingface.co/api/repos/{rid}",
192
- headers={"Authorization": f"Bearer {self._token}"},
193
- )
194
- return {"ok": True}
195
- except Exception as e:
196
- return {"error": str(e)}
197
-
198
- async def status(self) -> dict[str, Any]:
199
- return {"ok": self._ok, "user": self._user or ""}
200
-
201
-
202
- hf = HF()
203
-
204
-
205
- # ── FastAPI ───────────────────────────────────────────────────
206
-
207
- app = FastAPI(title="OpenCode")
208
-
209
-
210
- @app.on_event("startup")
211
- async def boot() -> None:
212
- await hf.setup()
213
-
214
-
215
- class ChatIn(BaseModel):
216
- message: str
217
-
218
- class CreateIn(BaseModel):
219
- goal: str
220
- name: str | None = None
221
-
222
- class SettingsIn(BaseModel):
223
- provider: str = ""
224
- api_key: str = ""
225
- model: str = ""
226
-
227
- class SpaceIn(BaseModel):
228
- name: str
229
- secrets: dict[str, str] | None = None
230
-
231
-
232
- @app.get("/")
233
- async def root():
234
- return HTMLResponse(open("static/index.html").read())
235
-
236
-
237
- @app.get("/api/events")
238
- async def events():
239
- return StreamingResponse(bus.stream(), media_type="text/event-stream")
240
-
241
-
242
- @app.post("/api/chat")
243
- async def chat(body: ChatIn):
244
- m = body.message.lower()
245
-
246
- if m.startswith("create ") or m.startswith("build "):
247
- goal = m[7:] if m.startswith("create ") else m[6:]
248
- e = await store.add(goal)
249
- return {"type": "created", "id": e.id, "goal": goal}
250
-
251
- if m.startswith("delete "):
252
- eid = m[7:].strip()
253
- await store.drop(eid)
254
- return {"type": "info", "message": f"Removed {eid}"}
255
-
256
- return {"type": "info", "message": "Try: create <goal> or build <goal>"}
257
-
258
-
259
- @app.get("/api/projects")
260
- async def list_all():
261
- return [
262
- {"id": e.id, "name": e.name, "goal": e.goal, "status": e.state.value,
263
- "created": e.created, "error": e.error, "space_url": e.space_url}
264
- for e in store.all()
265
- ]
266
-
267
-
268
- @app.post("/api/projects")
269
- async def new_project(body: CreateIn):
270
- e = await store.add(body.goal, body.name)
271
- sp = None
272
- if hf.ready:
273
- try:
274
- sp = await hf.create(
275
- body.name or f"oc-{e.id}",
276
- {"HF_TOKEN": os.environ.get("HF_TOKEN", ""), "PROJECT": e.id},
277
- template_repo="asterioskryos/opencode-agent-template"
278
- )
279
- if "error" not in sp:
280
- e.space_id = sp["space"]
281
- e.space_url = sp["url"]
282
- except Exception:
283
- pass
284
- return {"id": e.id, "goal": e.goal, "space": sp}
285
-
286
-
287
- @app.delete("/api/projects/{eid}")
288
- async def delete_entry(eid: str):
289
- e = store.get(eid)
290
- if not e:
291
- raise HTTPException(404)
292
- if e.space_id and hf.ready:
293
- await hf.delete(e.space_id)
294
- await store.drop(eid)
295
- return {"ok": True}
296
-
297
-
298
- @app.get("/api/hf/status")
299
- async def hf_stat():
300
- return await hf.status()
301
-
302
-
303
- @app.post("/api/hf/create")
304
- async def hf_mk(body: SpaceIn):
305
- r = await hf.create(body.name, body.secrets)
306
- if "error" in r:
307
- raise HTTPException(400, r["error"])
308
- return r
309
-
310
-
311
- @app.delete("/api/hf/space/{name}")
312
- async def hf_rm(name: str):
313
- r = await hf.delete(name)
314
- if "error" in r:
315
- raise HTTPException(400, r["error"])
316
- return r
317
-
318
-
319
- @app.post("/api/settings")
320
- async def set_cfg(body: SettingsIn):
321
- if body.api_key:
322
- os.environ["OC_KEY"] = body.api_key
323
- if body.provider:
324
- os.environ["OC_PROVIDER"] = body.provider
325
- if body.model:
326
- os.environ["OC_MODEL"] = body.model
327
- return {"ok": True}
328
-
329
-
330
- @app.get("/api/settings")
331
- async def get_cfg():
332
- return {
333
- "provider": os.environ.get("OC_PROVIDER", "openrouter"),
334
- "model": os.environ.get("OC_MODEL", "gpt-4o"),
335
- "token_set": bool(os.environ.get("HF_TOKEN")),
336
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
nginx.conf ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ server {
2
+ listen 80;
3
+ root /usr/share/nginx/html;
4
+ index index.html;
5
+ location / {
6
+ try_files $uri $uri/ /index.html;
7
+ }
8
+ }
requirements.txt DELETED
@@ -1,3 +0,0 @@
1
- fastapi>=0.115,<1
2
- uvicorn>=0.32,<1
3
- httpx>=0.27,<1
 
 
 
 
static/index.html DELETED
@@ -1,431 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>OpenCode</title>
7
- <style>
8
- *{margin:0;padding:0;box-sizing:border-box}
9
- body{font-family:system-ui,-apple-system,sans-serif;background:#0b1120;color:#e2e8f0;height:100vh;display:flex;overflow:hidden}
10
-
11
- /* ── Sticky Left Bar ── */
12
- .sbar{width:42px;min-width:42px;background:#080e1a;border-right:1px solid #1e293b;display:flex;flex-direction:column;align-items:center;padding:6px 0;z-index:20}
13
- .sbar .spc{flex:1}
14
- .sbar button{width:32px;height:32px;border:none;border-radius:6px;background:transparent;color:#475569;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;margin:2px 0}
15
- .sbar button:hover{background:#1e293b;color:#e2e8f0}
16
-
17
- /* ── Main ── */
18
- .main{flex:1;display:flex;overflow:hidden}
19
-
20
- /* ── Dashboard ── */
21
- #dash{display:flex;width:100%;height:100%}
22
- .dl{width:280px;min-width:280px;border-right:1px solid #1e293b;display:flex;flex-direction:column;background:#0b1120}
23
- .dlh{padding:14px 16px;border-bottom:1px solid #1e293b;display:flex;justify-content:space-between;align-items:center}
24
- .dlh h2{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.6px}
25
- .dlh button{padding:5px 12px;border:none;border-radius:5px;background:#6366f1;color:#fff;cursor:pointer;font-size:12px;font-weight:600}
26
- .dlh button:hover{background:#4f46e5}
27
- .pl{flex:1;overflow-y:auto;padding:8px}
28
- .pi{padding:9px 12px;border-radius:6px;cursor:pointer;margin-bottom:3px;position:relative}
29
- .pi:hover{background:#131d31}
30
- .pi.act{background:#131d31;border-left:2px solid #6366f1}
31
- .pi .nm{font-size:13px;font-weight:500}
32
- .pi .st{font-size:11px;margin-top:1px}
33
- .pi .st.s0{color:#64748b}
34
- .pi .st.s1{color:#fbbf24}
35
- .pi .st.s2{color:#60a5fa}
36
- .pi .st.s3{color:#22d3ee}
37
- .pi .st.s4{color:#34d399}
38
- .pi .st.s5{color:#f87171}
39
- .pi .del{position:absolute;top:6px;right:6px;background:none;border:none;color:#ef4444;cursor:pointer;font-size:13px;opacity:0;padding:2px 4px;border-radius:3px}
40
- .pi:hover .del{opacity:1}
41
- .pi .del:hover{background:rgba(239,68,68,.15)}
42
-
43
- .dr{flex:1;display:flex;align-items:center;justify-content:center}
44
- .hero{text-align:center}
45
- .hero .ic{width:80px;height:80px;margin:0 auto 20px;background:#131d31;border:2px solid #1e293b;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:32px;color:#6366f1}
46
- .hero h1{font-size:22px;font-weight:700;margin-bottom:6px}
47
- .hero p{color:#64748b;font-size:13px;margin-bottom:8px}
48
- .hero .ln{color:#6366f1;font-size:12px;font-family:monospace}
49
-
50
- /* ── Project View ── */
51
- #pview{display:none;width:100%;height:100%}
52
- .pvi{display:flex;width:100%;height:100%}
53
- .sp{width:260px;min-width:260px;border-right:1px solid #1e293b;display:flex;flex-direction:column;background:#0b1120;transition:margin-left .2s,width .2s,min-width .2s}
54
- .sp.c{ margin-left:-260px;width:0;min-width:0;border-right:none}
55
- .sph{padding:10px 14px;border-bottom:1px solid #1e293b;display:flex;justify-content:space-between;align-items:center}
56
- .sph h3{font-size:11px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}
57
- .sph button{background:none;border:none;color:#475569;cursor:pointer;font-size:15px;padding:2px 6px;border-radius:4px}
58
- .sph button:hover{color:#e2e8f0;background:#1e293b}
59
- .sl{flex:1;overflow-y:auto;padding:6px}
60
- .si{padding:7px 10px;border-radius:5px;cursor:pointer;font-size:12px;color:#64748b;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
61
- .si:hover{background:#131d31;color:#e2e8f0}
62
- .si.act{background:#131d31;color:#e2e8f0;border-left:2px solid #6366f1}
63
-
64
- .ca{flex:1;display:flex;flex-direction:column;min-width:0}
65
- .ct{padding:8px 14px;border-bottom:1px solid #1e293b;display:flex;align-items:center;gap:6px;background:#0b1120}
66
- .ct button{background:none;border:none;color:#64748b;cursor:pointer;font-size:12px;padding:4px 8px;border-radius:5px;display:flex;align-items:center;gap:4px}
67
- .ct button:hover{color:#e2e8f0;background:#131d31}
68
- .ct .ttl{font-size:12px;font-weight:600;color:#94a3b8;margin-left:2px}
69
-
70
- .cm{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:10px}
71
- .msg{max-width:78%;padding:9px 13px;border-radius:10px;font-size:13px;line-height:1.5;white-space:pre-wrap}
72
- .msg.u{align-self:flex-end;background:#6366f1;color:#fff;border-bottom-right-radius:3px}
73
- .msg.a{align-self:flex-start;background:#131d31;color:#e2e8f0;border-bottom-left-radius:3px}
74
- .msg.s{align-self:center;background:transparent;color:#475569;font-size:11px}
75
-
76
- .ci{padding:10px 14px;border-top:1px solid #1e293b;background:#0b1120}
77
- .cir{display:flex;gap:8px}
78
- .cir input{flex:1;padding:9px 13px;border:1px solid #1e293b;border-radius:7px;background:#0b1120;color:#e2e8f0;font-size:13px;outline:none}
79
- .cir input:focus{border-color:#6366f1}
80
- .cir button{padding:9px 18px;border:none;border-radius:7px;background:#6366f1;color:#fff;cursor:pointer;font-weight:600;font-size:12px}
81
- .cir button:hover{background:#4f46e5}
82
-
83
- /* ── Notification ── */
84
- #nbar{display:none;position:fixed;top:0;left:42px;right:0;background:#1e293b;border-bottom:1px solid #fbbf24;padding:7px 14px;z-index:100;font-size:12px;align-items:center;gap:8px}
85
- #nbar.s{display:flex}
86
- #nbar .nc{color:#fbbf24}
87
- #nbar .nx{margin-left:auto;background:none;border:none;color:#475569;cursor:pointer;font-size:15px;padding:2px 6px;border-radius:4px}
88
- #nbar .nx:hover{color:#e2e8f0;background:#334155}
89
-
90
- /* ── Overlays ── */
91
- .ov{display:none;position:fixed;top:0;left:42px;right:0;bottom:0;z-index:150}
92
- .ov.s{display:block}
93
- .ov .bg{position:absolute;inset:0;background:rgba(0,0,0,.45)}
94
- .ov .pnl{position:absolute;top:0;left:0;bottom:0;width:380px;background:#131d31;border-right:1px solid #1e293b;padding:18px;overflow-y:auto}
95
- .ov .pnl h2{font-size:14px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
96
- .ov .pnl h2 button{margin-left:auto;background:none;border:none;color:#475569;cursor:pointer;font-size:17px;padding:2px 6px;border-radius:4px}
97
- .sec{margin-bottom:16px}
98
- .sec h3{font-size:11px;color:#64748b;margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}
99
- .sr{display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid #0b1120;font-size:12px}
100
- .sr .vl{color:#64748b;font-family:monospace;font-size:11px}
101
- .sr select,.sr input{padding:4px 8px;border:1px solid #1e293b;border-radius:4px;background:#0b1120;color:#e2e8f0;font-size:11px;outline:none}
102
- .sr select:focus,.sr input:focus{border-color:#6366f1}
103
- .hi{padding:8px 0;border-bottom:1px solid #0b1120}
104
- .hi h4{font-size:13px;margin-bottom:3px}
105
- .hi p{font-size:12px;color:#64748b;line-height:1.5}
106
-
107
- /* ── Modals ── */
108
- .mod{display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:200;align-items:center;justify-content:center}
109
- .mod.s{display:flex}
110
- .mod .bx{background:#131d31;border:1px solid #1e293b;border-radius:10px;padding:20px;width:420px;max-height:75vh;overflow-y:auto}
111
- .mod .bx h2{font-size:15px;margin-bottom:14px}
112
- .fg{margin-bottom:10px}
113
- .fg label{display:block;font-size:11px;color:#64748b;margin-bottom:3px}
114
- .fg input,.fg textarea{width:100%;padding:7px 11px;border:1px solid #1e293b;border-radius:5px;background:#0b1120;color:#e2e8f0;font-size:12px;outline:none}
115
- .fg textarea{resize:vertical;min-height:50px;font-family:inherit}
116
- .fg input:focus,.fg textarea:focus{border-color:#6366f1}
117
- .ma{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}
118
- .ma button{padding:7px 14px;border:none;border-radius:5px;cursor:pointer;font-weight:600;font-size:12px}
119
- .bp{background:#6366f1;color:#fff}
120
- .bp:hover{background:#4f46e5}
121
- .bs{background:#1e293b;color:#e2e8f0}
122
- .bs:hover{background:#334155}
123
- .bd{background:#ef4444;color:#fff}
124
- .bd:hover{background:#dc2626}
125
-
126
- ::-webkit-scrollbar{width:5px}
127
- ::-webkit-scrollbar-track{background:transparent}
128
- ::-webkit-scrollbar-thumb{background:#1e293b;border-radius:3px}
129
- </style>
130
- </head>
131
- <body>
132
-
133
- <div id="nbar"><span class="nc">&#9888;</span><span id="ntxt"></span><button class="nx" onclick="hiden()">&times;</button></div>
134
-
135
- <div class="sbar">
136
- <div class="spc"></div>
137
- <button onclick="tset()" title="Settings">&#9881;</button>
138
- <button onclick="thelp()" title="Help">&#10067;</button>
139
- </div>
140
-
141
- <div class="main">
142
-
143
- <!-- Dashboard -->
144
- <div id="dash">
145
- <div class="dl">
146
- <div class="dlh"><h2>Projects</h2><button onclick="mcreate()">+ New</button></div>
147
- <div class="pl" id="pl"></div>
148
- </div>
149
- <div class="dr">
150
- <div class="hero">
151
- <div class="ic">&#9670;</div>
152
- <h1>OpenCode</h1>
153
- <p>Create or open a project to start</p>
154
- <div class="ln" id="hln">&#9654; Ready</div>
155
- </div>
156
- </div>
157
- </div>
158
-
159
- <!-- Project View -->
160
- <div id="pview">
161
- <div class="pvi">
162
- <div class="sp" id="sp">
163
- <div class="sph"><h3>Sessions</h3><button onclick="nsess()">+</button></div>
164
- <div class="sl" id="sl"></div>
165
- </div>
166
- <div class="ca">
167
- <div class="ct">
168
- <button onclick="bdash()">&#8592; Dashboard</button>
169
- <button onclick="tsess()" title="Toggle Sessions">&#9776;</button>
170
- <span class="ttl" id="cttl">Project</span>
171
- </div>
172
- <div class="cm" id="cm"></div>
173
- <div class="ci">
174
- <div class="cir">
175
- <input id="ci" placeholder="Type a message..." onkeydown="if(event.key==='Enter')send()">
176
- <button onclick="send()">Send</button>
177
- </div>
178
- </div>
179
- </div>
180
- </div>
181
- </div>
182
-
183
- </div><!-- /main -->
184
-
185
- <!-- Settings -->
186
- <div class="ov" id="setov">
187
- <div class="bg" onclick="tset()"></div>
188
- <div class="pnl">
189
- <h2>Settings <button onclick="tset()">&times;</button></h2>
190
- <div class="sec">
191
- <h3>Provider</h3>
192
- <div class="sr"><span>Provider</span><select id="sprov" onchange="sv()"><option value="openrouter">OpenRouter</option><option value="nvidia">NVIDIA</option><option value="gemini">Gemini</option><option value="custom">Custom</option></select></div>
193
- <div class="sr"><span>API Key</span><input type="password" id="sapi" placeholder="sk-..." style="width:170px" onchange="sv()"></div>
194
- <div class="sr"><span>Model</span><select id="smod" onchange="sv()"><option value="gpt-4o">GPT-4o</option><option value="gpt-4o-mini">GPT-4o Mini</option><option value="claude-3.5-sonnet">Claude 3.5 Sonnet</option><option value="gemini-2.0-flash">Gemini 2.0 Flash</option></select></div>
195
- </div>
196
- <div class="sec">
197
- <h3>Hugging Face</h3>
198
- <div class="sr"><span>Token</span><span class="vl" id="hftok">-</span></div>
199
- <div class="sr"><span>User</span><span class="vl" id="hfus">-</span></div>
200
- </div>
201
- </div>
202
- </div>
203
-
204
- <!-- Help -->
205
- <div class="ov" id="hlpov">
206
- <div class="bg" onclick="thelp()"></div>
207
- <div class="pnl">
208
- <h2>Help <button onclick="thelp()">&times;</button></h2>
209
- <div class="hi"><h4>Getting Started</h4><p>Click "+ New" to create a project. Select it to open the chat. Type messages or commands to interact.</p></div>
210
- <div class="hi"><h4>Commands</h4><p><b>create &lt;goal&gt;</b> or <b>build &lt;goal&gt;</b> - create a project from chat<br><b>delete &lt;id&gt;</b> - remove a project</p></div>
211
- <div class="hi"><h4>Spaces</h4><p>Each project can have a Hugging Face Space. Set HF_TOKEN in Space secrets to enable this.</p></div>
212
- <div class="hi"><h4>Settings</h4><p>Configure provider, API key, and model in the Settings panel. These apply across all projects.</p></div>
213
- </div>
214
- </div>
215
-
216
- <!-- Create Modal -->
217
- <div class="mod" id="cmod">
218
- <div class="bx">
219
- <h2>New Project</h2>
220
- <div class="fg"><label>Goal</label><textarea id="cg" rows="2" placeholder="What do you want to build?"></textarea></div>
221
- <div class="fg"><label>Name (optional)</label><input id="cn" placeholder="my-project"></div>
222
- <div class="ma"><button class="bs" onclick="mcreatec()">Cancel</button><button class="bp" onclick="mk()">Create</button></div>
223
- </div>
224
- </div>
225
-
226
- <!-- Delete Modal -->
227
- <div class="mod" id="dmod">
228
- <div class="bx">
229
- <h2>Delete Project</h2>
230
- <p style="font-size:13px;color:#64748b;margin-bottom:14px">This will also delete the associated HF Space.</p>
231
- <div class="ma"><button class="bs" onclick="deldc()">Cancel</button><button class="bd" id="deldb" onclick="deld()">Delete</button></div>
232
- </div>
233
- </div>
234
-
235
- <script>
236
- // ── State ──
237
- let cur = null
238
- let cses = null
239
- let sess = []
240
- let msgs = []
241
- let sc = false
242
- let items = []
243
- let dtar = null
244
-
245
- // ── SSE ──
246
- new EventSource('/api/events').onmessage = e => {
247
- try {
248
- const d = JSON.parse(e.data)
249
- if (['notification','project.created','project.error','project.done'].includes(d.cat)) {
250
- notif(d.payload?.message || d.cat)
251
- }
252
- } catch(_) {}
253
- }
254
-
255
- // ── Notifications ──
256
- function notif(t) {
257
- document.getElementById('ntxt').textContent = t
258
- document.getElementById('nbar').classList.add('s')
259
- }
260
- function hiden() { document.getElementById('nbar').classList.remove('s') }
261
-
262
- // ── Views ──
263
- function dash() {
264
- document.getElementById('dash').style.display = 'flex'
265
- document.getElementById('pview').style.display = 'none'
266
- cur = null
267
- load()
268
- }
269
-
270
- function pview(id) {
271
- cur = id
272
- document.getElementById('dash').style.display = 'none'
273
- document.getElementById('pview').style.display = 'flex'
274
- const e = items.find(x => x.id === id)
275
- document.getElementById('cttl').textContent = e ? e.goal : 'Project'
276
- sess = [{id:'d',name:'Session 1'}]
277
- cses = 'd'
278
- msgs = []
279
- rsess()
280
- rmsgs()
281
- addm('Agent ready. Type a message.', 's')
282
- }
283
- function bdash() { dash() }
284
-
285
- // ── Projects ──
286
- async function load() {
287
- try {
288
- const r = await fetch('/api/projects')
289
- items = await r.json()
290
- rlist()
291
- } catch(_) {}
292
- }
293
-
294
- function rlist() {
295
- const el = document.getElementById('pl')
296
- if (!items.length) {
297
- el.innerHTML = '<div style="color:#475569;font-size:12px;padding:16px;text-align:center">No projects yet.</div>'
298
- return
299
- }
300
- const st = {created:'s0',planning:'s1',building:'s2',running:'s3',done:'s4',failed:'s5'}
301
- el.innerHTML = items.map(e => `
302
- <div class="pi ${e.id===cur?'act':''}" onclick="openp('${e.id}')">
303
- <div class="nm">${esc(e.goal)}</div>
304
- <div class="st ${st[e.status]||'s0'}">${e.status}${e.space_url?' \u2197':''}</div>
305
- <button class="del" onclick="event.stopPropagation();deldm('${e.id}')">&#128465;</button>
306
- </div>
307
- `).join('')
308
- const h = document.getElementById('hln')
309
- if (items.length) h.textContent = items.length + ' project' + (items.length>1?'s':'') + ' \u2022 Ready'
310
- else h.textContent = '\u25b6 Ready'
311
- }
312
-
313
- function openp(id) { pview(id) }
314
-
315
- function mcreate() { document.getElementById('cmod').classList.add('s'); document.getElementById('cg').value=''; document.getElementById('cn').value='' }
316
- function mcreatec() { document.getElementById('cmod').classList.remove('s') }
317
-
318
- async function mk() {
319
- const g = document.getElementById('cg').value.trim()
320
- const n = document.getElementById('cn').value.trim()
321
- if (!g) return
322
- mcreatec()
323
- try {
324
- await fetch('/api/projects',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({goal:g,name:n||undefined})})
325
- notif('Created: ' + g)
326
- load()
327
- } catch(_) {}
328
- }
329
-
330
- function deldm(id) { dtar=id; document.getElementById('dmod').classList.add('s') }
331
- function deldc() { document.getElementById('dmod').classList.remove('s'); dtar=null }
332
- async function deld() {
333
- if (!dtar) return
334
- deldc()
335
- try {
336
- await fetch('/api/projects/'+dtar,{method:'DELETE'})
337
- if (cur===dtar) dash()
338
- load()
339
- } catch(_) {}
340
- }
341
-
342
- // ── Sessions ──
343
- function rsess() {
344
- document.getElementById('sl').innerHTML = sess.map(s =>
345
- `<div class="si ${s.id===cses?'act':''}" onclick="ssel('${s.id}')">${esc(s.name)}</div>`
346
- ).join('')
347
- }
348
-
349
- function ssel(id) {
350
- cses = id
351
- rsess()
352
- msgs = []
353
- rmsgs()
354
- addm('Switched session.', 's')
355
- }
356
-
357
- function nsess() {
358
- const id = 's'+Date.now().toString(36)
359
- sess.push({id,name:'Session '+sess.length})
360
- cses = id
361
- rsess()
362
- msgs = []
363
- rmsgs()
364
- addm('New session.', 's')
365
- }
366
-
367
- function tsess() {
368
- sc = !sc
369
- document.getElementById('sp').classList.toggle('c',sc)
370
- }
371
-
372
- // ── Chat ──
373
- function addm(t, ty='a') { msgs.push({t,ty}); rmsgs() }
374
- function rmsgs() {
375
- const el = document.getElementById('cm')
376
- el.innerHTML = msgs.map(m => `<div class="msg ${m.ty==='u'?'u':m.ty==='s'?'s':'a'}">${esc(m.t)}</div>`).join('')
377
- el.scrollTop = el.scrollHeight
378
- }
379
-
380
- async function send() {
381
- const inp = document.getElementById('ci')
382
- const m = inp.value.trim()
383
- if (!m) return
384
- inp.value = ''
385
- addm(m, 'u')
386
- try {
387
- const r = await fetch('/api/chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:m})})
388
- const d = await r.json()
389
- if (d.type==='created') {
390
- addm('Project created: ' + d.goal, 's')
391
- load()
392
- } else {
393
- addm(d.message || JSON.stringify(d), 'a')
394
- }
395
- } catch(e) { addm('Error: '+e.message, 'a') }
396
- }
397
-
398
- // ── Settings ──
399
- function tset() {
400
- const o = document.getElementById('setov')
401
- o.classList.toggle('s')
402
- if (o.classList.contains('s')) refreshSettings()
403
- }
404
- async function refreshSettings() {
405
- try {
406
- const r = await fetch('/api/settings')
407
- const d = await r.json()
408
- document.getElementById('hftok').textContent = d.token_set ? 'Set' : 'Not set'
409
- const s = await fetch('/api/hf/status').then(r=>r.json()).catch(()=>({}))
410
- document.getElementById('hfus').textContent = s.user || '-'
411
- } catch(_) {}
412
- }
413
- function sv() {
414
- fetch('/api/settings',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({
415
- provider:document.getElementById('sprov').value,
416
- api_key:document.getElementById('sapi').value,
417
- model:document.getElementById('smod').value
418
- })})
419
- }
420
-
421
- // ── Help ──
422
- function thelp() { document.getElementById('hlpov').classList.toggle('s') }
423
-
424
- // ── Util ──
425
- function esc(s) { const d=document.createElement('div'); d.textContent=s; return d.innerHTML }
426
-
427
- // ── Init ──
428
- dash()
429
- </script>
430
- </body>
431
- </html>