@mono-agent/web 0.20.11 → 0.21.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/README.md +397 -68
- package/dist/contracts.d.ts +437 -8
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -1
- package/dist/cron-reply-context.d.ts +27 -0
- package/dist/cron-reply-context.d.ts.map +1 -0
- package/dist/cron-reply-context.js +241 -0
- package/dist/cron-reply-context.js.map +1 -0
- package/dist/discovery.d.ts +1 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +8 -6
- package/dist/discovery.js.map +1 -1
- package/dist/effort-ladder.d.ts +111 -0
- package/dist/effort-ladder.d.ts.map +1 -0
- package/dist/effort-ladder.js +155 -0
- package/dist/effort-ladder.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/long-lived-fetch.d.ts +5 -0
- package/dist/long-lived-fetch.d.ts.map +1 -0
- package/dist/long-lived-fetch.js +22 -0
- package/dist/long-lived-fetch.js.map +1 -0
- package/dist/monitor-reply.d.ts +10 -0
- package/dist/monitor-reply.d.ts.map +1 -0
- package/dist/monitor-reply.js +67 -0
- package/dist/monitor-reply.js.map +1 -0
- package/dist/notification-client.d.ts +11 -2
- package/dist/notification-client.d.ts.map +1 -1
- package/dist/notification-client.js +5 -4
- package/dist/notification-client.js.map +1 -1
- package/dist/notification-ingress.d.ts +8 -1
- package/dist/notification-ingress.d.ts.map +1 -1
- package/dist/notification-ingress.js +28 -6
- package/dist/notification-ingress.js.map +1 -1
- package/dist/operator-client.d.ts +35 -2
- package/dist/operator-client.d.ts.map +1 -1
- package/dist/operator-client.js +276 -9
- package/dist/operator-client.js.map +1 -1
- package/dist/server.d.ts +42 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +679 -52
- package/dist/server.js.map +1 -1
- package/dist/service.d.ts +299 -18
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +1915 -160
- package/dist/service.js.map +1 -1
- package/dist/store-migrations.d.ts +23 -0
- package/dist/store-migrations.d.ts.map +1 -0
- package/dist/store-migrations.js +212 -0
- package/dist/store-migrations.js.map +1 -0
- package/dist/store.d.ts +389 -21
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +2087 -245
- package/dist/store.js.map +1 -1
- package/package.json +9 -8
- package/webapp/dist/assets/{assistant-ui-BzN2E6n6.js → assistant-ui-pZmGxIp2.js} +16 -16
- package/webapp/dist/assets/index-6uQ7TVQe.css +1 -0
- package/webapp/dist/assets/index-CsSMjSgW.js +156 -0
- package/webapp/dist/assets/{markdown-Vq23xgh7.js → markdown-Du5t10ja.js} +1 -1
- package/webapp/dist/badge-96.png +0 -0
- package/webapp/dist/index.html +26 -6
- package/webapp/dist/manifest.webmanifest +1 -1
- package/webapp/dist/notification-sw.js +3 -1
- package/webapp/dist/sw.js +1 -1
- package/webapp/dist/{workbox-9c191d2f.js → workbox-2fbc6a65.js} +1 -1
- package/webapp/dist/assets/index-BT463dRM.css +0 -1
- package/webapp/dist/assets/index-Co-qDQPq.js +0 -155
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as ce,j as Y,g as Vn,u as Ln,i as Ei,a as Ii}from"./assistant-ui-
|
|
1
|
+
import{r as ce,j as Y,g as Vn,u as Ln,i as Ei,a as Ii}from"./assistant-ui-pZmGxIp2.js";const Ai=(e,t)=>typeof e=="string"?e===t:JSON.stringify(e)===JSON.stringify(t),Ti=(e,t)=>{if(!e||!t)return!1;const n=r=>{const{position:i,data:o,...l}=r||{};return l};return JSON.stringify(n(e.properties))===JSON.stringify(n(t.properties))&&Ai(e.children,t.children)},ar=(e,t)=>Ti(e.node,t.node),$n=ce.createContext(null),Pi=()=>ce.useContext($n)!==null,vi=({children:e,...t})=>Y.jsx($n.Provider,{value:t,children:e}),Di=ce.memo(vi,ar),zi=({node:e,...t})=>Y.jsx("pre",{...t}),Li=({node:e,...t})=>Y.jsx("code",{...t}),Wn=({node:e,components:{Pre:t,Code:n},code:r})=>Y.jsx(t,{children:Y.jsx(n,{node:e,children:r})}),Fi=()=>null,Ri=({node:e,components:{Pre:t,Code:n,SyntaxHighlighter:r,CodeHeader:i},language:o,code:l})=>{const a=ce.useMemo(()=>({Pre:t,Code:n}),[t,n]);return Y.jsxs(Y.Fragment,{children:[Y.jsx(i,{node:e,language:o,code:l}),Y.jsx(o?r:Wn,{node:e,components:a,language:o??"unknown",code:l})]})};var mn={exports:{}};/*!
|
|
2
2
|
Copyright (c) 2018 Jed Watson.
|
|
3
3
|
Licensed under the MIT License (MIT), see
|
|
4
4
|
http://jedwatson.github.io/classnames
|
|
Binary file
|
package/webapp/dist/index.html
CHANGED
|
@@ -3,17 +3,37 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
6
|
-
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#
|
|
7
|
-
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#
|
|
6
|
+
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#fdfdfb" />
|
|
7
|
+
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#191c1a" />
|
|
8
8
|
<meta name="description" content="Always-on local console for your mono-agent fleet." />
|
|
9
|
+
<!--
|
|
10
|
+
Home-screen install: no browser chrome.
|
|
11
|
+
|
|
12
|
+
Deliberately NO `apple-mobile-web-app-title`. This document is served as a
|
|
13
|
+
static file to every host, and that meta OVERRIDES the manifest's
|
|
14
|
+
`short_name` on iOS -- which the service templates per host
|
|
15
|
+
(`short_name: identity.displayName`), so two installed consoles are
|
|
16
|
+
distinguishable on the same home screen. A constant here would name them
|
|
17
|
+
both "mono-agent". iOS 16.4+ takes the name from the manifest.
|
|
18
|
+
|
|
19
|
+
The status bar stays `default` rather than `black-translucent` on purpose:
|
|
20
|
+
content remains below the system-owned strip while the light/dark
|
|
21
|
+
`theme-color` pair requests the same color as the header. The layout keeps
|
|
22
|
+
`viewport-fit=cover` and protects each top edge with
|
|
23
|
+
`env(safe-area-inset-top)`; native glyph contrast and final strip painting
|
|
24
|
+
still depend on the installed iOS version and require device verification.
|
|
25
|
+
-->
|
|
26
|
+
<meta name="mobile-web-app-capable" content="yes" />
|
|
27
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
28
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
9
29
|
<link rel="manifest" href="/manifest.webmanifest" />
|
|
10
30
|
<link rel="icon" type="image/svg+xml" href="/icon.svg" />
|
|
11
31
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
12
32
|
<title>mono-agent</title>
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/assistant-ui-
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-
|
|
16
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
33
|
+
<script type="module" crossorigin src="/assets/index-CsSMjSgW.js"></script>
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/assistant-ui-pZmGxIp2.js">
|
|
35
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-Du5t10ja.js">
|
|
36
|
+
<link rel="stylesheet" crossorigin href="/assets/index-6uQ7TVQe.css">
|
|
17
37
|
</head>
|
|
18
38
|
<body>
|
|
19
39
|
<div id="root"></div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "mono-agent Console",
|
|
3
3
|
"short_name": "mono-agent",
|
|
4
4
|
"description": "Always-on local console for your mono-agent fleet.",
|
|
5
|
-
"theme_color": "#
|
|
5
|
+
"theme_color": "#191c1a",
|
|
6
6
|
"background_color": "#0f1110",
|
|
7
7
|
"display": "standalone",
|
|
8
8
|
"orientation": "any",
|
|
@@ -28,7 +28,9 @@ self.addEventListener("push", (event) => {
|
|
|
28
28
|
tag: boundedText(notification.tag, `mono-agent-${Date.now()}`),
|
|
29
29
|
silent: notification.silent === true,
|
|
30
30
|
icon: "/icon-192.png",
|
|
31
|
-
badge
|
|
31
|
+
// Android renders `badge` from the alpha channel alone, so it must be a
|
|
32
|
+
// transparent-background silhouette; the opaque icon flattens to a white square.
|
|
33
|
+
badge: "/badge-96.png",
|
|
32
34
|
data: {
|
|
33
35
|
schema: "mono-agent.web-push.v1",
|
|
34
36
|
...(typeof data.eventId === "string" ? { eventId: data.eventId } : {}),
|
package/webapp/dist/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
if(!self.define){let i
|
|
1
|
+
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise(i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()}).then(()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e}));self.define=(n,o)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(i[r])return;let a={};const d=e=>s(e,r),c={module:{uri:r},exports:a,require:d};i[r]=Promise.all(n.map(e=>c[e]||d(e))).then(e=>(o(...e),a))}}define(["./workbox-2fbc6a65"],function(e){"use strict";importScripts("notification-sw.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.precacheAndRoute([{url:"notification-sw.js",revision:"b4c1e0a7731dd4ee7e9fcacc236901d4"},{url:"index.html",revision:"6d494b6d6f563319aa087366805eaa46"},{url:"icon.svg",revision:"db1a07fe1426d32d63a1a59a1f6f8330"},{url:"icon-512.png",revision:"31bf7f13811a440fc8dd9210d68ccccf"},{url:"icon-192.png",revision:"91418a06d86fcc78cba9342525a3b4da"},{url:"favicon.ico",revision:"87df1b08ba57c777d8785542d8e61826"},{url:"badge-96.png",revision:"2192dfa69c429f5b859ab29ed8da1df4"},{url:"apple-touch-icon.png",revision:"651f3808d8ab9d44361aa2089ff514b5"},{url:"assets/workbox-window.prod.es5-BBnX5xw4.js",revision:null},{url:"assets/markdown-Du5t10ja.js",revision:null},{url:"assets/index-CsSMjSgW.js",revision:null},{url:"assets/index-6uQ7TVQe.css",revision:null},{url:"assets/assistant-ui-pZmGxIp2.js",revision:null},{url:"apple-touch-icon.png",revision:"651f3808d8ab9d44361aa2089ff514b5"},{url:"favicon.ico",revision:"87df1b08ba57c777d8785542d8e61826"},{url:"icon.svg",revision:"db1a07fe1426d32d63a1a59a1f6f8330"},{url:"notification-sw.js",revision:"b4c1e0a7731dd4ee7e9fcacc236901d4"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{denylist:[/^\/api\//,/^\/healthz$/]}))});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
define(["exports"],function(t){"use strict";try{self["workbox:core:7.4.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:7.4.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class o{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const a=()=>(c||(c=new o,c.addFetchListener(),c.addCacheListener()),c);function h(t,e,n){let o;if("string"==typeof t){const s=new URL(t,location.href);o=new i(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)o=new r(t,e,n);else if("function"==typeof t)o=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});o=t}return a().registerRoute(o),o}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter(t=>t&&t.length>0).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:7.4.0"]&&_()}catch(t){}function p(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class y{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class g{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let R;async function m(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=function(){if(void 0===R){const t=new Response("");if("body"in t)try{new Response(t.body),R=!0}catch(t){R=!1}R=!1}return R}()?i.body:await i.blob();return new Response(o,r)}function v(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class q{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const U=new Set;try{self["workbox:strategies:7.4.0"]&&_()}catch(t){}function L(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new q,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=L(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=L(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=L(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=v(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===v(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of U)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=L(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){for(;this.R.length;){const t=this.R.splice(0),e=(await Promise.allSettled(t)).find(t=>"rejected"===t.status);if(e)throw e.reason}}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class C{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class E extends C{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(E.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.P(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.P();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}P(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==E.copyRedirectedCacheableResponsesPlugin&&(n===E.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(E.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}E.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},E.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await m(t):t};class O{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.j=new Map,this.k=new Map,this.K=new Map,this.l=new E({cacheName:f(t),plugins:[...e,new g({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.T||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.T=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=p(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.j.has(i)&&this.j.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.j.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.K.has(t)&&this.K.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.K.set(t,n.integrity)}if(this.j.set(i,t),this.k.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return d(t,async()=>{const e=new y;this.strategy.plugins.push(e);for(const[e,s]of this.j){const n=this.K.get(s),i=this.k.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return d(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.j.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.j}getCachedURLs(){return[...this.j.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.j.get(e.href)}getIntegrityForCacheKey(t){return this.K.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let x;const N=()=>(x||(x=new O),x);class P extends i{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}t.NavigationRoute=class extends i{constructor(t,{allowlist:e=[/./],denylist:s=[]}={}){super(t=>this.W(t),t),this.M=e,this.S=s}W({url:t,request:e}){if(e&&"navigate"!==e.mode)return!1;const s=t.pathname+t.search;for(const t of this.S)if(t.test(s))return!1;return!!this.M.some(t=>t.test(s))}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",t=>{const e=f();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter(s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t);return await Promise.all(s.map(t=>self.caches.delete(t))),s})(e).then(t=>{}))})},t.clientsClaim=function(){self.addEventListener("activate",()=>self.clients.claim())},t.createHandlerBoundToURL=function(t){return N().createHandlerBoundToURL(t)},t.precacheAndRoute=function(t,e){!function(t){N().precache(t)}(t),function(t){const e=N();h(new P(e,t))}(e)},t.registerRoute=h});
|
|
1
|
+
define(["exports"],function(t){"use strict";try{self["workbox:core:7.4.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:7.4.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class o{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const a=()=>(c||(c=new o,c.addFetchListener(),c.addCacheListener()),c);function h(t,e,n){let o;if("string"==typeof t){const s=new URL(t,location.href);o=new i(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)o=new r(t,e,n);else if("function"==typeof t)o=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});o=t}return a().registerRoute(o),o}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter(t=>t&&t.length>0).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:7.4.0"]&&_()}catch(t){}function p(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class y{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class g{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let R;async function m(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=function(){if(void 0===R){const t=new Response("");if("body"in t)try{new Response(t.body),R=!0}catch(t){R=!1}R=!1}return R}()?i.body:await i.blob();return new Response(o,r)}function v(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class q{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const U=new Set;try{self["workbox:strategies:7.4.0"]&&_()}catch(t){}function L(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new q,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=L(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=L(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=L(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=v(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===v(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of U)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=L(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){for(;this.R.length;){const t=this.R.splice(0),e=(await Promise.allSettled(t)).find(t=>"rejected"===t.status);if(e)throw e.reason}}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class C{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class E extends C{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(E.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.P(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.P();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}P(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==E.copyRedirectedCacheableResponsesPlugin&&(n===E.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(E.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}E.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},E.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await m(t):t};class O{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.j=new Map,this.k=new Map,this.K=new Map,this.l=new E({cacheName:f(t),plugins:[...e,new g({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.T||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.T=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=p(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.j.has(i)&&this.j.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.j.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.K.has(t)&&this.K.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.K.set(t,n.integrity)}if(this.j.set(i,t),this.k.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return d(t,async()=>{const e=new y;this.strategy.plugins.push(e);for(const[e,s]of this.j){const n=this.K.get(s),i=this.k.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return d(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.j.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.j}getCachedURLs(){return[...this.j.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.j.get(e.href)}getIntegrityForCacheKey(t){return this.K.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let x;const N=()=>(x||(x=new O),x);class P extends i{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}t.NavigationRoute=class extends i{constructor(t,{allowlist:e=[/./],denylist:s=[]}={}){super(t=>this.W(t),t),this.M=e,this.S=s}W({url:t,request:e}){if(e&&"navigate"!==e.mode)return!1;const s=t.pathname+t.search;for(const t of this.S)if(t.test(s))return!1;return!!this.M.some(t=>t.test(s))}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",t=>{const e=f();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter(s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t);return await Promise.all(s.map(t=>self.caches.delete(t))),s})(e).then(t=>{}))})},t.createHandlerBoundToURL=function(t){return N().createHandlerBoundToURL(t)},t.precacheAndRoute=function(t,e){!function(t){N().precache(t)}(t),function(t){const e=N();h(new P(e,t))}(e)},t.registerRoute=h});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color-scheme:light dark;--app-bg: #eeefeb;--panel: #f7f7f4;--surface: #fdfdfb;--surface-raised: #ffffff;--surface-subtle: #f0f1ed;--surface-hover: #e9ebe6;--rail: #171a18;--rail-hover: #252a26;--rail-active: #2b332e;--rail-accent: #84cbb7;--rail-accent-glow: rgba(132, 203, 183, .18);--text: #191d1a;--text-soft: #565d58;--text-muted: #626a64;--line: #dfe2dc;--line-strong: #cfd4cc;--accent: #24725f;--accent-strong: #185b4c;--on-accent: #ffffff;--accent-soft: #dcece6;--accent-glow: rgba(36, 114, 95, .16);--brand-primary: #84cbb7;--brand-secondary: #e6b566;--brand-tail: #f0f3ee;--cat-4: #84528f;--danger: #a3423b;--danger-soft: #f4dfdc;--warning: #a46618;--success: #2f7a4d;--shadow-sm: 0 1px 2px rgba(22, 29, 25, .06), 0 3px 12px rgba(22, 29, 25, .04);--shadow-lg: 0 24px 80px rgba(13, 19, 15, .2), 0 4px 20px rgba(13, 19, 15, .1);--radius-sm: 8px;--radius-md: 12px;--radius-lg: 18px;--font-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}:root[data-console-theme=ocean]{--app-bg: #edf1f4;--panel: #f6f8fa;--rail: #111a21;--rail-hover: #1d2c37;--rail-active: #233845;--rail-accent: #72b5dc;--rail-accent-glow: rgba(114, 181, 220, .2);--accent: #266a91;--accent-strong: #1b5477;--accent-soft: #dcebf4;--accent-glow: rgba(38, 106, 145, .16);--brand-primary: #72b5dc;--brand-secondary: #80cec2}:root[data-console-theme=plum]{--app-bg: #f2eef3;--panel: #faf7fa;--rail: #1b151d;--rail-hover: #302536;--rail-active: #3a2b41;--rail-accent: #c18dcc;--rail-accent-glow: rgba(193, 141, 204, .2);--accent: #7b4c87;--accent-strong: #62396d;--accent-soft: #eadfed;--accent-glow: rgba(123, 76, 135, .16);--brand-primary: #c18dcc;--brand-secondary: #e3a0bd}:root[data-console-theme=terracotta]{--app-bg: #f4efec;--panel: #faf7f5;--rail: #201611;--rail-hover: #36241c;--rail-active: #432d23;--rail-accent: #df8e70;--rail-accent-glow: rgba(223, 142, 112, .2);--accent: #9b5037;--accent-strong: #7d3c28;--accent-soft: #f1e1da;--accent-glow: rgba(155, 80, 55, .16);--brand-primary: #df8e70;--brand-secondary: #e5bd69}@media(prefers-color-scheme:dark){:root{--app-bg: #0f1110;--panel: #141715;--surface: #191c1a;--surface-raised: #1d211e;--surface-subtle: #202420;--surface-hover: #272c28;--rail: #0b0d0c;--rail-hover: #202421;--rail-active: #273029;--text: #f0f2ed;--text-soft: #b5bbb5;--text-muted: #9aa39b;--line: #2a2f2b;--line-strong: #383f39;--accent: #68b8a2;--accent-strong: #8bd0bd;--on-accent: #0a1713;--accent-soft: #1d3a32;--accent-glow: rgba(104, 184, 162, .12);--cat-4: #c18dcc;--danger: #eb8d83;--danger-soft: #3b2523;--warning: #daa258;--success: #79c995;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .25), 0 3px 12px rgba(0, 0, 0, .14);--shadow-lg: 0 24px 90px rgba(0, 0, 0, .55), 0 4px 24px rgba(0, 0, 0, .3)}:root[data-console-theme=ocean]{--app-bg: #0d1115;--panel: #13191e;--rail: #091017;--rail-hover: #192733;--rail-active: #203442;--rail-accent: #72b5dc;--rail-accent-glow: rgba(114, 181, 220, .2);--accent: #72b5dc;--accent-strong: #94c9e8;--on-accent: #08151c;--accent-soft: #193548;--accent-glow: rgba(114, 181, 220, .13)}:root[data-console-theme=plum]{--app-bg: #120f14;--panel: #18141a;--rail: #0f0b11;--rail-hover: #2b2030;--rail-active: #38283f;--rail-accent: #c18dcc;--rail-accent-glow: rgba(193, 141, 204, .2);--accent: #c18dcc;--accent-strong: #d5a9dd;--on-accent: #1b0c1e;--accent-soft: #3a2640;--accent-glow: rgba(193, 141, 204, .13)}:root[data-console-theme=terracotta]{--app-bg: #130f0d;--panel: #191411;--rail: #100b09;--rail-hover: #2d1e18;--rail-active: #3b2720;--rail-accent: #df8e70;--rail-accent-glow: rgba(223, 142, 112, .2);--accent: #df8e70;--accent-strong: #efa98f;--on-accent: #22100a;--accent-soft: #432a21;--accent-glow: rgba(223, 142, 112, .13)}}*{box-sizing:border-box}html,body,#root{width:100%;min-width:320px;height:100%;margin:0;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{overflow:hidden;background:var(--app-bg);color:var(--text)}button,input,textarea,select{font:inherit;color:inherit}button{border:0}button,select{-webkit-tap-highlight-color:transparent}button:disabled,select:disabled{cursor:not-allowed;opacity:.45}::selection{color:var(--text);background:var(--accent-soft)}.sr-only,.sr-only-focusable:not(:focus){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.icon-button{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;flex:none;color:var(--text-soft);background:transparent;border-radius:10px;cursor:pointer}.icon-button:hover{color:var(--text);background:var(--surface-hover)}.primary-button{min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 16px;color:var(--on-accent);background:var(--accent-strong);border-radius:10px;font-weight:650;cursor:pointer;box-shadow:var(--shadow-sm)}.eyebrow{display:block;margin-bottom:5px;color:var(--text-muted);font-size:10px;font-weight:700;line-height:1;letter-spacing:.14em;text-transform:uppercase}.app-shell{width:100%;height:100dvh;display:grid;grid-template-columns:var(--agent-rail-width, 72px) 304px minmax(0,1fr);grid-template-rows:minmax(0,1fr);overflow:hidden;background:var(--surface)}.desktop-agent-rail,.desktop-thread-sidebar{min-width:0;height:100%}.desktop-agent-rail{position:relative;z-index:8}.mobile-agent-drawer,.mobile-thread-drawer,.drawer-scrim{display:none}.agent-rail{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;gap:13px;padding:max(16px,env(safe-area-inset-top)) 10px max(15px,env(safe-area-inset-bottom));color:#d8ded8;background:var(--rail);border-right:1px solid rgba(255,255,255,.04)}.rail-toggle,.rail-command,.rail-connection{align-self:center}.rail-brand{width:46px;height:42px;display:flex;align-items:center;justify-content:center;gap:10px;flex:none;margin-bottom:4px}.rail-brand-copy{display:none;overflow:hidden;color:#eef2ed;font-size:13px;font-weight:680;text-overflow:ellipsis;white-space:nowrap}.brand-mark{position:relative;width:28px;height:28px;display:inline-block}.brand-mark span{position:absolute;display:block;border-radius:999px;background:var(--brand-primary)}.brand-mark span:nth-child(1){width:9px;height:9px;top:2px;left:2px}.brand-mark span:nth-child(2){width:9px;height:9px;top:2px;right:2px;background:var(--brand-secondary)}.brand-mark span:nth-child(3){width:22px;height:9px;bottom:2px;left:3px;background:var(--brand-tail)}.agent-list{width:100%;min-height:0;flex:1;display:flex;flex-direction:column;align-items:center;gap:9px;padding-block-start:5px;overflow-y:auto;scrollbar-width:none}.agent-list::-webkit-scrollbar{display:none}.agent-item{position:relative;width:48px;display:flex;align-items:center;justify-content:center;flex:none}.agent-button{position:relative;width:48px;height:48px;display:grid;place-items:center;padding:0;color:#d5dbd5;background:transparent;border-radius:15px;cursor:pointer;transition:background .15s ease,transform .15s ease}.agent-button:hover{background:var(--rail-hover);transform:translateY(-1px)}.agent-button.is-active{background:var(--rail-active);box-shadow:inset 0 0 0 1px var(--rail-accent-glow)}.agent-button.is-active:before{content:"";position:absolute;left:-10px;width:3px;height:22px;border-radius:0 4px 4px 0;background:var(--rail-accent)}.agent-avatar-wrap{position:relative;width:34px;height:34px;display:grid;place-items:center;flex:none}.agent-avatar{font-size:12px;font-weight:760;letter-spacing:.02em}.agent-label{display:none;min-width:0;overflow:hidden;color:#e1e6e1;font-size:12px;font-weight:620;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.agent-status{position:absolute;right:4px;bottom:4px;width:9px;height:9px;border:2px solid var(--rail);border-radius:50%;background:#727972}.agent-status.is-online{background:#6bc495}.agent-status.is-degraded{background:#e3a756}.agent-pin{position:absolute;top:-5px;right:-5px;width:23px;height:23px;display:grid;place-items:center;padding:0;opacity:0;color:#98a099;background:#252a26;border:1px solid rgba(255,255,255,.08);border-radius:7px;cursor:pointer;transition:color .13s ease,opacity .13s ease,background .13s ease;z-index:2}.agent-item:hover .agent-pin,.agent-pin:focus-visible,.agent-pin.is-pinned{opacity:1}.agent-pin:hover,.agent-pin.is-pinned{color:#e6b566;background:#303630}.rail-offline-toggle{position:relative;width:44px;min-height:36px;display:flex;align-items:center;justify-content:center;gap:8px;flex:none;margin-top:3px;padding:0;color:#78817a;background:transparent;border:1px solid rgba(255,255,255,.06);border-radius:10px;cursor:pointer;font-size:10px}.rail-offline-toggle:hover,.rail-offline-toggle.is-active{color:#d8ded8;background:var(--rail-hover)}.rail-offline-copy{display:none}.rail-offline-count{position:absolute;top:-5px;right:-5px;min-width:17px;height:17px;display:grid;place-items:center;padding:0 4px;color:#1d231f;background:#d2d9d2;border:2px solid var(--rail);border-radius:999px;font-family:var(--font-mono);font-size:8px;font-weight:750}.rail-toggle{width:42px;height:36px;display:flex;align-items:center;justify-content:center;gap:8px;padding:0;color:#78817a;background:transparent;border-radius:10px;cursor:pointer;font-size:10px}.rail-toggle:hover{color:#eef2ed;background:var(--rail-hover)}.rail-toggle-copy{display:none}.agent-rail.is-expanded .rail-toggle>svg{transform:rotate(180deg)}.agent-rail.is-expanded{align-items:stretch}.agent-rail.is-expanded .rail-brand{width:100%;justify-content:flex-start;padding:0 9px}.agent-rail.is-expanded .rail-brand-copy{display:block}.agent-rail.is-expanded .agent-list{align-items:stretch}.agent-rail.is-expanded .agent-item{width:100%;gap:4px}.agent-rail.is-expanded .agent-button{width:auto;height:auto;min-height:48px;min-width:0;flex:1;display:flex;grid-template:none;justify-content:flex-start;gap:10px;padding:7px 9px}.agent-rail.is-expanded .agent-button.is-active:before{left:-10px}.agent-rail.is-expanded .agent-label{display:block;flex:1;overflow-wrap:anywhere;text-align:left;text-overflow:clip;white-space:normal}.agent-rail.is-expanded .agent-pin{position:static;width:31px;height:31px;flex:none;border-color:transparent;background:transparent}.agent-rail.is-expanded .agent-item:hover .agent-pin,.agent-rail.is-expanded .agent-pin:focus-visible,.agent-rail.is-expanded .agent-pin.is-pinned{opacity:1}.agent-rail.is-expanded .agent-pin:hover,.agent-rail.is-expanded .agent-pin.is-pinned{background:var(--rail-hover)}.agent-rail.is-expanded .rail-offline-toggle,.agent-rail.is-expanded .rail-toggle{width:100%;justify-content:flex-start;padding:0 10px}.agent-rail.is-expanded .rail-offline-copy,.agent-rail.is-expanded .rail-toggle-copy{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(hover:none),(pointer:coarse){.agent-pin{opacity:1}}.rail-empty{width:44px;height:44px;display:grid;place-items:center;color:#687069;border:1px dashed #333a35;border-radius:13px}.rail-command{width:42px;height:42px;display:grid;place-items:center;color:#8d978f;background:transparent;border-radius:11px;cursor:pointer}.rail-command:hover{color:#eef2ed;background:var(--rail-hover)}.rail-connection{width:7px;height:7px;flex:none;border-radius:50%;background:#626963}.rail-connection.is-live{background:#66bf91;box-shadow:0 0 0 4px #66bf9117}.rail-connection.is-connecting,.rail-connection.is-reconnecting{background:#dba65b;animation:pulse 1.4s ease infinite}.mobile-agent-picker{width:100%;height:100%;display:flex;flex-direction:column;color:var(--text);background:var(--panel);box-shadow:var(--shadow-lg)}.mobile-agent-picker>header{min-height:82px;display:flex;align-items:center;gap:14px;padding:max(17px,env(safe-area-inset-top)) 18px 12px;border-bottom:1px solid var(--line)}.mobile-agent-picker>header .brand-mark{flex:none;transform:scale(.86)}.mobile-agent-picker h2{margin:0;font-size:18px}.mobile-agent-list{min-height:0;flex:1;padding:10px;overflow-y:auto}.mobile-agent-row{width:100%;display:flex;align-items:center;gap:4px;border-radius:11px}.mobile-agent-select{position:relative;min-width:0;min-height:62px;display:flex;align-items:center;gap:12px;flex:1;padding:8px 10px;color:var(--text);background:transparent;border-radius:11px;cursor:pointer;text-align:left}.mobile-agent-select:hover,.mobile-agent-select.is-active{background:var(--surface-raised);box-shadow:inset 0 0 0 1px var(--line)}.mobile-agent-avatar{width:40px;height:40px;display:grid;place-items:center;flex:none;color:#dfe5df;background:var(--rail);border-radius:12px;font-size:11px;font-weight:750}.mobile-agent-copy{min-width:0;flex:1;display:flex;flex-direction:column;gap:4px}.mobile-agent-copy strong{overflow-wrap:anywhere;font-size:13px;line-height:1.35}.mobile-agent-copy small{color:var(--text-muted);font-size:10px;text-transform:capitalize}.mobile-agent-list .agent-status{position:static;width:8px;height:8px;border:0}.mobile-agent-select>svg{flex:none;color:var(--accent)}.mobile-agent-pin{width:40px;height:40px;display:grid;place-items:center;flex:none;padding:0;color:var(--text-muted);background:transparent;border-radius:10px;cursor:pointer}.mobile-agent-pin:hover,.mobile-agent-pin.is-pinned{color:#b77b21;background:var(--surface-hover)}.mobile-offline-toggle{width:100%;min-height:42px;display:flex;align-items:center;justify-content:center;gap:8px;margin-top:8px;padding:0 12px;color:var(--text-muted);background:transparent;border:1px solid var(--line);border-radius:10px;cursor:pointer;font-size:11px}.mobile-offline-toggle:hover,.mobile-offline-toggle.is-active{color:var(--text);background:var(--surface-subtle)}.mobile-agent-list p{padding:30px 18px;color:var(--text-muted);text-align:center;font-size:12px;line-height:1.5}.thread-sidebar{width:100%;height:100%;display:flex;flex-direction:column;min-width:0;background:var(--panel);border-right:1px solid var(--line)}.sidebar-header{min-height:85px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:max(18px,env(safe-area-inset-top)) 17px 13px}.sidebar-header h1{max-width:205px;margin:0;overflow:hidden;color:var(--text);font-size:17px;font-weight:680;line-height:1.2;text-overflow:ellipsis;white-space:nowrap}.new-thread-button{width:38px;height:38px;display:grid;place-items:center;flex:none;color:var(--text-soft);background:var(--surface-raised);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-sm);cursor:pointer}.new-thread-button:hover{color:var(--accent);border-color:var(--line-strong)}.thread-search{height:38px;display:flex;align-items:center;gap:8px;margin:0 14px 10px;padding:0 10px;color:var(--text-muted);background:var(--surface-subtle);border:1px solid transparent;border-radius:9px}.thread-search:focus-within{color:var(--accent);background:var(--surface-raised);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.thread-search input{min-width:0;height:100%;flex:1;padding:0;color:var(--text);background:transparent;border:0;outline:0;font-size:13px}.thread-search input::placeholder{color:var(--text-muted)}.thread-search input::-webkit-search-cancel-button{display:none}.thread-search button{width:26px;height:26px;display:grid;place-items:center;padding:0;color:var(--text-muted);background:transparent;border-radius:7px;cursor:pointer}.thread-list{min-height:0;flex:1}.thread-list-scroll{height:100%;padding:2px 8px 12px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}.thread-item{position:relative;display:flex;align-items:stretch;min-height:68px;margin:2px 0;border-radius:10px;transition:background .13s ease}.thread-item:hover{background:var(--surface-hover)}.thread-item.is-active{background:var(--surface-raised);box-shadow:var(--shadow-sm),inset 0 0 0 1px var(--line)}.thread-item.is-active:before{content:"";position:absolute;left:0;top:18px;width:3px;height:30px;border-radius:0 4px 4px 0;background:var(--accent)}.thread-trigger{min-width:0;flex:1;display:flex;flex-direction:column;justify-content:center;gap:7px;padding:10px 8px 10px 12px;text-align:left;background:transparent;border-radius:10px;cursor:pointer}.thread-title-line{min-width:0;display:flex;align-items:baseline;gap:7px}.thread-title{min-width:0;flex:1;overflow:hidden;color:var(--text);font-size:13px;font-weight:620;text-overflow:ellipsis;white-space:nowrap}.trigger-badge{flex:none;padding:2px 5px;color:var(--accent);background:var(--accent-soft);border:1px solid color-mix(in srgb,var(--accent) 30%,transparent);border-radius:5px;font-size:8px;font-weight:760;line-height:1.1;text-transform:uppercase;letter-spacing:.07em}.thread-title-line time{flex:none;color:var(--text-muted);font-family:var(--font-mono);font-size:9px}.thread-preview{min-width:0;display:flex;align-items:center;gap:6px;overflow:hidden;color:var(--text-muted);font-size:11.5px;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.thread-preview-text{min-width:0;flex:1;overflow:hidden;font:inherit;line-height:inherit;text-overflow:ellipsis;white-space:nowrap}.thread-running{width:6px;height:6px;flex:none;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);animation:pulse 1.4s ease infinite}.thread-action{width:34px;display:grid;place-items:center;align-self:center;height:34px;margin-right:5px;padding:0;opacity:0;color:var(--text-muted);background:transparent;border-radius:8px;cursor:pointer}.thread-item:hover .thread-action,.thread-action:focus-visible{opacity:1}.thread-action:hover{color:var(--text);background:var(--surface-subtle)}.thread-search-results{display:flex;flex-direction:column;gap:4px}.thread-search-group{margin:10px 4px 2px;color:var(--text-muted);font-size:9px;font-weight:750;letter-spacing:.1em;text-transform:uppercase}.thread-search-hit{min-height:68px;display:flex;flex-direction:column;justify-content:center;gap:7px;width:100%;margin:2px 0;padding:10px 12px;color:var(--text);background:transparent;border-radius:10px;cursor:pointer;text-align:left}.thread-search-hit:hover{background:var(--surface-hover)}.thread-search-hit.is-active{background:var(--surface-raised);box-shadow:var(--shadow-sm),inset 0 0 0 1px var(--line)}.thread-search-hit mark{padding:0 1px;color:var(--accent);background:var(--accent-soft);border-radius:3px;font-weight:650}.thread-search-count{flex:none;color:var(--text-muted);font-family:var(--font-mono);font-size:8.5px}.thread-search-truncated{margin:10px 6px 0;color:var(--text-muted);font-size:10.5px;line-height:1.4}.thread-list-empty{min-height:180px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:24px;color:var(--text-muted);text-align:center;font-size:12px}.archive-toggle{min-height:49px;display:flex;align-items:center;gap:9px;margin:0 10px max(8px,env(safe-area-inset-bottom));padding:0 11px;color:var(--text-muted);background:transparent;border-top:1px solid var(--line);cursor:pointer;font-size:12px;text-align:left}.archive-toggle:hover,.archive-toggle.is-active{color:var(--text)}.archive-count{min-width:16px;margin-left:auto;color:var(--text-muted);font-family:var(--font-mono);font-size:10px;text-align:right}.chat-panel{position:relative;min-width:0;height:100%;display:flex;flex-direction:column;overflow:hidden;background:var(--surface)}.chat-header{min-height:64px;display:flex;align-items:center;gap:15px;padding:max(10px,env(safe-area-inset-top)) max(17px,env(safe-area-inset-right)) 10px max(17px,env(safe-area-inset-left));background:color-mix(in srgb,var(--surface) 94%,transparent);border-bottom:1px solid var(--line);z-index:5}.mobile-navigation{display:none}.chat-title-block{min-width:0;flex:1;display:flex;align-items:center;gap:10px}.conversation-title-group{min-width:0;max-width:min(62vw,650px);display:flex;align-items:center;gap:7px}.conversation-title{min-width:0;max-width:min(52vw,560px);overflow:hidden;padding:3px 5px;color:var(--text);background:transparent;border-radius:6px;font-size:14px;font-weight:650;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text}.trigger-badge-header{padding:3px 6px;font-size:8.5px}.title-input{min-width:180px;max-width:min(52vw,560px);height:34px;padding:0 8px;color:var(--text);background:var(--surface-subtle);border:1px solid var(--accent);border-radius:7px;outline:0;font-size:14px;font-weight:650}.chat-status{display:inline-flex;align-items:center;gap:5px;flex:none;color:var(--text-muted);font-size:10px;font-weight:650;text-transform:uppercase;letter-spacing:.07em}.chat-status i{width:6px;height:6px;border-radius:50%;background:var(--text-muted)}.chat-status.is-ready i{background:var(--accent)}.chat-status.is-working i{background:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);animation:pulse 1.2s ease infinite}.chat-status.is-failed,.chat-status.is-offline,.chat-status.is-browser{color:var(--danger)}.chat-status.is-failed i,.chat-status.is-offline i,.chat-status.is-browser i{background:var(--danger)}.chat-status.is-reconnecting,.chat-status.is-degraded{color:var(--warning)}.chat-status.is-reconnecting i,.chat-status.is-degraded i{background:var(--warning);animation:pulse 1.4s ease infinite}.chat-header-actions{display:flex;align-items:center;gap:8px;flex:none}.cron-channel-header{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:7px 14px;padding:10px max(17px,env(safe-area-inset-right)) 10px max(17px,env(safe-area-inset-left));background:var(--surface-subtle);border-bottom:1px solid var(--line);z-index:4}.cron-channel-facts{min-width:0;display:grid;grid-template-columns:repeat(6,minmax(86px,auto));gap:8px 18px;margin:0}.cron-channel-facts>div{min-width:0;display:flex;flex-direction:column;gap:2px}.cron-channel-facts dt{color:var(--text-muted);font-size:8px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.cron-channel-facts dd{min-width:0;margin:0;overflow:hidden;color:var(--text-soft);font-size:10.5px;text-overflow:ellipsis;white-space:nowrap}.cron-channel-facts dd>small{display:block;overflow:hidden;color:var(--text-muted);font-size:8.5px;text-overflow:ellipsis}.cron-channel-facts code,.cron-session-link code{font-family:var(--font-mono);font-size:9.5px}.cron-channel-facts a{color:var(--accent);text-decoration:none}.cron-channel-facts a:hover{text-decoration:underline}.cron-health{text-transform:capitalize}.cron-health.is-healthy{color:var(--accent)}.cron-health.is-warning,.cron-health.is-unknown{color:var(--warning)}.cron-health.is-unhealthy{color:var(--danger)}.cron-channel-actions{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:6px;margin-left:auto}.cron-channel-actions>button,.cron-dialog footer>button{min-height:32px;padding:0 10px;color:var(--text-soft);background:var(--surface-raised);border:1px solid var(--line);border-radius:8px;cursor:pointer;font-size:10px;font-weight:650}.cron-channel-actions>button:hover:not(:disabled),.cron-dialog footer>button:hover:not(:disabled){color:var(--text);border-color:var(--line-strong)}.cron-channel-actions>.cron-action-primary,.cron-dialog footer>.cron-action-primary{display:inline-flex;align-items:center;justify-content:center;gap:5px;color:var(--on-accent);background:var(--accent-strong);border-color:transparent}.cron-session-link{min-width:0;max-width:180px;overflow:hidden;color:var(--text-muted);font-size:9px;text-overflow:ellipsis;white-space:nowrap}.cron-refreshing{position:absolute;right:18px;bottom:1px;color:var(--text-muted);font-size:8px}.cron-action-error{margin:0;color:var(--danger);font-size:10px}.cron-unavailable-reason{flex-basis:100%;margin:0;color:var(--text-muted);font-size:9px;line-height:1.35}.cron-unavailable-reason:focus-visible{outline:1px solid var(--accent);outline-offset:2px;border-radius:2px}.cron-channel-header>.cron-action-error{position:absolute;right:18px;bottom:0}.cron-dialog{width:min(100%,560px);max-height:min(78dvh,720px);display:flex;flex-direction:column;gap:15px;overflow:hidden;padding:18px;color:var(--text);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:16px;box-shadow:var(--shadow-lg);outline:none}.cron-dialog>header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.cron-dialog h2{margin:3px 0 0;font-size:19px;letter-spacing:-.02em}.cron-dialog>p{margin:0;color:var(--text-soft);font-size:13px;line-height:1.6}.cron-dialog>small{color:var(--text-muted);font-size:10px}.cron-dialog>footer{display:flex;justify-content:flex-end;gap:8px;margin-top:auto}.cron-config-fields{min-height:0;display:grid;gap:8px;margin:0;padding-right:4px;overflow-y:auto}.cron-config-fields>div{display:grid;grid-template-columns:minmax(110px,.7fr) minmax(0,1.5fr) auto;align-items:center;gap:8px;padding:9px 10px;background:var(--surface-subtle);border:1px solid var(--line);border-radius:8px}.cron-config-fields dt{color:var(--text-soft);font-size:11px}.cron-config-fields dd{min-width:0;margin:0;overflow:auto}.cron-config-fields code{font-family:var(--font-mono);font-size:10px;white-space:pre-wrap;overflow-wrap:anywhere}.cron-config-fields small{color:var(--text-muted);font-size:8px}.model-controls{min-width:0;display:flex;align-items:center;gap:6px}.model-selector__trigger{max-width:min(270px,30vw);height:36px;display:inline-flex;align-items:center;justify-content:space-between;gap:8px;padding:0 10px;color:var(--text-soft);background:var(--surface-subtle);border:1px solid var(--line);border-radius:9px;cursor:pointer;text-align:left}.model-selector__trigger:hover:not(:disabled),.model-selector__trigger[aria-expanded=true]{color:var(--text);background:var(--surface-hover);border-color:var(--line-strong)}.model-selector__trigger>svg{flex:none;color:var(--text-muted)}.model-selector__value{min-width:0;display:flex;align-items:center;gap:7px}.model-selector__model-name{min-width:0;overflow:hidden;font-size:10.5px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.model-selector__effort-value{flex:none;padding:2px 5px;color:var(--accent);background:var(--accent-soft);border-radius:5px;font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.model-selector__badge{flex:none;padding:2px 5px;color:var(--text-muted);background:var(--surface-subtle);border-radius:5px;font-size:7.5px;font-weight:750;letter-spacing:.05em;text-transform:uppercase}.model-selector__badge.is-custom{color:var(--warning);background:color-mix(in srgb,var(--warning) 12%,transparent)}.model-selector__item-default{flex:none;padding:2px 5px;color:var(--text-muted);background:var(--surface-subtle);border-radius:4px;font-size:8px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}.model-selector__reset{padding:4px 8px 8px;border-top:1px solid var(--line)}.model-selector__reset button{width:100%;min-height:34px;display:flex;align-items:center;justify-content:center;gap:6px;color:var(--accent);background:var(--accent-soft);border-radius:8px;cursor:pointer;font-size:11.5px;font-weight:650}.model-selector__backdrop{display:none}.model-selector__positioner{z-index:112}.model-selector__content{width:min(370px,calc(100vw - 24px));max-height:min(70dvh,620px);overflow:hidden;color:var(--text);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:14px;box-shadow:var(--shadow-lg);transform-origin:var(--transform-origin)}.model-selector__command{min-height:0;display:flex;flex-direction:column;background:transparent}.model-selector__search-wrapper{min-height:47px;display:flex;align-items:center;gap:9px;padding:0 12px;color:var(--text-muted);border-bottom:1px solid var(--line)}.model-selector__search{min-width:0;height:46px;flex:1;padding:0;color:var(--text);background:transparent;border:0;outline:0;font-size:13px}.model-selector__search::placeholder{color:var(--text-muted)}.model-selector__list{max-height:min(43dvh,360px);padding:6px;overflow-y:auto;overscroll-behavior:contain}.model-selector__group{display:flex;flex-direction:column;gap:2px}.model-selector__item{min-height:52px;display:flex;align-items:center;gap:10px;padding:7px 9px;color:var(--text-soft);border-radius:9px;cursor:pointer;outline:0}.model-selector__item[data-selected=true],.model-selector__item:hover{color:var(--text);background:var(--surface-subtle)}.model-selector__item-copy{min-width:0;display:flex;flex:1;flex-direction:column;gap:3px}.model-selector__item-name{overflow:hidden;font-size:12px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.model-selector__item-description{overflow:hidden;color:var(--text-muted);font-family:var(--font-mono);font-size:9px;text-overflow:ellipsis;white-space:nowrap}.model-selector__selected-indicator{width:25px;height:25px;display:grid;place-items:center;flex:none;color:var(--accent);background:var(--accent-soft);border-radius:7px}.model-selector__empty{padding:30px 18px;color:var(--text-muted);text-align:center;font-size:12px}.model-selector__effort{display:grid;gap:8px;padding:10px 12px 12px;background:var(--surface-subtle);border-top:1px solid var(--line)}.model-selector__effort-label{color:var(--text-muted);font-size:9px;font-weight:750;text-transform:uppercase;letter-spacing:.09em}.model-selector__effort-options{display:flex;flex-wrap:wrap;gap:5px}.model-selector__effort-option{min-width:44px;min-height:31px;display:inline-flex;align-items:center;justify-content:center;padding:0 9px;color:var(--text-soft);background:var(--surface-raised);border:1px solid var(--line);border-radius:8px;cursor:pointer;font-size:10px;font-weight:650}.model-selector__effort-option:hover{border-color:var(--line-strong)}.model-selector__effort-option[data-checked]{color:var(--on-accent);background:var(--accent-strong);border-color:var(--accent-strong)}.context-display-trigger{height:32px;display:inline-flex;align-items:center;gap:5px;padding:0 7px;color:var(--text-muted);background:transparent;border-radius:8px;cursor:pointer;font-family:var(--font-mono);font-size:9px;white-space:nowrap}.context-display-trigger:hover,.context-display-trigger[aria-expanded=true]{color:var(--text);background:var(--surface-subtle)}.context-display-icon{color:var(--accent)}.context-display-trigger-percent{color:var(--accent);font-weight:700}.context-display-trigger[data-state=updating] .context-display-trigger-percent{color:var(--accent)}.context-display-trigger[data-state=awaiting_measurement] .context-display-trigger-percent{color:var(--warning)}.context-display-trigger[data-state=last_measured] .context-display-trigger-percent,.context-display-trigger[data-state=unavailable] .context-display-trigger-percent{color:var(--text-soft)}.context-display-positioner{z-index:111}.context-display-popover{width:min(300px,calc(100vw - 24px));padding:14px;color:var(--text);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:13px;box-shadow:var(--shadow-lg)}.context-display-header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 12px}.context-display-title{margin:0;font-size:12px;font-weight:720}.context-display-status{color:var(--text-soft);font-family:var(--font-mono);font-size:8px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.context-display-status[data-state=updating]{color:var(--accent)}.context-display-status[data-state=awaiting_measurement]{color:var(--warning)}.context-display-unavailable{margin:0 0 12px;color:var(--text-muted);font-size:10px;line-height:1.5}.context-display-state-note{margin:-2px 0 10px;color:var(--text-muted);font-size:10px;line-height:1.5}.context-display-model{display:grid;gap:3px;margin:0 0 11px;color:var(--text-muted);font-size:9px}.context-display-model code{overflow-wrap:anywhere;color:var(--text-soft);font-family:var(--font-mono);font-size:9px}.context-display-section+.context-display-section,.context-display-cost-breakdown{margin-top:14px}.context-display-section-title{margin:0 0 8px;color:var(--text-soft);font-size:10px;font-weight:720}.context-display-window{display:grid;gap:7px;margin-bottom:12px}.context-display-window-summary{display:flex;justify-content:space-between;gap:12px;color:var(--text-muted);font-size:10px}.context-display-percent{color:var(--accent);font-family:var(--font-mono);font-weight:700}.context-display-progress{height:5px;overflow:hidden;background:var(--surface-subtle);border-radius:999px}.context-display-progress-value{height:100%;display:block;background:var(--accent);border-radius:inherit}.context-display-breakdown{display:grid;gap:6px;margin:0}.context-display-breakdown-row{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--text-muted);font-size:10px}.context-display-breakdown-row dt,.context-display-breakdown-row dd{margin:0}.context-display-breakdown-row dd{color:var(--text-soft);font-family:var(--font-mono)}.context-display-breakdown-total,.context-display-breakdown-cost{padding-top:6px;color:var(--text);border-top:1px solid var(--line);font-weight:700}.header-archive{width:36px;height:36px}.header-delete{width:36px;height:36px;color:var(--danger)}.header-notifications{width:36px;height:36px}.header-notifications.is-enabled{color:var(--accent);background:var(--accent-soft)}.header-notifications.is-degraded{color:var(--warning);background:color-mix(in srgb,var(--warning) 12%,transparent)}.process-job-card{border:1px solid var(--border);border-radius:12px;padding:12px 14px;background:var(--surface-raised, var(--surface));max-width:720px}.process-job-header{display:flex;align-items:center;gap:8px}.process-job-header strong{flex:1}.process-job-state{font-size:12px;text-transform:capitalize;color:var(--muted)}.process-job-state-dot{width:9px;height:9px;border-radius:50%;background:var(--warning);box-shadow:0 0 0 3px color-mix(in srgb,var(--warning) 15%,transparent)}.process-job-card.is-succeeded .process-job-state-dot{background:var(--success, #24804a);box-shadow:0 0 0 3px color-mix(in srgb,var(--success, #24804a) 15%,transparent)}.process-job-card:is(.is-failed,.is-timed_out,.is-spawn_failed,.is-interrupted) .process-job-state-dot{background:var(--danger, #b42318);box-shadow:0 0 0 3px color-mix(in srgb,var(--danger, #b42318) 15%,transparent)}.process-job-summary{margin:10px 0;overflow-wrap:anywhere}.process-job-facts{display:flex;flex-wrap:wrap;gap:8px 18px;margin:0;font-size:12px;color:var(--muted)}.process-job-facts div{display:flex;gap:5px}.process-job-facts dt{font-weight:600}.process-job-facts dd{margin:0}.process-job-output{margin-top:10px}.process-job-output summary{cursor:pointer;font-size:13px}.process-job-output pre{max-height:320px;overflow:auto;padding:10px;border-radius:8px;background:var(--surface-sunken, color-mix(in srgb, currentColor 5%, transparent));white-space:pre-wrap;overflow-wrap:anywhere}.process-job-output ul{margin:8px 0 0;padding-left:20px;overflow-wrap:anywhere}.process-job-error{color:var(--danger, #b42318);font-size:13px}.process-job-response{margin:12px 0 0;padding-top:10px;border-top:1px solid var(--border);white-space:pre-wrap}.connection-banner{min-height:34px;display:flex;align-items:center;justify-content:center;gap:8px;padding:7px 16px;color:var(--warning);background:color-mix(in srgb,var(--warning) 9%,var(--surface));border-bottom:1px solid color-mix(in srgb,var(--warning) 25%,var(--line));font-size:11px;text-align:center;z-index:4}.connection-pulse{width:6px;height:6px;flex:none;border-radius:50%;background:currentColor;animation:pulse 1.5s ease infinite}.thread-root{position:relative;min-height:0;display:flex;flex:1 1 0;flex-direction:column;overflow:hidden}.thread-viewport{width:100%;min-height:0;flex:1;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}.message-column{--column-padding: 32px;width:min(100%,880px);min-height:calc(100% - 160px);margin:0 auto;padding:38px var(--column-padding) 20px}.thread-footer{position:sticky;bottom:0;width:100%;padding:28px max(24px,env(safe-area-inset-right)) max(18px,env(safe-area-inset-bottom)) max(24px,env(safe-area-inset-left));background:linear-gradient(to bottom,transparent 0,color-mix(in srgb,var(--surface) 94%,transparent) 28px,var(--surface) 70%);z-index:3}.scroll-bottom{position:sticky;left:50%;bottom:143px;width:36px;height:36px;display:grid;place-items:center;margin-left:-18px;color:var(--text-soft);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:50%;box-shadow:var(--shadow-sm);cursor:pointer;z-index:4}.detail-loading{position:absolute;inset:64px 0 0;display:grid;place-items:center;pointer-events:none;background:color-mix(in srgb,var(--surface) 74%,transparent);z-index:4}.detail-loading span{width:22px;height:22px;border:2px solid var(--line-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.message{position:relative;width:100%;margin-bottom:28px;user-select:none}.message-user{display:flex;flex-direction:column;align-items:flex-end}.message-user-content{max-width:min(78%,650px);padding:11px 15px;color:var(--text);background:var(--surface-subtle);border:1px solid var(--line);border-radius:16px 16px 4px}.live-input-status{margin:5px 3px 0;color:var(--text-muted);font-size:9.5px;letter-spacing:.01em}.live-input-status.is-applied{color:var(--accent)}.live-input-status.is-cancelled{color:var(--danger)}.assistant-content{min-width:0;container-type:inline-size;container-name:assistant}.message-system{margin:18px auto;padding:8px 12px;color:var(--text-muted);border-left:2px solid var(--line-strong);font-size:12px}.markdown{color:var(--text);font-size:14px;line-height:1.68;overflow-wrap:anywhere;user-select:text}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p,.markdown ul,.markdown ol,.markdown blockquote,.markdown pre{margin:0 0 .85em}.markdown ul,.markdown ol{padding-left:1.45em}.markdown li+li{margin-top:.3em}.markdown a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:3px}.markdown blockquote{padding-left:13px;color:var(--text-soft);border-left:2px solid var(--line-strong)}.markdown code{padding:.13em .35em;background:var(--surface-subtle);border:1px solid var(--line);border-radius:5px;font-family:var(--font-mono);font-size:.88em}.markdown pre{max-width:100%;padding:13px 15px;overflow-x:auto;color:var(--text);background:var(--rail);border:1px solid var(--line);border-radius:10px}.markdown pre code{padding:0;color:#e8eee8;background:transparent;border:0}.markdown-table{max-width:100%;margin:0 0 .85em;overflow-x:auto;overscroll-behavior-x:contain;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm)}.markdown-table:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.markdown table{width:100%;min-width:max-content;border-collapse:collapse;overflow-wrap:normal;font-size:12px}.markdown th,.markdown td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}.markdown thead th{color:var(--text-soft);background:var(--surface-subtle);border-bottom-color:var(--line-strong);font-weight:650;white-space:nowrap}.markdown tbody tr:nth-child(2n){background:color-mix(in srgb,var(--surface-hover) 55%,transparent)}.markdown tbody tr:last-child>*{border-bottom:0}.markdown del{color:var(--text-muted);text-decoration-thickness:1px}.markdown .contains-task-list{padding-left:0;list-style:none}.markdown .contains-task-list .contains-task-list{padding-left:1.2em}.markdown .task-list-item input[type=checkbox]{margin:0 .45em 0 0;vertical-align:-.08em;accent-color:var(--accent)}.markdown .footnotes{margin-top:1.3em;padding-top:.9em;color:var(--text-soft);border-top:1px solid var(--line);font-size:12px}.markdown .footnotes p{margin-bottom:.35em}.markdown [data-footnote-ref],.markdown .data-footnote-backref{text-decoration:none}.message-quote{max-width:100%;display:flex;gap:8px;margin:0 0 9px;padding:8px 10px;overflow:hidden;color:var(--text-muted);background:color-mix(in srgb,var(--surface) 68%,transparent);border-left:2px solid var(--accent);border-radius:7px;font-size:11px;line-height:1.45}.message-quote svg{flex:none;margin-top:1px;color:var(--accent)}.message-quote span{display:-webkit-box;overflow:hidden;overflow-wrap:anywhere;white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:4}.selection-toolbar{display:flex;padding:4px;color:#f8faf6;background:#242a26;border:1px solid rgba(255,255,255,.12);border-radius:9px;box-shadow:var(--shadow-lg)}.selection-toolbar-quote{height:30px;display:inline-flex;align-items:center;gap:6px;padding:0 9px;color:inherit;background:transparent;border-radius:6px;cursor:pointer;font-size:11px;font-weight:650}.selection-toolbar-quote:hover{background:#ffffff17}.message-actions{min-height:26px;display:flex;gap:4px;margin-top:5px;opacity:0;pointer-events:none;transition:opacity .1s ease}.message:hover .message-actions,.message:focus-within .message-actions,.message-actions.is-persistent{opacity:1;pointer-events:auto}.message-user .message-actions{justify-content:flex-end}.message-action{height:27px;display:inline-flex;align-items:center;gap:5px;padding:0 7px;color:var(--text-muted);background:transparent;border-radius:7px;cursor:pointer;font-size:10px}.message-action:hover{color:var(--text);background:var(--surface-subtle)}.message-action.is-success{color:var(--accent)}.message-action.is-error{color:var(--danger)}@media(hover:none),(pointer:coarse){.message-actions{opacity:1;pointer-events:auto}}.thinking-indicator{height:24px;display:inline-flex;align-items:center;gap:4px}.thinking-indicator i{width:5px;height:5px;border-radius:50%;background:var(--text-muted);animation:bounce 1.1s ease-in-out infinite}.thinking-indicator i:nth-child(2){animation-delay:.12s}.thinking-indicator i:nth-child(3){animation-delay:.24s}.message-error{display:flex;flex-direction:column;gap:3px;margin:10px 0;padding:10px 12px;color:var(--danger);background:var(--danger-soft);border:1px solid color-mix(in srgb,var(--danger) 25%,transparent);border-radius:9px;font-size:12px}.message-error strong{font-size:10px;letter-spacing:.06em;text-transform:uppercase}.reply-attachment,.mcp-app{margin:12px 0;color:var(--text-soft);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:11px;box-shadow:var(--shadow-sm)}.reply-attachment{min-height:52px;display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:8px 10px}.reply-part-icon{width:30px;height:30px;display:grid;place-items:center;flex:none;color:var(--accent);background:var(--accent-soft);border-radius:8px}.reply-part-copy{min-width:0;display:flex;flex:1;flex-direction:column;gap:2px}.reply-part-copy strong{overflow:hidden;color:var(--text);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.reply-part-copy>span{overflow:hidden;color:var(--text-muted);font-size:10px;line-height:1.4;text-overflow:ellipsis;white-space:nowrap}.reply-part-action{min-height:34px;display:inline-flex;align-items:center;justify-content:center;flex:none;padding:0 10px;color:var(--accent);background:var(--accent-soft);border:1px solid color-mix(in srgb,var(--accent) 24%,var(--line));border-radius:8px;cursor:pointer;font-size:10px;font-weight:700;text-decoration:none}.reply-part-action:hover{color:var(--on-accent);background:var(--accent-strong)}.reply-part-action:disabled{opacity:.58;cursor:wait}.reply-part-action:focus-visible,.mcp-app-confirmation button:focus-visible,.mcp-app-frame:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.reply-part-status{flex-basis:100%;margin-left:40px;color:var(--text-muted);font-size:10px;line-height:1.4}.reply-part-status.is-unavailable{color:var(--danger);font-weight:650}.reply-part-error{display:flex;flex-direction:column;gap:3px;margin:10px 0;padding:10px 12px;color:var(--danger);background:var(--danger-soft);border:1px solid color-mix(in srgb,var(--danger) 25%,transparent);border-radius:9px;font-size:11px}.reply-part-error strong{font-size:9px;letter-spacing:.06em;text-transform:uppercase}.mcp-app{--mcp-app-bleed: 0px;position:relative;overflow:clip;margin-inline:calc(-1 * var(--mcp-app-bleed));max-width:calc(100% + 2 * var(--mcp-app-bleed))}@container assistant (min-width: 816px){.mcp-app{--mcp-app-bleed: var(--column-padding, 0px)}}.mcp-app>header{min-height:55px;display:flex;align-items:center;gap:10px;padding:8px 10px}.mcp-app-status{margin:0;padding:5px 10px;color:var(--text-muted);background:var(--surface-subtle);border-top:1px solid var(--line);font-size:10px}.mcp-app-status.is-error{color:var(--danger);background:var(--danger-soft)}.mcp-app-status.is-ready{color:var(--accent)}.mcp-app-frame{width:100%;min-height:160px;max-height:1600px;display:block;background:#fff;border:0;border-top:1px solid var(--line);color-scheme:light}.mcp-app-confirmation{position:absolute;inset:0;min-height:160px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:9px;padding:18px;color:var(--text);background:color-mix(in srgb,var(--surface-raised) 96%,transparent);backdrop-filter:blur(8px);z-index:2}.mcp-app-confirmation>strong{font-size:14px}.mcp-app-confirmation>span:not(.mcp-app-confirm-actions){color:var(--text-soft);font-size:12px;line-height:1.5;overflow-wrap:anywhere}.mcp-app-confirm-preview{width:100%;max-height:150px;overflow:auto;margin:0;padding:9px 10px;color:var(--text-soft);background:var(--surface-subtle);border:1px solid var(--line);border-radius:7px;font:10px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.mcp-app-confirm-actions{display:flex;align-self:stretch;justify-content:flex-end;gap:8px;margin-top:4px}.mcp-app-confirmation button{min-width:76px;min-height:38px;padding:0 11px;color:var(--text-soft);background:var(--surface-subtle);border:1px solid var(--line);border-radius:8px;cursor:pointer;font-size:11px;font-weight:650}.mcp-app-confirmation button.is-primary{color:var(--on-accent);background:var(--accent-strong);border-color:transparent}.reasoning-root{margin:5px 0 11px}.assistant-content>.activity-root:first-child{margin-top:-4px}.reasoning-trigger{min-height:32px;display:inline-flex;align-items:center;gap:7px;padding:0 7px 0 3px;color:var(--text-muted);background:transparent;border-radius:8px;cursor:pointer;font-size:11px}.reasoning-trigger:hover{color:var(--text-soft);background:var(--surface-subtle)}.reasoning-trigger[data-active=true] .reasoning-trigger-label{color:var(--accent)}.reasoning-trigger-icon{width:22px;height:22px;display:grid;place-items:center;color:var(--accent)}.reasoning-trigger[data-active=true] .reasoning-trigger-icon{animation:pulse 1.4s ease infinite}.reasoning-trigger-chevron{transition:transform .16s ease}.reasoning-trigger[data-panel-open] .reasoning-trigger-chevron{transform:rotate(90deg)}.activity-root{overflow:hidden;background:color-mix(in srgb,var(--panel) 32%,var(--surface));border:1px solid var(--line);border-radius:12px}.activity-trigger{width:100%;min-height:44px;gap:8px;padding:2px 16px 0;border-radius:0}.activity-trigger:hover{background:transparent}.activity-trigger .reasoning-trigger-label{flex:none;color:var(--text-muted);font-size:9.5px;font-weight:750;letter-spacing:.12em;text-transform:uppercase}.activity-glyph{flex:none;color:var(--accent)}.activity-glyph.is-running{animation:pulse 1.2s ease infinite}.activity-meta{min-width:0;flex:1;overflow:hidden;color:var(--text-muted);font-size:10px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.activity-chevron{flex:none;transition:transform .15s ease}.activity-trigger[data-panel-open] .activity-chevron{transform:rotate(180deg)}.reasoning-content{overflow:hidden}.reasoning-text{position:relative;max-height:256px;margin:5px 0 5px 13px;padding:4px 0 4px 16px;overflow-y:auto;color:var(--text-muted);border-left:1px solid var(--line-strong);font-size:12px;line-height:1.58}.reasoning-text-content{display:grid;grid-template-columns:minmax(0,1fr);gap:9px}.activity-content .reasoning-text{min-width:0;max-height:none;margin:0;padding:0 12px 12px;overflow-y:visible;color:inherit;border-left:0;font-size:inherit}.reasoning-part p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}.reasoning-root:not(.activity-root)[data-streaming=true] .reasoning-text{mask-image:linear-gradient(to bottom,#000 70%,transparent 100%)}.activity-root .reasoning-text-content{gap:2px}.activity-note{margin:0;padding:0 2px;color:var(--text-soft);font-size:11.5px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.context-compaction-row{min-height:33px;display:flex;align-items:center;gap:8px;padding:6px 9px;color:var(--text-soft);background:var(--surface-subtle);border:1px solid var(--line);border-radius:9px;font-size:10px;line-height:1.35}.context-compaction-status{width:7px;height:7px;flex:none;background:var(--accent);border-radius:50%}.context-compaction-row.is-running .context-compaction-status{animation:pulse 1.2s ease infinite}.context-compaction-row.is-failed .context-compaction-status,.context-compaction-row.is-interrupted .context-compaction-status{background:var(--danger)}.cron-run-row{display:flex;flex-wrap:wrap;align-items:center;gap:5px 9px;margin-top:10px;padding-top:8px;color:var(--text-muted);border-top:1px solid var(--line);font-size:9.5px;scroll-margin-top:140px}.cron-run-link{color:var(--accent);font-weight:700;text-decoration:none}.cron-run-link:hover{text-decoration:underline}.cron-run-state{color:var(--text-soft);text-transform:capitalize}.cron-run-row.is-failed .cron-run-state,.cron-run-row.is-dropped .cron-run-state{color:var(--danger)}.cron-run-row.is-skipped_overlap .cron-run-state,.cron-run-row.is-cancelled .cron-run-state{color:var(--warning)}.cron-run-row time{font-variant-numeric:tabular-nums}.cron-activity-button{padding:2px 7px;border-radius:999px;font-size:9px}.cron-activity-truncated{flex-basis:100%;color:var(--warning);line-height:1.35}.cron-artifact-link{min-width:0;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cron-artifact-link code{font-family:var(--font-mono);font-size:9px}.cron-session-button{display:inline-flex;align-items:center;gap:4px;padding:2px 5px;color:var(--text-muted);background:transparent;border-radius:5px;cursor:pointer;font-size:9.5px}.cron-session-button:hover{color:var(--accent);background:var(--accent-soft)}.context-compaction-row.is-skipped .context-compaction-status{background:var(--text-muted)}.context-compaction-label{color:var(--text-soft);font-weight:650}.context-compaction-trigger{color:var(--text-muted)}.context-compaction-counts{margin-left:auto;color:var(--text-muted);font-family:var(--font-mono);white-space:nowrap}.tool-status{width:7px;height:7px;flex:none;border-radius:50%;background:var(--accent)}.tool-status.is-running{animation:pulse 1.2s ease infinite}.ask-user-card{display:grid;gap:14px;padding:16px;color:var(--text);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.ask-user-heading{display:flex;align-items:center;gap:9px;font-size:13px}.ask-user-context{max-height:280px;overflow:auto;padding:12px;white-space:pre-wrap;color:var(--text-soft);background:var(--surface-subtle);border-radius:var(--radius-sm);font-size:12px;line-height:1.55}.ask-user-card form{display:grid;gap:16px}.ask-user-card fieldset{display:grid;gap:10px;min-width:0;margin:0;padding:0 0 16px;border:0;border-bottom:1px solid var(--line)}.ask-user-card fieldset:last-of-type{padding-bottom:0;border-bottom:0}.ask-user-card legend{display:grid;gap:4px;width:100%;padding:0;font-size:13px;font-weight:650;line-height:1.45}.ask-user-card legend span{color:var(--accent);font-size:10px;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.ask-user-options{display:grid;gap:7px}.ask-user-option{display:grid;grid-template-columns:18px minmax(0,1fr);gap:9px;align-items:start;padding:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer}.ask-user-option:hover,.ask-user-option.is-selected{border-color:var(--accent);background:var(--accent-soft)}.ask-user-option input{margin:3px 0 0;accent-color:var(--accent)}.ask-user-option span{display:grid;gap:2px}.ask-user-option strong{font-size:12px}.ask-user-option small{color:var(--text-soft);font-size:11px;line-height:1.45}.ask-user-other{display:grid;gap:6px;color:var(--text-soft);font-size:11px}.ask-user-other textarea{width:100%;resize:vertical;padding:9px 10px;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);line-height:1.45}.ask-user-submit{justify-self:end;min-height:36px;padding:0 14px;color:var(--on-accent);background:var(--accent);border-radius:var(--radius-sm);cursor:pointer;font-size:12px;font-weight:700}.ask-user-submit:hover:not(:disabled){background:var(--accent-strong)}.ask-user-loading,.ask-user-complete,.ask-user-error{margin:0;color:var(--text-soft);font-size:12px}.ask-user-complete{display:grid;gap:4px}.ask-user-complete>p{margin:0}.ask-user-summary{display:grid;gap:2px;margin:0;padding:0;color:var(--text);list-style:none}.ask-user-summary-line{margin:0;color:var(--text);line-height:1.45;overflow-wrap:anywhere;white-space:pre-wrap}.ask-user-error{color:var(--danger)}.ask-user-result{max-width:100%;overflow:auto;margin:0;font:11px/1.5 var(--font-mono)}.message-attachments,.composer-attachments{display:flex;flex-wrap:wrap;gap:7px}.message-attachments{justify-content:flex-end;margin-bottom:8px}.composer-attachments{max-height:108px;margin-bottom:6px;overflow-y:auto}.composer-attachments:empty,.message-attachments:empty{display:none}.attachment-chip{position:relative;min-width:0;max-width:250px;height:34px;display:flex;align-items:center;gap:7px;padding:0 8px;overflow:hidden;color:var(--text-soft);background:var(--surface-raised);border:1px solid var(--line);border-radius:9px;font-size:11px}.attachment-chip.is-error{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,var(--line))}.attachment-icon{width:20px;height:20px;display:grid;place-items:center;flex:none;color:var(--accent);background:var(--accent-soft);border-radius:6px}.attachment-icon img{width:100%;height:100%;display:block;object-fit:cover;border-radius:6px}.attachment-link{min-width:0;display:flex;align-items:center;gap:7px;flex:1;color:inherit;text-decoration:none}.attachment-link:hover .attachment-name{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.attachment-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-progress{position:absolute;left:0;bottom:0;width:var(--upload-progress);height:2px;background:var(--accent);transition:width .12s linear}.attachment-error{flex:none;font-size:9px}.attachment-remove{width:24px;height:24px;margin-left:1px}.composer-root{position:relative;width:min(100%,820px);margin:0 auto;background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:16px;box-shadow:0 10px 32px #19231d12,var(--shadow-sm);transition:border-color .15s ease,box-shadow .15s ease}.composer-root:focus-within{border-color:color-mix(in srgb,var(--accent) 65%,var(--line));box-shadow:0 0 0 3px var(--accent-glow),0 12px 36px #19231d12}.composer-quote{min-height:38px;display:flex;align-items:center;gap:8px;margin:9px 9px 0;padding:7px 8px 7px 10px;color:var(--text-muted);background:var(--surface-subtle);border-left:2px solid var(--accent);border-radius:7px;font-size:11px}.composer-quote>svg{flex:none;color:var(--accent)}.composer-quote-text{min-width:0;display:block;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.composer-quote-dismiss{width:26px;height:26px;display:grid;place-items:center;flex:none;color:var(--text-muted);background:transparent;border-radius:6px;cursor:pointer}.composer-quote-dismiss:hover{color:var(--text);background:var(--surface-raised)}.composer-dropzone{padding:10px 10px 8px;border-radius:15px}.composer-dropzone[data-dragging=true]{background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}.composer-input-row{min-height:37px;display:flex}.composer-input{width:100%;max-height:180px;min-height:37px;resize:none;padding:7px 5px;color:var(--text);background:transparent;border:0;outline:0;font-size:14px;line-height:1.55}.composer-input::placeholder{color:var(--text-muted)}.composer-toolbar{min-height:34px;display:flex;align-items:center;justify-content:space-between;gap:10px}.composer-tools{min-width:0;display:flex;align-items:center;gap:5px}.composer-tool{width:32px;height:32px}.composer-hint{overflow:hidden;color:var(--text-muted);font-size:9.5px;text-overflow:ellipsis;white-space:nowrap}.composer-actions{display:flex;align-items:center;gap:6px}.composer-trigger-popover{position:absolute;left:9px;bottom:calc(100% + 9px);width:min(320px,calc(100vw - 24px));padding:5px;color:var(--text);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:12px;box-shadow:var(--shadow-lg);z-index:12}.composer-trigger-list{max-height:min(310px,48dvh);overflow-y:auto;overscroll-behavior:contain}.composer-trigger-item{width:100%;min-height:49px;display:flex;align-items:center;gap:10px;padding:6px 8px;color:var(--text-soft);background:transparent;border-radius:9px;cursor:pointer;outline:0;text-align:left}.composer-trigger-item[aria-selected=true],.composer-trigger-item:hover{color:var(--text);background:var(--surface-subtle)}.composer-trigger-item-icon{width:30px;height:30px;display:grid;place-items:center;flex:none;color:var(--accent);background:var(--accent-soft);border-radius:8px}.composer-trigger-item-copy{min-width:0;display:flex;flex:1;flex-direction:column;gap:2px}.composer-trigger-item-copy strong{font-size:11.5px;font-weight:680}.composer-trigger-item-copy small{overflow:hidden;color:var(--text-muted);font-size:9.5px;text-overflow:ellipsis;white-space:nowrap}.composer-trigger-empty{padding:20px 12px;color:var(--text-muted);text-align:center;font-size:11px}.skill-result{gap:8px}.skill-status{flex:none;padding:3px 6px;color:var(--text-muted);background:var(--surface-subtle);border:1px solid var(--line);border-radius:999px;font-size:8.5px;font-weight:650;letter-spacing:.02em;white-space:nowrap}.skill-status[data-availability=inlined]{color:var(--success)}.skill-status[data-availability=on-demand]{color:var(--accent)}.skill-browser-backdrop{position:fixed;inset:0;background:#070a086b;backdrop-filter:blur(6px);z-index:100}.skill-browser-popup{position:fixed;left:50%;top:50%;width:min(560px,calc(100vw - 32px));max-height:min(680px,calc(100dvh - 48px));display:flex;flex-direction:column;overflow:hidden;color:var(--text);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:16px;box-shadow:var(--shadow-lg);outline:0;transform:translate(-50%,-50%);z-index:101}.skill-browser-header{min-height:68px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:14px 14px 11px 16px;border-bottom:1px solid var(--line)}.skill-browser-header>span{min-width:0}.skill-browser-header h2{margin:0 0 4px;font-size:15px}.skill-browser-header p{margin:0;color:var(--text-muted);font-size:10.5px;line-height:1.45}.skill-browser-command{min-height:0;display:flex;flex:1;flex-direction:column}.skill-browser-search{height:50px;display:flex;align-items:center;gap:9px;flex:none;padding:0 15px;color:var(--text-muted);border-bottom:1px solid var(--line)}.skill-browser-search input{min-width:0;height:100%;flex:1;color:var(--text);background:transparent;border:0;outline:0;font-size:13px}.skill-browser-notice{margin:0;padding:9px 15px;color:var(--text-muted);background:var(--surface-subtle);border-bottom:1px solid var(--line);font-size:10px;line-height:1.45}.skill-browser-list{min-height:90px;max-height:min(520px,calc(100dvh - 190px));padding:7px;overflow-y:auto;overscroll-behavior:contain}.skill-browser-item{width:100%;min-height:56px;display:flex;align-items:center;gap:10px;padding:7px 9px;color:var(--text-soft);background:transparent;border-radius:9px;cursor:pointer;outline:0;text-align:left}.skill-browser-item[data-selected=true]:not([data-disabled=true]),.skill-browser-item:hover:not([data-disabled=true]){color:var(--text);background:var(--surface-subtle)}.skill-browser-item[data-disabled=true]{cursor:not-allowed;opacity:.58}.skill-browser-item-icon{width:30px;height:30px;display:grid;place-items:center;flex:none;color:var(--accent);background:var(--accent-soft);border-radius:8px}.skill-browser-item-copy{min-width:0;display:flex;flex:1;flex-direction:column;gap:3px}.skill-browser-item-copy strong{font-size:11.5px}.skill-browser-item-copy small{display:-webkit-box;overflow:hidden;color:var(--text-muted);font-size:9.5px;line-height:1.4;-webkit-box-orient:vertical;-webkit-line-clamp:2}.skill-browser-empty{padding:34px 16px;color:var(--text-muted);text-align:center;font-size:11px}.composer-send{width:34px;height:34px;display:grid;place-items:center;flex:none;padding:0;color:var(--on-accent);background:var(--accent-strong);border-radius:10px;cursor:pointer}.composer-send:hover:not(:disabled){filter:brightness(1.06);transform:translateY(-1px)}.composer-stop{min-width:70px;height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0 10px;color:var(--text);background:var(--surface-subtle);border:1px solid var(--line);border-radius:10px;cursor:pointer;font-size:11px}.archived-footer{width:min(100%,820px);min-height:52px;display:flex;align-items:center;justify-content:center;gap:10px;margin:0 auto;padding:10px 16px;color:var(--text-muted);background:var(--surface-subtle);border:1px solid var(--line);border-radius:12px;font-size:12px}.archived-footer button{color:var(--accent);background:transparent;cursor:pointer;font-weight:650}.cron-readonly-footer{width:min(100%,820px);min-height:48px;display:flex;align-items:center;justify-content:center;margin:0 auto;padding:10px 16px;color:var(--text-muted);background:var(--surface-subtle);border:1px solid var(--line);border-radius:12px;font-size:11px;text-align:center}.chat-empty{min-height:420px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:44px 20px;text-align:center}.empty-orbit{position:relative;width:60px;height:60px;display:grid;place-items:center;margin-bottom:23px;color:var(--accent);background:var(--accent-soft);border-radius:20px}.empty-orbit:before{content:"";position:absolute;inset:-9px;border:1px solid color-mix(in srgb,var(--accent) 20%,transparent);border-radius:25px;transform:rotate(12deg)}.empty-orbit span{position:absolute;right:-6px;top:8px;width:7px;height:7px;border-radius:50%;background:var(--warning);box-shadow:0 0 0 4px color-mix(in srgb,var(--warning) 12%,transparent)}.chat-empty h2{max-width:520px;margin:3px 0 9px;color:var(--text);font-size:clamp(22px,3vw,31px);line-height:1.18;letter-spacing:-.025em}.chat-empty p{max-width:500px;margin:0 0 20px;color:var(--text-muted);font-size:13px;line-height:1.55}.initial-state,.fatal-state{width:100%;height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px;background:var(--surface);text-align:center}.initial-state .brand-mark,.fatal-state .brand-mark{width:38px;height:38px;margin-bottom:25px;transform:scale(1.35);filter:drop-shadow(0 5px 15px var(--accent-glow))}.initial-state>span:last-child{margin-top:11px;color:var(--text-muted);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.initial-loader{display:flex;gap:5px}.initial-loader span{width:5px;height:5px;border-radius:50%;background:var(--accent);animation:bounce 1.1s ease infinite}.initial-loader span:nth-child(2){animation-delay:.12s}.initial-loader span:nth-child(3){animation-delay:.24s}.fatal-state h1{max-width:600px;margin:7px 0 10px;font-size:clamp(24px,4vw,38px);letter-spacing:-.03em}.fatal-state p{max-width:580px;margin:0 0 22px;color:var(--text-muted);line-height:1.6}.fatal-state small{max-width:560px;margin-top:18px;color:var(--text-muted);font-size:11px}.fatal-state code{padding:2px 5px;color:var(--text-soft);background:var(--surface-subtle);border-radius:4px;font-family:var(--font-mono)}.dialog-layer{position:fixed;inset:0;display:flex;align-items:flex-start;justify-content:center;padding:min(15vh,130px) 16px 16px;background:#070a086b;backdrop-filter:blur(6px);z-index:100}.command-palette{width:min(100%,560px);overflow:hidden;color:var(--text);background:var(--surface-raised);border:1px solid var(--line-strong);border-radius:16px;box-shadow:var(--shadow-lg)}.palette-search{height:56px;display:flex;align-items:center;gap:10px;padding:0 14px;color:var(--text-muted);border-bottom:1px solid var(--line)}.palette-search input{min-width:0;flex:1;height:100%;color:var(--text);background:transparent;border:0;outline:0;font-size:14px}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:20px;padding:0 5px;color:var(--text-muted);background:var(--surface-subtle);border:1px solid var(--line);border-radius:5px;box-shadow:0 1px 0 var(--line-strong);font-family:var(--font-mono);font-size:9px}.palette-results{max-height:min(48vh,390px);padding:7px;overflow-y:auto}.palette-results button{width:100%;min-height:44px;display:flex;align-items:center;gap:10px;padding:6px 9px;color:var(--text-soft);background:transparent;border-radius:9px;cursor:pointer;text-align:left;font-size:12px}.palette-results button:hover,.palette-results button[aria-selected=true]{color:var(--text);background:var(--surface-subtle)}.palette-results button>span:nth-child(2){min-width:0;flex:1}.palette-icon{width:28px;height:28px;display:grid;place-items:center;flex:none;color:var(--accent);background:var(--accent-soft);border-radius:7px}.palette-results p{margin:30px;color:var(--text-muted);text-align:center;font-size:12px}.command-palette footer{min-height:40px;display:flex;align-items:center;justify-content:flex-end;gap:14px;padding:0 13px;color:var(--text-muted);background:var(--surface-subtle);border-top:1px solid var(--line);font-size:9px}.command-palette footer span{display:inline-flex;align-items:center;gap:4px}.toast{position:fixed;right:max(18px,env(safe-area-inset-right));bottom:max(18px,env(safe-area-inset-bottom));max-width:min(420px,calc(100vw - 36px));min-height:48px;display:flex;align-items:center;gap:12px;padding:9px 9px 9px 14px;color:#f8faf6;background:#242a26;border:1px solid rgba(255,255,255,.1);border-radius:11px;box-shadow:var(--shadow-lg);font-size:12px;line-height:1.4;z-index:120}.toast span{min-width:0;flex:1}.toast button{width:30px;height:30px;display:grid;place-items:center;flex:none;color:#b8c0b9;background:transparent;border-radius:7px;cursor:pointer}.toast button:hover{color:#fff;background:#ffffff14}.activity-row{min-width:0;border-radius:9px}.activity-row>summary{min-height:38px;display:flex;align-items:center;gap:8px;padding:0 8px;border-radius:9px;cursor:pointer;list-style:none}.activity-row>summary::-webkit-details-marker{display:none}.activity-row-glyph{width:18px;display:grid;place-items:center;flex:none}.activity-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent)}.activity-row.is-running .activity-dot{background:var(--warning);box-shadow:0 0 0 3px color-mix(in srgb,var(--warning) 12%,transparent);animation:pulse 1.2s ease infinite}.activity-row.is-failed .activity-dot{background:var(--danger);box-shadow:0 0 0 3px color-mix(in srgb,var(--danger) 12%,transparent)}.activity-row.is-thinking .activity-row-glyph{color:var(--text-muted)}.activity-row.is-subagent .activity-row-glyph{color:var(--cat-4)}.activity-row.is-subagent.is-running .activity-row-glyph{color:var(--warning)}.activity-row.is-subagent.is-failed .activity-row-glyph{color:var(--danger)}.activity-row-label{flex:none;color:var(--text);font-size:11.5px;font-weight:650;white-space:nowrap}.activity-row-summary{min-width:0;flex:1;overflow:hidden;color:var(--text-muted);font-size:10.5px;text-overflow:ellipsis;white-space:nowrap}.activity-row-time{min-width:0;flex:0 1 auto;overflow:hidden;color:var(--text-muted);font-family:var(--font-mono);font-size:9px;text-overflow:ellipsis;white-space:nowrap}.activity-row-chevron{flex:none;color:var(--text-muted);transition:transform .15s ease}.activity-row[open]>summary .activity-row-chevron{transform:rotate(180deg)}.failed-tag{flex:none;padding:2px 6px;color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent);border-radius:5px;font-size:8.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}.activity-steps{min-width:0;margin:0 2px 6px 16px;padding-left:10px;border-left:1px solid var(--line)}.activity-step{min-width:0;border-radius:8px}.activity-step>summary{min-height:34px;display:grid;grid-template-columns:minmax(0,auto) minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:0 8px;border-radius:8px;cursor:pointer;list-style:none}.activity-step>summary::-webkit-details-marker{display:none}.activity-step-tool{min-width:0;overflow:hidden;color:var(--text-soft);font-family:var(--font-mono);font-size:10.5px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.activity-step-summary{min-width:0;overflow:hidden;color:var(--text-muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.activity-step-time{color:var(--text-muted);font-family:var(--font-mono);font-size:9px;white-space:nowrap}.subagent-empty{margin:0;padding:4px 8px;color:var(--text-muted);font-size:10px}.activity-payload{min-width:0;display:grid;grid-template-columns:minmax(0,1fr);gap:7px;padding:2px 8px 10px}.activity-payload.is-indented{padding-left:34px}.activity-payload>span{color:var(--text-muted);font-size:8.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.activity-payload pre{min-width:0;max-width:100%;max-height:280px;margin:0;padding:8px 9px;overflow:auto;overscroll-behavior:contain;color:var(--text-soft);background:color-mix(in srgb,var(--app-bg) 60%,var(--surface));border:1px solid var(--line);border-radius:8px;font-family:var(--font-mono);font-size:10px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;user-select:text}.activity-error{min-width:0;display:flex;align-items:center;gap:6px;overflow-wrap:anywhere;margin:0;padding:7px 9px;color:var(--danger);background:color-mix(in srgb,var(--danger) 8%,transparent);border:1px solid color-mix(in srgb,var(--danger) 25%,transparent);border-radius:8px;font-size:10.5px;line-height:1.45;user-select:text}.activity-thought{padding:2px 12px 12px 34px;color:var(--text-muted);font-size:12px;line-height:1.6;overflow-wrap:anywhere}@media(hover:hover){.activity-row>summary:hover,.activity-step>summary:hover{background:var(--surface-subtle)}}@media(hover:none),(pointer:coarse){.activity-row>summary{min-height:44px}.activity-step>summary{min-height:40px}}.image-row{display:flex;gap:6px;margin:10px 0;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}.image-row:empty{display:none}.image-tile{height:190px;aspect-ratio:4 / 3;flex:none;min-width:0;padding:0;overflow:hidden;background:var(--surface-subtle);border:1px solid var(--line);border-radius:12px;cursor:pointer}.image-tile img{width:100%;height:100%;display:block;object-fit:cover}.image-row>.reply-attachment{flex:1 1 100%;margin:0}@media(hover:hover){.image-tile:hover{border-color:var(--accent)}}.image-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.lightbox-backdrop{position:fixed;inset:0;z-index:100;background:#070a08d1;backdrop-filter:blur(6px)}.lightbox-popup{position:fixed;inset:0;z-index:101;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px 32px 32px}.lightbox-image{max-width:calc(100vw - 64px);max-height:calc(100dvh - 96px);object-fit:contain;border-radius:10px}.lightbox-bar{display:flex;align-items:center;gap:6px;max-width:100%;padding:6px 8px;color:var(--text-soft);background:var(--surface);border:1px solid var(--line);border-radius:11px}.lightbox-name{min-width:0;overflow:hidden;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.lightbox-count{flex:none;color:var(--text-muted);font-family:var(--font-mono);font-size:10px;white-space:nowrap}@media(max-width:560px){.lightbox-popup{padding:12px}.lightbox-image{max-width:calc(100vw - 24px)}.image-tile{height:150px}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.38}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes bounce{0%,60%,to{transform:translateY(0);opacity:.45}30%{transform:translateY(-4px);opacity:1}}@media(max-width:1100px){.model-selector__trigger{max-width:210px}.cron-channel-header{align-items:flex-start;flex-direction:column;gap:8px}.cron-channel-facts{width:100%;grid-template-columns:repeat(6,minmax(0,1fr))}.cron-channel-actions{width:100%;justify-content:flex-start;margin-left:0}}@media(max-width:1100px)and (min-width:901px){.app-shell{grid-template-columns:var(--agent-rail-width, 72px) 270px minmax(0,1fr)}.message-column{--column-padding: 24px}.composer-hint{display:none}}@media(max-width:900px){.app-shell{grid-template-columns:minmax(0,1fr)}.desktop-agent-rail,.desktop-thread-sidebar{display:none}.mobile-navigation{display:flex;align-items:center;gap:2px;margin-left:-6px}.chat-header{min-height:58px;gap:8px;padding-block:max(7px,env(safe-area-inset-top)) 7px}.conversation-title{max-width:min(42vw,340px)}.chat-status{display:none}.header-archive{display:inline-flex}.message-column{--column-padding: 18px;padding-block:28px 16px}.thread-footer{padding-inline:max(14px,env(safe-area-inset-left)) max(14px,env(safe-area-inset-right))}.mobile-agent-drawer,.mobile-thread-drawer{position:fixed;top:0;bottom:0;display:block;opacity:0;visibility:hidden;transition:transform .18s ease,opacity .18s ease,visibility .18s;z-index:40}.mobile-agent-drawer{left:0;width:min(310px,calc(100vw - 44px));transform:translate(-100%)}.mobile-thread-drawer{left:0;width:min(340px,calc(100vw - 36px));transform:translate(-110%)}.mobile-agent-drawer.is-open,.mobile-thread-drawer.is-open{opacity:1;visibility:visible;transform:translate(0)}.drawer-scrim{position:fixed;inset:0;display:block;width:100%;height:100%;padding:0;background:#070a0875;backdrop-filter:blur(3px);z-index:35}.mobile-thread-drawer .thread-sidebar{box-shadow:var(--shadow-lg)}.mobile-thread-drawer .thread-action{opacity:1}}@media(max-width:560px){.chat-header{flex-wrap:wrap;align-content:center;padding-left:max(9px,env(safe-area-inset-left));padding-right:max(9px,env(safe-area-inset-right));padding-bottom:8px}.mobile-navigation{order:1}.mobile-navigation .icon-button{width:36px;height:38px}.chat-title-block{order:2;flex:1;gap:0}.conversation-title{max-width:calc(100vw - 118px);min-width:64px;padding-inline:2px;font-size:13px}.title-input{width:calc(100vw - 118px);min-width:84px}.chat-header-actions{width:100%;order:3;gap:5px}.model-controls{min-width:0;flex:1;gap:3px}.model-selector__trigger{min-width:0;max-width:none;flex:1}.model-selector__backdrop{position:fixed;inset:0;display:block;background:#070a087a;backdrop-filter:blur(4px);z-index:110}.model-selector__positioner{position:fixed!important;inset:auto 0 0!important;width:100%;transform:none!important}.model-selector__content{width:100%;max-height:78dvh;padding-bottom:env(safe-area-inset-bottom);border-right:0;border-bottom:0;border-left:0;border-radius:20px 20px 0 0}.model-selector__search-wrapper{min-height:54px;padding-inline:16px}.model-selector__search{height:53px;font-size:16px}.model-selector__list{max-height:48dvh;padding:8px}.model-selector__item{min-height:58px;padding-inline:11px}.model-selector__item-name{font-size:13px}.model-selector__effort{padding:12px 14px 14px}.model-selector__effort-option{min-height:38px;padding-inline:12px;font-size:11px}.message-column{--column-padding: 12px;padding-block:24px 8px}.message{margin-bottom:23px}.message-user-content{max-width:88%;padding:9px 12px}.assistant-content>.activity-root:first-child{margin-top:-6px}.reply-attachment{align-items:flex-start;flex-wrap:wrap}.reply-attachment .reply-part-action{min-height:42px;margin-left:40px}.mcp-app>header{align-items:flex-start;flex-wrap:wrap}.mcp-app>header .reply-part-action{min-height:42px;margin-left:40px}.mcp-app-frame{max-height:70dvh}.mcp-app-confirmation{padding:14px}.mcp-app-confirmation button{min-height:44px}.markdown{font-size:13.5px;line-height:1.62}.markdown table{font-size:11.5px}.markdown th,.markdown td{padding:6px 8px}.reasoning-text{margin-left:4px;padding-left:11px}.activity-root .reasoning-text{max-height:none;overflow-y:visible}.thread-footer{padding:24px max(8px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left))}.composer-root{border-radius:14px}.composer-dropzone{padding:8px 8px 6px}.composer-hint{display:none}.composer-input{font-size:16px}.skill-browser-popup{inset:auto 0 0;width:100%;max-height:min(78dvh,680px);border-right:0;border-bottom:0;border-left:0;border-radius:16px 16px 0 0;transform:none}.skill-browser-list{max-height:calc(78dvh - 150px);padding-bottom:max(8px,env(safe-area-inset-bottom))}.chat-empty{min-height:330px;padding:32px 10px}.chat-empty h2{font-size:23px}.connection-banner{font-size:10px}.cron-channel-header{padding:9px max(9px,env(safe-area-inset-right)) 9px max(9px,env(safe-area-inset-left))}.cron-channel-facts{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:7px}.cron-channel-actions{flex-wrap:wrap}.cron-channel-actions>button{flex:1 1 auto}.cron-session-link{width:100%;max-width:none}.cron-dialog{max-height:calc(100dvh - 24px);padding:15px;border-radius:13px}.cron-config-fields>div{grid-template-columns:1fr;gap:3px}.cron-run-row{align-items:flex-start;flex-direction:column}.dialog-layer{padding:max(12px,env(safe-area-inset-top)) 8px 8px;align-items:flex-start}.command-palette{border-radius:13px}.command-palette footer{display:none}.toast{right:max(8px,env(safe-area-inset-right));bottom:max(8px,env(safe-area-inset-bottom));max-width:calc(100vw - 16px)}}@media(max-width:420px){.chat-header-actions{justify-content:flex-end}}@media(max-width:360px){.message-column{--column-padding: 9px}.mobile-thread-drawer{width:calc(100vw - 28px);left:0}.mobile-agent-drawer{width:calc(100vw - 36px)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}}
|