@idl3/claude-control 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +144 -0
- package/bin/cli.js +68 -0
- package/bin/install-service.sh +107 -0
- package/bin/self-update.sh +43 -0
- package/bin/uninstall-service.sh +22 -0
- package/lib/answer.js +64 -0
- package/lib/auth.js +81 -0
- package/lib/config.js +118 -0
- package/lib/push.js +153 -0
- package/lib/resources.js +137 -0
- package/lib/sessions.js +529 -0
- package/lib/terminal.js +278 -0
- package/lib/tmux.js +462 -0
- package/lib/transcript.js +451 -0
- package/lib/tui.js +50 -0
- package/lib/uploads.js +42 -0
- package/lib/version.js +73 -0
- package/package.json +49 -0
- package/public/app.js +756 -0
- package/public/index.html +120 -0
- package/public/styles.css +848 -0
- package/server.js +910 -0
- package/web/README.md +66 -0
- package/web/dist/apple-touch-icon.png +0 -0
- package/web/dist/assets/bash-I8pq0VWm.js +1 -0
- package/web/dist/assets/core-BYJcZW10.js +3 -0
- package/web/dist/assets/css-DazXZka4.js +1 -0
- package/web/dist/assets/diff-DiTmLxSS.js +1 -0
- package/web/dist/assets/index-Bb7gXgl-.css +1 -0
- package/web/dist/assets/index-wrjqfzbL.js +77 -0
- package/web/dist/assets/javascript-BKRaQes9.js +1 -0
- package/web/dist/assets/json-DIYVocXf.js +1 -0
- package/web/dist/assets/markdown-BrP960CR.js +1 -0
- package/web/dist/assets/python-sE43i1Pi.js +1 -0
- package/web/dist/assets/typescript-C2FFdlUC.js +1 -0
- package/web/dist/assets/xml-BXBhIUeX.js +1 -0
- package/web/dist/icon-192.png +0 -0
- package/web/dist/icon-512.png +0 -0
- package/web/dist/index.html +25 -0
- package/web/dist/manifest.webmanifest +25 -0
- package/web/dist/sw.js +57 -0
package/web/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# claude-cockpit web (assistant-ui frontend)
|
|
2
|
+
|
|
3
|
+
React + Vite + TypeScript frontend for claude-cockpit, built on
|
|
4
|
+
[`@assistant-ui/react`](https://www.assistant-ui.com/docs/ui/thread) for the
|
|
5
|
+
chat thread, composer, and attachments. It replaces the vanilla
|
|
6
|
+
`public/{index.html,app.js,styles.css}` UI, which is left in place as a
|
|
7
|
+
fallback.
|
|
8
|
+
|
|
9
|
+
## Build & serve
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
cd web
|
|
13
|
+
npm install
|
|
14
|
+
npm run build # → web/dist/index.html + web/dist/assets/*
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- `vite.config.ts` sets `build.outDir = dist` and `base: './'`, so the bundle
|
|
18
|
+
loads under any path (e.g. behind `tailscale serve`) and makes no runtime
|
|
19
|
+
CDN/network calls — everything is bundled.
|
|
20
|
+
- Point the cockpit server's static root at `web/dist` to serve this UI. The
|
|
21
|
+
parent server is wired separately (this project does not modify anything
|
|
22
|
+
outside `web/`).
|
|
23
|
+
|
|
24
|
+
Scripts: `dev` (Vite dev server), `build` (`tsc -b && vite build`),
|
|
25
|
+
`preview` (serve the built `dist`).
|
|
26
|
+
|
|
27
|
+
## How it talks to the backend
|
|
28
|
+
|
|
29
|
+
Same-origin. The page is opened as `?token=<t>`; the token is read from
|
|
30
|
+
`window.location.search` and appended to every API call (`&token=…`) and the
|
|
31
|
+
WebSocket URL (`?token=…`, `wss:` when the page is `https:`). See
|
|
32
|
+
`src/lib/api.ts` and `src/lib/ws.ts`. The WS reconnects with capped backoff and
|
|
33
|
+
re-subscribes to the selected session on every (re)open.
|
|
34
|
+
|
|
35
|
+
## assistant-ui integration approach
|
|
36
|
+
|
|
37
|
+
Uses the **external-store runtime** (`useExternalStoreRuntime`):
|
|
38
|
+
|
|
39
|
+
- Our WebSocket is the single source of truth (`src/hooks/useCockpit.ts`). The
|
|
40
|
+
transcript `Msg[]` is converted to assistant-ui `ThreadMessageLike[]` in
|
|
41
|
+
`src/lib/convert.ts` and passed to the runtime as already-converted messages.
|
|
42
|
+
- `onNew` (composer send) dispatches `{type:'reply',…}` over the WS. We do **not**
|
|
43
|
+
optimistically append — Claude's echo arrives via the WS `append` stream, so
|
|
44
|
+
the transcript stays authoritative.
|
|
45
|
+
- Block → part mapping: `text`→text, `thinking`→a collapsible dim reasoning
|
|
46
|
+
block, `tool_use`→a compact `▸ name — inputSummary` chip, `tool_result`→a dim
|
|
47
|
+
quoted block (red tint on error). `tool_result` blocks are folded into their
|
|
48
|
+
originating `tool-call` part by `toolUseId` during whole-array conversion.
|
|
49
|
+
- All transcript text renders through React/assistant-ui (escaped). No
|
|
50
|
+
`dangerouslySetInnerHTML` is used anywhere — tool output is arbitrary.
|
|
51
|
+
|
|
52
|
+
Why external-store over the local/chat runtime: this is a read-only transcript
|
|
53
|
+
mirror with tmux-send semantics, not a request/response chat loop. The external
|
|
54
|
+
store lets the WS own state while we still get the full assistant-ui
|
|
55
|
+
Thread/Composer/attachment UI and primitives.
|
|
56
|
+
|
|
57
|
+
## Files
|
|
58
|
+
|
|
59
|
+
- `src/lib/types.ts` — backend contract types.
|
|
60
|
+
- `src/lib/api.ts` — token + upload helpers.
|
|
61
|
+
- `src/lib/ws.ts` — reconnecting WebSocket client.
|
|
62
|
+
- `src/lib/convert.ts` — `Msg[]` → assistant-ui messages.
|
|
63
|
+
- `src/hooks/useCockpit.ts` — WS-backed store.
|
|
64
|
+
- `src/components/` — `Thread`, `Messages`, `MessageParts`, `Composer`,
|
|
65
|
+
`SessionRail`, `ResourceHud`, `AskModal`, `Toast`.
|
|
66
|
+
- `src/App.tsx` — wires the runtime, rail, HUD, modal, and toasts.
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function w(e){const a=e.regex,t={},c={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{className:"variable",variants:[{begin:a.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},c]});const s={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},o=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),i={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,s]};s.contains.push(n);const r={match:/\\"/},m={className:"string",begin:/'/,end:/'/},p={match:/\\'/},d={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]},l=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],u=e.SHEBANG({binary:`(${l.join("|")})`,relevance:10}),h={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},b=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],g=["true","false"],f={match:/(\/[a-z._-]+)+/},E=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],S=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],_=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],N=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:b,literal:g,built_in:[...E,...S,"set","shopt",..._,...N]},contains:[u,e.SHEBANG(),h,d,o,i,f,n,r,m,p,t]}}export{w as default};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{g as Ve}from"./index-wrjqfzbL.js";function xe(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{const i=e[t],u=typeof i;(u==="object"||u==="function")&&!Object.isFrozen(i)&&xe(i)}),e}class he{constructor(t){t.data===void 0&&(t.data={}),this.data=t.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function we(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function B(e,...t){const i=Object.create(null);for(const u in e)i[u]=e[u];return t.forEach(function(u){for(const b in u)i[b]=u[b]}),i}const qe="</span>",pe=e=>!!e.scope,Qe=(e,{prefix:t})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const i=e.split(".");return[`${t}${i.shift()}`,...i.map((u,b)=>`${u}${"_".repeat(b+1)}`)].join(" ")}return`${t}${e}`};class me{constructor(t,i){this.buffer="",this.classPrefix=i.classPrefix,t.walk(this)}addText(t){this.buffer+=we(t)}openNode(t){if(!pe(t))return;const i=Qe(t.scope,{prefix:this.classPrefix});this.span(i)}closeNode(t){pe(t)&&(this.buffer+=qe)}value(){return this.buffer}span(t){this.buffer+=`<span class="${t}">`}}const de=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class te{constructor(){this.rootNode=de(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(t){this.top.children.push(t)}openNode(t){const i=de({scope:t});this.add(i),this.stack.push(i)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(t){return this.constructor._walk(t,this.rootNode)}static _walk(t,i){return typeof i=="string"?t.addText(i):i.children&&(t.openNode(i),i.children.forEach(u=>this._walk(t,u)),t.closeNode(i)),t}static _collapse(t){typeof t!="string"&&t.children&&(t.children.every(i=>typeof i=="string")?t.children=[t.children.join("")]:t.children.forEach(i=>{te._collapse(i)}))}}class et extends te{constructor(t){super(),this.options=t}addText(t){t!==""&&this.add(t)}startScope(t){this.openNode(t)}endScope(){this.closeNode()}__addSublanguage(t,i){const u=t.root;i&&(u.scope=`language:${i}`),this.add(u)}toHTML(){return new me(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function P(e){return e?typeof e=="string"?e:e.source:null}function Oe(e){return C("(?=",e,")")}function tt(e){return C("(?:",e,")*")}function nt(e){return C("(?:",e,")?")}function C(...e){return e.map(i=>P(i)).join("")}function it(e){const t=e[e.length-1];return typeof t=="object"&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function ne(...e){return"("+(it(e).capture?"":"?:")+e.map(u=>P(u)).join("|")+")"}function Re(e){return new RegExp(e.toString()+"|").exec("").length-1}function st(e,t){const i=e&&e.exec(t);return i&&i.index===0}const rt=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function ie(e,{joinWith:t}){let i=0;return e.map(u=>{i+=1;const b=i;let _=P(u),c="";for(;_.length>0;){const r=rt.exec(_);if(!r){c+=_;break}c+=_.substring(0,r.index),_=_.substring(r.index+r[0].length),r[0][0]==="\\"&&r[1]?c+="\\"+String(Number(r[1])+b):(c+=r[0],r[0]==="("&&i++)}return c}).map(u=>`(${u})`).join(t)}const ct=/\b\B/,ye="[a-zA-Z]\\w*",se="[a-zA-Z_]\\w*",Se="\\b\\d+(\\.\\d+)?",Ne="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Ae="\\b(0b[01]+)",ot="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",at=(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=C(t,/.*\b/,e.binary,/\b.*/)),B({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(i,u)=>{i.index!==0&&u.ignoreMatch()}},e)},U={begin:"\\\\[\\s\\S]",relevance:0},lt={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[U]},ut={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[U]},ft={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},Y=function(e,t,i={}){const u=B({scope:"comment",begin:e,end:t,contains:[]},i);u.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const b=ne("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return u.contains.push({begin:C(/[ ]+/,"(",b,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),u},gt=Y("//","$"),ht=Y("/\\*","\\*/"),pt=Y("#","$"),dt={scope:"number",begin:Se,relevance:0},Et={scope:"number",begin:Ne,relevance:0},bt={scope:"number",begin:Ae,relevance:0},_t={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[U,{begin:/\[/,end:/\]/,relevance:0,contains:[U]}]},Mt={scope:"title",begin:ye,relevance:0},xt={scope:"title",begin:se,relevance:0},wt={begin:"\\.\\s*"+se,relevance:0},Ot=function(e){return Object.assign(e,{"on:begin":(t,i)=>{i.data._beginMatch=t[1]},"on:end":(t,i)=>{i.data._beginMatch!==t[1]&&i.ignoreMatch()}})};var z=Object.freeze({__proto__:null,APOS_STRING_MODE:lt,BACKSLASH_ESCAPE:U,BINARY_NUMBER_MODE:bt,BINARY_NUMBER_RE:Ae,COMMENT:Y,C_BLOCK_COMMENT_MODE:ht,C_LINE_COMMENT_MODE:gt,C_NUMBER_MODE:Et,C_NUMBER_RE:Ne,END_SAME_AS_BEGIN:Ot,HASH_COMMENT_MODE:pt,IDENT_RE:ye,MATCH_NOTHING_RE:ct,METHOD_GUARD:wt,NUMBER_MODE:dt,NUMBER_RE:Se,PHRASAL_WORDS_MODE:ft,QUOTE_STRING_MODE:ut,REGEXP_MODE:_t,RE_STARTERS_RE:ot,SHEBANG:at,TITLE_MODE:Mt,UNDERSCORE_IDENT_RE:se,UNDERSCORE_TITLE_MODE:xt});function Rt(e,t){e.input[e.index-1]==="."&&t.ignoreMatch()}function yt(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function St(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=Rt,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function Nt(e,t){Array.isArray(e.illegal)&&(e.illegal=ne(...e.illegal))}function At(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function kt(e,t){e.relevance===void 0&&(e.relevance=1)}const Tt=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const i=Object.assign({},e);Object.keys(e).forEach(u=>{delete e[u]}),e.keywords=i.keywords,e.begin=C(i.beforeMatch,Oe(i.begin)),e.starts={relevance:0,contains:[Object.assign(i,{endsParent:!0})]},e.relevance=0,delete i.beforeMatch},It=["of","and","for","in","not","or","if","then","parent","list","value"],Bt="keyword";function ke(e,t,i=Bt){const u=Object.create(null);return typeof e=="string"?b(i,e.split(" ")):Array.isArray(e)?b(i,e):Object.keys(e).forEach(function(_){Object.assign(u,ke(e[_],t,_))}),u;function b(_,c){t&&(c=c.map(r=>r.toLowerCase())),c.forEach(function(r){const l=r.split("|");u[l[0]]=[_,Dt(l[0],l[1])]})}}function Dt(e,t){return t?Number(t):vt(e)?0:1}function vt(e){return It.includes(e.toLowerCase())}const Ee={},v=e=>{console.error(e)},be=(e,...t)=>{console.log(`WARN: ${e}`,...t)},L=(e,t)=>{Ee[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Ee[`${e}/${t}`]=!0)},X=new Error;function Te(e,t,{key:i}){let u=0;const b=e[i],_={},c={};for(let r=1;r<=t.length;r++)c[r+u]=b[r],_[r+u]=!0,u+=Re(t[r-1]);e[i]=c,e[i]._emit=_,e[i]._multi=!0}function Ct(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw v("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),X;if(typeof e.beginScope!="object"||e.beginScope===null)throw v("beginScope must be object"),X;Te(e,e.begin,{key:"beginScope"}),e.begin=ie(e.begin,{joinWith:""})}}function Lt(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw v("skip, excludeEnd, returnEnd not compatible with endScope: {}"),X;if(typeof e.endScope!="object"||e.endScope===null)throw v("endScope must be object"),X;Te(e,e.end,{key:"endScope"}),e.end=ie(e.end,{joinWith:""})}}function Ht(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function jt(e){Ht(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),Ct(e),Lt(e)}function Pt(e){function t(c,r){return new RegExp(P(c),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(r?"g":""))}class i{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(r,l){l.position=this.position++,this.matchIndexes[this.matchAt]=l,this.regexes.push([l,r]),this.matchAt+=Re(r)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const r=this.regexes.map(l=>l[1]);this.matcherRe=t(ie(r,{joinWith:"|"}),!0),this.lastIndex=0}exec(r){this.matcherRe.lastIndex=this.lastIndex;const l=this.matcherRe.exec(r);if(!l)return null;const w=l.findIndex((j,Z)=>Z>0&&j!==void 0),M=this.matchIndexes[w];return l.splice(0,w),Object.assign(l,M)}}class u{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(r){if(this.multiRegexes[r])return this.multiRegexes[r];const l=new i;return this.rules.slice(r).forEach(([w,M])=>l.addRule(w,M)),l.compile(),this.multiRegexes[r]=l,l}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(r,l){this.rules.push([r,l]),l.type==="begin"&&this.count++}exec(r){const l=this.getMatcher(this.regexIndex);l.lastIndex=this.lastIndex;let w=l.exec(r);if(this.resumingScanAtSamePosition()&&!(w&&w.index===this.lastIndex)){const M=this.getMatcher(0);M.lastIndex=this.lastIndex+1,w=M.exec(r)}return w&&(this.regexIndex+=w.position+1,this.regexIndex===this.count&&this.considerAll()),w}}function b(c){const r=new u;return c.contains.forEach(l=>r.addRule(l.begin,{rule:l,type:"begin"})),c.terminatorEnd&&r.addRule(c.terminatorEnd,{type:"end"}),c.illegal&&r.addRule(c.illegal,{type:"illegal"}),r}function _(c,r){const l=c;if(c.isCompiled)return l;[yt,At,jt,Tt].forEach(M=>M(c,r)),e.compilerExtensions.forEach(M=>M(c,r)),c.__beforeBegin=null,[St,Nt,kt].forEach(M=>M(c,r)),c.isCompiled=!0;let w=null;return typeof c.keywords=="object"&&c.keywords.$pattern&&(c.keywords=Object.assign({},c.keywords),w=c.keywords.$pattern,delete c.keywords.$pattern),w=w||/\w+/,c.keywords&&(c.keywords=ke(c.keywords,e.case_insensitive)),l.keywordPatternRe=t(w,!0),r&&(c.begin||(c.begin=/\B|\b/),l.beginRe=t(l.begin),!c.end&&!c.endsWithParent&&(c.end=/\B|\b/),c.end&&(l.endRe=t(l.end)),l.terminatorEnd=P(l.end)||"",c.endsWithParent&&r.terminatorEnd&&(l.terminatorEnd+=(c.end?"|":"")+r.terminatorEnd)),c.illegal&&(l.illegalRe=t(c.illegal)),c.contains||(c.contains=[]),c.contains=[].concat(...c.contains.map(function(M){return Ut(M==="self"?c:M)})),c.contains.forEach(function(M){_(M,l)}),c.starts&&_(c.starts,r),l.matcher=b(l),l}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=B(e.classNameAliases||{}),_(e)}function Ie(e){return e?e.endsWithParent||Ie(e.starts):!1}function Ut(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(t){return B(e,{variants:null},t)})),e.cachedVariants?e.cachedVariants:Ie(e)?B(e,{starts:e.starts?B(e.starts):null}):Object.isFrozen(e)?B(e):e}var $t="11.11.1";class Gt extends Error{constructor(t,i){super(t),this.name="HTMLInjectionError",this.html=i}}const ee=we,_e=B,Me=Symbol("nomatch"),Wt=7,Be=function(e){const t=Object.create(null),i=Object.create(null),u=[];let b=!0;const _="Could not find the language '{}', did you forget to load/include a language module?",c={disableAutodetect:!0,name:"Plain text",contains:[]};let r={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:et};function l(n){return r.noHighlightRe.test(n)}function w(n){let a=n.className+" ";a+=n.parentNode?n.parentNode.className:"";const h=r.languageDetectRe.exec(a);if(h){const d=T(h[1]);return d||(be(_.replace("{}",h[1])),be("Falling back to no-highlight mode for this block.",n)),d?h[1]:"no-highlight"}return a.split(/\s+/).find(d=>l(d)||T(d))}function M(n,a,h){let d="",x="";typeof a=="object"?(d=n,h=a.ignoreIllegals,x=a.language):(L("10.7.0","highlight(lang, code, ...args) has been deprecated."),L("10.7.0",`Please use highlight(code, options) instead.
|
|
2
|
+
https://github.com/highlightjs/highlight.js/issues/2277`),x=n,d=a),h===void 0&&(h=!0);const S={code:d,language:x};G("before:highlight",S);const I=S.result?S.result:j(S.language,S.code,h);return I.code=S.code,G("after:highlight",I),I}function j(n,a,h,d){const x=Object.create(null);function S(s,o){return s.keywords[o]}function I(){if(!f.keywords){O.addText(E);return}let s=0;f.keywordPatternRe.lastIndex=0;let o=f.keywordPatternRe.exec(E),g="";for(;o;){g+=E.substring(s,o.index);const p=A.case_insensitive?o[0].toLowerCase():o[0],R=S(f,p);if(R){const[k,Ze]=R;if(O.addText(g),g="",x[p]=(x[p]||0)+1,x[p]<=Wt&&(F+=Ze),k.startsWith("_"))g+=o[0];else{const Je=A.classNameAliases[k]||k;N(o[0],Je)}}else g+=o[0];s=f.keywordPatternRe.lastIndex,o=f.keywordPatternRe.exec(E)}g+=E.substring(s),O.addText(g)}function W(){if(E==="")return;let s=null;if(typeof f.subLanguage=="string"){if(!t[f.subLanguage]){O.addText(E);return}s=j(f.subLanguage,E,!0,ge[f.subLanguage]),ge[f.subLanguage]=s._top}else s=J(E,f.subLanguage.length?f.subLanguage:null);f.relevance>0&&(F+=s.relevance),O.__addSublanguage(s._emitter,s.language)}function y(){f.subLanguage!=null?W():I(),E=""}function N(s,o){s!==""&&(O.startScope(o),O.addText(s),O.endScope())}function ae(s,o){let g=1;const p=o.length-1;for(;g<=p;){if(!s._emit[g]){g++;continue}const R=A.classNameAliases[s[g]]||s[g],k=o[g];R?N(k,R):(E=k,I(),E=""),g++}}function le(s,o){return s.scope&&typeof s.scope=="string"&&O.openNode(A.classNameAliases[s.scope]||s.scope),s.beginScope&&(s.beginScope._wrap?(N(E,A.classNameAliases[s.beginScope._wrap]||s.beginScope._wrap),E=""):s.beginScope._multi&&(ae(s.beginScope,o),E="")),f=Object.create(s,{parent:{value:f}}),f}function ue(s,o,g){let p=st(s.endRe,g);if(p){if(s["on:end"]){const R=new he(s);s["on:end"](o,R),R.isMatchIgnored&&(p=!1)}if(p){for(;s.endsParent&&s.parent;)s=s.parent;return s}}if(s.endsWithParent)return ue(s.parent,o,g)}function Ke(s){return f.matcher.regexIndex===0?(E+=s[0],1):(m=!0,0)}function Fe(s){const o=s[0],g=s.rule,p=new he(g),R=[g.__beforeBegin,g["on:begin"]];for(const k of R)if(k&&(k(s,p),p.isMatchIgnored))return Ke(o);return g.skip?E+=o:(g.excludeBegin&&(E+=o),y(),!g.returnBegin&&!g.excludeBegin&&(E=o)),le(g,s),g.returnBegin?0:o.length}function ze(s){const o=s[0],g=a.substring(s.index),p=ue(f,s,g);if(!p)return Me;const R=f;f.endScope&&f.endScope._wrap?(y(),N(o,f.endScope._wrap)):f.endScope&&f.endScope._multi?(y(),ae(f.endScope,s)):R.skip?E+=o:(R.returnEnd||R.excludeEnd||(E+=o),y(),R.excludeEnd&&(E=o));do f.scope&&O.closeNode(),!f.skip&&!f.subLanguage&&(F+=f.relevance),f=f.parent;while(f!==p.parent);return p.starts&&le(p.starts,s),R.returnEnd?0:o.length}function Xe(){const s=[];for(let o=f;o!==A;o=o.parent)o.scope&&s.unshift(o.scope);s.forEach(o=>O.openNode(o))}let K={};function fe(s,o){const g=o&&o[0];if(E+=s,g==null)return y(),0;if(K.type==="begin"&&o.type==="end"&&K.index===o.index&&g===""){if(E+=a.slice(o.index,o.index+1),!b){const p=new Error(`0 width match regex (${n})`);throw p.languageName=n,p.badRule=K.rule,p}return 1}if(K=o,o.type==="begin")return Fe(o);if(o.type==="illegal"&&!h){const p=new Error('Illegal lexeme "'+g+'" for mode "'+(f.scope||"<unnamed>")+'"');throw p.mode=f,p}else if(o.type==="end"){const p=ze(o);if(p!==Me)return p}if(o.type==="illegal"&&g==="")return E+=`
|
|
3
|
+
`,1;if(Q>1e5&&Q>o.index*3)throw new Error("potential infinite loop, way more iterations than matches");return E+=g,g.length}const A=T(n);if(!A)throw v(_.replace("{}",n)),new Error('Unknown language: "'+n+'"');const Ye=Pt(A);let q="",f=d||Ye;const ge={},O=new r.__emitter(r);Xe();let E="",F=0,D=0,Q=0,m=!1;try{if(A.__emitTokens)A.__emitTokens(a,O);else{for(f.matcher.considerAll();;){Q++,m?m=!1:f.matcher.considerAll(),f.matcher.lastIndex=D;const s=f.matcher.exec(a);if(!s)break;const o=a.substring(D,s.index),g=fe(o,s);D=s.index+g}fe(a.substring(D))}return O.finalize(),q=O.toHTML(),{language:n,value:q,relevance:F,illegal:!1,_emitter:O,_top:f}}catch(s){if(s.message&&s.message.includes("Illegal"))return{language:n,value:ee(a),illegal:!0,relevance:0,_illegalBy:{message:s.message,index:D,context:a.slice(D-100,D+100),mode:s.mode,resultSoFar:q},_emitter:O};if(b)return{language:n,value:ee(a),illegal:!1,relevance:0,errorRaised:s,_emitter:O,_top:f};throw s}}function Z(n){const a={value:ee(n),illegal:!1,relevance:0,_top:c,_emitter:new r.__emitter(r)};return a._emitter.addText(n),a}function J(n,a){a=a||r.languages||Object.keys(t);const h=Z(n),d=a.filter(T).filter(oe).map(y=>j(y,n,!1));d.unshift(h);const x=d.sort((y,N)=>{if(y.relevance!==N.relevance)return N.relevance-y.relevance;if(y.language&&N.language){if(T(y.language).supersetOf===N.language)return 1;if(T(N.language).supersetOf===y.language)return-1}return 0}),[S,I]=x,W=S;return W.secondBest=I,W}function De(n,a,h){const d=a&&i[a]||h;n.classList.add("hljs"),n.classList.add(`language-${d}`)}function V(n){let a=null;const h=w(n);if(l(h))return;if(G("before:highlightElement",{el:n,language:h}),n.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",n);return}if(n.children.length>0&&(r.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(n)),r.throwUnescapedHTML))throw new Gt("One of your code blocks includes unescaped HTML.",n.innerHTML);a=n;const d=a.textContent,x=h?M(d,{language:h,ignoreIllegals:!0}):J(d);n.innerHTML=x.value,n.dataset.highlighted="yes",De(n,h,x.language),n.result={language:x.language,re:x.relevance,relevance:x.relevance},x.secondBest&&(n.secondBest={language:x.secondBest.language,relevance:x.secondBest.relevance}),G("after:highlightElement",{el:n,result:x,text:d})}function ve(n){r=_e(r,n)}const Ce=()=>{$(),L("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Le(){$(),L("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let re=!1;function $(){function n(){$()}if(document.readyState==="loading"){re||window.addEventListener("DOMContentLoaded",n,!1),re=!0;return}document.querySelectorAll(r.cssSelector).forEach(V)}function He(n,a){let h=null;try{h=a(e)}catch(d){if(v("Language definition for '{}' could not be registered.".replace("{}",n)),b)v(d);else throw d;h=c}h.name||(h.name=n),t[n]=h,h.rawDefinition=a.bind(null,e),h.aliases&&ce(h.aliases,{languageName:n})}function je(n){delete t[n];for(const a of Object.keys(i))i[a]===n&&delete i[a]}function Pe(){return Object.keys(t)}function T(n){return n=(n||"").toLowerCase(),t[n]||t[i[n]]}function ce(n,{languageName:a}){typeof n=="string"&&(n=[n]),n.forEach(h=>{i[h.toLowerCase()]=a})}function oe(n){const a=T(n);return a&&!a.disableAutodetect}function Ue(n){n["before:highlightBlock"]&&!n["before:highlightElement"]&&(n["before:highlightElement"]=a=>{n["before:highlightBlock"](Object.assign({block:a.el},a))}),n["after:highlightBlock"]&&!n["after:highlightElement"]&&(n["after:highlightElement"]=a=>{n["after:highlightBlock"](Object.assign({block:a.el},a))})}function $e(n){Ue(n),u.push(n)}function Ge(n){const a=u.indexOf(n);a!==-1&&u.splice(a,1)}function G(n,a){const h=n;u.forEach(function(d){d[h]&&d[h](a)})}function We(n){return L("10.7.0","highlightBlock will be removed entirely in v12.0"),L("10.7.0","Please use highlightElement now."),V(n)}Object.assign(e,{highlight:M,highlightAuto:J,highlightAll:$,highlightElement:V,highlightBlock:We,configure:ve,initHighlighting:Ce,initHighlightingOnLoad:Le,registerLanguage:He,unregisterLanguage:je,listLanguages:Pe,getLanguage:T,registerAliases:ce,autoDetection:oe,inherit:_e,addPlugin:$e,removePlugin:Ge}),e.debugMode=function(){b=!1},e.safeMode=function(){b=!0},e.versionString=$t,e.regex={concat:C,lookahead:Oe,either:ne,optional:nt,anyNumberOfTimes:tt};for(const n in z)typeof z[n]=="object"&&xe(z[n]);return Object.assign(e,z),e},H=Be({});H.newInstance=()=>Be({});var Kt=H;H.HighlightJS=H;H.default=H;const zt=Ve(Kt);export{zt as HighlightJS,zt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const s=t=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:t.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:t.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),c=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],d=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],m=[...c,...d],b=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),g=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),p=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),f=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function h(t){const o=t.regex,e=s(t),r={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},n="and or not only",a=/@-?\w[\w]*(-\w+)*/,l="[a-zA-Z-][a-zA-Z0-9_-]*",i=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[e.BLOCK_COMMENT,r,e.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+l,relevance:0},e.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+g.join("|")+")"},{begin:":(:)?("+p.join("|")+")"}]},e.CSS_VARIABLE,{className:"attribute",begin:"\\b("+f.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[e.BLOCK_COMMENT,e.HEXCOLOR,e.IMPORTANT,e.CSS_NUMBER_MODE,...i,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...i,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},e.FUNCTION_DISPATCH]},{begin:o.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:a},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:n,attribute:b.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...i,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+m.join("|")+")\\b"}]}}export{h as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function n(a){const e=a.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:e.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:e.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}export{n as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--bg: oklch(16% .012 260);--bg-1: oklch(20% .014 260);--bg-2: oklch(24% .016 260);--bg-hover: oklch(27% .02 260);--line: oklch(32% .015 260);--text: oklch(92% .01 250);--text-dim: oklch(66% .012 250);--text-faint: oklch(52% .012 250);--accent: oklch(70% .15 250);--accent-2: oklch(74% .13 200);--amber: oklch(80% .16 80);--amber-bg: oklch(40% .1 80);--red: oklch(64% .2 25);--red-bg: oklch(30% .09 25);--green: oklch(72% .16 150);--user: oklch(34% .06 250);--txt-transcript: 12.5px;--txt-meta: 11px;--txt-composer: 16px;--hud-h: 34px;--radius: 10px;--ease: cubic-bezier(.16, 1, .3, 1);color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:var(--txt-transcript);line-height:1.45;-webkit-font-smoothing:antialiased;overscroll-behavior:none}.app{display:flex;flex-direction:column;height:100dvh}.hud{display:flex;align-items:center;gap:12px;height:var(--hud-h);padding:0 12px;padding-top:env(safe-area-inset-top);background:var(--bg-1);border-bottom:1px solid var(--line);font-size:var(--txt-meta);color:var(--text-dim);white-space:nowrap;overflow-x:auto;flex:0 0 auto;box-sizing:content-box}.hud[data-warn=true]{background:var(--amber-bg);color:var(--text)}.hud-brand{display:inline-flex;align-items:center;gap:6px;font-weight:700;color:var(--text);letter-spacing:.02em;flex:0 0 auto}.hud-group{display:inline-flex;gap:4px;align-items:baseline}.hud-k{color:var(--text-faint)}.hud-v{color:var(--text);font-variant-numeric:tabular-nums}.hud-warn-text{color:var(--amber);font-weight:600}.conn-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto;background:var(--text-faint)}.conn-connected{background:var(--green)}.conn-connecting{background:var(--amber)}.conn-disconnected{background:var(--red)}.app-body{flex:1 1 auto;display:flex;min-height:0}.rail{width:100%;overflow-y:auto;background:var(--bg);-webkit-overflow-scrolling:touch}.detail{display:none;flex-direction:column;min-width:0;width:100%}.app[data-detail=open] .rail{display:none}.app[data-detail=open] .detail{display:flex}@media (min-width: 760px){.rail{width:300px;flex:0 0 300px;border-right:1px solid var(--line)}.detail,.app[data-detail=open] .detail{display:flex}.app[data-detail=open] .rail,.app[data-detail=closed] .rail{display:block}.back-btn{display:none!important}}.session-list{list-style:none;margin:0;padding:6px;display:flex;flex-direction:column;gap:4px}.session-item{padding:9px 11px;border-radius:var(--radius);border:1px solid transparent;cursor:pointer;background:var(--bg-1);transition:background var(--ease) .15s,border-color var(--ease) .15s}.session-item:hover{background:var(--bg-hover)}.session-item:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.session-item[data-selected=true]{border-color:var(--accent);background:var(--bg-2)}.session-top{display:flex;align-items:center;gap:7px}.active-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;background:var(--text-faint)}.active-dot[data-on=true]{background:var(--green);box-shadow:0 0 6px var(--green)}.session-name{font-size:13px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}.ask-badge{flex:0 0 auto;font-size:9.5px;font-weight:800;letter-spacing:.06em;padding:2px 6px;border-radius:6px;background:var(--amber-bg);color:var(--amber);animation:pulse 1.6s var(--ease) infinite}@keyframes pulse{50%{opacity:.55}}.session-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;font-size:var(--txt-meta);color:var(--text-dim);align-items:center}.meta-prov{font-variant-numeric:tabular-nums;color:var(--text-faint)}.meta-model{color:var(--accent-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:60%}.meta-ctx{font-variant-numeric:tabular-nums;padding:1px 5px;border-radius:5px;background:var(--bg-2);color:var(--text-dim)}.session-empty{list-style:none;padding:16px;color:var(--text-faint);text-align:center}.detail-head{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--line);background:var(--bg-1);flex:0 0 auto}.back-btn{font-size:22px;line-height:1;background:none;border:none;color:var(--accent);padding:2px 8px;cursor:pointer;flex:0 0 auto}.detail-title{display:flex;flex-direction:column;min-width:0}.detail-name{font-weight:700;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-cwd{font-size:var(--txt-meta);color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-name-row{display:flex;align-items:center;gap:6px;min-width:0}.rename-btn{flex:0 0 auto;background:none;border:none;color:var(--text-faint);cursor:pointer;font-size:12px;line-height:1;padding:2px 4px;border-radius:4px}.rename-btn:hover{color:var(--text);background:var(--bg-hover)}.detail-rename-input{width:100%;font-weight:700;font-size:13px;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:3px 7px;outline:none}.detail-rename-input:focus{border-color:var(--accent)}.live-pane{flex:1 1 auto;display:flex;flex-direction:column;min-height:0;padding:12px 12px 6px}.live-pane-head{flex:0 0 auto;font-size:var(--txt-meta);color:var(--text-faint);margin-bottom:6px}.live-pane-body{flex:1 1 auto;margin:0;padding:10px;border-radius:8px;background:var(--bg);border:1px solid var(--line);color:var(--text);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:var(--txt-transcript);white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto;-webkit-overflow-scrolling:touch}.thread-root{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.thread-viewport{flex:1 1 auto;overflow-y:auto;padding:12px 12px 6px;display:flex;flex-direction:column;gap:10px;-webkit-overflow-scrolling:touch}.thread-empty{margin:auto;color:var(--text-faint);text-align:center}.load-earlier{align-self:center;flex:0 0 auto;margin:2px 0 4px;padding:5px 12px;font:inherit;font-size:11.5px;color:var(--text-dim);background:var(--bg-2);border:1px solid var(--line);border-radius:999px;cursor:pointer;transition:background .12s ease,color .12s ease}.load-earlier:hover{background:var(--bg-hover);color:var(--text)}.load-earlier:active{background:var(--line)}.msg-row{display:flex;flex-direction:column;gap:3px;max-width:92%}.msg-row[data-role=user]{align-self:flex-end;align-items:flex-end}.msg-role{font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint);padding:0 2px}.msg-body{display:flex;flex-direction:column;gap:6px;background:var(--bg-1);border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;font-size:var(--txt-transcript)}.msg-row[data-role=user] .msg-body{background:var(--user);border-color:transparent}.msg-row[data-role=system] .msg-body{background:transparent;border-style:dashed;color:var(--text-dim)}.aui-md{font-size:var(--txt-transcript);line-height:1.5;overflow-wrap:anywhere}.aui-md>:first-child{margin-top:0}.aui-md>:last-child{margin-bottom:0}.aui-md p{margin:0 0 8px}.aui-md h1,.aui-md h2,.aui-md h3,.aui-md h4,.aui-md h5,.aui-md h6{margin:14px 0 6px;line-height:1.3;font-weight:700}.aui-md h1{font-size:17px}.aui-md h2{font-size:15.5px}.aui-md h3{font-size:14px}.aui-md h4,.aui-md h5,.aui-md h6{font-size:13px;color:var(--text-dim)}.aui-md a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.aui-md strong{font-weight:700}.aui-md em{font-style:italic}.aui-md del{opacity:.7}.aui-md ul,.aui-md ol{margin:0 0 8px;padding-left:1.4em}.aui-md li{margin:2px 0}.aui-md li>ul,.aui-md li>ol{margin:2px 0}.aui-md li input[type=checkbox]{margin-right:6px;vertical-align:middle}.aui-md blockquote{margin:0 0 8px;padding:2px 10px;border-left:3px solid var(--line);color:var(--text-dim)}.aui-md hr{border:none;border-top:1px solid var(--line);margin:12px 0}.aui-md :not(pre)>code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.88em;background:var(--bg-2);border:1px solid var(--line);border-radius:5px;padding:1px 5px;overflow-wrap:anywhere}.aui-md pre{margin:0 0 8px;background:var(--bg);border:1px solid var(--line);border-radius:8px;overflow:hidden}.aui-md pre code{display:block;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11.5px;line-height:1.5;color:var(--text);padding:8px 10px;overflow-x:auto;white-space:pre;-webkit-overflow-scrolling:touch}.aui-md-code-lang{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:9.5px;text-transform:lowercase;letter-spacing:.04em;color:var(--text-faint);background:var(--bg-2);border-bottom:1px solid var(--line);padding:3px 10px}.aui-md table{display:block;width:max-content;max-width:100%;overflow-x:auto;border-collapse:collapse;margin:0 0 8px;font-size:11.5px;-webkit-overflow-scrolling:touch}.aui-md th,.aui-md td{border:1px solid var(--line);padding:4px 8px;text-align:left;vertical-align:top}.aui-md th{background:var(--bg-2);font-weight:700}.aui-md img{max-width:100%;height:auto;border-radius:6px}.block-thinking{font-size:11.5px;color:var(--text-dim)}.block-thinking>summary{cursor:pointer;color:var(--text-faint);font-style:italic;list-style:none}.block-thinking>summary:before{content:"▸ "}.block-thinking[open]>summary:before{content:"▾ "}.thinking-text{margin-top:4px;padding-left:8px;border-left:2px solid var(--line);white-space:pre-wrap;overflow-wrap:anywhere;opacity:.8}.block-tool{display:flex;flex-direction:column;gap:4px}.block-tool-use{display:flex;align-items:center;gap:6px;min-width:0;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11.5px;color:var(--text-dim);background:var(--bg-2);border-radius:6px;padding:4px 8px;list-style:none;cursor:default}details.block-tool>summary.block-tool-use{cursor:pointer}.block-tool-use::-webkit-details-marker{display:none}.tool-head{display:flex;align-items:center;gap:5px;min-width:0;flex:1 1 auto;overflow:hidden}.tool-arrow{color:var(--accent-2);flex:0 0 auto;transition:transform var(--ease) .15s}details.block-tool[open]>summary .tool-arrow{transform:rotate(90deg)}.tool-name{color:var(--accent-2);font-weight:600;white-space:nowrap;flex:0 0 auto}.tool-sep{color:var(--text-faint);flex:0 0 auto}.tool-input{color:var(--text-dim);min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-tool-body{display:flex;flex-direction:column;gap:4px}.block-tool-args{margin:0;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;color:var(--text-dim);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:6px 8px;white-space:pre;overflow-x:auto;max-height:220px;overflow-y:auto;-webkit-overflow-scrolling:touch}.block-tool-result{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;color:var(--text-dim);border-left:2px solid var(--line);padding:4px 8px;white-space:pre-wrap;overflow-wrap:anywhere;max-height:220px;overflow-y:auto;-webkit-overflow-scrolling:touch}.block-tool-result[data-error=true]{border-left-color:var(--red);background:var(--red-bg);color:var(--text)}.composer{display:flex;flex-direction:column;gap:6px;padding:8px;padding-bottom:calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--bg-1);flex:0 0 auto}.composer-row{display:flex;align-items:flex-end;gap:6px}.composer-attachments{display:flex;flex-wrap:wrap;gap:6px}.composer-attachments:empty{display:none}.attach-chip{display:inline-flex;align-items:center;gap:6px;max-width:220px;padding:4px 4px 4px 8px;border-radius:8px;border:1px solid var(--line);background:var(--bg-2);font-size:11.5px;color:var(--text)}.attach-chip[data-pending=true]{opacity:.85;border-style:dashed}.chip-thumb{width:26px;height:26px;border-radius:5px;object-fit:cover;flex:0 0 auto;background:var(--bg)}.chip-thumb-empty{border:1px solid var(--line)}.chip-icon{font-size:14px;flex:0 0 auto}.chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chip-spinner{width:11px;height:11px;flex:0 0 auto;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:chip-spin .7s linear infinite}@keyframes chip-spin{to{transform:rotate(360deg)}}.chip-remove{flex:0 0 auto;width:20px;height:20px;border:none;border-radius:6px;background:transparent;color:var(--text-dim);font-size:15px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.chip-remove:hover{background:var(--bg-hover);color:var(--text)}.composer-attach,.composer-send{flex:0 0 auto;height:38px;min-width:38px;border-radius:9px;border:1px solid var(--line);background:var(--bg-2);color:var(--text);font-size:17px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:background var(--ease) .15s}.composer-attach:hover,.composer-send:hover{background:var(--bg-hover)}.composer-send{background:var(--accent);color:#0c121a;border-color:transparent;font-weight:700}.composer-attach:disabled,.composer-send:disabled{opacity:.45;cursor:not-allowed}.composer-input{flex:1 1 auto;resize:none;max-height:40dvh;min-height:38px;padding:9px 11px;border-radius:9px;border:1px solid var(--line);background:var(--bg);color:var(--text);font:inherit;font-size:var(--txt-composer);line-height:1.4}.composer-input:focus{outline:none;border-color:var(--accent)}.composer-input::placeholder{color:var(--text-faint)}.modal-backdrop{position:fixed;inset:0;background:#01020399;backdrop-filter:blur(2px);display:flex;align-items:flex-end;justify-content:center;z-index:50;padding:0}@media (min-width: 760px){.modal-backdrop{align-items:center;padding:20px}}.modal{width:100%;max-width:560px;max-height:90dvh;display:flex;flex-direction:column;background:var(--bg-1);border:1px solid var(--line);border-radius:16px 16px 0 0;overflow:hidden}@media (min-width: 760px){.modal{border-radius:16px}}.modal:focus{outline:none}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line)}.modal-title{font-weight:700;color:var(--amber)}.modal-close{background:none;border:none;color:var(--text-dim);font-size:16px;cursor:pointer;padding:4px 8px}.modal-body{padding:14px;overflow-y:auto;display:flex;flex-direction:column;gap:18px}.question{display:flex;flex-direction:column;gap:6px}.q-header{font-size:var(--txt-meta);text-transform:uppercase;letter-spacing:.06em;color:var(--accent-2)}.q-text{font-size:14px;font-weight:600}.q-hint{font-size:var(--txt-meta);color:var(--text-faint)}.q-options{display:flex;flex-direction:column;gap:7px;margin-top:2px}.option-btn{display:flex;flex-direction:column;gap:2px;text-align:left;padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:var(--bg-2);color:var(--text);cursor:pointer;font:inherit;transition:border-color var(--ease) .15s,background var(--ease) .15s}.option-btn:hover{background:var(--bg-hover)}.option-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.option-btn[data-on=true]{border-color:var(--accent);background:var(--bg);box-shadow:inset 0 0 0 1px var(--accent)}.option-label{font-size:13px;font-weight:600}.option-desc{font-size:var(--txt-meta);color:var(--text-dim)}.capture-output{margin:0;padding:10px;border-radius:8px;background:var(--bg);border:1px solid var(--line);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;color:var(--text-dim);white-space:pre-wrap;overflow-wrap:anywhere;max-height:40dvh;overflow:auto}.modal-foot{display:flex;align-items:center;gap:8px;padding:12px 14px;padding-bottom:calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--line)}.modal-foot-spacer{flex:1 1 auto}.btn-secondary,.btn-primary{padding:9px 14px;border-radius:9px;font:inherit;font-size:13px;font-weight:600;cursor:pointer;border:1px solid var(--line)}.btn-secondary{background:var(--bg-2);color:var(--text)}.btn-secondary:hover{background:var(--bg-hover)}.btn-primary{background:var(--accent);color:#0c121a;border-color:transparent}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.toast{position:fixed;left:50%;top:calc(56px + env(safe-area-inset-top));transform:translate(-50%,-12px);background:var(--bg-2);border:1px solid var(--line);color:var(--text);padding:8px 14px;border-radius:10px;font-size:12px;opacity:0;pointer-events:none;transition:opacity var(--ease) .2s,transform var(--ease) .2s;z-index:60;max-width:90vw;text-align:center}.toast.show{opacity:1;transform:translate(-50%)}.toast-ok{border-color:var(--green)}.toast-error{border-color:var(--red);color:var(--text)}.working-indicator{display:inline-flex;align-items:center;gap:7px;color:var(--text-faint);font-size:13px}.working-spinner{width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent-2, var(--text));border-radius:50%;animation:cockpit-spin .7s linear infinite;flex:none}@keyframes cockpit-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.working-spinner{animation-duration:1.6s}}.update-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 12px;background:var(--amber-bg);color:var(--amber);border-bottom:1px solid var(--line);font-size:13px}.update-banner code{background:var(--bg-hover);color:var(--text);padding:1px 6px;border-radius:4px;font-size:12px}.update-dismiss{flex:none;background:transparent;border:0;color:var(--amber);font-size:16px;line-height:1;cursor:pointer;padding:2px 6px}.update-dismiss:hover{color:var(--text)}.update-actions{display:inline-flex;align-items:center;gap:6px;flex:none}.update-now{background:var(--amber);color:var(--bg);border:0;border-radius:6px;font-size:12px;font-weight:700;padding:4px 10px;cursor:pointer}.update-now:hover{filter:brightness(1.08)}.chip-thumb{cursor:zoom-in}.hud-spacer{flex:1 1 auto}.notify-bell{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--line);border-radius:8px;background:transparent;color:var(--text-dim);cursor:pointer;flex:0 0 auto;-webkit-tap-highlight-color:transparent}.notify-bell:hover:not(:disabled){color:var(--text);border-color:var(--text-faint)}.notify-bell[data-state=on]{color:var(--amber);border-color:var(--amber)}.notify-bell:disabled{opacity:.4;cursor:default}.ios-push-hint{padding:8px 12px;font-size:var(--txt-meta);line-height:1.4;color:var(--text);background:var(--amber-bg);border-bottom:1px solid var(--line);flex:0 0 auto}.rail-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:6px;padding:6px 8px;background:var(--bg);border-bottom:1px solid var(--line)}.rail-new{flex:1;height:var(--hud-h);display:inline-flex;align-items:center;justify-content:center;background:var(--bg-2);color:var(--text);border:1px solid var(--line);border-radius:8px;font-size:13px;font-weight:600;padding:0 10px;cursor:pointer;transition:border-color var(--ease) .15s,background var(--ease) .15s}.rail-new:hover:not(:disabled){border-color:var(--accent);background:var(--bg-hover)}.rail-new:disabled{opacity:.6;cursor:default}.rail-gear{flex:none;width:var(--hud-h);height:var(--hud-h);display:inline-flex;align-items:center;justify-content:center;background:var(--bg-2);color:var(--text-dim);border:1px solid var(--line);border-radius:8px;font-size:15px;cursor:pointer;transition:color var(--ease) .15s,border-color var(--ease) .15s}.rail-gear:hover{color:var(--text);border-color:var(--accent)}.rail-new:focus-visible,.rail-gear:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.rail-new-form{position:sticky;top:0;z-index:2;display:flex;flex-direction:column;gap:8px;padding:8px;background:var(--bg);border-bottom:1px solid var(--line)}.rail-new-name{background:var(--bg-2);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:var(--txt-composer);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.rail-new-name:focus{outline:none;border-color:var(--accent)}.rail-new-name:disabled{opacity:.6}.rail-new-actions{display:flex;justify-content:flex-end;gap:6px}.rail-new-cancel,.rail-new-create{border-radius:8px;font-size:12px;font-weight:600;padding:6px 12px;cursor:pointer}.rail-new-cancel{background:transparent;color:var(--text-dim);border:1px solid var(--line)}.rail-new-cancel:hover:not(:disabled){color:var(--text)}.rail-new-create{background:var(--accent);color:var(--bg);border:0}.rail-new-create:hover:not(:disabled){filter:brightness(1.08)}.rail-new-cancel:disabled,.rail-new-create:disabled{opacity:.6;cursor:default}.transcript-attachments{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.transcript-thumb-btn{background:none;border:1px solid var(--line);border-radius:8px;padding:0;cursor:zoom-in;overflow:hidden;flex:0 0 auto;display:block;transition:border-color var(--ease) .15s}.transcript-thumb-btn:hover{border-color:var(--accent)}.transcript-thumb-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.transcript-thumb{display:block;max-width:140px;max-height:100px;width:auto;height:auto;border-radius:7px;object-fit:cover}.transcript-file-chip{display:inline-flex;align-items:center;gap:5px;max-width:200px;padding:4px 8px;border-radius:8px;border:1px solid var(--line);background:var(--bg-2);font-size:11.5px;color:var(--text);text-decoration:none;transition:border-color var(--ease) .15s,background var(--ease) .15s}.transcript-file-chip:hover{border-color:var(--accent);background:var(--bg-hover)}.transcript-file-chip:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.lightbox-backdrop{position:fixed;inset:0;z-index:100;background:#010203d9;display:flex;align-items:center;justify-content:center;cursor:zoom-out;padding:16px}.lightbox-backdrop:focus{outline:none}.lightbox-img{max-width:100%;max-height:90dvh;width:auto;height:auto;border-radius:10px;cursor:default;box-shadow:0 8px 40px #0009}.config-overlay{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:16px;background:#0000008c}.config-modal{width:100%;max-width:420px;background:var(--bg-1);border:1px solid var(--line);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:14px;box-shadow:0 12px 40px #0006}.config-head{display:flex;align-items:center;justify-content:space-between}.config-title{font-size:15px;font-weight:700;color:var(--text)}.config-close{background:transparent;border:0;color:var(--text-dim);font-size:18px;line-height:1;cursor:pointer;padding:2px 6px}.config-close:hover{color:var(--text)}.config-field{display:flex;flex-direction:column;gap:5px}.config-label{font-size:12px;font-weight:600;color:var(--text-dim)}.config-input{background:var(--bg-2);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:var(--txt-composer);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.config-input:focus{outline:none;border-color:var(--accent)}.config-input:disabled{opacity:.6}.config-hint{font-size:11px;color:var(--text-faint)}.config-hint code{background:var(--bg-hover);color:var(--text-dim);padding:0 4px;border-radius:4px}.config-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:2px}.config-cancel,.config-save{border-radius:8px;font-size:13px;font-weight:600;padding:7px 14px;cursor:pointer}.config-cancel{background:transparent;color:var(--text-dim);border:1px solid var(--line)}.config-cancel:hover:not(:disabled){color:var(--text)}.config-save{background:var(--accent);color:var(--bg);border:0}.config-save:hover:not(:disabled){filter:brightness(1.08)}.config-save:disabled,.config-cancel:disabled{opacity:.6;cursor:default}.term-btn{font-size:13px}.term-btn:hover{color:var(--amber);background:var(--bg-hover)}.term-overlay{position:fixed;inset:0;z-index:60;display:flex;flex-direction:column;background:var(--bg)}.term-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--bg-1);flex:0 0 auto}.term-title{font-weight:700;font-size:13px;color:var(--amber);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.term-actions{display:flex;align-items:center;gap:10px;flex:0 0 auto}.term-newtab{font-size:12px;color:var(--accent);text-decoration:none;padding:4px 8px;border:1px solid var(--line);border-radius:6px}.term-newtab:hover{background:var(--bg-hover)}.term-close{background:none;border:none;color:var(--text-dim);font-size:16px;line-height:1;cursor:pointer;padding:4px 8px;border-radius:6px}.term-close:hover{color:var(--text);background:var(--bg-hover)}.term-frame{flex:1 1 auto;width:100%;border:none;background:var(--bg)}.gate-root{display:flex;align-items:center;justify-content:center;min-height:100dvh;padding:24px;padding-top:max(24px,env(safe-area-inset-top));background:radial-gradient(120% 80% at 50% -10%,var(--bg-1),var(--bg) 60%)}.gate-card{display:flex;flex-direction:column;gap:12px;width:100%;max-width:320px;padding:24px;background:var(--bg-1);border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);box-shadow:0 1px #ffffff0a inset,0 20px 50px -20px #000000b3}.gate-card--probing{flex-direction:row;align-items:center;justify-content:center;gap:10px;color:var(--text-dim)}.gate-brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}.gate-glyph{font-size:22px;line-height:1;color:var(--accent)}.gate-title{font-size:17px;font-weight:650;letter-spacing:.01em;color:var(--text)}.gate-label{font-size:var(--txt-meta);text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint)}.gate-input{width:100%;padding:11px 12px;font-size:var(--txt-composer);color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:var(--radius);outline:none;transition:border-color .15s var(--ease),background .15s var(--ease)}.gate-input:focus{border-color:var(--accent);background:var(--bg-2)}.gate-input[aria-invalid=true]{border-color:var(--red)}.gate-error{margin:0;font-size:var(--txt-meta);color:var(--red)}.gate-submit{margin-top:4px;padding:11px 12px;font-size:14px;font-weight:600;color:var(--bg);background:var(--accent);border:none;border-radius:var(--radius);cursor:pointer;transition:filter .15s var(--ease),opacity .15s var(--ease)}.gate-submit:hover:not(:disabled){filter:brightness(1.08)}.gate-submit:active:not(:disabled){filter:brightness(.95)}.gate-submit:disabled{opacity:.6;cursor:default}.gate-spinner{width:16px;height:16px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:gate-spin .7s linear infinite}@keyframes gate-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.gate-spinner{animation:none}}.transcript-thumb-loading{display:inline-block;background:var(--bg-2);border:1px solid var(--line)}.aui-md pre code.hljs{background:transparent;color:var(--text)}.aui-md .hljs-doctag,.aui-md .hljs-keyword,.aui-md .hljs-meta .hljs-keyword,.aui-md .hljs-template-tag,.aui-md .hljs-template-variable,.aui-md .hljs-type,.aui-md .hljs-variable.language_{color:#ff7b72}.aui-md .hljs-title,.aui-md .hljs-title.class_,.aui-md .hljs-title.class_.inherited__,.aui-md .hljs-title.function_{color:#d2a8ff}.aui-md .hljs-attr,.aui-md .hljs-attribute,.aui-md .hljs-literal,.aui-md .hljs-meta,.aui-md .hljs-number,.aui-md .hljs-operator,.aui-md .hljs-variable,.aui-md .hljs-selector-attr,.aui-md .hljs-selector-class,.aui-md .hljs-selector-id{color:#79c0ff}.aui-md .hljs-regexp,.aui-md .hljs-string,.aui-md .hljs-meta .hljs-string{color:#a5d6ff}.aui-md .hljs-built_in,.aui-md .hljs-symbol{color:#ffa657}.aui-md .hljs-comment,.aui-md .hljs-code,.aui-md .hljs-formula{color:#8b949e}.aui-md .hljs-name,.aui-md .hljs-quote,.aui-md .hljs-selector-tag,.aui-md .hljs-selector-pseudo{color:#7ee787}.aui-md .hljs-subst{color:var(--text)}.aui-md .hljs-section{color:#1f6feb;font-weight:700}.aui-md .hljs-bullet{color:#f2cc60}.aui-md .hljs-emphasis{color:var(--text);font-style:italic}.aui-md .hljs-strong{color:var(--text);font-weight:700}.aui-md .hljs-addition{color:#aff5b4;background-color:#033a16}.aui-md .hljs-deletion{color:#ffdcd7;background-color:#67060c}
|