luckytri 1.0.2 → 1.0.4
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/bin/luckytri.js +5 -1
- package/docs/en/CHANGELOG.md +20 -0
- package/docs/en/guide.md +8 -0
- package/docs/en/her-life.md +2 -0
- package/docs/en/webui.md +4 -0
- package/docs/zh/CHANGELOG.md +20 -0
- package/docs/zh/guide.md +9 -1
- package/docs/zh/her-life.md +4 -2
- package/docs/zh/webui.md +4 -0
- package/package.json +111 -110
- package/public/app/assets/ChatsPage-CshdtTzV.js +3 -0
- package/public/app/assets/{Empty-DP6WMGHi.js → Empty-C7yzOBzy.js} +1 -1
- package/public/app/assets/{Field-CtbdqaiB.js → Field-BjFv4Rfn.js} +1 -1
- package/public/app/assets/HeartPage-eqo6ru16.js +1 -0
- package/public/app/assets/LifePage-CN8GE5NK.js +1 -0
- package/public/app/assets/MemoryPage-CCpMN4Wg.js +1 -0
- package/public/app/assets/NaturePage-C0JqdBTR.js +3 -0
- package/public/app/assets/{NaturePage-CTXHCE2D.css → NaturePage-CHkpb5NK.css} +1 -1
- package/public/app/assets/PeoplePage-BTU0H1pM.css +1 -0
- package/public/app/assets/PeoplePage-BXGBbO4u.js +1 -0
- package/public/app/assets/{PluginsPage-DksEZbUU.js → PluginsPage-Dksp5AV5.js} +1 -1
- package/public/app/assets/{SystemPage-BkRu0Rvx.css → SystemPage-BenIyTvk.css} +1 -1
- package/public/app/assets/SystemPage-Cd7aa8eE.js +1 -0
- package/public/app/assets/TimePage-Bs_zImb4.js +3 -0
- package/public/app/assets/{index-DY4e15Kh.css → index-BHZcHUMh.css} +1 -1
- package/public/app/assets/index-CyRtYxP3.js +4 -0
- package/public/app/assets/{knowledge-C6_HvoyB.js → knowledge-BJOIyuJo.js} +1 -1
- package/public/app/assets/{media-SMfTT-yc.js → media-Bwtx8blz.js} +1 -1
- package/public/app/assets/mind-DtTVrW6Z.js +1 -0
- package/public/app/index.html +4 -4
- package/public/guide.en.html +32 -3
- package/public/guide.html +19 -4
- package/public/tutorial.en.md +8 -0
- package/public/tutorial.md +9 -1
- package/scripts/launch.js +11 -4
- package/scripts/service.js +57 -7
- package/scripts/start-server.js +4 -1
- package/scripts/update-instance.js +201 -0
- package/server/app.js +3 -0
- package/server/core/context-builder.js +2 -2
- package/server/core/context-compactor.js +2 -2
- package/server/core/orchestrator.js +1 -0
- package/server/core/persona-manager.js +30 -5
- package/server/core/reply-delivery.js +10 -0
- package/server/core/response-validator.js +20 -0
- package/server/i18n/errors.js +38 -2
- package/server/index.js +45 -2
- package/server/mind/api.js +26 -0
- package/server/mind/bonds.js +9 -2
- package/server/mind/faces.js +257 -22
- package/server/mind/index.js +2 -0
- package/server/mind/initiative.js +6 -1
- package/server/mind/life/context.js +23 -9
- package/server/mind/life/growth.js +5 -3
- package/server/mind/nature.js +100 -4
- package/server/mind/relationships.js +279 -0
- package/server/mind/schema.js +5 -0
- package/server/mind/time/tasks.js +2 -1
- package/server/mind/view.js +5 -0
- package/server/runtime/installation.js +116 -0
- package/server/runtime/update-execution.js +127 -0
- package/server/runtime/update-manager.js +140 -0
- package/server/startup-lock.js +12 -12
- package/server/storage/archive.js +10 -2
- package/server/storage/backup-lock.js +23 -5
- package/server/storage/data-transfer.js +2 -1
- package/server/studio/display-names.js +1 -0
- package/server/studio/settings.js +1 -0
- package/server/studio/updates.js +144 -0
- package/public/app/assets/ChatsPage-BhlJHseG.js +0 -3
- package/public/app/assets/HeartPage-32BeTPn2.js +0 -1
- package/public/app/assets/LifePage-CxSm0XKI.js +0 -1
- package/public/app/assets/MemoryPage-BeKBcPCY.js +0 -1
- package/public/app/assets/NaturePage-NEPYl2HS.js +0 -3
- package/public/app/assets/PeoplePage-BmUxkrOU.css +0 -1
- package/public/app/assets/PeoplePage-DxtpekwM.js +0 -1
- package/public/app/assets/SystemPage-BvzJlHuY.js +0 -1
- package/public/app/assets/TimePage-7-awH5XL.js +0 -3
- package/public/app/assets/formatters-ZmW_xFHw.js +0 -1
- package/public/app/assets/index-4rItIkD-.js +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,Ct as t,E as n,Et as r,I as i,J as a,M as o,N as s,P as c,S as l,T as u,Tt as d,U as f,V as p,W as m,X as h,Y as g,Z as _,a as v,b as y,bt as b,ct as x,dt as S,et as C,f as w,ft as T,gt as E,h as D,ht as O,i as k,j as A,lt as j,m as M,n as N,nt as P,o as F,ot as I,p as L,q as R,rt as z,s as B,t as ee,ut as V,v as H,vt as U,w as W,wt as G,xt as K,yt as q,z as J}from"./Empty-C7yzOBzy.js";import{v as te}from"./mind-DtTVrW6Z.js";import{c as Y,f as ne,l as re,n as X,o as ie}from"./index-CyRtYxP3.js";var ae={class:`connect`},oe={class:`card connection`},Z={class:`card-head`},Q={class:`eyebrow`},se={class:`pill`},ce={key:0,class:`notice`,role:`note`},le={class:`muted`},ue={class:`connection-details`},de={class:`detail`},fe={class:`instructions`},pe={class:`muted`},me={class:`muted note`},$={key:0,class:`row`},he=[`disabled`],ge={class:`muted`},_e=[`disabled`,`placeholder`],ve={key:0,class:`faint`},ye=[`disabled`,`placeholder`],be={key:0,class:`faint`},xe={class:`row`},Se=[`disabled`],Ce={key:0,class:`faint`},we={key:0,class:`connection-details`},Te={class:`detail`},Ee={"data-state":``},De={key:0,class:`detail`},Oe={class:`warn-text`},ke={key:1,class:`detail`},Ae={class:`detail`},je={class:`detail`},Me={key:1,class:`notice`,role:`note`},Ne={class:`instructions`},Pe={class:`muted notes`},Fe={class:`card checklist`},Ie={class:`card-head`},Le={class:`eyebrow`},Re={class:`chip`},ze={class:`checks`},Be={class:`mark`,"aria-hidden":`true`},Ve={class:`muted`},He=[`data-fix`,`onClick`],Ue=N(P({__name:`ConnectQQ`,emits:[`open`],setup(o,{emit:s}){let l=s,u=R(()=>B.health.connection||{}),d=R(()=>u.value.channel===`qqbot`?`qqbot`:`onebot`),g=R(()=>!!u.value.locked),y=R(()=>!!u.value.online);R(()=>u.value.onebot||{});let x=R(()=>u.value.qqbot||{}),w=R(()=>String(B.health.settings.qqbotAppId||``)),T=R(()=>!!B.health.settings.hasQqbotSecret),D=K(d.value);E(d,e=>D.value=e);let O=R(()=>`${location.protocol===`https:`?`wss`:`ws`}://${location.host}/onebot/v11/ws`),N=R(()=>[{key:`onebot`,label:i(`OneBot 11`),count:d.value===`onebot`?i(`使用中`):``},{key:`qqbot`,label:i(`QQ 官方机器人`),count:d.value===`qqbot`?i(`使用中`):``}]),P=b({appId:w.value,secret:``}),F=K(!1),I=R(()=>P.appId.trim()!==w.value||!!P.secret.trim());E(I,e=>{B.dirty=e}),E(w,e=>{I.value||(P.appId=e)}),j(()=>{B.dirty=!1});let L=R(()=>!!P.appId.trim()&&(T.value||!!P.secret.trim())),z=c({idle:A(`未启用`),unconfigured:A(`尚未填写 AppID 与 AppSecret`),connecting:A(`正在连接开放平台`),ready:A(`已连接`),closed:A(`连接已断开,正在重连`),error:A(`连接出错`)}),ee=c({all:A(`全部群消息`),mentions:A(`只有 @ 她的消息`),unknown:A(`尚未收到群消息`)}),U=R(()=>z[x.value.state||`idle`]??z.idle),W=R(()=>ee[x.value.groupMessages||`unknown`]??ee.unknown),J=R(()=>d.value===`qqbot`&&x.value.groupMessages===`mentions`);async function te(e){if(F.value||g.value||e===d.value)return;let t=i(e===`qqbot`?`QQ 官方机器人`:`OneBot 11`);if(!y.value||await n(i(`切换后会断开当前连接。原来方式下的会话仍可查看,但不能再向它们发送消息。`),{title:i(`切换连接方式`),confirmText:i(`切换`),cancelText:i(`先不切换`)})){F.value=!0;try{await M(`/settings`,`PATCH`,{channel:e}),await v(),H(i(`已切换为 {name}`,{name:t}))}catch(e){H(e.message,!0)}finally{F.value=!1}}}async function Y(){if(!F.value){if(!L.value){H(i(`请填写 AppID 和 AppSecret`),!0);return}F.value=!0;try{let e={qqbotAppId:P.appId.trim()};P.secret.trim()&&(e.qqbotSecret=P.secret.trim()),d.value!==`qqbot`&&!g.value&&(e.channel=`qqbot`),await M(`/settings`,`PATCH`,e),P.secret=``,await v(),H(i(`已保存`))}catch(e){H(e.message,!0)}finally{F.value=!1}}}let ne={token:[``,`connect`],credentials:[``,`connect`],qq:[``,`connect`],model:[``,`models`],mode:[``,`runtime`],session:[`chats`,``],persona:[`nature`,``]};function ie(e){let[t,n]=ne[e]||[``,`connect`];t?k(t):l(`open`,n)}return(n,o)=>(V(),_(`div`,ae,[a(`section`,oe,[a(`div`,Z,[a(`div`,null,[a(`span`,Q,r(t(i)(`QQ`)),1),a(`h2`,null,r(t(i)(`连接 QQ`)),1),a(`p`,null,r(t(i)(`两种连接方式二选一,同一时间只使用一种。她的记忆、心情和行为完全一致,区别只在消息怎么到达。`)),1)]),a(`span`,se,[a(`span`,{class:G([`dot`,{off:!y.value}])},null,2),e(` `+r(y.value?t(i)(`QQ 已连接`):t(i)(`等待连接`)),1)])]),C(X,{modelValue:D.value,"onUpdate:modelValue":o[0]||=e=>D.value=e,label:t(i)(`连接方式`),items:N.value},null,8,[`modelValue`,`label`,`items`]),g.value?(V(),_(`p`,ce,r(t(i)(`连接方式由环境变量 LUCKYTRI_CHANNEL 指定,在这里不能更改。去掉该变量后即可在此选择。`)),1)):h(``,!0),D.value===`onebot`?(V(),_(m,{key:1},[a(`p`,le,r(t(i)(`自备接入端,通过反向 WebSocket 连接。能看到全部群消息。`)),1),a(`div`,ue,[a(`div`,de,[a(`span`,null,r(t(i)(`反向 WebSocket 地址`)),1),a(`code`,null,r(O.value),1)])]),a(`ol`,fe,[a(`li`,null,r(t(i)(`同一台电脑上的接入端无需单独配置连接令牌。`)),1),a(`li`,null,r(t(i)(`在接入端启用反向 WebSocket 客户端,填写上方地址,消息格式选择数组。已有的地址配置可以继续使用。`)),1),a(`li`,null,r(t(i)(`在接入端完成 QQ 登录。连接成功后,本页状态会更新;新会话仍需在「对话」中开启参与。`)),1)]),a(`p`,pe,r(t(i)(`远程接入时,连接密码使用管理密码;已有的远程连接令牌仍兼容。`)),1),a(`p`,me,r(t(i)(`LuckyTri 只负责接收,不提供、不安装也不管理接入端。`)),1),d.value===`onebot`?h(``,!0):(V(),_(`div`,$,[a(`button`,{class:`primary`,"data-use":`onebot`,disabled:F.value||g.value,onClick:o[1]||=e=>te(`onebot`)},r(t(i)(`改用这种方式`)),9,he)]))],64)):(V(),_(m,{key:2},[a(`p`,ge,r(t(i)(`只需 AppID 与 AppSecret,无需额外软件。群里默认只收到 @ 她的消息。`)),1),a(`form`,{class:`stack tight`,onSubmit:f(Y,[`prevent`])},[a(`label`,null,[e(r(t(i)(`AppID`))+` `,1),q(a(`input`,{"onUpdate:modelValue":o[2]||=e=>P.appId=e,name:`qqbotAppId`,autocomplete:`off`,inputmode:`numeric`,maxlength:`40`,disabled:F.value||x.value.appIdFromEnv,placeholder:t(i)(`机器人的 AppID`)},null,8,_e),[[p,P.appId]]),x.value.appIdFromEnv?(V(),_(`small`,ve,r(t(i)(`由环境变量指定,在这里不能修改`)),1)):h(``,!0)]),a(`label`,null,[e(r(t(i)(`AppSecret`))+` `,1),q(a(`input`,{"onUpdate:modelValue":o[3]||=e=>P.secret=e,name:`qqbotSecret`,type:`password`,autocomplete:`new-password`,maxlength:`200`,disabled:F.value||x.value.secretFromEnv,placeholder:T.value||x.value.secretFromEnv?t(i)(`已保存,留空保留`):t(i)(`机器人的 AppSecret`)},null,8,ye),[[p,P.secret]]),x.value.secretFromEnv?(V(),_(`small`,be,r(t(i)(`由环境变量指定,在这里不能修改`)),1)):h(``,!0)]),a(`div`,xe,[a(`button`,{class:`primary`,"data-save":`qqbot`,disabled:F.value||x.value.appIdFromEnv&&x.value.secretFromEnv},r(d.value===`qqbot`||g.value?t(i)(`保存`):t(i)(`保存并使用`)),9,Se),I.value?(V(),_(`span`,Ce,r(t(i)(`有尚未保存的修改`)),1)):h(``,!0)])],32),d.value===`qqbot`?(V(),_(`div`,we,[a(`div`,Te,[a(`span`,null,r(t(i)(`连接状态`)),1),a(`strong`,Ee,r(U.value),1)]),x.value.error?(V(),_(`div`,De,[o[4]||=a(`span`,null,null,-1),a(`small`,Oe,r(x.value.error),1)])):h(``,!0),x.value.botName?(V(),_(`div`,ke,[a(`span`,null,r(t(i)(`机器人`)),1),a(`strong`,null,r(x.value.botName),1)])):h(``,!0),a(`div`,Ae,[a(`span`,null,r(t(i)(`最近收到消息`)),1),a(`strong`,null,r(x.value.lastEventAt?t(re)(x.value.lastEventAt):t(i)(`还没有`)),1)]),a(`div`,je,[a(`span`,null,r(t(i)(`群消息范围`)),1),a(`strong`,null,r(W.value),1)])])):h(``,!0),J.value?(V(),_(`p`,Me,r(t(i)(`目前只收到 @ 她的群消息。想让她看到群里的全部消息,请在开放平台的机器人设置里开启「接收所有消息」。`)),1)):h(``,!0),a(`ol`,Ne,[a(`li`,null,r(t(i)(`在 QQ 开放平台创建机器人,取得 AppID 与 AppSecret。`)),1),a(`li`,null,r(t(i)(`把运行 LuckyTri 的这台机器的出口 IP 加入机器人的 IP 白名单。`)),1),a(`li`,null,r(t(i)(`可选:开启「接收所有消息」,她才能看到群里没有 @ 她的话;不开启时只会收到 @ 她的消息。`)),1),a(`li`,null,r(t(i)(`填写上方的 AppID 与 AppSecret 并保存。状态变为「已连接」后,在群里 @ 她或私聊她,新会话会出现在「对话」中。`)),1)]),a(`ul`,Pe,[a(`li`,null,r(t(i)(`官方平台不提供群名称:新会话以占位名出现,可以在「对话」中为它改名。`)),1),a(`li`,null,r(t(i)(`官方平台上,同一个人在不同的群里标识不同。像只在不同的房间见过对方一样,平台给出统一身份之前,她不会把两处的人当成同一个人。`)),1),a(`li`,null,r(t(i)(`对方关闭了机器人的主动消息时,她不会去打扰,会等对方来找她。`)),1)])],64))]),a(`section`,Fe,[a(`div`,Ie,[a(`div`,null,[a(`span`,Le,r(t(i)(`就绪检查`)),1),a(`h2`,null,r(t(i)(`还差哪一步`)),1)]),a(`span`,Re,r(t(B).health.readiness?.completed??0)+` / `+r(t(B).health.readiness?.total??0),1)]),a(`ol`,ze,[(V(!0),_(m,null,S(t(B).health.readiness?.checks||[],e=>(V(),_(`li`,{key:e.id,class:G({done:e.done})},[a(`span`,Be,r(e.done?`✓`:``),1),a(`div`,null,[a(`b`,null,r(e.name),1),a(`small`,Ve,r(e.detail),1)]),a(`button`,{class:`small`,"data-fix":e.id,onClick:t=>ie(e.id)},r(e.done?t(i)(`查看`):t(i)(`去处理`)),9,He)],2))),128))])])]))}}),[[`__scopeId`,`data-v-6f4553ed`]]);async function We(e){return M(`/core/models`,`PUT`,{models:e})}async function Ge(e){return M(`/core/models/`+encodeURIComponent(e),`DELETE`,{})}async function Ke(e){return M(`/model/test`,`POST`,{modelId:e})}var qe={class:`card embedding-profile`,"aria-labelledby":`embedding-title`},Je={id:`embedding-title`},Ye={class:`muted`},Xe={key:0,class:`faint`},Ze={class:`check`},Qe={class:`fields`},$e=[`required`],et=[`required`],tt=[`placeholder`],nt={class:`save-bar`},rt=[`disabled`],it=[`disabled`],at={class:`faint`},ot={key:2,role:`status`},st=N(P({__name:`EmbeddingProfile`,setup(n){let o=b({enabled:!1,label:i(`知识向量`),baseUrl:``,model:``,apiKey:``,dimensions:0,batchSize:32,timeoutMs:9e4}),s=K(!1),c=K(!1),l=K(!1),u=K(``);async function d(){try{Object.assign(o,await M(`/core/knowledge/embedding`),{apiKey:``}),l.value=!0}catch(e){u.value=e.message}}async function m(){s.value=!0;try{Object.assign(o,await M(`/core/knowledge/embedding`,`PATCH`,o),{apiKey:``}),c.value=!1,H(i(`知识向量模型已保存`))}catch(e){H(e.message,!0)}finally{s.value=!1}}async function g(){s.value=!0;try{let e=await M(`/core/knowledge/embedding/test`,`POST`,{});u.value=i(`连接成功,向量维度 {dimensions}`,{dimensions:e.dimensions})}catch(e){u.value=e.message}finally{s.value=!1}}return x(d),(n,d)=>(V(),_(`section`,qe,[a(`h2`,Je,r(t(i)(`知识向量模型`)),1),a(`p`,Ye,r(t(i)(`单独配置资料检索使用的模型。更换对话模型后仍使用这里的配置。更换向量模型后,可在资料书架逐份重建向量;原文仍能通过关键词检索。`)),1),l.value&&!o.configured?(V(),_(`p`,Xe,r(t(i)(`当前兼容旧配置,跟随默认模型。保存后改用独立配置。`)),1)):h(``,!0),l.value?(V(),_(`form`,{key:1,onSubmit:f(m,[`prevent`]),onInput:d[6]||=e=>c.value=!0,onChange:d[7]||=e=>c.value=!0},[a(`label`,Ze,[q(a(`input`,{"onUpdate:modelValue":d[0]||=e=>o.enabled=e,type:`checkbox`,name:`embeddingEnabled`},null,512),[[J,o.enabled]]),e(r(t(i)(`启用知识向量`)),1)]),a(`div`,Qe,[a(`label`,null,[e(r(t(i)(`API 地址`)),1),q(a(`input`,{"onUpdate:modelValue":d[1]||=e=>o.baseUrl=e,name:`embeddingBaseUrl`,type:`url`,required:o.enabled,placeholder:`https://example.com/v1`},null,8,$e),[[p,o.baseUrl]])]),a(`label`,null,[e(r(t(i)(`模型名称`)),1),q(a(`input`,{"onUpdate:modelValue":d[2]||=e=>o.model=e,name:`embeddingModelName`,required:o.enabled},null,8,et),[[p,o.model]])]),a(`label`,null,[e(r(t(i)(`独立 API Key`)),1),q(a(`input`,{"onUpdate:modelValue":d[3]||=e=>o.apiKey=e,name:`embeddingApiKey`,type:`password`,autocomplete:`new-password`,placeholder:o.hasApiKey?t(i)(`已保存,留空保留`):t(i)(`填写向量服务密钥`)},null,8,tt),[[p,o.apiKey]])]),a(`label`,null,[e(r(t(i)(`向量维度(0 表示自动)`)),1),q(a(`input`,{"onUpdate:modelValue":d[4]||=e=>o.dimensions=e,name:`embeddingDimensions`,type:`number`,min:`0`,max:`65536`},null,512),[[p,o.dimensions,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`每批段落数`)),1),q(a(`input`,{"onUpdate:modelValue":d[5]||=e=>o.batchSize=e,name:`embeddingBatchSize`,type:`number`,min:`1`,max:`128`},null,512),[[p,o.batchSize,void 0,{number:!0}]])])]),a(`div`,nt,[a(`button`,{class:`primary`,disabled:s.value},r(t(i)(`保存向量模型`)),9,rt),a(`button`,{type:`button`,disabled:s.value||c.value||!o.enabled||!o.configured,onClick:g},r(t(i)(`测试向量连接`)),9,it),a(`small`,at,r(c.value?t(i)(`有未保存的修改`):t(i)(`配置已载入`)),1)])],32)):h(``,!0),u.value?(V(),_(`p`,ot,r(u.value),1)):h(``,!0)]))}}),[[`__scopeId`,`data-v-6873efbb`]]),ct={class:`library`},lt={class:`model-workspace`},ut={class:`card shelf`},dt={class:`shelf-head`},ft={class:`faint`},pt={class:`rows`},mt={key:0,class:`muted`},ht=[`open`,`data-saved-vendor`,`onToggle`],gt={class:`vendor-models`},_t=[`onClick`],vt={class:`who`},yt={key:0,class:`card detail`},bt={class:`card-head`},xt={class:`eyebrow`},St=[`data-tone`],Ct={class:`form-grid`},wt={key:0},Tt=[`placeholder`],Et={class:`wide`},Dt=[`placeholder`],Ot={class:`faint`},kt={class:`form-grid`},At={key:0},jt={key:1},Mt={class:`advanced`},Nt={class:`form-grid`},Pt=[`placeholder`],Ft={class:`faint`},It={class:`caps`},Lt=[`onUpdate:modelValue`,`name`],Rt={key:0,id:`modelTestResult`,class:`notice`,role:`status`},zt={class:`actions`},Bt=[`disabled`],Vt={class:`faint`},Ht={key:0,class:`check`},Ut=[`checked`],Wt=[`disabled`],Gt={key:1,class:`card detail`},Kt={class:`card usage-panel`,"aria-labelledby":`token-usage-title`},qt={class:`usage-intro`},Jt={class:`eyebrow`},Yt={id:`token-usage-title`},Xt={class:`usage-total`},Zt={class:`usage-detail`},Qt={class:`usage-stat`},$t={class:`usage-stat`},en={class:`usage-stat cache-stat`},tn={class:`usage-stat`},nn={class:`usage-foot`},rn={key:0},an={key:1,class:`usage-error`},on={key:2},sn=[`disabled`],cn={class:`model-picker`},ln={class:`muted`},un={class:`catalog-search`},dn=[`placeholder`],fn=[`data-vendor`],pn={class:`vendor-summary`},mn={class:`vendor-name`},hn={class:`presets`},gn=[`data-preset`,`onClick`],_n={key:0,class:`muted search-empty`},vn=N(P({__name:`ModelLibrary`,setup(s){let c=R(()=>B.health?.modelCatalog||[]),l=R(()=>B.health?.effortLabels||{none:i(`关闭`),minimal:i(`极低`),low:i(`低`),medium:i(`中`),high:i(`高`),xhigh:i(`极高`),max:i(`最深`)}),u=K(B.core.models.map(e=>({...e}))),g=K(u.value.length?0:-1),y=K(u.value.length?Q(u.value[0]):``),w=K(!1),T=K(!1),D=K(!1),O=K(``),k=K(``),A=K(null),j=K(!1),N=K(``),P=b(Z());u.value[0]&&Object.assign(P,u.value[0],{apiKey:``});let F=R(()=>g.value>=0&&!!P.id),I=R(()=>{let e=[];for(let t of c.value){if(t.id===`custom`)continue;let n=e.find(e=>e.vendor===t.vendor);n||(n={vendor:t.vendor,models:[]},e.push(n)),n.models.push(t)}return e}),L=R(()=>{let e=O.value.trim().toLocaleLowerCase();return e?I.value.map(t=>({...t,models:t.models.filter(n=>[t.vendor,n.label,n.model,n.summary].filter(Boolean).join(` `).toLocaleLowerCase().includes(e))})).filter(e=>e.models.length):I.value}),z=R(()=>{let e=[];return u.value.forEach((t,n)=>{let r=Q(t),i=e.find(e=>e.vendor===r);i||(i={vendor:r,models:[]},e.push(i)),i.models.push({model:t,index:n})}),e}),W=R(()=>c.value.find(e=>e.id===`custom`)),te=R(()=>c.value.filter(e=>e.vendor&&e.vendor===P.vendor)),re=R(()=>c.value.find(e=>e.id===P.presetId)||c.value.find(e=>e.model&&e.model===P.model&&e.baseUrl===P.baseUrl)),X=R(()=>{let e=re.value?.contextWindows||[];if(e.length<2)return[];let t=Number(P.contextWindow);return e.some(e=>e.contextWindow===t)?e:[...e,{label:i(`已保存 {value}`,{value:fe(t)}),contextWindow:t,maxInputTokens:Number(P.maxInputTokens),maxOutputTokens:Number(P.maxOutputTokens)}]}),ae=R(()=>{let e=Array.isArray(P.reasoningEfforts)&&P.reasoningEfforts.length?[...P.reasoningEfforts]:[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];return P.reasoningEffort&&!e.includes(P.reasoningEffort)&&e.unshift(P.reasoningEffort),e}),oe=R(()=>B.core.models.some(e=>e.id===P.id));function Z(){return{id:``,presetId:``,label:``,provider:``,vendor:``,baseUrl:``,model:``,apiKey:``,hasApiKey:!1,contextWindow:128e3,maxInputTokens:119808,maxOutputTokens:8192,vision:!1,system:!0,json:!0,tools:!1,embedding:!1,embeddingModel:``,reasoningEffort:`none`,reasoningEfforts:[`none`,`low`,`medium`,`high`],thinkingStyle:`openai`,tokenField:`max_tokens`,omitSampling:!1,temperature:.85,topP:1,timeoutMs:9e4,isDefault:!1,enabled:!0}}function Q(e){let t={"volcengine-coding-plan":i(`火山方舟 Coding Plan`),"opencode-go":`OpenCode Go`,"opencode-zen":`OpenCode Zen`,deepseek:`DeepSeek`,openai:`OpenAI`,bedrock:i(`亚马逊 Bedrock`),qwen:i(`通义千问`),moonshot:`Kimi`,kimi:`Kimi`,zhipu:i(`智谱 GLM`),glm:i(`智谱 GLM`),mimo:i(`小米 MiMo`),siliconflow:`SiliconFlow`,openrouter:`OpenRouter`};return String(e?.vendor||``).trim()||t[String(e?.provider||``).toLowerCase()]||String(e?.provider||i(`自定义供应商`))}function se(e,t){let n=t.currentTarget;y.value=n.open?e:``}function ce(e){let{summary:t,contextWindows:n,...r}=e;return{...r,presetId:e.id}}function le(e){let{contextWindows:t,...n}=e;return n}function ue(e){let t=Number(e.contextWindow),n=Number(e.maxOutputTokens),r=Number(e.maxInputTokens);return(!Number.isFinite(t)||t<2)&&(t=2),(!Number.isFinite(n)||n<1)&&(n=1),n>=t&&(n=t-1),(!Number.isFinite(r)||r<1)&&(r=t-n),r+n>t&&(r=t-n),{contextWindow:t,maxInputTokens:r,maxOutputTokens:n}}function de(e){let t=Number(e.target.value),n=X.value.find(e=>e.contextWindow===t);n&&(P.contextWindow=n.contextWindow,P.maxInputTokens=n.maxInputTokens,P.maxOutputTokens=n.maxOutputTokens,B.dirty=!0)}function fe(e){let t=Number(e)||0;return t>=1e6?(t%1048576==0?t/1048576:Number((t/1e6).toFixed(2)))+`M`:t>=1e3?(t%1e3==0?t/1e3:t%1024==0?t/1024:Math.round(t/1e3))+`K`:String(t)}function pe(e){if(e.id===`openrouter`)return i(`按所选模型填写上下文和输出参数`);if(!e.model)return i(`填写模型 ID 和对应参数`);let t=e.contextWindows||[],n=t.length?t.map(e=>e.label).join(` / `):fe(e.contextWindow);return i(`上下文 {context} · 输出 {v}`,{context:n,v:fe(e.maxOutputTokens)})}function me(e){return[`mimo`,`qwen`,`kimi-toggle`].includes(P.thinkingStyle)?i(e===`none`?`关闭`:`开启`):`${l.value[e]||e} / ${e}`}function $(e){return new Intl.NumberFormat(o()).format(Number(e)||0)}async function he(){if(!j.value){j.value=!0;try{A.value=await M(`/core/usage`),N.value=``}catch(e){N.value=e.message}finally{j.value=!1}}}x(()=>void he()),E(()=>B.tick,()=>void he());async function ge(){return B.dirty?await n(i(`放弃当前模型草稿?`),{title:i(`草稿还没保存`),confirmText:i(`放弃`),cancelText:i(`留下`)})?(B.dirty=!1,!0):!1:!0}async function _e(e){let t=u.value[e];t&&t.id!==P.id&&await ge()&&(u.value=u.value.filter(e=>e.id===t.id||B.core.models.some(t=>t.id===e.id)),g.value=u.value.findIndex(e=>e.id===t.id),y.value=Q(t),Object.assign(P,Z(),t,{apiKey:``}),k.value=``)}async function ve(){if(!await ge())return;u.value=B.core.models.map(e=>({...e})),u.value.length?u.value.some(e=>e.id===P.id)||(g.value=0,Object.assign(P,Z(),u.value[0],{apiKey:``})):(g.value=-1,Object.assign(P,Z()));let e=u.value[g.value]||u.value[0];y.value=e?Q(e):``,O.value=``,D.value=!0}function ye(e){u.value=B.core.models.map(e=>({...e}));let t={...Z(),...ce(e),id:`model-`+Date.now(),apiKey:``,hasApiKey:!1,isDefault:u.value.length===0};u.value.push(t),g.value=u.value.length-1,y.value=Q(t),Object.assign(P,t),k.value=``,D.value=!1,B.dirty=!0}function be(e){let t=e.target.value,n=c.value.find(e=>e.id===t);if(!n)return;Object.assign(P,Z(),ce(n),{id:P.id,apiKey:P.apiKey,hasApiKey:P.hasApiKey,isDefault:P.isDefault});let r=u.value[g.value];r&&(r.label=P.label),B.dirty=!0}function xe(){for(let e of u.value)e.isDefault=e.id===P.id;P.isDefault=!0,B.dirty=!0}async function Se(){let e=ue(P),t=u.value.map((t,n)=>le(n===g.value?{...P,...e,isDefault:!!P.isDefault,enabled:P.isDefault?!0:P.enabled!==!1,timeoutMs:Number(P.timeoutMs),temperature:Number(P.temperature),topP:Number(P.topP)}:{...t,isDefault:!!t.isDefault&&t.id!==P.id}));if(!t.some(e=>e.isDefault)&&t.length&&(t[0].isDefault=!0),!w.value){w.value=!0;try{await We(t),B.dirty=!1,await v(),u.value=B.core.models.map(e=>({...e})),Object.assign(P,Z(),u.value[g.value],{apiKey:``}),H(i(`已保存并应用`))}catch(e){H(e.message,!0)}finally{w.value=!1}}}async function Ce(){if(await n(i(`确定删除这个模型?`),{title:i(`删除模型`),confirmText:i(`删除`),danger:!0})){if(B.core.models.some(e=>e.id===P.id)&&await Ge(P.id),B.dirty=!1,await v(),u.value=B.core.models.map(e=>({...e})),k.value=``,!u.value.length){g.value=-1,y.value=``,Object.assign(P,Z());return}g.value=0,y.value=Q(u.value[0]),Object.assign(P,Z(),u.value[0],{apiKey:``})}}async function we(){if(!(!oe.value||B.dirty||T.value)){T.value=!0,k.value=i(`正在测试「{v}」…`,{v:P.label||P.model});try{let e=await Ke(P.id);k.value=i(`✓ {v} 连接成功 · {latency} ms`,{v:P.label||e.model,latency:e.latency}),await v()}catch(e){k.value=e.message}finally{T.value=!1}}}return(n,s)=>(V(),_(`div`,ct,[a(`div`,lt,[a(`aside`,ut,[a(`div`,dt,[a(`h2`,null,[e(r(t(i)(`模型库`))+` `,1),a(`small`,null,r(u.value.length),1)]),a(`button`,{id:`addModel`,class:`small primary`,onClick:ve},r(t(i)(`+ 新增模型`)),1)]),a(`p`,ft,r(t(i)(`群聊、私聊和独处都使用默认模型。其余已启用的模型按这里的顺序作为备用。关掉的模型不会被调用。`)),1),a(`div`,pt,[u.value.length?h(``,!0):(V(),_(`p`,mt,r(t(i)(`还没有模型。`)),1)),(V(!0),_(m,null,S(z.value,e=>(V(),_(`details`,{key:e.vendor,class:`saved-vendor`,open:y.value===e.vendor,"data-saved-vendor":e.vendor,onToggle:t=>se(e.vendor,t)},[a(`summary`,null,[a(`span`,null,r(e.vendor),1),a(`small`,null,r(t(i)(`{length} 个模型`,{length:e.models.length})),1)]),a(`div`,gt,[(V(!0),_(m,null,S(e.models,e=>(V(),_(`button`,{key:e.model.id,class:G([`entity-row`,{selected:g.value===e.index}]),onClick:t=>_e(e.index)},[a(`span`,{class:`badge`,style:d({"--hue":t(ne)(e.model.label||e.model.model||e.model.id)})},r(String(e.model.label||e.model.model||`?`).slice(0,1).toUpperCase()),5),a(`span`,vt,[a(`b`,null,r(e.model.label||e.model.model),1),a(`small`,null,r(e.model.enabled===!1?t(i)(`已关闭`):e.model.isDefault?t(i)(`默认模型`):t(i)(`备用模型`)),1)])],10,_t))),128))])],40,ht))),128))])]),F.value?(V(),_(`section`,yt,[a(`div`,bt,[a(`div`,null,[a(`span`,xt,r(t(i)(`模型档案`)),1),a(`h2`,null,r(P.label||t(i)(`新模型`)),1)]),a(`span`,{class:`chip`,"data-tone":P.hasApiKey?`ok`:`warn`},r((P.isDefault?t(i)(`默认模型 · `):``)+(P.hasApiKey?t(i)(`密钥已保存`):t(i)(`待填写密钥`))),9,St)]),a(`form`,{id:`modelForm`,class:`stack`,onSubmit:f(Se,[`prevent`]),onInput:s[14]||=e=>t(B).dirty=!0},[a(`fieldset`,null,[a(`legend`,null,r(t(i)(`连接`)),1),a(`div`,Ct,[te.value.length>1?(V(),_(`label`,wt,[e(r(t(i)(`同厂商模型`))+` `,1),C(Y,{"model-value":P.presetId,"aria-label":t(i)(`同厂商模型`),options:te.value.map(e=>({value:e.id,label:e.label})),onChange:be},null,8,[`model-value`,`aria-label`,`options`])])):h(``,!0),a(`label`,null,[e(r(t(i)(`显示名称`)),1),q(a(`input`,{"onUpdate:modelValue":s[0]||=e=>P.label=e,name:`label`,required:``},null,512),[[p,P.label]])]),a(`label`,null,[e(r(t(i)(`供应商`)),1),q(a(`input`,{"onUpdate:modelValue":s[1]||=e=>P.provider=e,name:`provider`,placeholder:t(i)(`例如 deepseek、openai`)},null,8,Tt),[[p,P.provider]])]),a(`label`,null,[e(r(t(i)(`API 地址`)),1),q(a(`input`,{"onUpdate:modelValue":s[2]||=e=>P.baseUrl=e,name:`baseUrl`,type:`url`,required:``},null,512),[[p,P.baseUrl]])]),a(`label`,null,[e(r(t(i)(`模型名称`)),1),q(a(`input`,{"onUpdate:modelValue":s[3]||=e=>P.model=e,name:`model`,required:``},null,512),[[p,P.model]])]),a(`label`,Et,[s[18]||=e(` API Key `,-1),q(a(`input`,{"onUpdate:modelValue":s[4]||=e=>P.apiKey=e,name:`apiKey`,type:`password`,autocomplete:`new-password`,placeholder:P.hasApiKey?t(i)(`已保存,留空则保留`):t(i)(`填写供应商提供的密钥`)},null,8,Dt),[[p,P.apiKey]])])])]),a(`fieldset`,null,[a(`legend`,null,r(t(i)(`容量与思考`)),1),a(`p`,Ot,r(t(i)(`官方按输入长度分档计价的模型可以在标准和百万之间切换;输出上限默认是官方最大值,思考强度只列出这个模型支持的档位。`)),1),a(`div`,kt,[X.value.length?(V(),_(`label`,At,[e(r(t(i)(`上下文容量`))+` `,1),C(Y,{name:`contextWindow`,"model-value":P.contextWindow,options:X.value.map(e=>({value:e.contextWindow,label:e.label})),onChange:de},null,8,[`model-value`,`options`])])):(V(),_(`label`,jt,[e(r(t(i)(`上下文容量`)),1),q(a(`input`,{"onUpdate:modelValue":s[5]||=e=>P.contextWindow=e,name:`contextWindow`,type:`number`},null,512),[[p,P.contextWindow,void 0,{number:!0}]])])),a(`label`,null,[e(r(t(i)(`最大输入 Token`)),1),q(a(`input`,{"onUpdate:modelValue":s[6]||=e=>P.maxInputTokens=e,name:`maxInputTokens`,type:`number`},null,512),[[p,P.maxInputTokens,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`最大输出 Token`)),1),q(a(`input`,{"onUpdate:modelValue":s[7]||=e=>P.maxOutputTokens=e,name:`maxOutputTokens`,type:`number`},null,512),[[p,P.maxOutputTokens,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`思考强度`))+` `,1),C(Y,{modelValue:P.reasoningEffort,"onUpdate:modelValue":s[8]||=e=>P.reasoningEffort=e,name:`reasoningEffort`,"aria-label":t(i)(`思考强度`),options:ae.value.map(e=>({value:e,label:me(e)}))},null,8,[`modelValue`,`aria-label`,`options`])])])]),a(`details`,Mt,[a(`summary`,null,r(t(i)(`高级参数与模型能力`)),1),a(`div`,Nt,[a(`label`,null,[e(r(t(i)(`随机程度 Temperature`)),1),q(a(`input`,{"onUpdate:modelValue":s[9]||=e=>P.temperature=e,name:`temperature`,type:`number`,step:`0.05`},null,512),[[p,P.temperature,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`采样范围 Top P`)),1),q(a(`input`,{"onUpdate:modelValue":s[10]||=e=>P.topP=e,name:`topP`,type:`number`,step:`0.05`},null,512),[[p,P.topP,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`超时(毫秒)`)),1),q(a(`input`,{"onUpdate:modelValue":s[11]||=e=>P.timeoutMs=e,name:`timeoutMs`,type:`number`},null,512),[[p,P.timeoutMs,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`知识检索模型`)),1),q(a(`input`,{"onUpdate:modelValue":s[12]||=e=>P.embeddingModel=e,name:`embeddingModel`,placeholder:t(i)(`留空跟随对话模型`)},null,8,Pt),[[p,P.embeddingModel]])])]),a(`p`,Ft,r(t(i)(`打开图片理解后,聊天里的图片会先在本机读取,再连同画面交给这个模型。主模型不能看图时,到会话设置另选一个打开了图片理解的视觉兼容模型。`)),1),a(`div`,It,[(V(!0),_(m,null,S({vision:t(i)(`图片理解`),system:`System Prompt`,json:t(i)(`JSON 输出`),tools:t(i)(`工具调用`),embedding:t(i)(`知识向量`)},(t,n)=>(V(),_(`label`,{key:n,class:`check`},[q(a(`input`,{"onUpdate:modelValue":e=>P[n]=e,name:n,type:`checkbox`},null,8,Lt),[[J,P[n]]]),e(r(t),1)]))),128))])]),k.value?(V(),_(`div`,Rt,r(k.value),1)):h(``,!0),a(`div`,zt,[a(`button`,{class:`primary`,disabled:w.value},r(w.value?t(i)(`正在保存…`):t(i)(`保存模型`)),9,Bt),a(`small`,Vt,r(t(B).dirty?t(i)(`有未保存的修改`):t(i)(`已保存的模型才会用来测试和回复`)),1),P.isDefault?h(``,!0):(V(),_(`label`,Ht,[a(`input`,{type:`checkbox`,checked:P.enabled!==!1,onChange:s[13]||=e=>{P.enabled=e.target.checked,t(B).dirty=!0}},null,40,Ut),e(r(t(i)(`启用这个备用模型`)),1)])),P.isDefault?h(``,!0):(V(),_(`button`,{key:1,id:`setDefaultModel`,type:`button`,onClick:xe},r(t(i)(`设为默认模型`)),1)),oe.value?(V(),_(`button`,{key:2,id:`testModel`,type:`button`,disabled:w.value||T.value||t(B).dirty,onClick:we},r(T.value?t(i)(`正在测试…`):t(B).dirty?t(i)(`保存后测试此模型`):t(i)(`测试此模型连接`)),9,Wt)):h(``,!0),a(`button`,{id:`deleteModel`,type:`button`,class:`danger push`,onClick:Ce},r(t(i)(`删除模型`)),1)])],32)])):(V(),_(`section`,Gt,[C(ee,{title:t(i)(`还没有模型`),text:t(i)(`常见厂商会预填模型参数;OpenRouter 可选 GPT-6 预设,也可用自选模型手动填写模型 ID 和参数。`)},{default:U(()=>[a(`button`,{class:`primary`,onClick:ve},r(t(i)(`+ 新增模型`)),1)]),_:1},8,[`title`,`text`])]))]),C(st),a(`section`,Kt,[a(`div`,qt,[a(`div`,null,[a(`span`,Jt,r(t(i)(`TOKEN LEDGER · 累计用量`)),1),a(`h2`,Yt,r(t(i)(`一路聊到现在`)),1),a(`p`,null,r(t(i)(`统计本机账本记录的模型调用;缓存 Token 已包含在输入量里。`)),1)]),a(`div`,Xt,[a(`strong`,null,r($(A.value?.total)),1),a(`span`,null,r(t(i)(`累计 Token`)),1)])]),a(`div`,Zt,[a(`div`,Qt,[a(`span`,null,r(t(i)(`输入`)),1),a(`b`,null,r($(A.value?.input)),1)]),a(`div`,$t,[a(`span`,null,r(t(i)(`输出`)),1),a(`b`,null,r($(A.value?.output)),1)]),a(`div`,en,[a(`span`,null,[e(r(t(i)(`缓存命中`))+` `,1),a(`small`,null,r(t(i)(`(输入子项)`)),1)]),a(`b`,null,r($(A.value?.cached)),1)]),a(`div`,tn,[a(`span`,null,r(t(i)(`调用次数`)),1),a(`b`,null,r($(A.value?.calls)),1)])]),a(`div`,nn,[A.value?.since?(V(),_(`small`,rn,[e(r(t(i)(`从 {v} 开始记录 · {v2} 为模型返回用量`,{v:new Date(A.value.since).toLocaleDateString(t(o)()),v2:$(A.value.reportedTokens)}))+` `,1),A.value.estimatedCalls?(V(),_(m,{key:0},[e(r(t(i)(`· {v} 次调用按文本估算`,{v:$(A.value.estimatedCalls)})),1)],64)):h(``,!0)])):N.value?(V(),_(`small`,an,r(N.value),1)):(V(),_(`small`,on,r(t(i)(`还没有模型调用记录。`)),1)),a(`button`,{type:`button`,class:`usage-refresh`,disabled:j.value,onClick:he},r(j.value?t(i)(`更新中…`):t(i)(`刷新统计 ↻`)),9,sn)])]),C(ie,{open:D.value,title:t(i)(`选择模型`),eyebrow:`MODELS`,width:`880px`,onClose:s[17]||=e=>D.value=!1},{default:U(()=>[a(`div`,cn,[a(`p`,ln,r(t(i)(`先选供应商,再挑具体模型;支持搜索。火山方舟 Coding Plan 已预填套餐专用接口与型号参数,请勿换成普通推理 API 地址。`)),1),a(`label`,un,[a(`span`,null,r(t(i)(`搜索模型或供应商`)),1),q(a(`input`,{"onUpdate:modelValue":s[15]||=e=>O.value=e,type:`search`,placeholder:t(i)(`例如:火山方舟、Kimi K3、DeepSeek`)},null,8,dn),[[p,O.value]])]),(V(!0),_(m,null,S(L.value,e=>(V(),_(`details`,{key:e.vendor,class:`vendor`,"data-vendor":e.vendor},[a(`summary`,pn,[a(`span`,mn,[a(`b`,null,r(e.vendor),1),a(`small`,null,r(t(i)(`{length} 个预设`,{length:e.models.length})),1)]),s[19]||=a(`span`,{class:`vendor-chevron`,"aria-hidden":`true`},`⌄`,-1)]),a(`div`,hn,[(V(!0),_(m,null,S(e.models,e=>(V(),_(`button`,{key:e.id,type:`button`,class:`preset-card`,"data-preset":e.id,onClick:t=>ye(e)},[a(`b`,null,r(e.label),1),a(`small`,null,r(e.model||t(i)(`填写你在 OpenRouter 选择的模型 ID`)),1),a(`small`,null,r(pe(e)),1),a(`small`,null,r(e.summary),1)],8,gn))),128))])],8,fn))),128)),L.value.length?h(``,!0):(V(),_(`p`,_n,r(t(i)(`没有找到匹配的模型预设。`)),1)),W.value?(V(),_(`button`,{key:1,type:`button`,class:`preset-card custom`,"data-preset":`custom`,onClick:s[16]||=e=>ye(W.value)},[a(`b`,null,r(W.value.label),1),a(`small`,null,r(W.value.summary),1)])):h(``,!0)])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-59f18516`]]),yn={class:`switch`},bn=[`name`,`disabled`],xn=P({__name:`Toggle`,props:z({name:{},disabled:{type:Boolean}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=O(e,`modelValue`);return(n,r)=>(V(),_(`label`,yn,[q(a(`input`,{"onUpdate:modelValue":r[0]||=e=>t.value=e,type:`checkbox`,name:e.name,disabled:e.disabled},null,8,bn),[[J,t.value]]),a(`span`,null,[T(n.$slots,`default`)])]))}}),Sn={class:`runtime-grid`},Cn={class:`card-head`},wn={class:`eyebrow`},Tn={class:`switches`},En={class:`save-bar`},Dn={class:`primary`,type:`submit`},On={class:`faint`},kn={class:`card numbers`},An=[`title`],jn=N(P({__name:`Runtime`,setup(e){let n=K(!!B.health.settings.enabled),o=K(!!B.health.settings.demo),s=R(()=>(B.core.sessions||[]).filter(e=>e.enabled&&!e.archived).length),c=R(()=>{let e=B.health.backup;if(!e)return null;if(!e.enabled)return{value:i(`已关闭`),caption:i(`自动备份`),tone:`warn`,title:``};if(e.lastError)return{value:i(`失败`),caption:i(`自动备份出错,稍后重试`),tone:`danger`,title:e.lastError.message};if(!e.latest)return{value:i(`还没有`),caption:i(`自动备份,运行一阵后会做第一份`),tone:``,title:``};let t=Math.max(1,Math.round(e.latest.bytes/1048576));return{value:re(e.latest.at),caption:i(`上次自动备份 · {mb} MB · 已留 {count}/{keep} 份`,{mb:t,count:e.count,keep:e.keep}),tone:``,title:e.latest.name}});async function l(){try{await L({enabled:n.value,demo:o.value}),B.dirty=!1,B.health=await w(),H(i(`已保存并应用`))}catch(e){H(e.message,!0)}}return(e,u)=>(V(),_(`div`,Sn,[a(`form`,{id:`runtime`,class:`card`,onSubmit:f(l,[`prevent`]),onChange:u[2]||=e=>t(B).dirty=!0},[a(`div`,Cn,[a(`div`,null,[a(`span`,wn,r(t(i)(`运行开关`)),1),a(`h2`,null,r(t(i)(`TA 现在可以说话吗`)),1)])]),a(`div`,Tn,[C(xn,{modelValue:n.value,"onUpdate:modelValue":u[0]||=e=>n.value=e,name:`enabled`},{default:U(()=>[a(`b`,null,r(t(i)(`允许参与聊天`)),1),a(`small`,null,r(t(i)(`总开关。关掉后 TA 不看也不回任何会话,心智照常保存。`)),1)]),_:1},8,[`modelValue`]),C(xn,{modelValue:o.value,"onUpdate:modelValue":u[1]||=e=>o.value=e,name:`demo`},{default:U(()=>[a(`b`,null,r(t(i)(`仅模拟运行,不向 QQ 发送`)),1),a(`small`,null,r(t(i)(`模拟模式下,「对话」里可以发模拟消息走完整流程;它们写进模拟会话,不进入真实记忆。`)),1)]),_:1},8,[`modelValue`])]),a(`div`,En,[a(`button`,Dn,r(t(i)(`保存运行状态`)),1),a(`small`,On,r(t(B).dirty?t(i)(`有未保存的修改`):t(i)(`已保存,立刻生效`)),1)])],32),a(`section`,kn,[a(`button`,{onClick:u[3]||=e=>t(k)(`chats`)},[a(`b`,null,r(s.value),1),a(`span`,null,r(t(i)(`参与中的会话`)),1)]),a(`button`,{onClick:u[4]||=e=>t(k)(`system`,`models`)},[a(`b`,null,r(t(B).core.models.length),1),a(`span`,null,r(t(i)(`可用模型`)),1)]),a(`button`,{onClick:u[5]||=e=>t(k)(`system`,`connect`)},[a(`b`,null,r(t(B).health.connection?.online?t(i)(`在线`):t(i)(`离线`)),1),a(`span`,null,r(t(i)(`QQ 连接`)),1)]),c.value?(V(),_(`button`,{key:0,class:G([`stat`,c.value.tone]),title:c.value.title,"data-testid":`backup-status`,type:`button`,onClick:u[6]||=e=>t(k)(`system`,`storage`)},[a(`b`,null,r(c.value.value),1),a(`span`,null,r(c.value.caption),1)],10,An)):h(``,!0)])]))}}),[[`__scopeId`,`data-v-1f197523`]]),Mn={class:`card search-profile`},Nn={class:`eyebrow`},Pn={class:`muted`},Fn={key:0,class:`faint`},In={class:`check`},Ln=[`disabled`],Rn={class:`search-fields`},zn=[`disabled`],Bn=[`disabled`,`placeholder`],Vn=[`disabled`],Hn=[`disabled`],Un=[`disabled`],Wn={class:`faint`},Gn={class:`search-usage`,role:`status`},Kn={class:`chip`},qn={class:`faint`},Jn={class:`faint`},Yn={class:`row`},Xn=[`disabled`],Zn=[`disabled`],Qn={key:0,class:`faint`},$n=[`role`],er=N(P({__name:`SearchProfile`,setup(n){let o=[`provider`,`enabled`,`baseUrl`,`timeoutMs`,`maxResults`,`dailyLimit`],s=b({provider:`tavily`,enabled:!0,baseUrl:``,apiKey:``,timeoutMs:2e4,maxResults:5,dailyLimit:12}),c=K(null),l=K(!1),u=K(!1),d=K(``),m=K(!1),g=new Map,v=`tavily`,y=R(()=>u.value&&(!!s.apiKey.trim()||o.some(e=>s[e]!==c.value?.[e]))),S=e=>e===`brave`?`Brave`:`Tavily`,w=R(()=>c.value?.dailyLimit===0?i(`不限`):c.value?.dailyLimit??12);E(y,e=>{B.dirty=e}),E(()=>[B.tick,B.pulse],()=>{u.value&&!l.value&&B.page===`system`&&B.sub===`search`&&T().catch(()=>{})});async function T(){c.value=await M(`/mind/time/search`)}async function D(){try{await T(),Object.assign(s,c.value,{apiKey:``}),v=s.provider,u.value=!0}catch(e){H(e.message,!0)}}async function O(){if(l.value)return;l.value=!0;let e=s.provider;g.set(v,{...s,provider:v});try{Object.assign(s,g.get(e)||{...await M(`/mind/time/search?provider=`+e),apiKey:``}),v=e,d.value=``}catch(e){s.provider=v,H(e.message,!0)}finally{l.value=!1}}function k(){return Object.fromEntries([...o,`apiKey`].map(e=>[e,s[e]]))}async function A(){if(!l.value){l.value=!0;try{let e=await M(`/mind/time/search`,`PATCH`,k());c.value=e,Object.assign(s,e,{apiKey:``}),g.set(s.provider,{...s}),v=s.provider,H(i(`搜索配置已保存并生效`))}catch(e){H(e.message,!0)}finally{l.value=!1}}}async function N(){if(!l.value){l.value=!0,d.value=``,m.value=!1;try{let e=await M(`/mind/time/search/test`,`POST`,k()),t={source:e.profile.mode===`web`?i(`{provider} 联网检索`,{provider:S(e.profile.provider)}):e.profile.materialLabel,count:e.results.length};d.value=y.value?i(`{source}测试通过,返回 {count} 条资料。测试不占用每日查询额度;当前填写的配置尚未保存。`,t):i(`{source}测试通过,返回 {count} 条资料。测试不占用每日查询额度。`,t)}catch(e){m.value=!0,d.value=i(`{error}。本次测试不占用每日查询额度。`,{error:e.message})}finally{try{await T()}catch{}l.value=!1}}}return x(D),j(()=>{B.dirty=!1}),(n,o)=>(V(),_(`section`,Mn,[a(`span`,Nn,r(t(i)(`SEARCH · 独立搜索`)),1),a(`h2`,null,r(t(i)(`接触世界的资料`)),1),a(`p`,Pn,r(t(i)(`配置后优先联网检索。未配置密钥或关闭独立搜索时,使用当前模型整理已有知识。`)),1),u.value?(V(),_(`p`,Fn,r(t(i)(`当前生效:{v}。表单修改保存后生效。`,{v:c.value.mode===`web`?t(i)(`{provider} · 联网检索资料`,{provider:S(c.value.provider)}):c.value.materialLabel})),1)):h(``,!0),u.value?(V(),_(`form`,{key:1,onSubmit:f(A,[`prevent`])},[a(`label`,In,[q(a(`input`,{"onUpdate:modelValue":o[0]||=e=>s.enabled=e,type:`checkbox`,disabled:l.value},null,8,Ln),[[J,s.enabled]]),e(r(t(i)(`启用独立搜索`)),1)]),a(`div`,Rn,[a(`label`,null,[e(r(t(i)(`提供方`)),1),C(Y,{modelValue:s.provider,"onUpdate:modelValue":o[1]||=e=>s.provider=e,"aria-label":t(i)(`搜索提供方`),disabled:l.value,options:[{value:`tavily`,label:`Tavily`},{value:`brave`,label:`Brave`}],onChange:O},null,8,[`modelValue`,`aria-label`,`disabled`])]),a(`label`,null,[e(r(t(i)(`搜索地址`)),1),q(a(`input`,{"onUpdate:modelValue":o[2]||=e=>s.baseUrl=e,type:`url`,required:``,name:`searchUrl`,disabled:l.value},null,8,zn),[[p,s.baseUrl]])]),a(`label`,null,[e(r(t(i)(`独立密钥`)),1),q(a(`input`,{"onUpdate:modelValue":o[3]||=e=>s.apiKey=e,type:`password`,autocomplete:`new-password`,name:`searchKey`,disabled:l.value,placeholder:s.hasApiKey?t(i)(`已保存,留空保留`):t(i)(`填写该提供方的搜索密钥`)},null,8,Bn),[[p,s.apiKey]])]),a(`label`,null,[e(r(t(i)(`超时(毫秒)`)),1),q(a(`input`,{"onUpdate:modelValue":o[4]||=e=>s.timeoutMs=e,type:`number`,min:`1000`,max:`120000`,disabled:l.value},null,8,Vn),[[p,s.timeoutMs,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`每次结果数`)),1),q(a(`input`,{"onUpdate:modelValue":o[5]||=e=>s.maxResults=e,type:`number`,min:`1`,max:`20`,disabled:l.value},null,8,Hn),[[p,s.maxResults,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`每日查询上限`)),1),q(a(`input`,{"onUpdate:modelValue":o[6]||=e=>s.dailyLimit=e,name:`searchDailyLimit`,type:`number`,min:`0`,max:`100000`,disabled:l.value},null,8,Un),[[p,s.dailyLimit,void 0,{number:!0}]]),a(`small`,Wn,r(t(i)(`可手动调整;0 表示不限。保存后立即生效。`)),1)])]),a(`div`,Gn,[a(`span`,Kn,r(t(i)(`今日有效查询 {v} / {limitLabel}`,{v:c.value.used||0,limitLabel:w.value})),1),a(`small`,qn,r(t(i)(`{v} 次进行中 · {v2} 次失败 · {v3} 次测试`,{v:c.value.usage?.running||0,v2:c.value.usage?.failed||0,v3:c.value.usage?.diagnostics||0})),1)]),a(`p`,Jn,r(t(i)(`测试当前填写的配置,不会自动保存。失败与连接测试不占本地每日额度;提供方的账户额度由提供方管理。`)),1),a(`div`,Yn,[a(`button`,{class:`primary`,disabled:l.value},r(t(i)(`保存搜索`)),9,Xn),a(`button`,{type:`button`,disabled:l.value,onClick:N},r(l.value?t(i)(`处理中…`):t(i)(`测试连接`)),9,Zn),y.value?(V(),_(`span`,Qn,r(t(i)(`有尚未保存的修改`)),1)):h(``,!0)]),d.value?(V(),_(`p`,{key:0,role:m.value?`alert`:`status`,class:G([`search-result`,{failed:m.value}])},r(d.value),11,$n)):h(``,!0)],32)):h(``,!0)]))}}),[[`__scopeId`,`data-v-e874d8b6`]]),tr={key:0,class:`card data-transfer`,"aria-labelledby":`data-transfer-title`},nr={class:`eyebrow`},rr={id:`data-transfer-title`},ir={class:`transfer-note`},ar={class:`transfer-note`},or={class:`transfer-actions`},sr=[`disabled`],cr=[`disabled`],lr=[`aria-label`],ur={class:`transfer-note`},dr={key:0,class:`transfer-progress`,role:`status`},fr={key:1,class:`transfer-error`,role:`alert`},pr={key:2,class:`transfer-note`},mr={key:3,class:`transfer-preview`},hr={class:`eyebrow`},gr={class:`transfer-note`},_r={class:`transfer-counts`},vr={class:`transfer-actions`},yr=[`disabled`],br=[`disabled`],xr=N(P({__name:`DataTransfer`,setup(e){let o=K(null),c=K(null),d=K(),f=K(``),p=K(``),g=!0,v=null,y=R(()=>!!f.value),b=R(()=>f.value===`restarting`?i(`正在保留快照并重启加载,请等待…`):f.value===`uploading`?i(`正在上传数据文件…`):f.value===`exporting`?i(`正在生成完整数据包…`):i(`正在校验数据文件…`)),C=R(()=>{let e=c.value?.summary?.tables||{};return[[i(`聊天记录`),e.core_events||e.messages||0],[i(`记忆`),e.core_memories||e.memories||0],[i(`待办`),e.mind_time_tasks||0],[i(`作品`),e.mind_time_works||0],[i(`日记`),e.mind_diary||0]]}),w=()=>new Promise(e=>setTimeout(e,800));async function T(e,t=!1){for(let n=0;n<4500&&g;n++){try{let n=await M(`/storage/transfer/jobs/`+e);if(n.status===`error`)throw Error(n.error||i(`数据处理失败`));if(n.status===(t?`done`:`ready`))return n;if(n.status===`expired`)throw Error(i(`数据文件已过期,请重新选择`))}catch(e){if(!t||!(e instanceof TypeError)&&e.message!==i(`请求失败`))throw e}await w()}throw Error(i(`等待数据处理超时,请检查实例运行状态`))}async function E(){if(!y.value){f.value=`exporting`,p.value=``;try{let e=await M(`/storage/transfer/export`,`POST`,{});if(await T(e.id),!g)return;let t=document.createElement(`a`);t.href=`/api/storage/transfer/download/`+e.id,t.download=``,document.body.appendChild(t),t.click(),t.remove(),H(i(`数据包已生成,浏览器将开始下载`))}catch(e){g&&(p.value=e.message)}finally{g&&(f.value=``)}}}async function O(e){let t=e.target,n=t.files?.[0];if(t.value=``,n&&!y.value){if(p.value=``,c.value=null,n.size>(o.value?.maxBytes||0)){p.value=i(`数据文件超过导入大小限制`);return}f.value=`uploading`,v=new AbortController;try{await u();let e=await fetch(`/api/storage/transfer/upload`,{method:`POST`,credentials:`same-origin`,headers:{"Content-Type":`application/octet-stream`,"X-LuckyTri-Filename":encodeURIComponent(n.name),"X-LuckyTri-Locale":s.value},body:n,signal:v.signal});if(e.status===401)throw l(),Error(i(`请先登录管理台`));let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||i(`数据上传失败`));f.value=`checking`;let r=await T(t.id);g&&(c.value=r)}catch(e){g&&(p.value=e.message)}finally{v=null,g&&(f.value=``)}}}async function k(){if(c.value&&!y.value)try{await M(`/storage/transfer/jobs/`+c.value.id,`DELETE`),c.value=null}catch(e){p.value=e.message}}async function A(){if(!c.value||y.value||!await n(i(`用这份数据替换当前数据,并保留导入前快照。实例将重启,导入后自动回复关闭。本机管理密码与 QQ 连接配置保持不变。`),{title:i(`确认导入数据`),confirmText:i(`导入并重启`),danger:!0}))return;f.value=`restarting`,p.value=``;let e=c.value.id;try{if(await M(`/storage/transfer/import`,`POST`,{id:e}),await T(e,!0),!g)return;D(),location.reload()}catch(e){g&&(p.value=e.message)}finally{g&&(f.value=``)}}return x(async()=>{try{o.value=await M(`/storage/transfer`)}catch(e){g&&(p.value=e.message)}}),I(()=>{g=!1,v?.abort()}),(e,n)=>o.value?.available?(V(),_(`section`,tr,[a(`span`,nr,r(t(i)(`DATA · 导入与导出`)),1),a(`h2`,rr,r(t(i)(`带上记忆,继续生活。`)),1),a(`p`,ir,r(t(i)(`导出数据库内的聊天、记忆、待办、作品、知识与设置。插件文件、知识库原始文件和本机 .env 不在数据包中。`)),1),a(`p`,ar,r(t(i)(`数据包包含私聊内容和模型设置中的密钥,请存放在你信任的位置。导入前会校验,确认后才替换当前数据。`)),1),a(`div`,or,[a(`button`,{class:`primary`,type:`button`,disabled:y.value,onClick:E},r(t(i)(`导出数据包`)),9,sr),a(`button`,{type:`button`,disabled:y.value,onClick:n[0]||=e=>d.value?.click()},r(t(i)(`选择导入文件`)),9,cr),a(`input`,{ref_key:`input`,ref:d,class:`transfer-file`,type:`file`,accept:`.luckytri,.db,.sqlite,.sqlite3`,"aria-label":t(i)(`导入数据文件`),onChange:O},null,40,lr)]),a(`p`,ur,r(t(i)(`支持 .luckytri 数据包和已有 SQLite 备份,单个文件最多 {size} GiB。`,{size:(o.value.maxBytes/1073741824).toFixed(0)})),1),y.value?(V(),_(`p`,dr,r(b.value),1)):h(``,!0),p.value?(V(),_(`p`,fr,r(p.value),1)):h(``,!0),o.value.lastImport?.status===`done`?(V(),_(`p`,pr,r(t(i)(`上次数据导入已完成,自动回复在导入时关闭。请检查连接、模型和待办后再开启;插件需重新安装或确认权限。`)),1)):h(``,!0),c.value?(V(),_(`div`,mr,[a(`span`,hr,r(t(i)(`校验通过 · 尚未导入`)),1),a(`h3`,null,r(c.value.summary?.name),1),a(`p`,gr,r(c.value.name)+` · `+r(t(i)(`数据库版本 {from} → {to}`,{from:c.value.originalVersion,to:c.value.summary?.schemaVersion})),1),a(`div`,_r,[(V(!0),_(m,null,S(C.value,([e,t])=>(V(),_(`div`,{key:e},[a(`b`,null,r(t),1),a(`span`,null,r(e),1)]))),128))]),a(`div`,vr,[a(`button`,{class:`primary`,type:`button`,disabled:y.value,onClick:A},r(t(i)(`导入并重启`)),9,yr),a(`button`,{type:`button`,disabled:y.value,onClick:k},r(t(i)(`取消导入`)),9,br)])])):h(``,!0)])):h(``,!0)}}),[[`__scopeId`,`data-v-ea16c0c1`]]),Sr={class:`storage-page`},Cr={class:`card storage-overview`},wr={class:`eyebrow`},Tr={key:0,class:`storage-metrics`},Er={key:0,class:`storage-error`,role:`alert`},Dr={key:1,class:`storage-grid`},Or={class:`card-head`},kr={class:`eyebrow`},Ar={class:`storage-check`},jr={class:`storage-fields`},Mr=[`aria-label`],Nr=[`aria-label`],Pr=[`aria-label`],Fr={class:`storage-note`},Ir={key:0,class:`storage-note`},Lr={key:1,class:`storage-error`},Rr=[`disabled`],zr={class:`card storage-list`},Br={class:`card-head`},Vr={class:`eyebrow`},Hr={class:`storage-note`},Ur={class:`storage-actions`},Wr=[`disabled`],Gr=[`disabled`],Kr=[`disabled`],qr={class:`storage-scroll`},Jr=[`checked`,`disabled`,`aria-label`,`onChange`],Yr={class:`storage-item`},Xr={key:0,class:`storage-error`,role:`alert`},Zr={class:`storage-footer`},Qr=[`disabled`],$r=N(P({__name:`BackupManager`,setup(s){let c=K(null),l=K({enabled:!0,time:`04:30`,retainDays:14,keepFull:2}),u=K([]),d=K(!1),g=K(``),v=K([]),y=!0,b=e=>`${e.scope}:${e.name}`,w=R(()=>c.value?.entries.filter(e=>u.value.includes(b(e)))||[]),T=R(()=>w.value.reduce((e,t)=>e+t.bytes,0)),E=e=>e===0?`0 B`:e>=1073741824?`${(e/1073741824).toFixed(2)} GiB`:`${Math.max(.01,e/1048576).toFixed(2)} MiB`,D=e=>new Date(e).toLocaleString(o()),O=e=>({auto:i(`自动备份`),full:i(`完整备份`),migration:i(`迁移快照`),legacy:i(`旧版本备份`),snapshot:i(`升级前快照`),import:i(`导入前快照`)})[e];async function k(e=!1){try{g.value=``;let t=await M(`/storage/cleanup`);if(!y)return;if(c.value=t,e)l.value={...c.value.policy},u.value=[],B.dirty=!1;else{let e=new Set(c.value.entries.filter(e=>!e.protected).map(b));u.value=u.value.filter(t=>e.has(t))}}catch(e){y&&(g.value=e.message)}}function A(){B.dirty=!0}function j(e){let t=b(e);u.value=u.value.includes(t)?u.value.filter(e=>e!==t):[...u.value,t]}function N(){u.value=(c.value?.plan.items||[]).map(b)}function P(){u.value=(c.value?.entries||[]).filter(e=>e.kind===`full`&&!e.protected).map(b)}async function F(){if(!d.value){d.value=!0;try{let e=await M(`/storage/cleanup`,`PATCH`,{enabled:l.value.enabled,time:l.value.time,retainDays:Number(l.value.retainDays),keepFull:Number(l.value.keepFull)});c.value=e,l.value={...e.policy},B.dirty=!1,H(i(`备份整理规则已保存`))}catch(e){H(e.message,!0)}finally{d.value=!1}}}async function L(){if(!w.value.length||d.value)return;let e=w.value.map(({scope:e,name:t,bytes:n,modified:r})=>({scope:e,name:t,bytes:n,modified:r}));if(await n(i(`将清理选中的 {count} 份备份,释放约 {size}。这些历史恢复点清理后无法从本机找回。`,{count:e.length,size:E(T.value)}),{title:i(`清理所选备份`),confirmText:i(`清理所选`),danger:!0})){d.value=!0;try{let t=await M(`/storage/cleanup/manual`,`POST`,{items:e});v.value=t.failures||[];let n=new Set((t.failures||[]).map(e=>`${e.scope}:${e.name}`));u.value=u.value.filter(e=>n.has(e)),await k(),H(i(`已清理 {count} 份备份,释放 {size}`,{count:t.removed.length,size:E(t.bytes)})+(v.value.length?i(`;部分未清理,详情见列表`):``),v.value.length>0)}catch(e){H(e.message,!0),await k()}finally{d.value=!1}}}return x(()=>k(!0)),I(()=>{y=!1}),(n,o)=>(V(),_(`div`,Sr,[a(`section`,Cr,[a(`span`,wr,r(t(i)(`DATA · 数据与备份`)),1),a(`h2`,null,r(t(i)(`留住重要的,整理重复的。`)),1),a(`p`,null,r(t(i)(`这里管理历史备份。聊天、记忆和作品仍在正在运行的数据库里,不会被列入清理。`)),1),c.value?(V(),_(`div`,Tr,[a(`div`,null,[a(`b`,null,r(E(c.value.totalBytes)),1),a(`span`,null,r(t(i)(`可管理的历史备份`)),1)]),a(`div`,null,[a(`b`,null,r(c.value.entries.length),1),a(`span`,null,r(t(i)(`份数据库副本`)),1)]),a(`div`,null,[a(`b`,null,r(E(c.value.plan.bytes)),1),a(`span`,null,r(t(i)(`按当前规则可定时整理`)),1)])])):h(``,!0)]),g.value?(V(),_(`p`,Er,r(g.value),1)):h(``,!0),C(xr),c.value?(V(),_(`div`,Dr,[a(`form`,{class:`card storage-policy`,onSubmit:f(F,[`prevent`])},[a(`div`,Or,[a(`div`,null,[a(`span`,kr,r(t(i)(`定时整理`)),1),a(`h2`,null,r(t(i)(`每天给备份留一点空间`)),1)])]),a(`label`,Ar,[q(a(`input`,{"onUpdate:modelValue":o[0]||=e=>l.value.enabled=e,type:`checkbox`,onChange:A},null,544),[[J,l.value.enabled]]),e(r(t(i)(`启用定时整理`)),1)]),a(`div`,jr,[a(`label`,null,[e(r(t(i)(`每天执行时间`)),1),q(a(`input`,{"onUpdate:modelValue":o[1]||=e=>l.value.time=e,type:`text`,inputmode:`numeric`,maxlength:`5`,placeholder:`04:30`,"aria-label":t(i)(`每天执行时间`),onInput:A},null,40,Mr),[[p,l.value.time]])]),a(`label`,null,[e(r(t(i)(`完整备份保留天数`)),1),q(a(`input`,{"onUpdate:modelValue":o[2]||=e=>l.value.retainDays=e,type:`number`,min:`1`,max:`3650`,"aria-label":t(i)(`完整备份保留天数`),onInput:A},null,40,Nr),[[p,l.value.retainDays,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`完整备份最多保留份数`)),1),q(a(`input`,{"onUpdate:modelValue":o[3]||=e=>l.value.keepFull=e,type:`number`,min:`0`,max:`100`,"aria-label":t(i)(`完整备份最多保留份数`),onInput:A},null,40,Pr),[[p,l.value.keepFull,void 0,{number:!0}]])])]),a(`p`,Fr,r(t(i)(`时间按服务器本地时区 {zone}。完整备份超过保留天数或数量上限便会定时整理;数量填 0 表示不保留完整备份。手动清理可选择完整备份和迁移快照,执行前会校验同一实例的近期自动恢复点。`,{zone:c.value.serverTimeZone})),1),c.value.last?(V(),_(`p`,Ir,r(c.value.last.error&&c.value.last.removed===0?t(i)(`上次整理未执行:{error}`,{error:c.value.last.error}):t(i)(`上次整理:{time} · {count} 份 · {size}`,{time:D(c.value.last.at),count:c.value.last.removed,size:E(c.value.last.bytes)})),1)):h(``,!0),c.value.last?.error&&c.value.last.removed>0?(V(),_(`p`,Lr,r(c.value.last.error),1)):h(``,!0),a(`button`,{class:`primary`,type:`submit`,disabled:d.value},r(d.value?t(i)(`处理中…`):t(i)(`保存整理规则`)),9,Rr)],32),a(`section`,zr,[a(`div`,Br,[a(`div`,null,[a(`span`,Vr,r(t(i)(`手动整理`)),1),a(`h2`,null,r(t(i)(`挑选历史恢复点`)),1)])]),a(`p`,Hr,r(t(i)(`自动备份已有自己的轮换规则。迁移、旧版本和升级前快照只由你手动挑选;清理前会再次核对文件和恢复点。`)),1),a(`div`,Ur,[a(`button`,{type:`button`,disabled:d.value||!c.value.plan.items.length,onClick:N},r(t(i)(`选中规则建议`)),9,Wr),a(`button`,{type:`button`,disabled:d.value,onClick:P},r(t(i)(`选中完整备份`)),9,Gr),a(`button`,{type:`button`,disabled:d.value||!u.value.length,onClick:o[4]||=e=>u.value=[]},r(t(i)(`取消选择`)),9,Kr)]),a(`div`,qr,[(V(!0),_(m,null,S(c.value.entries,e=>(V(),_(`label`,{key:b(e),class:G([`storage-row`,{protected:e.protected}])},[a(`input`,{type:`checkbox`,checked:u.value.includes(b(e)),disabled:d.value||e.protected||c.value.running,"aria-label":e.name,onChange:t=>j(e)},null,40,Jr),a(`span`,Yr,[a(`strong`,null,r(e.name),1),a(`small`,null,r(O(e.kind))+` · `+r(D(e.at))+` · `+r(e.manifest?t(i)(`有校验清单`):t(i)(`旧备份无清单`))+r(e.protected?` · `+(e.protectionReason||t(i)(`保留恢复点`)):``),1)]),a(`b`,null,r(E(e.bytes)),1)],2))),128))]),v.value.length?(V(),_(`div`,Xr,[a(`p`,null,r(t(i)(`部分备份未清理,请刷新列表后重试`)),1),(V(!0),_(m,null,S(v.value,e=>(V(),_(`p`,{key:e.name},r(e.name)+` · `+r(e.error),1))),128))])):h(``,!0),a(`div`,Zr,[a(`span`,null,r(t(i)(`已选 {count} 份 · 约 {size}`,{count:w.value.length,size:E(T.value)})),1),a(`button`,{class:`primary`,type:`button`,disabled:d.value||c.value.running||!w.value.length,onClick:L},r(t(i)(`清理所选`)),9,Qr)])])])):h(``,!0)]))}}),[[`__scopeId`,`data-v-4593780e`]]),ei={class:`card password-settings`},ti={class:`row`},ni=[`disabled`],ri=N(P({__name:`PasswordSettings`,setup(n){let o=K(``),s=K(``),c=K(``),l=K(!1);async function u(){if(!l.value){if(s.value!==c.value){H(i(`两次输入的密码不一致`),!0);return}l.value=!0;try{await y(`password`,{currentPassword:o.value,password:s.value}),o.value=s.value=c.value=``,H(i(`管理密码已更新`))}catch(e){H(e.message,!0)}finally{l.value=!1}}}return(n,d)=>(V(),_(`section`,ei,[a(`h2`,null,r(t(i)(`管理密码`)),1),a(`p`,null,r(t(i)(`一个密码管理这个小世界。修改后,其他浏览器需要重新登录。`)),1),a(`form`,{onSubmit:f(u,[`prevent`])},[a(`label`,null,[e(r(t(i)(`当前密码`)),1),q(a(`input`,{"onUpdate:modelValue":d[0]||=e=>o.value=e,name:`currentPassword`,type:`password`,autocomplete:`current-password`,required:``},null,512),[[p,o.value]])]),a(`label`,null,[e(r(t(i)(`新密码`)),1),q(a(`input`,{"onUpdate:modelValue":d[1]||=e=>s.value=e,name:`newPassword`,type:`password`,autocomplete:`new-password`,minlength:`8`,maxlength:`256`,required:``},null,512),[[p,s.value]])]),a(`label`,null,[e(r(t(i)(`确认密码`)),1),q(a(`input`,{"onUpdate:modelValue":d[2]||=e=>c.value=e,name:`confirmNewPassword`,type:`password`,autocomplete:`new-password`,minlength:`8`,maxlength:`256`,required:``},null,512),[[p,c.value]])]),a(`div`,ti,[a(`button`,{class:`primary`,disabled:l.value},r(t(i)(`修改密码`)),9,ni),a(`button`,{type:`button`,onClick:d[3]||=(...e)=>t(W)&&t(W)(...e)},r(t(i)(`退出登录`)),1)])],32)]))}}),[[`__scopeId`,`data-v-36cd9f70`]]),ii={class:`card update-settings`,"aria-labelledby":`update-title`},ai={id:`update-title`},oi=[`disabled`],si={class:`kv`},ci={key:0,class:`muted`,role:`alert`},li={class:`muted small-text`},ui={key:1,class:`update-how stack tight`},di=[`disabled`],fi={key:1,role:`status`},pi={key:2,class:`error-text`,role:`alert`},mi={key:3,class:`muted`},hi={class:`update-links`},gi=[`href`],_i=[`href`],vi=N(P({__name:`UpdateSettings`,setup(e){let o=K(null),s=K(!1),l=K(!1),u,d=!1,f=c({queued:A(`更新已开始`),downloading:A(`正在下载新版本…`),checking:A(`正在检查新程序…`),stopping:A(`正在保存当下并停止实例…`),backup:A(`正在保留更新前的校验备份…`),restarting:A(`正在切换版本并重启…`),verifying:A(`正在确认新实例就绪…`),restoring:A(`正在恢复原版本和数据…`),done:A(`更新与重启已完成`),error:A(`更新未完成`)});function p(e){return e&&![`done`,`error`].includes(e.status)}async function g(){if(!d){try{let e=await M(`/system/update`);if(o.value=e,e.operation?.status===`done`){l.value=!1,location.reload();return}l.value=!!p(e.operation)}catch{}l.value&&!d&&(u=setTimeout(g,1800))}}j(()=>{d=!0,clearTimeout(u)});let v=c({unchecked:A(`尚未检查更新`),available:A(`有新版本可用`),current:A(`已是最新发布版本`),ahead:A(`当前版本领先于 npm 发布版本`),unavailable:A(`暂时无法检查更新`)});x(async()=>{try{o.value=await M(`/system/update`),l.value=!!p(o.value.operation),l.value&&(u=setTimeout(g,1800))}catch(e){H(e.message,!0)}});async function y(){if(!s.value){s.value=!0;try{o.value=await M(`/system/update/check`,`POST`,{})}catch(e){H(e.message,!0)}finally{s.value=!1}}}async function b(){if(!(l.value||s.value||o.value?.status!==`available`)&&await n(i(`更新到 {version} 并重启当前实例?先下载校验,再保留数据恢复点;启动失败时尝试恢复原版本。`,{version:o.value.latest}),{title:i(`更新并重启`),confirmText:i(`开始更新`)})){l.value=!0;try{o.value.operation=await M(`/system/update/install`,`POST`,{version:o.value.latest}),u=setTimeout(g,800)}catch(e){l.value=!1,H(e.message,!0)}}}return(e,n)=>(V(),_(`section`,ii,[a(`header`,null,[a(`div`,null,[n[0]||=a(`span`,{class:`eyebrow`},`LUCKYTRI / VERSION`,-1),a(`h2`,ai,r(t(i)(`版本与更新`)),1)]),a(`button`,{disabled:s.value||l.value||!o.value,onClick:y},r(s.value?t(i)(`正在检查…`):t(i)(`检查更新`)),9,oi)]),o.value?(V(),_(m,{key:0},[a(`p`,{class:G([`version-state`,{available:o.value.status===`available`}]),role:`status`},r(t(v)[o.value.status]||t(v).unchecked),3),a(`dl`,si,[a(`dt`,null,r(t(i)(`当前版本`)),1),a(`dd`,null,r(o.value.current),1),a(`dt`,null,r(t(i)(`npm 最新版本`)),1),a(`dd`,null,r(o.value.latest||`—`),1),a(`dt`,null,r(t(i)(`上次成功检查`)),1),a(`dd`,null,r(o.value.checkedAt?t(te)(o.value.checkedAt):`—`),1)]),o.value.error?(V(),_(`p`,ci,r(t(i)(`暂时无法连接 npm 或读取版本信息,请稍后重试。`)),1)):h(``,!0),a(`p`,li,r(t(i)(`点击时才检查,五分钟内复用结果。检查更新不会自动安装或重启。`)),1),o.value.status===`available`||o.value.operation?(V(),_(`div`,ui,[a(`p`,null,r(t(i)(`下载期间继续运行,切换前保留数据恢复点。更新完成后此页面会自动重新连接。`)),1),o.value.status===`available`?(V(),_(`button`,{key:0,class:`primary`,disabled:l.value||s.value,onClick:b},r(l.value?t(i)(`正在更新…`):t(i)(`更新并重启`)),9,di)):h(``,!0),o.value.operation?(V(),_(`p`,fi,r(t(f)[o.value.operation.status])+` · `+r(o.value.operation.version),1)):h(``,!0),o.value.operation?.error?(V(),_(`p`,pi,r(o.value.operation.error),1)):h(``,!0),o.value.operation?.restored?(V(),_(`p`,mi,r(t(i)(`已恢复原版本和更新前的数据。`)),1)):h(``,!0)])):h(``,!0),a(`nav`,hi,[a(`a`,{href:o.value.npmUrl,target:`_blank`,rel:`noopener noreferrer`},`npm`,8,gi),a(`a`,{href:o.value.releaseUrl,target:`_blank`,rel:`noopener noreferrer`},r(t(i)(`发布说明`))+` ↗`,9,_i)])],64)):h(``,!0)]))}}),[[`__scopeId`,`data-v-0df58391`]]),yi={class:`page system`},bi={class:`system-intro`},xi={class:`eyebrow`},Si={class:`system-status`},Ci=N(P({__name:`SystemPage`,setup(o){let s=[`connect`,`models`,`search`,`runtime`,`storage`],c=K(s.includes(B.sub)?B.sub:`connect`);async function l(e){e!==c.value&&(!B.dirty||await n(i(`当前设置还没保存,离开这个分区吗?`),{title:i(`未保存的修改`),confirmText:i(`放弃修改`),cancelText:i(`继续编辑`)}))&&(B.dirty=!1,c.value=e)}return E(c,e=>F(e)),E(()=>B.sub,e=>{s.includes(e)&&(c.value=e)}),(n,o)=>(V(),_(`div`,yi,[a(`header`,bi,[a(`div`,null,[a(`span`,xi,r(t(i)(`THE WORLD AROUND HER · 系统`)),1),a(`h1`,null,[e(r(t(i)(`让她与世界,`)),1),a(`em`,null,r(t(i)(`温柔相连。`)),1)]),a(`p`,null,r(t(i)(`连接、模型与运行方式都在这里。每一处改变,都可以看见结果。`)),1)]),a(`span`,Si,[a(`i`,{class:G({off:!t(B).health.connection?.online})},null,2),e(` `+r(t(B).health.connection?.online?t(i)(`正在与 QQ 相连`):t(i)(`等待 QQ 连接`)),1)])]),C(X,{"model-value":c.value,"onUpdate:modelValue":l,label:t(i)(`系统的分区`),items:[{key:`connect`,label:t(i)(`连接 QQ`)},{key:`models`,label:t(i)(`模型库`)},{key:`search`,label:t(i)(`独立搜索`)},{key:`runtime`,label:t(i)(`运行开关`)},{key:`storage`,label:t(i)(`数据与备份`)}]},null,8,[`model-value`,`label`,`items`]),c.value===`connect`?(V(),g(Ue,{key:0,onOpen:l})):c.value===`models`?(V(),g(vn,{key:1})):c.value===`search`?(V(),g(er,{key:2})):c.value===`runtime`?(V(),_(m,{key:3},[C(jn),C(vi),C(ri)],64)):(V(),g($r,{key:4}))]))}}),[[`__scopeId`,`data-v-a12a372e`]]);export{Ci as default};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{$ as e,Ct as t,D as n,Et as r,I as i,J as a,M as o,P as s,St as c,Tt as l,U as u,V as d,W as f,X as p,Y as m,Z as h,_ as g,ct as _,dt as v,et as y,gt as b,i as x,j as S,lt as C,m as w,n as T,nt as E,o as ee,q as D,s as O,t as te,ut as k,v as A,vt as ne,wt as j,xt as M,yt as N}from"./Empty-C7yzOBzy.js";import{v as P,y as F}from"./mind-DtTVrW6Z.js";import{a as re,b as ie,c as ae,n as oe,o as se}from"./index-CyRtYxP3.js";var I=[`aria-label`],L={class:`agenda-heading`},R={class:`eyebrow`},z=[`aria-label`],B=[`aria-pressed`],V=[`aria-pressed`],H={class:`muted`},U={class:`agenda-legend`},ce={class:`legend-actual`},le={class:`legend-plan`},W={class:`legend-free`},G={class:`legend-point`},K={class:`agenda-chart`},q={class:`agenda-axis`},ue={class:`agenda-lane`},de={class:`lane-label`},fe={class:`lane-track`},pe=[`title`,`aria-label`,`onClick`],me=[`title`],he={class:`agenda-lane`},J={class:`lane-label`},Y={class:`lane-track`},ge=[`title`,`aria-label`,`onClick`],X=[`title`],Z={key:0,class:`agenda-history`},Q={class:`agenda-itinerary`},_e=[`onClick`],$={key:1,class:`faint`},ve={key:2,class:`faint`},ye={class:`agenda-itinerary`},be=[`data-kind`],xe=[`onClick`],Se={key:0,class:`muted`},Ce={key:2,class:`faint`},we={key:3,class:`faint`},Te={key:4,class:`agenda-waiting`,open:``},Ee=[`onClick`],De={class:`muted`},Oe={key:5,class:`agenda-waiting`,open:``},ke=[`onClick`],Ae={class:`muted`},je={key:6,class:`agenda-waiting`,open:``},Me=[`onClick`],Ne={class:`muted`},Pe=T(E({__name:`DayAgenda`,props:{agenda:{}},emits:[`task`],setup(n,{emit:s}){let c=n,u=s,d=M(!0),m=D(()=>{let e=c.agenda;if(!d.value)return[e.start,e.end];let t=Math.max(e.start,Math.min(e.end-216e5,Math.floor((e.now-e.start)/36e5)*36e5+e.start-36e5));return[t,Math.min(e.end,t+216e5)]}),g=e=>e===c.agenda.end?`24:00`:F(o(),{timeZone:c.agenda.zone,hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`}).format(new Date(e)),_=e=>(e-m.value[0])/(m.value[1]-m.value[0])*100,y=e=>(e.chartEnd??e.end)>e.start&&(e.chartEnd??e.end)>m.value[0]&&e.start<m.value[1],b=e=>({left:Math.max(0,_(e.start))+`%`,width:Math.max(.3,Math.min(100,_(e.chartEnd??e.end))-Math.max(0,_(e.start)))+`%`}),x=D(()=>Array.from({length:7},(e,t)=>m.value[0]+(m.value[1]-m.value[0])*t/6)),S=D(()=>c.agenda.planned.filter(e=>e.kind!==`sleep`).slice(0,18)),C=e=>`${g(e.start)} — ${g(e.end)} · ${e.title} · ${e.label||{rest:i(`休息建议`),free:i(`自由安排`),sleep:i(`作息安排`)}[e.kind]||i(`已发生`)}`,w=e=>e.engagedMs===null?i(`此前时长未单独记录`):i(`实际投入 {v} 分钟`,{v:Math.floor(e.engagedMs/6e4)});return(o,s)=>(k(),h(`section`,{class:`card day-agenda`,"aria-label":t(i)(`今日时间表`)},[a(`div`,L,[a(`div`,null,[a(`span`,R,r(n.agenda.date),1),a(`h2`,null,r(t(i)(`今日时间表`)),1)]),a(`div`,{class:`agenda-range`,role:`group`,"aria-label":t(i)(`时间表显示范围`)},[a(`button`,{"aria-pressed":d.value,onClick:s[0]||=e=>d.value=!0},r(t(i)(`此刻附近`)),9,B),a(`button`,{"aria-pressed":!d.value,onClick:s[1]||=e=>d.value=!1},r(t(i)(`全天`)),9,V)],8,z)]),a(`p`,H,r(n.agenda.note),1),a(`div`,U,[a(`span`,ce,r(t(i)(`实际时段`)),1),a(`span`,le,r(t(i)(`选定的安排`)),1),a(`span`,W,r(t(i)(`作息 / 空白`)),1),a(`span`,G,r(t(i)(`● 伴随交流`)),1)]),a(`div`,K,[a(`div`,q,[(k(!0),h(f,null,v(x.value,(e,t)=>(k(),h(`time`,{key:e,style:l({left:t*100/6+`%`})},r(g(e)),5))),128))]),a(`div`,ue,[a(`span`,de,r(t(i)(`已发生`)),1),a(`div`,fe,[(k(!0),h(f,null,v(x.value.slice(0,-1),(e,t)=>(k(),h(`i`,{key:e,class:`gridline`,style:l({left:t*100/6+`%`})},null,4))),128)),(k(!0),h(f,null,v(n.agenda.actual.filter(y),e=>(k(),h(`button`,{key:e.id,class:j([`agenda-block actual`,{ongoing:e.ongoing}]),style:l(b(e)),title:C(e)+` · `+w(e),"aria-label":C(e),onClick:t=>u(`task`,e.taskId)},null,14,pe))),128)),(k(!0),h(f,null,v(n.agenda.interactions.filter(e=>e.at>=m.value[0]&&e.at<m.value[1]),e=>(k(),h(`span`,{key:e.id,class:`agenda-interaction`,style:l({left:_(e.at)+`%`}),title:g(e.at)+t(i)(` · 伴随交流`)},null,12,me))),128)),_(n.agenda.now)>=0&&_(n.agenda.now)<=100?(k(),h(`span`,{key:0,class:`agenda-now`,style:l({left:_(n.agenda.now)+`%`})},[a(`small`,null,r(t(i)(`现在`)),1)],4)):p(``,!0)])]),a(`div`,he,[a(`span`,J,r(t(i)(`接下来`)),1),a(`div`,Y,[(k(!0),h(f,null,v(x.value.slice(0,-1),(e,t)=>(k(),h(`i`,{key:e,class:`gridline`,style:l({left:t*100/6+`%`})},null,4))),128)),(k(!0),h(f,null,v(n.agenda.planned.filter(y),e=>(k(),h(f,{key:e.id},[e.taskId?(k(),h(`button`,{key:0,class:`agenda-block plan`,style:l(b(e)),title:C(e),"aria-label":C(e),onClick:t=>u(`task`,e.taskId)},null,12,ge)):(k(),h(`span`,{key:1,class:j([`agenda-block`,e.kind]),style:l(b(e)),title:C(e)},null,14,X))],64))),128))])])]),n.agenda.actual.length?(k(),h(`details`,Z,[a(`summary`,null,r(t(i)(`已经走过的时段 · {length} 段`,{length:n.agenda.actual.length})),1),a(`ol`,Q,[(k(!0),h(f,null,v(n.agenda.actual,t=>(k(),h(`li`,{key:t.id},[a(`time`,null,[e(r(g(t.start)),1),s[2]||=a(`br`,null,null,-1),e(r(g(t.end)),1)]),a(`div`,null,[a(`button`,{class:`text-button`,onClick:e=>u(`task`,t.taskId)},r(t.title),9,_e),a(`small`,null,r(t.label)+` · `+r(w(t)),1)])]))),128))])])):(k(),h(`p`,$,r(t(i)(`今天还没有活动记录,实际开始后会显示在上方。`)),1)),a(`h3`,null,r(t(i)(`她定下的安排`)),1),S.value.length?p(``,!0):(k(),h(`p`,ve,r(t(i)(`还没有选定活动时间,留白由她再决定,不按待办队列填满。`)),1)),a(`ol`,ye,[(k(!0),h(f,null,v(S.value,n=>(k(),h(`li`,{key:n.id,"data-kind":n.kind},[a(`time`,null,[e(r(g(n.start)),1),s[3]||=a(`br`,null,null,-1),e(r(g(n.end)),1)]),a(`div`,null,[n.taskId?(k(),h(f,{key:0},[a(`button`,{class:`text-button`,onClick:e=>u(`task`,n.taskId)},r(n.title),9,xe),a(`small`,null,r(t(i)(`{label} · {v} · {durationMinutes} 分钟 · {scope}`,{label:n.label,v:n.kindOfTask===`plan`?t(i)(`自己的安排`):n.kindOfTask===`promise`?t(i)(`答应的事`):t(i)(`外部建议`),durationMinutes:n.durationMinutes,scope:n.scope})),1),n.why?(k(),h(`p`,Se,r(n.why),1)):p(``,!0)],64)):(k(),h(f,{key:1},[a(`b`,null,r(n.title),1),a(`small`,null,r(n.kind===`free`?t(i)(`可以想自己的事,也可以歇着;不算已做过`):t(i)(`预计,做完眼前这段再调整`)),1)],64)),n.interruptedAt?(k(),h(`p`,Ce,r(g(n.interruptedAt))+` `+r(n.interruption===`sleep`?t(i)(`进入睡眠安排,醒来后再选择续接时间。`):t(i)(`有更高优先级安排,届时先让位,之后再选续接时间。`)),1)):p(``,!0)])],8,be))),128))]),n.agenda.planned.some(e=>e.kind===`sleep`)?(k(),h(`p`,we,r(t(i)(`睡眠安排:{v}`,{v:n.agenda.planned.filter(e=>e.kind===`sleep`).map(e=>g(e.start)+` — `+g(e.end)).join(`、`)})),1)):p(``,!0),n.agenda.unarranged?.length?(k(),h(`details`,Te,[a(`summary`,null,r(t(i)(`已记下,还没选时间 · {length} 件`,{length:n.agenda.unarranged.length})),1),a(`ul`,null,[(k(!0),h(f,null,v(n.agenda.unarranged,e=>(k(),h(`li`,{key:e.id},[a(`button`,{class:`text-button`,onClick:t=>u(`task`,e.id)},r(e.title),9,Ee),a(`p`,De,r(e.reason),1)]))),128))])])):p(``,!0),n.agenda.paused?.length?(k(),h(`details`,Oe,[a(`summary`,null,r(t(i)(`暂时停下来,进度保留 · {length} 件`,{length:n.agenda.paused.length})),1),a(`ul`,null,[(k(!0),h(f,null,v(n.agenda.paused,e=>(k(),h(`li`,{key:e.id},[a(`button`,{class:`text-button`,onClick:t=>u(`task`,e.id)},r(e.title),9,ke),a(`p`,Ae,r(e.reason),1)]))),128))])])):p(``,!0),n.agenda.waiting.length?(k(),h(`details`,je,[a(`summary`,null,r(t(i)(`需要条件或调整约定 · {length} 件`,{length:n.agenda.waiting.length})),1),a(`ul`,null,[(k(!0),h(f,null,v(n.agenda.waiting,e=>(k(),h(`li`,{key:e.id},[a(`button`,{class:`text-button`,onClick:t=>u(`task`,e.id)},r(e.title),9,Me),a(`p`,Ne,r(e.reason),1)]))),128))])])):p(``,!0)],8,I))}}),[[`__scopeId`,`data-v-10b48f6c`]]),Fe=[`aria-label`],Ie={class:`experience-intro`},Le={class:`eyebrow`},Re={class:`experience-date`},ze={class:`experience-timeline`},Be=[`data-experience`],Ve=[`datetime`],He={class:`card experience-card`},Ue={class:`experience-meta`},We={class:`experience-kind`},Ge={key:0,class:`faint`},Ke={key:0,class:`experience-summary`},qe={key:1,class:`faint experience-missing`},Je={key:2,class:`experience-project faint`},Ye={key:3,class:`experience-actions`},Xe=[`onClick`],Ze=[`onClick`],Qe={key:4,class:`experience-materials`},$e=[`onClick`],et={class:`experience-capability`},tt={class:`faint`},nt={class:`muted`},rt=T(E({__name:`ExperienceLog`,props:{rows:{},zone:{},loading:{type:Boolean}},emits:[`work`,`project`,`source`],setup(n,{emit:s}){let c=n,l=s,u=D(()=>{let e=F(o(),{timeZone:c.zone,year:`numeric`,month:`long`,day:`numeric`,weekday:`short`}),t=[];for(let n of c.rows){let r=e.format(n.created);t.at(-1)?.date!==r&&t.push({date:r,rows:[]}),t.at(-1).rows.push(n)}return t});function d(e){return F(o(),{timeZone:c.zone,hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`}).format(e)}return(o,s)=>(k(),h(`section`,{class:`experience-log`,"aria-label":t(i)(`体验记录`)},[a(`header`,Ie,[a(`div`,null,[a(`span`,Le,r(t(i)(`EXPERIENCES · 留下的经历`)),1),a(`h1`,null,r(t(i)(`最近做过的事`)),1)]),a(`p`,null,r(t(i)(`故事写到哪里,玩过什么,又留下了哪些想法。`)),1)]),(k(!0),h(f,null,v(u.value,n=>(k(),h(`section`,{key:n.date,class:`experience-day`},[a(`h2`,Re,r(n.date),1),a(`div`,ze,[(k(!0),h(f,null,v(n.rows,n=>(k(),h(`article`,{key:n.id,class:`experience-entry`,"data-experience":n.id},[a(`time`,{class:`experience-clock`,datetime:new Date(n.created).toISOString()},r(d(n.created)),9,Ve),a(`div`,He,[a(`div`,Ue,[a(`span`,We,r(t(i)(`{label}记录`,{label:n.label})),1),n.work?(k(),h(`span`,Ge,r(t(i)(`{v} · {characters} 字 · 版本 {version}`,{v:n.work.state===`complete`?t(i)(`已保存成果`):t(i)(`已保存草稿`),characters:n.work.characters,version:n.work.version})),1)):p(``,!0)]),a(`h3`,null,r(n.title),1),n.summary?(k(),h(`p`,Ke,r(n.summary),1)):(k(),h(`p`,qe,r(t(i)(`这条旧记录没有保存摘要。`)),1)),n.project?.title&&n.project.title!==n.title?(k(),h(`p`,Je,r(t(i)(`来自 {title}`,{title:n.project.title})),1)):p(``,!0),n.work||n.project?(k(),h(`div`,Ye,[n.work?(k(),h(`button`,{key:0,onClick:e=>l(`work`,n.work.id,n.work.version)},[e(r(n.activity===`write`?t(i)(`阅读这一稿`):t(i)(`阅读完整记录`)),1),s[0]||=a(`span`,{"aria-hidden":`true`},` →`,-1)],8,Xe)):p(``,!0),n.project?(k(),h(`button`,{key:1,class:`text-button`,onClick:e=>l(`project`,n.project.id)},r(t(i)(`查看项目`)),9,Ze)):p(``,!0)])):p(``,!0),n.materials?.length?(k(),h(`details`,Qe,[a(`summary`,null,r(t(i)(`接触的内容 · {length} 份`,{length:n.materials.length})),1),a(`ul`,null,[(k(!0),h(f,null,v(n.materials,e=>(k(),h(`li`,{key:e.id},[a(`button`,{class:`text-button`,onClick:t=>l(`source`,e.id)},r(e.title||t(i)(`未命名资料`)),9,$e)]))),128))])])):p(``,!0)])],8,Be))),128))])]))),128)),!n.loading&&!n.rows.length?(k(),m(te,{key:0,title:t(i)(`这里还没有经历记录`),text:t(i)(`做过的事与保存的成果,会逐渐出现在这里。`)},null,8,[`title`,`text`])):p(``,!0),a(`details`,et,[a(`summary`,null,[e(r(t(i)(`游戏客户端连接`))+` `,1),a(`span`,tt,r(t(i)(`开发中`)),1)]),a(`p`,nt,r(t(i)(`客户端控制尚未接入。已有的游玩记录可以在上方阅读。`)),1)])],8,Fe))}}),[[`__scopeId`,`data-v-400cba84`]]),it={class:`page time-page`},at={class:`time-intro`},ot={class:`eyebrow`},st={class:`time-clock`,"aria-hidden":`true`},ct={key:0,class:`card`,role:`alert`},lt={key:1,class:`muted`,role:`status`},ut={class:`time-today`},dt={class:`card main-activity`},ft={class:`eyebrow`},pt={class:`chip`},mt={key:0,class:`faint`},ht={key:1,class:`faint`},gt={class:`muted`},_t={class:`muted`},vt={key:0,class:`faint`},yt={class:`card day-balance`},bt={class:`eyebrow`},xt={class:`muted`},St={key:1,class:`card own-care`},Ct={class:`eyebrow`},wt={key:0,class:`muted`},Tt={key:1,class:`faint`},Et=[`disabled`],Dt={class:`card time-settings`},Ot=[`disabled`],kt={key:1},At={class:`sr-only`},jt=[`placeholder`],Mt={key:2},Nt={key:0,class:`time-cards`},Pt=[`data-task`],Ft={class:`row task-meta`},It=[`data-tone`],Lt={class:`faint`},Rt={class:`task-priority`},zt={key:0,class:`muted`},Bt={class:`faint`},Vt={key:1,class:`muted`},Ht={key:2,class:`share-status`},Ut={key:3,class:`muted`},Wt={class:`task-sources`},Gt={key:0,class:`faint`},Kt={class:`faint`},qt={key:1,class:`muted`},Jt={class:`row`},Yt=[`onClick`],Xt=[`onClick`],Zt=[`onClick`],Qt=[`onClick`],$t=[`onClick`],en=[`onClick`],tn={key:1,class:`time-cards work-grid`},nn=[`data-work`,`onClick`],rn={class:`eyebrow`},an={class:`faint`},on={key:2,class:`time-cards work-grid`},sn={class:`eyebrow`},cn={class:`muted`},ln=[`onClick`],un={class:`row time-pagination`},dn=[`disabled`],fn=[`disabled`],pn={class:`row`},mn={class:`chip`},hn={class:`work-body`},gn={class:`muted`},_n={key:0},vn={class:`row`},yn={class:`list`},bn=[`onClick`],xn={key:1},Sn={class:`list`},Cn=[`onClick`],wn=[`href`],Tn={key:1,class:`muted`},En={class:`faint`},Dn={class:`work-body`},On=T(E({__name:`TimePage`,setup(o){let l=[`today`,`tasks`,`works`,`projects`,`experiences`],T=M(l.includes(O.sub.split(`/`)[0])?O.sub.split(`/`)[0]:`today`),E=c(g(`/mind/time`)),j=c([]),F=M(!1),I=M(``),L=M(0),R=M(``),z=M(``),B=M(O.sub.split(`/`)[0]===`tasks`&&O.sub.split(`/`)[1]||``),V=c(null),H=c(null),U=c(null),ce=M(!1),le=M(!1),W=M(!1),G=M(!1),K=M({focusMinutes:25,breakMinutes:5,stepMinutes:5,paceSpeed:1.25,ownPlanMinutes:45,commitmentReviewMinutes:30}),q=D(()=>ie.data?.clock?.timeZone||`Asia/Shanghai`),ue=s({todo:S(`ToDo · 待办`),scheduled:S(`Scheduled · 已安排`),doing:S(`Doing · 正在做`),paused:S(`Paused · 暂停`),waiting:S(`Waiting · 等待`),done:S(`Done · 已完成`),abandoned:S(`Abandoned · 已放下`)}),de=s({none:``,waiting:S(`完成,尚未交付`),deferred:S(`暂缓交付`),declined:S(`暂不分享`),pending:S(`待继续交付`),sent:S(`已完整交付`),reported:S(`已整理并汇报`),uncertain:S(`送达不确定,等待核对`),sending:S(`正在交付`)}),fe=s({0:S(`低`),1:S(`普通`),2:S(`高`),3:S(`最高`)});function pe(e){return e.state===`waiting`?e.waitKind===`adjust`?i(`需要调整约定`):e.waitKind===`specify`?i(`待想具体`):i(`Waiting · 等条件`):e.state===`todo`&&!e.schedule?.chosenAt?i(`ToDo · 待选时间`):e.state===`scheduled`?i(`Scheduled · 已选时间`):e.state===`paused`?i(`Paused · 进度保留`):ue[e.state]}async function me(e,t){try{await w(`/mind/time/tasks/`+e.id+`/control`,`POST`,{action:`priority`,priority:t}),await X()}catch(e){A(e.message,!0)}}let he=e=>i(`{v} 分钟`,{v:Math.floor((e||0)/6e4)}),J=e=>i(`{v} 分钟`,{v:Math.ceil((e||0)/6e4)}),Y=0;function ge(){let e=new URLSearchParams({limit:`24`,offset:String(L.value)});return R.value&&e.set(`q`,R.value),T.value===`tasks`&&z.value&&e.set(`state`,z.value),T.value===`tasks`&&B.value&&e.set(`id`,B.value),`/mind/time/`+T.value+`?`+e}async function X(){let e=++Y,t=T.value===`today`?`/mind/time`:ge(),n=g(t);n&&(T.value===`today`?E.value=n:j.value=n),F.value=!n,I.value=``;try{let n=await w(t);if(e!==Y)return;T.value===`today`?(E.value=n,W.value||(K.value={...n.settings})):(j.value=n,le.value=n.length===24)}catch(t){e===Y&&(I.value=t.message)}finally{e===Y&&(F.value=!1)}}async function Z(e,t){ce.value=!0;try{V.value=await w(`/mind/time/works/`+encodeURIComponent(e)+(t?`?version=`+t:``)),H.value=null,U.value=null}catch(e){A(e.message,!0)}finally{ce.value=!1}}async function Q(e){try{let t=await w(`/mind/time/projects/`+e),[n,r]=await Promise.all([w(`/mind/time/works?project=`+e),w(`/mind/time/projects/`+e+`/sources`)]);H.value={...t,works:n,sources:r},V.value=null,U.value=null}catch(e){A(e.message,!0)}}async function _e(e){try{U.value=await w(`/mind/time/sources/`+e)}catch(e){A(e.message,!0)}}async function $(e,t){let r,a;if(t===`schedule`){let t=await n(i(`最早开始时间(YYYY-MM-DD HH:mm)。截止时间保留原安排。`),{title:i(`安排时间`),confirmText:i(`继续`),placeholder:`2026-10-02 14:30`});if(t===null)return;r=t;let o=await n(i(`这次安排投入多少分钟(5 至 240)?`),{title:i(`投入时间`),confirmText:i(`继续`),placeholder:String(e.schedule?.durationMinutes||25)});if(o===null)return;a=Number(o)}let o=await n(i(t===`abandon`?`留下放下这件事的原因。`:`留下这次调整的原因。`),{title:i(`调整安排`),confirmText:i(`保存`),placeholder:i(`管理台调整`)});if(o!==null)try{await w(`/mind/time/tasks/`+e.id+`/control`,`POST`,{action:t,...r?{readyAt:r}:{},...a===void 0?{}:{durationMinutes:a},reason:o||i(`管理台调整`)}),await X()}catch(e){A(e.message,!0)}}async function ve(e){if(!H.value)return;let t=await n(i(`提出选题、续写方向或修改想法。她会自行决定是否采纳。`),{title:i(`给她一个建议`),confirmText:i(`留下建议`)});if(t!==null)try{let n=await w(`/mind/time/projects/`+H.value.id+`/suggest`,`POST`,{action:e,idea:t});A(n.duplicate?i(`这个项目已有待处理事项`):i(`建议已保存,等待她的选择`)),await X()}catch(e){A(e.message,!0)}}async function ye(){if(!V.value)return;let e=V.value,t=new Blob([e.title+`
|
|
2
|
+
|
|
3
|
+
`+e.content],{type:`text/plain;charset=utf-8`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=e.title.replace(/[\\/:*?"<>|]/g,`_`)+`-v`+e.version+`.txt`,r.click(),URL.revokeObjectURL(n)}async function be(){if(!G.value){G.value=!0,Y++;try{let e=await w(`/mind/time/settings`,`PUT`,{...K.value});Y++,K.value=e,W.value=!1,A(i(`专注安排已保存`)),await X()}catch(e){A(e.message,!0)}finally{G.value=!1}}}function xe(e){B.value=e,T.value===`tasks`?X():T.value=`tasks`,ee(`tasks/`+e)}async function Se(){try{await w(`/mind/time/care`,`POST`,{}),A(i(`已记下,空下来时回看说过的话`)),await X()}catch(e){A(e.message,!0)}}async function Ce(){try{await w(`/mind/time/plan`,`POST`,{}),A(i(`已记下,让她重新想具体时间与投入时长`)),await X()}catch(e){A(e.message,!0)}}function we(){L.value=0,X()}b(T,e=>{O.page===`time`&&(L.value=0,j.value=[],R.value=``,z.value=``,e!==`tasks`&&(B.value=``),ee(e===`today`?``:e===`tasks`&&B.value?`tasks/`+B.value:e===`works`&&O.sub.startsWith(`works/`)?O.sub:e),X())}),b(()=>[O.page,O.sub],([e,t])=>{if(e!==`time`)return;let n=t.split(`/`)[0]||`today`;if(n===`tasks`){let e=t.split(`/`)[1]||``;B.value!==e&&(B.value=e,T.value===`tasks`&&X())}l.includes(n)&&(T.value=n),n===`works`&&t.split(`/`)[1]&&V.value?.id!==t.split(`/`)[1]&&Z(t.split(`/`)[1])});let Te=re(`time`,X),Ee=0;return _(()=>{Ee=window.setInterval(()=>{Te.value&&T.value===`today`&&!document.hidden&&X()},5e3);let e=O.sub.split(`/`)[1];e&&T.value===`works`&&Z(e)}),C(()=>{clearInterval(Ee),Y++}),(n,o)=>(k(),h(`div`,it,[a(`header`,at,[a(`div`,null,[a(`span`,ot,r(t(i)(`TIME · 时间`)),1),a(`h1`,null,[e(r(t(i)(`日子在走,`)),1),a(`em`,null,r(t(i)(`我也有自己的事。`)),1)]),a(`p`,null,r(t(i)(`想做的事,正在留下的作品,与世界相遇的每一段。`)),1)]),a(`div`,st,[o[24]||=a(`span`,null,`25`,-1),a(`small`,null,r(t(i)(`留一点时间给自己`)),1)])]),y(oe,{modelValue:T.value,"onUpdate:modelValue":o[0]||=e=>T.value=e,label:t(i)(`时间的分区`),items:[{key:`today`,label:t(i)(`今日`)},{key:`tasks`,label:t(i)(`待办`)},{key:`works`,label:t(i)(`作品库`)},{key:`projects`,label:t(i)(`持续项目`)},{key:`experiences`,label:t(i)(`体验记录`)}]},null,8,[`modelValue`,`label`,`items`]),I.value?(k(),h(`p`,ct,[e(r(I.value)+` `,1),a(`button`,{onClick:X},r(t(i)(`重试`)),1)])):p(``,!0),F.value?(k(),h(`p`,lt,r(t(i)(`正在取回这段生活…`)),1)):p(``,!0),T.value===`today`&&E.value?(k(),h(f,{key:2},[a(`section`,ut,[a(`article`,dt,[a(`span`,ft,r(t(i)(`此刻的主活动`)),1),E.value.current?(k(),h(f,{key:0},[a(`h2`,null,r(E.value.current.title||E.value.current.label),1),a(`span`,pt,r(E.value.current.label)+` · `+r(E.value.current.timing?.phase===`preparing`?t(i)(`正在准备`):(E.value.current.sessionElapsedMs??E.value.current.elapsedMs)<6e4?t(i)(`刚开始这一段`):t(i)(`本次已投入 `)+he(E.value.current.sessionElapsedMs??E.value.current.elapsedMs)),1),E.value.current.schedule?.chosenAt?(k(),h(`p`,mt,r(t(i)(`她安排 {v} 开始,这次想投入 {durationMinutes} 分钟。`,{v:t(P)(E.value.current.schedule.proposedAt,q.value),durationMinutes:E.value.current.schedule.durationMinutes})),1)):p(``,!0),E.value.current.timing?.plannedMs?(k(),h(`p`,ht,r(t(i)(`本段预计 {v} · 还需约 {v2}`,{v:J(E.value.current.timing.plannedMs),v2:J(E.value.current.timing.remainingMs)})),1)):p(``,!0),a(`p`,null,r(E.value.current.why||t(i)(`从自己的打算接着做。`)),1),a(`p`,gt,r(E.value.current.checkpoint?.next||t(i)(`正在推进当前步骤。`)),1),a(`button`,{class:`text-button`,onClick:o[1]||=e=>T.value=`tasks`},r(t(i)(`查看安排 →`)),1)],64)):(k(),h(f,{key:1},[a(`h2`,null,r(E.value.agenda?.idle?.title||t(i)(`这会儿没有主活动`)),1),a(`p`,_t,r(E.value.agenda?.idle?.reason||t(i)(`自己选择接下来做什么,也可以歇着。`)),1),E.value.agenda?.idle?.next?(k(),h(`p`,vt,r(t(i)(`下一项:{title} · {v} 开始 · {durationMinutes} 分钟`,{title:E.value.agenda.idle.next.title,v:t(P)(E.value.agenda.idle.next.chosenStart,q.value),durationMinutes:E.value.agenda.idle.next.durationMinutes})),1)):p(``,!0),a(`button`,{class:`text-button`,onClick:Ce},r(t(i)(`让她重新想想安排`)),1)],64))]),a(`article`,yt,[a(`span`,bt,r(t(i)(`今天`)),1),a(`h2`,null,r(he(E.value.today?.activeMs)),1),a(`p`,null,r(t(i)(`实际活动投入 · {energyLabel} · {mood}`,{energyLabel:E.value.affect?.energyLabel,mood:E.value.affect?.mood})),1),a(`p`,xt,r(t(i)(`普通交流可以伴随进行,短消息不会自动暂停。`)),1),a(`button`,{class:`text-button`,onClick:o[2]||=e=>t(x)(`life`)},r(t(i)(`翻开日记 →`)),1)])]),E.value.agenda?(k(),m(Pe,{key:0,agenda:E.value.agenda,onTask:xe},null,8,[`agenda`])):p(``,!0),E.value.care?(k(),h(`section`,St,[a(`span`,Ct,r(t(i)(`独处时理一理`)),1),a(`h2`,null,r(t(i)(`自己的打算,说过的约定`)),1),a(`p`,null,r(t(i)(`空下来时,她会想一件自己愿意做的小事,也会回看有没有漏下答应别人的事。可以选择歇着。`)),1),E.value.care.last?(k(),h(`p`,wt,[e(r(t(i)(`最近:{reason}`,{reason:E.value.care.last.reason})),1),E.value.care.last.finished?(k(),h(f,{key:0},[e(` · `+r(t(P)(E.value.care.last.finished,q.value)),1)],64)):p(``,!0)])):p(``,!0),E.value.care.pendingReplies?(k(),h(`p`,Tt,r(t(i)(`还有 {pendingReplies} 条已说过的话等着分批回看。`,{pendingReplies:E.value.care.pendingReplies})),1)):p(``,!0),a(`button`,{disabled:E.value.care.queued||!!E.value.care.working,onClick:Se},r(E.value.care.working?t(i)(`正在整理自己的生活`):E.value.care.queued?t(i)(`已记下,空下来时整理`):t(i)(`空下来整理一下约定`)),9,Et)])):p(``,!0),a(`details`,Dt,[a(`summary`,null,r(t(i)(`专注与休息安排`)),1),a(`form`,{onSubmit:u(be,[`prevent`]),onInput:o[9]||=e=>W.value=!0,onChange:o[10]||=e=>W.value=!0},[a(`label`,null,[e(r(t(i)(`默认专注段(分钟)`)),1),N(a(`input`,{"onUpdate:modelValue":o[3]||=e=>K.value.focusMinutes=e,type:`number`,min:`1`,max:`120`},null,512),[[d,K.value.focusMinutes,void 0,{number:!0}]]),a(`small`,null,r(t(i)(`没有另行选择时使用;她自己的安排优先。`)),1)]),a(`label`,null,[e(r(t(i)(`休息建议(分钟)`)),1),N(a(`input`,{"onUpdate:modelValue":o[4]||=e=>K.value.breakMinutes=e,type:`number`,min:`1`,max:`120`},null,512),[[d,K.value.breakMinutes,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`保存步骤间隔(分钟)`)),1),N(a(`input`,{"onUpdate:modelValue":o[5]||=e=>K.value.stepMinutes=e,type:`number`,min:`1`,max:`120`},null,512),[[d,K.value.stepMinutes,void 0,{number:!0}]])]),a(`label`,null,[e(r(t(i)(`活动节奏`)),1),N(a(`input`,{"onUpdate:modelValue":o[6]||=e=>K.value.paceSpeed=e,type:`number`,min:`1`,max:`2`,step:`0.05`},null,512),[[d,K.value.paceSpeed,void 0,{number:!0}]]),a(`small`,null,r(t(i)(`默认 1.25 倍,所有活动按现实时间逐段推进。`)),1)]),a(`label`,null,[e(r(t(i)(`想自己的安排(间隔分钟)`)),1),N(a(`input`,{"onUpdate:modelValue":o[7]||=e=>K.value.ownPlanMinutes=e,type:`number`,min:`1`,max:`120`},null,512),[[d,K.value.ownPlanMinutes,void 0,{number:!0}]]),a(`small`,null,r(t(i)(`有空才考虑,可以决定休息。`)),1)]),a(`label`,null,[e(r(t(i)(`回看说过的话(间隔分钟)`)),1),N(a(`input`,{"onUpdate:modelValue":o[8]||=e=>K.value.commitmentReviewMinutes=e,type:`number`,min:`1`,max:`120`},null,512),[[d,K.value.commitmentReviewMinutes,void 0,{number:!0}]]),a(`small`,null,r(t(i)(`分批整理约定,保留去重与原来的选择。`)),1)]),a(`button`,{class:`primary`,disabled:G.value},r(G.value?t(i)(`正在保存`):t(i)(`保存安排`)),9,Ot)],32)])],64)):T.value===`today`?p(``,!0):(k(),h(f,{key:3},[a(`form`,{class:`time-filter`,onSubmit:u(we,[`prevent`])},[T.value===`tasks`&&B.value?(k(),h(`button`,{key:0,type:`button`,onClick:o[11]||=e=>{B.value=``,t(ee)(`tasks`),X()}},r(t(i)(`查看全部待办`)),1)):p(``,!0),[`works`,`projects`,`experiences`].includes(T.value)?(k(),h(`label`,kt,[a(`span`,At,r(t(i)(`搜索标题`)),1),N(a(`input`,{"onUpdate:modelValue":o[12]||=e=>R.value=e,placeholder:t(i)(`搜索标题或项目`)},null,8,jt),[[d,R.value]]),a(`button`,null,r(t(i)(`搜索`)),1)])):p(``,!0),T.value===`tasks`?(k(),h(`label`,Mt,[e(r(t(i)(`任务状态`)),1),y(ae,{modelValue:z.value,"onUpdate:modelValue":o[13]||=e=>z.value=e,"aria-label":t(i)(`任务状态`),options:[{value:``,label:t(i)(`全部`)},...Object.entries(t(ue)).map(([e,t])=>({value:e,label:t}))],onChange:we},null,8,[`modelValue`,`aria-label`,`options`])])):p(``,!0)],32),T.value===`tasks`?(k(),h(`div`,Nt,[(k(!0),h(f,null,v(j.value,n=>(k(),h(`article`,{key:n.id,class:`card time-task`,"data-task":n.id},[a(`div`,Ft,[a(`span`,{class:`chip`,"data-tone":n.state===`done`?`ok`:`quiet`},r(pe(n)),9,It),a(`span`,Lt,r(n.kind===`promise`?t(i)(`答应的事`):n.kind===`suggestion`?t(i)(`外部建议`):t(i)(`自己的计划`))+r(n.person?` · `+n.person:``),1),a(`label`,Rt,[a(`span`,null,r(t(i)(`优先级`)),1),y(ae,{"model-value":n.priority,"aria-label":t(i)(`优先级:`)+n.title,options:Object.entries(t(fe)).map(([e,t])=>({value:e,label:t})),disabled:!!n.checkpoint?.mergedInto,"onUpdate:modelValue":e=>me(n,Number(e))},null,8,[`model-value`,`aria-label`,`options`,`disabled`,`onUpdate:modelValue`])])]),a(`h2`,null,r(n.title),1),a(`p`,null,r(n.why),1),n.wait_reason?(k(),h(`p`,zt,r(n.wait_reason),1)):p(``,!0),a(`p`,Bt,[n.schedule?.chosenAt&&!n.checkpoint?.reschedule?(k(),h(f,{key:0},[e(r(t(i)(`{v} {v2} — {v3} · 这次 {durationMinutes} 分钟`,{v:n.schedule.chosenBy===`admin`?t(i)(`管理台安排`):t(i)(`她选定`),v2:t(P)(n.schedule.proposedAt,q.value),v3:t(P)(n.schedule.proposedEnd,q.value),durationMinutes:n.schedule.durationMinutes})),1)],64)):n.schedule?.startedAt?(k(),h(f,{key:1},[e(r(t(i)(`本段开始 {v}`,{v:t(P)(n.schedule.startedAt,q.value)})),1)],64)):n.schedule?.proposedAt?(k(),h(f,{key:2},[e(r(n.schedule.conditional?t(i)(`条件满足后建议`):t(i)(`已安排`))+` `+r(t(P)(n.schedule.proposedAt,q.value))+` — `+r(t(P)(n.schedule.proposedEnd,q.value)),1)],64)):(k(),h(f,{key:3},[e(r(n.state===`waiting`?t(i)(`需要解决上面的条件,再选择时间`):n.state===`paused`?t(i)(`进度已保存,之后再安排续接时间`):t(i)(`已记下,等她选择具体时间`)),1)],64)),n.timing?.plannedMs?(k(),h(f,{key:4},[e(r(t(i)(`· 本段预计 {v} · 本段已投入 {v2}`,{v:J(n.timing.plannedMs),v2:he(n.timing.stepMs)})),1),n.timing.phase===`engaged`?(k(),h(f,{key:0},[e(r(t(i)(`· 还需约 {v}`,{v:J(n.timing.remainingMs)})),1)],64)):p(``,!0)],64)):n.timing?.phase===`legacy`?(k(),h(f,{key:5},[e(r(t(i)(`· 此前时长未单独记录`)),1)],64)):(k(),h(f,{key:6},[e(` · `+r(n.state===`doing`?t(i)(`正在准备这一段`):t(i)(`尚未开始本段投入`)),1)],64))]),n.schedule?.outcome?(k(),h(`p`,Vt,r(t(i)(`本段目标:{outcome}`,{outcome:n.schedule.outcome})),1)):p(``,!0),t(de)[n.share_state]?(k(),h(`p`,Ht,r(t(de)[n.share_state])+` `+r(n.share_reason),1)):p(``,!0),n.checkpoint?.next?(k(),h(`p`,Ut,r(t(i)(`下一步:{next}`,{next:n.checkpoint.next})),1)):p(``,!0),a(`details`,Wt,[a(`summary`,null,r(t(i)(`来源与原安排 · {length} 条`,{length:n.sources.length})),1),n.due_at?(k(),h(`p`,Gt,r(t(i)(`原话日期参考 {v},不作为逾期判断。`,{v:t(P)(n.due_at,q.value)})),1)):p(``,!0),a(`small`,Kt,r(n.sources.join(` · `)),1),n.checkpoint?.mergedInto?(k(),h(`p`,qt,r(t(i)(`已合并到唯一事项,保留这条原记录。`)),1)):p(``,!0)]),a(`div`,Jt,[n.work_id?(k(),h(`button`,{key:0,onClick:e=>Z(n.work_id)},r(t(i)(`阅读已有正文`)),9,Yt)):p(``,!0),n.project_id?(k(),h(`button`,{key:1,onClick:e=>Q(n.project_id)},r(t(i)(`持续项目`)),9,Xt)):p(``,!0),[`done`,`abandoned`].includes(n.state)?p(``,!0):(k(),h(f,{key:2},[n.state===`doing`?(k(),h(`button`,{key:0,onClick:e=>$(n,`pause`)},r(t(i)(`暂停`)),9,Zt)):(k(),h(`button`,{key:1,onClick:e=>$(n,`resume`)},r(t(i)(`重新安排`)),9,Qt)),a(`button`,{onClick:e=>$(n,`schedule`)},r(t(i)(`安排时间`)),9,$t),a(`button`,{class:`text-button`,onClick:e=>$(n,`abandon`)},r(t(i)(`放下`)),9,en)],64))])],8,Pt))),128))])):T.value===`works`?(k(),h(`div`,tn,[(k(!0),h(f,null,v(j.value,e=>(k(),h(`button`,{key:e.id,class:`card work-card`,"data-work":e.id,onClick:t=>Z(e.id)},[a(`span`,rn,r(t(i)(`{v} · 第 {ordinal} 篇`,{v:e.state===`complete`?t(i)(`完成稿`):t(i)(`草稿`),ordinal:e.ordinal})),1),a(`h2`,null,r(e.title),1),a(`p`,null,r(e.summary),1),a(`small`,null,r(t(i)(`{characters} 字 · 版本 {version}`,{characters:e.characters,version:e.version})),1),a(`span`,an,r(e.project_title||t(i)(`独处留下的东西`)),1)],8,nn))),128))])):T.value===`projects`?(k(),h(`div`,on,[(k(!0),h(f,null,v(j.value,e=>(k(),h(`article`,{key:e.id,class:`card`},[a(`span`,sn,r(e.kind===`game`?t(i)(`游戏`):e.serial?t(i)(`连载`):t(i)(`持续项目`))+` · `+r(e.state===`active`?t(i)(`在继续`):e.state===`complete`?t(i)(`已完结`):t(i)(`暂时放下`)),1),a(`h2`,null,r(e.title),1),a(`p`,null,r(e.why),1),a(`p`,cn,r(e.summary),1),a(`button`,{onClick:t=>Q(e.id)},r(t(i)(`打开项目`)),9,ln)]))),128))])):(k(),m(rt,{key:3,rows:j.value,zone:q.value,loading:F.value,onWork:Z,onProject:Q,onSource:_e},null,8,[`rows`,`zone`,`loading`])),T.value!==`experiences`&&!F.value&&!j.value.length?(k(),m(te,{key:4,title:T.value===`works`?t(i)(`作品还在等待第一笔`):t(i)(`这里还没有记录`),text:t(i)(`实际发生并保存之后,这里才会出现内容。`)},null,8,[`title`,`text`])):p(``,!0),a(`div`,un,[a(`button`,{disabled:L.value===0,onClick:o[14]||=e=>{L.value=Math.max(0,L.value-24),X()}},r(t(i)(`上一页`)),9,dn),a(`span`,null,r(L.value/24+1),1),a(`button`,{disabled:!le.value,onClick:o[15]||=e=>{L.value+=24,X()}},r(t(i)(`下一页`)),9,fn)])],64)),y(se,{open:!!V.value,title:V.value?.title||t(i)(`作品`),eyebrow:t(i)(`她留下的正文`),width:`780px`,onClose:o[18]||=e=>V.value=null},{default:ne(()=>[V.value?(k(),h(f,{key:0},[a(`div`,pn,[a(`span`,mn,r(t(i)(`{v} · {length} 字`,{v:V.value.state===`complete`?t(i)(`完成稿`):t(i)(`草稿`),length:V.value.content.length})),1),a(`label`,null,[e(r(t(i)(`版本`)),1),y(ae,{"model-value":V.value.version,"aria-label":t(i)(`作品版本`),options:V.value.versions.map(e=>({value:e.version,label:e.version+` · `+t(P)(e.created,q.value)})),"onUpdate:modelValue":o[16]||=e=>Z(V.value.id,Number(e))},null,8,[`model-value`,`aria-label`,`options`])]),a(`button`,{onClick:ye},r(t(i)(`导出正文`)),1)]),a(`p`,hn,r(V.value.content),1),V.value.project_id?(k(),h(`button`,{key:0,onClick:o[17]||=e=>Q(V.value.project_id)},r(t(i)(`查看项目与设定`)),1)):p(``,!0)],64)):p(``,!0)]),_:1},8,[`open`,`title`,`eyebrow`]),y(se,{open:!!H.value,title:H.value?.title||t(i)(`持续项目`),eyebrow:t(i)(`她自己的方向`),width:`740px`,onClose:o[22]||=e=>H.value=null},{default:ne(()=>[H.value?(k(),h(f,{key:0},[a(`p`,null,r(H.value.why),1),a(`p`,gn,r(H.value.summary),1),Object.keys(H.value.bible||{}).length?(k(),h(`details`,_n,[a(`summary`,null,r(t(i)(`设定与未解决线索`)),1),a(`dl`,null,[(k(!0),h(f,null,v(H.value.bible,(e,n)=>(k(),h(f,{key:n},[a(`dt`,null,r({characters:t(i)(`人物`),world:t(i)(`世界`),threads:t(i)(`未解决线索`),topic:t(i)(`资料主题`),mode:t(i)(`模式`)}[n]||n),1),a(`dd`,null,r(e),1)],64))),128))])])):p(``,!0),a(`div`,vn,[a(`button`,{onClick:o[19]||=e=>ve(`continue`)},r(t(i)(`建议续写`)),1),a(`button`,{onClick:o[20]||=e=>ve(`revise`)},r(t(i)(`建议修改`)),1),a(`button`,{onClick:o[21]||=e=>ve(`direction`)},r(t(i)(`建议方向`)),1)]),a(`h3`,null,r(t(i)(`已经留下的篇章`)),1),a(`ul`,yn,[(k(!0),h(f,null,v(H.value.works,e=>(k(),h(`li`,{key:e.id},[a(`button`,{class:`text-button`,onClick:t=>Z(e.id)},r(t(i)(`第 {ordinal} 篇 · {title}`,{ordinal:e.ordinal,title:e.title})),9,bn),a(`small`,null,r(e.state===`draft`?t(i)(`草稿`):t(i)(`完成稿`)),1)]))),128))]),H.value.sources.length?(k(),h(`h3`,xn,r(t(i)(`接触的资料`)),1)):p(``,!0),a(`ul`,Sn,[(k(!0),h(f,null,v(H.value.sources,e=>(k(),h(`li`,{key:e.id},[a(`button`,{class:`text-button`,onClick:t=>_e(e.id)},r(e.title),9,Cn)]))),128))])],64)):p(``,!0)]),_:1},8,[`open`,`title`,`eyebrow`]),y(se,{open:!!U.value,title:U.value?.title||t(i)(`资料`),eyebrow:U.value?.kind===`model`?t(i)(`模型知识整理 · 未经联网核验`):t(i)(`实际返回的摘录`),width:`740px`,onClose:o[23]||=e=>U.value=null},{default:ne(()=>[U.value?(k(),h(f,{key:0},[U.value.url?(k(),h(`a`,{key:0,href:U.value.url,target:`_blank`,rel:`noopener noreferrer`},r(t(i)(`打开来源`)),9,wn)):p(``,!0),U.value.kind===`model`?(k(),h(`p`,Tn,r(U.value.uncertainty||t(i)(`基于模型已有知识,具体剧情与章节仍需核验。`)),1)):p(``,!0),a(`p`,En,r(t(P)(U.value.created,q.value)),1),a(`p`,Dn,r(U.value.content),1)],64)):p(``,!0)]),_:1},8,[`open`,`title`,`eyebrow`])]))}}),[[`__scopeId`,`data-v-6804b51c`]]);export{On as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.sky[data-v-d7604463]{z-index:0;contain:paint;pointer-events:none;position:fixed;inset:0;overflow:hidden}.sky-base[data-v-d7604463]{background:radial-gradient(ellipse at 13% 16%, #ffffffd4, transparent 38%), radial-gradient(ellipse at 82% 8%, color-mix(in srgb, var(--glow-b) 36%, transparent), transparent 46%), linear-gradient(168deg, var(--sky-top) 0%, var(--sky-mid) 48%, var(--sky-bottom) 100%);position:absolute;inset:0}.garden[data-v-d7604463]{opacity:.22;background:url(/app/assets/liquid-garden-IMoHBwzc.png) 50% 58%/cover no-repeat;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000 8%,#000 42% 100%);mask-image:linear-gradient(#0000 8%,#000 42% 100%)}.garden.custom[data-v-d7604463]{background-position:50%;background-size:cover;-webkit-mask-image:none;mask-image:none}.glow[data-v-d7604463]{opacity:calc(.55 + var(--intensity,.5) * .2);border-radius:50%;position:absolute}.g1[data-v-d7604463]{background:radial-gradient(circle, var(--glow-a) 0%, transparent 64%);width:58vmax;height:58vmax;animation:sky-drift-a-d7604463 calc(34s / var(--tempo,1)) ease-in-out infinite alternate;top:-20vmax;left:-18vmax}.g2[data-v-d7604463]{background:radial-gradient(circle, var(--glow-b) 0%, transparent 66%);width:48vmax;height:48vmax;animation:sky-drift-b-d7604463 calc(41s / var(--tempo,1)) ease-in-out infinite alternate;top:8vh;right:-16vmax}.g3[data-v-d7604463]{background:radial-gradient(circle, color-mix(in srgb, var(--glow-a) 70%, var(--glow-b)) 0%, transparent 68%);width:46vmax;height:46vmax;animation:sky-drift-a-d7604463 calc(47s / var(--tempo,1)) ease-in-out infinite alternate-reverse;bottom:-24vmax;left:22vw}.g4[data-v-d7604463]{background:radial-gradient(circle, color-mix(in srgb, white 55%, var(--glow-b)) 0%, transparent 70%);opacity:.45;width:28vmax;height:28vmax;animation:sky-drift-b-d7604463 calc(28s / var(--tempo,1)) ease-in-out infinite alternate-reverse;top:18vh;left:48vw}.horizon[data-v-d7604463]{background:radial-gradient(ellipse at 50% 0%, color-mix(in srgb, var(--glow-a) 62%, transparent), transparent 68%);height:46%;position:absolute;bottom:-6%;left:-12%;right:-12%}.sheen[data-v-d7604463]{pointer-events:none;background:linear-gradient(115deg,#0000 36%,#ffffff24 50%,#0000 64%);position:absolute;inset:0}.vignette[data-v-d7604463]{background:radial-gradient(ellipse at 50% 40%, transparent 42%, color-mix(in srgb, var(--ink) 14%, transparent) 100%);position:absolute;inset:0}.moon[data-v-d7604463]{filter:drop-shadow(0 0 26px #fff0be73);opacity:.92;border-radius:50%;width:78px;height:78px;position:absolute;top:3vh;right:24vw;transform:rotate(-20deg);box-shadow:inset -20px -7px #fff4c2}.particles[data-v-d7604463]{opacity:.55;width:100%;height:100%;position:absolute;inset:0}.particles.off[data-v-d7604463]{display:none}@keyframes sky-drift-a-d7604463{to{transform:translate(6vmax,4vmax)scale(1.08)}}@keyframes sky-drift-b-d7604463{to{transform:translate(-5vmax,6vmax)scale(.94)}}@media (width<=760px){.moon[data-v-d7604463]{width:52px;height:52px;top:1.5vh;right:36vw;box-shadow:inset -13px -5px #fff4c2}}.landscape[data-v-d7604463]{contain:paint;opacity:.55;pointer-events:none;position:absolute;inset:0;overflow:hidden}.landscape i[data-v-d7604463]{background:radial-gradient(ellipse at 34% 42%, #ffffffd9, color-mix(in srgb, var(--glow-b) 53%, transparent) 38%, transparent 72%);border-radius:61% 39% 45% 55%/47% 65% 35% 53%;width:77vw;height:48vw;position:absolute;top:6vh;right:-20vw;transform:rotate(-24deg)}.landscape i[data-v-d7604463]:nth-child(2){opacity:.66;background:radial-gradient(ellipse at 44% 48%, #ffffffc2, color-mix(in srgb, var(--glow-a) 48%, transparent) 46%, transparent 74%);width:61vw;height:35vw;top:38vh;right:-19vw}.landscape i[data-v-d7604463]:nth-child(3){opacity:.72;background:radial-gradient(ellipse at 52% 52%, #ffffffdb, color-mix(in srgb, var(--glow-a) 52%, transparent) 43%, transparent 71%);width:72vw;height:43vw;top:32vh;left:-34vw;right:auto}.landscape i[data-v-d7604463]:nth-child(4){opacity:.58;background:radial-gradient(ellipse at 49% 31%, #ffffffeb, color-mix(in srgb, var(--glow-b) 38%, transparent) 55%, transparent 80%);width:69vw;height:28vw;top:74vh;left:5vw;right:auto}.ta-orb[data-v-3fb60aa5]{-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;border-radius:50%;flex:none;position:relative}.ta-orb.interactive[data-v-3fb60aa5]{cursor:pointer}.ta-orb[data-v-3fb60aa5]:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:4px}svg[data-v-3fb60aa5]{width:100%;height:100%;transition:filter .6s var(--ease), transform .6s var(--spring);overflow:visible}.aura[data-v-3fb60aa5]{transform-box:fill-box;transform-origin:50%;animation:orb-aura-3fb60aa5 calc(4.8s / var(--tempo,1)) ease-in-out infinite}.shadow[data-v-3fb60aa5]{fill:var(--ink);opacity:.1}.body[data-v-3fb60aa5]{filter:drop-shadow(0 8px 14px color-mix(in srgb, var(--orb-c) 40%, transparent))}.shine[data-v-3fb60aa5]{fill:#fff;opacity:.5}.shine.dot[data-v-3fb60aa5]{opacity:.7}.ink[data-v-3fb60aa5]{fill:var(--orb-face)}.line[data-v-3fb60aa5]{fill:none;stroke:var(--orb-face);stroke-width:3.6px;stroke-linecap:round;stroke-linejoin:round}.line.thin[data-v-3fb60aa5]{stroke-width:2.6px}.line.hair[data-v-3fb60aa5]{stroke-width:1.6px;opacity:.5}.glint[data-v-3fb60aa5]{fill:#fff}.tongue[data-v-3fb60aa5],.cheeks ellipse[data-v-3fb60aa5]{fill:var(--cheek)}.cheeks[data-v-3fb60aa5]{transition:opacity .5s var(--ease)}.squish[data-v-3fb60aa5]{transform-box:view-box;transform-origin:100px 180px}.is-press .squish[data-v-3fb60aa5]{transition:transform .2s var(--ease);transform:scale(1.06,.93)}.is-poke .squish[data-v-3fb60aa5]{animation:orb-squish-3fb60aa5 .65s var(--spring)}.is-pet .squish[data-v-3fb60aa5]{animation:1.4s ease-in-out orb-wiggle-3fb60aa5}.eye[data-v-3fb60aa5]{transform-box:fill-box;transform-origin:50%}.eyes.blinks .eye[data-v-3fb60aa5]{animation:orb-blink-3fb60aa5 calc(5.6s / var(--tempo,1)) var(--blink-delay,0s) infinite}.eyes.blinks .eye.wink[data-v-3fb60aa5]{animation:6.5s 2s infinite orb-wink-3fb60aa5}.talk[data-v-3fb60aa5],.yawn[data-v-3fb60aa5]{transform-box:fill-box;transform-origin:50%}.talk[data-v-3fb60aa5]{animation:.42s ease-in-out infinite alternate orb-talk-3fb60aa5}.yawn[data-v-3fb60aa5]{animation:6s ease-in-out infinite orb-yawn-3fb60aa5}.page[data-v-3fb60aa5]{fill:var(--paper,#fffdf6);stroke:var(--orb-face);stroke-width:1.8px;stroke-linejoin:round}.pen rect[data-v-3fb60aa5],.pen path[data-v-3fb60aa5]{fill:var(--accent);stroke:var(--orb-face);stroke-width:1.4px}.halo circle[data-v-3fb60aa5]{fill:none;stroke:var(--orb-b);stroke-width:2px;stroke-dasharray:3 9;opacity:.85;transform-box:view-box;transform-origin:100px 112px;animation:26s linear infinite orb-spin-3fb60aa5}.halo .halo-soft[data-v-3fb60aa5]{stroke-dasharray:none;stroke-width:10px;opacity:.18;animation:5s ease-in-out infinite orb-breathe-3fb60aa5}.fx .sparkle[data-v-3fb60aa5]{fill:var(--particle);stroke:color-mix(in srgb, var(--accent) 50%, transparent);stroke-width:.8px;transform-box:fill-box;transform-origin:50%;animation:2.4s ease-in-out infinite orb-twinkle-3fb60aa5}.fx .heart[data-v-3fb60aa5]{fill:var(--cheek);opacity:.85;transform-box:fill-box;transform-origin:50%;animation:3.6s ease-out infinite orb-rise-3fb60aa5}.fx .cloud[data-v-3fb60aa5]{fill:color-mix(in srgb, var(--orb-c) 55%, #fff);animation:3.5s ease-in-out infinite alternate orb-float-3fb60aa5}.storm .cloud[data-v-3fb60aa5]{fill:color-mix(in srgb, var(--orb-c) 75%, #444)}.drop[data-v-3fb60aa5]{stroke:var(--orb-c);stroke-width:2.2px;stroke-linecap:round;animation:1.35s linear infinite orb-drop-3fb60aa5}.scribble[data-v-3fb60aa5]{fill:none;stroke:var(--orb-c);stroke-width:2.4px;stroke-linecap:round;animation:.9s ease-in-out infinite alternate orb-float-3fb60aa5}.zz[data-v-3fb60aa5]{font:700 13px/1 var(--font-display);fill:var(--orb-face);opacity:.7;transform-box:fill-box;animation:3.2s ease-in-out infinite orb-z-3fb60aa5}[data-mood=night] .zz[data-v-3fb60aa5]{fill:var(--ink)}.moon[data-v-3fb60aa5]{fill:#fff4c2;filter:drop-shadow(0 0 6px #fff0b499)}.floating-page[data-v-3fb60aa5]{animation:3s ease-in-out infinite alternate orb-float-3fb60aa5}.think .puff[data-v-3fb60aa5]{fill:var(--surface-strong);stroke:var(--line);stroke-width:1.2px}.think .dot[data-v-3fb60aa5]{fill:var(--orb-face);transform-box:fill-box;animation:1.1s ease-in-out infinite orb-dots-3fb60aa5}.talkwaves path[data-v-3fb60aa5]{stroke:var(--accent);animation:1.2s ease-in-out infinite pulse-soft}.orb-say[data-v-3fb60aa5]{z-index:3;background:var(--surface-strong);border:1px solid var(--line);width:max-content;max-width:min(260px,70vw);box-shadow:var(--shadow-soft);color:var(--ink);text-align:left;pointer-events:none;border-radius:16px 16px 16px 4px;margin:0;padding:8px 14px;font-size:13px;font-weight:600;line-height:1.5;position:absolute;bottom:92%;left:50%}.orb-say.say-left[data-v-3fb60aa5]{border-radius:16px 16px 4px;bottom:56%;left:auto;right:88%}.orb-say-enter-active[data-v-3fb60aa5]{transition:opacity .25s var(--ease), transform .4s var(--spring)}.orb-say-leave-active[data-v-3fb60aa5]{transition:opacity .2s}.orb-say-enter-from[data-v-3fb60aa5]{opacity:0;transform:translateY(8px)scale(.9)}.orb-say-leave-to[data-v-3fb60aa5]{opacity:0}@keyframes orb-blink-3fb60aa5{0%,92%,to{transform:scaleY(1)}95%{transform:scaleY(.12)}}@keyframes orb-wink-3fb60aa5{0%,86%,to{transform:scaleY(1)}90%,94%{transform:scaleY(.12)}}@keyframes orb-squish-3fb60aa5{0%{transform:scale(1)}18%{transform:scale(1.2,.76)}42%{transform:scale(.9,1.12)}66%{transform:scale(1.05,.96)}to{transform:scale(1)}}@keyframes orb-wiggle-3fb60aa5{0%,to{transform:rotate(0)}15%{transform:rotate(-6deg)}35%{transform:rotate(5deg)}55%{transform:rotate(-4deg)}75%{transform:rotate(2deg)}}@keyframes orb-aura-3fb60aa5{0%,to{opacity:.75;transform:scale(.94)}50%{opacity:1;transform:scale(1.04)}}@keyframes orb-breathe-3fb60aa5{0%,to{opacity:.12}50%{opacity:.28}}@keyframes orb-talk-3fb60aa5{0%{transform:scaleY(.45)}to{transform:scaleY(1.1)}}@keyframes orb-yawn-3fb60aa5{0%,70%,to{transform:scale(.7)}80%,88%{transform:scale(1.35)}}@keyframes orb-spin-3fb60aa5{to{transform:rotate(360deg)}}@keyframes orb-twinkle-3fb60aa5{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.45)}}@keyframes orb-rise-3fb60aa5{0%{opacity:.85;transform:translateY(0)scale(1)}70%{opacity:.5}to{opacity:0;transform:translateY(-26px)scale(1.15)}}@keyframes orb-drop-3fb60aa5{0%{opacity:.9;transform:translateY(0)}to{opacity:0;transform:translateY(16px)}}@keyframes orb-z-3fb60aa5{0%{opacity:.7;transform:translate(0)scale(1)}to{opacity:0;transform:translate(10px,-16px)scale(1.15)}}@keyframes orb-dots-3fb60aa5{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes orb-float-3fb60aa5{0%{transform:translateY(0)}to{transform:translateY(-4px)}}.menu-select[data-v-41eb8776]{min-width:0;position:relative}.menu-face[data-v-41eb8776]{background:linear-gradient(180deg, #ffffffb8, #fff6), var(--surface-strong);border:1px solid var(--glass-edge);width:100%;min-height:42px;box-shadow:var(--glass-sheen);text-align:left;border-radius:14px;justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;display:flex}.menu-face span[data-v-41eb8776]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu-face i[data-v-41eb8776]{border-right:1.5px solid var(--ink-soft);border-bottom:1.5px solid var(--ink-soft);width:8px;height:8px;transform:translateY(-2px)rotate(45deg)}.menu-list[data-v-41eb8776]{z-index:200;background:var(--surface-strong);border:1px solid var(--glass-edge);max-height:280px;box-shadow:var(--glass-sheen), var(--shadow);transform-origin:top;animation:menu-pop-41eb8776 .46s var(--jelly) both;border-radius:16px;margin:0;padding:6px;list-style:none;display:grid;position:fixed;overflow:auto}.menu-list.up[data-v-41eb8776]{transform-origin:bottom}@keyframes menu-pop-41eb8776{0%{opacity:0;transform:translateY(10px)scale(.92,.82)}70%{opacity:1;transform:translateY(-2px)scale(1.02,1.04)}to{transform:none}}.menu-list button[data-v-41eb8776]{text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:10px;width:100%;padding:8px 10px;font-weight:550}.menu-list button[aria-selected=true][data-v-41eb8776]{background:color-mix(in srgb, var(--accent) 16%, transparent);color:var(--ink)}.empty[data-v-41eb8776]{color:var(--ink-soft);padding:8px 10px;font-size:13px}.menu-list button[data-v-41eb8776]:hover:not(:disabled){box-shadow:none;background:color-mix(in srgb, var(--accent) 10%, transparent);transform:none}.native[data-v-41eb8776]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.ta-chat[data-v-235059b5]{flex-direction:column;gap:10px;height:100%;min-height:0;display:flex}.preview-meta[data-v-235059b5]{color:var(--ink-soft);font-size:12px}.ta-chat-log[data-v-235059b5]{flex-direction:column;flex:1;gap:10px;min-height:64px;padding:4px 2px;display:flex}.preview-bubble[data-v-235059b5]{overflow-wrap:anywhere;max-width:88%;animation:bubble-in-235059b5 .35s var(--spring);border-radius:18px;padding:9px 13px;font-size:14px;line-height:1.6}.preview-bubble p+p[data-v-235059b5]{margin-top:4px}.preview-bubble.me[data-v-235059b5]{background:var(--accent);color:var(--accent-ink);border-bottom-right-radius:6px;align-self:flex-end}.preview-bubble.bot[data-v-235059b5]{background:linear-gradient(135deg, color-mix(in srgb, var(--orb-a) 80%, var(--surface-strong)), color-mix(in srgb, var(--orb-b) 50%, var(--surface-strong)));color:var(--ink);border-bottom-left-radius:6px;align-self:flex-start}[data-mood=night] .preview-bubble.bot[data-v-235059b5]{background:color-mix(in srgb, var(--orb-b) 40%, var(--surface-strong))}.why[data-v-235059b5]{margin-top:6px;font-size:12px}.why summary[data-v-235059b5]{color:var(--ink-soft);font-weight:600}.why summary[data-v-235059b5]:before{content:"▸ "}.why[open] summary[data-v-235059b5]:before{content:"▾ "}.why p[data-v-235059b5]{color:var(--ink-soft);margin-top:4px}.typing[data-v-235059b5]{background:color-mix(in srgb, var(--orb-a) 70%, var(--surface-strong));border-radius:18px 18px 18px 6px;align-self:flex-start;gap:5px;padding:12px 14px;display:inline-flex}.typing i[data-v-235059b5]{background:var(--orb-face);opacity:.5;border-radius:50%;width:7px;height:7px;animation:1.1s ease-in-out infinite typing-235059b5}.typing i[data-v-235059b5]:nth-child(2){animation-delay:.15s}.typing i[data-v-235059b5]:nth-child(3){animation-delay:.3s}.ta-chat-form[data-v-235059b5]{flex-shrink:0;gap:8px;display:grid}.ta-chat-options[data-v-235059b5]{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.where[data-v-235059b5]{flex:1;align-items:center;gap:8px;min-width:180px;display:flex}.where[data-v-235059b5] .menu-select{flex:1;min-width:0}.where span[data-v-235059b5]{white-space:nowrap}.where select[data-v-235059b5]{padding:6px 10px;font-size:13px}.composer[data-v-235059b5]{gap:8px;display:flex}.composer input[data-v-235059b5]{border-radius:999px;padding-inline:16px}@keyframes bubble-in-235059b5{0%{opacity:0;transform:translateY(6px)scale(.97)}}@keyframes typing-235059b5{0%,to{opacity:.4;transform:translateY(0)}50%{opacity:1;transform:translateY(-3px)}}.companion[data-v-038fa72e]{z-index:80;pointer-events:none;justify-items:end;gap:10px;display:grid;position:fixed;bottom:16px;right:18px}.companion[data-v-038fa72e]>*{pointer-events:auto}.companion-dock[data-v-038fa72e]{align-items:flex-end;gap:4px;display:flex}.companion-talk[data-v-038fa72e]{opacity:1;transition:opacity .25s var(--ease), transform .3s var(--spring);margin-bottom:14px;padding:6px 12px;font-size:12px;transform:none}.companion-dock:hover .companion-talk[data-v-038fa72e],.companion-talk[data-v-038fa72e]:focus-visible,.companion-talk[aria-expanded=true][data-v-038fa72e]{opacity:1;transform:none}@media (hover:none){.companion-talk[data-v-038fa72e]{opacity:1;transform:none}}.scrim[data-v-038fa72e]{z-index:1;background:color-mix(in srgb, var(--ink) 32%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:100vw;height:100dvh;box-shadow:none;cursor:pointer;border:none;border-radius:0;margin:0;padding:0;position:fixed;inset:0}.scrim[data-v-038fa72e]:hover:not(:disabled),.scrim[data-v-038fa72e]:active:not(:disabled){box-shadow:none;border:none;transform:none}.scrim-enter-active[data-v-038fa72e],.scrim-leave-active[data-v-038fa72e]{transition:opacity .2s var(--ease)}.scrim-enter-from[data-v-038fa72e],.scrim-leave-to[data-v-038fa72e]{opacity:0}.ta-drawer[data-v-038fa72e]{z-index:2;background:radial-gradient(ellipse at 0% 0%, #ffffffeb, transparent 50%), linear-gradient(145deg, #ffffffb8, #ebf3ff6e 65%, #f8e8fb94), var(--glass-fill);-webkit-backdrop-filter:blur(34px)saturate(1.8);backdrop-filter:blur(34px)saturate(1.8);border:1.5px solid #ffffffde;border-radius:34px;flex-direction:column;gap:12px;width:min(460px,100vw - 28px);height:min(640px,100dvh - 140px);padding:16px 18px 18px;display:flex;position:relative;box-shadow:inset 0 2px 1px #fff,0 28px 64px -27px #3452956b}.drawer-head[data-v-038fa72e]{align-items:center;gap:10px;display:flex}.drawer-title[data-v-038fa72e]{flex:1;justify-items:start;gap:3px;display:grid}.drawer-head h2[data-v-038fa72e]{font-size:16px}.drawer-enter-active[data-v-038fa72e]{transition:opacity .28s var(--ease), transform .55s var(--spring)}.drawer-leave-active[data-v-038fa72e]{transition:opacity .18s,transform .2s}.drawer-enter-from[data-v-038fa72e],.drawer-leave-to[data-v-038fa72e]{opacity:0;transform-origin:100% 100%;transform:translateY(34px)scale(.88)rotate(2deg)}@media (width<=760px){.companion[data-v-038fa72e]{right:12px;bottom:calc(84px + env(safe-area-inset-bottom))}.companion-dock[data-v-038fa72e] .ta-orb{width:58px!important;height:58px!important}.companion-talk[data-v-038fa72e]{margin-bottom:10px;padding:5px 10px}.ta-drawer[data-v-038fa72e]{height:min(520px,100dvh - 190px)}}.drawer-head[data-v-038fa72e] .ta-orb{flex:0 0 42px}.drawer-head[data-v-038fa72e]{border-bottom:1px solid var(--line);flex-shrink:0;padding-bottom:12px}.ta-drawer[data-v-038fa72e] .ta-chat{min-height:0;overflow:hidden}.companion-dock[data-v-038fa72e]{background:linear-gradient(140deg, #ffffffd1, #e8f2ff6b), var(--glass-fill);-webkit-backdrop-filter:blur(22px)saturate(1.75);backdrop-filter:blur(22px)saturate(1.75);transition:transform .42s var(--spring), box-shadow .32s ease;border:1.5px solid #ffffffe0;border-radius:999px;align-items:center;padding:5px 10px;box-shadow:inset 0 2px 1px #fff,0 15px 28px -17px #34529561}.companion-dock[data-v-038fa72e]:hover{transform:translateY(-5px)scale(1.035);box-shadow:inset 0 2px 1px #fff,0 23px 32px -17px #34529573}.companion-talk[data-v-038fa72e]{background:0 0;border:0;margin:0}@media (width<=760px){.companion-dock[data-v-038fa72e] .ta-orb{width:36px!important;height:36px!important}.companion-talk[data-v-038fa72e]{margin:0}}.locale-switch[data-v-bc942b38]{flex-wrap:nowrap;gap:2px;padding:3px}.locale-switch button[data-v-bc942b38]{letter-spacing:.02em;min-width:36px;padding:5px 10px;font-size:12.5px;font-weight:700}@media (width<=760px){.locale-switch button[data-v-bc942b38]{min-width:30px;padding:5px 8px}}.theme-picker[data-v-4e5670d2]{position:relative}.theme-toggle[data-v-4e5670d2]{width:100%;color:var(--ink-soft);text-align:left;background:0 0;border:none;border-radius:14px;align-items:center;gap:10px;padding:8px 12px;display:flex}.theme-toggle[data-v-4e5670d2]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 8%, transparent);color:var(--ink);box-shadow:none;transform:none}.swatch[data-v-4e5670d2]{background:radial-gradient(circle at 36% 30%, var(--orb-a), var(--orb-b) 58%, var(--orb-c));width:20px;height:20px;box-shadow:0 0 0 2px var(--surface-strong), 0 0 0 3px var(--line);border-radius:50%;flex:none}.swatch.auto[data-v-4e5670d2]{background:conic-gradient(#ffc15f,#ffa8cf,#7fdcbc,#99b2d8,#9a8cc4,#cdb6f7,#6f7ee6,#ffc15f)}.theme-menu[data-v-4e5670d2]{z-index:80;background:radial-gradient(ellipse at 0% 0%, #ffffffed, transparent 52%), linear-gradient(145deg, #ffffffb8, #edf3ff5e), var(--glass-fill);-webkit-backdrop-filter:blur(30px)saturate(1.8);backdrop-filter:blur(30px)saturate(1.8);border:1.5px solid #ffffffd9;border-radius:28px;gap:2px;width:250px;max-height:calc(100dvh - 64px);padding:8px;display:grid;position:fixed;top:96px;right:28px;overflow:auto;box-shadow:inset 0 2px 1px #fff,0 24px 58px -27px #34529566}.theme-menu.inline-menu[data-v-4e5670d2]{width:100%;box-shadow:none;position:static}@media (width>=761px) and (width<=1100px){.theme-menu[data-v-4e5670d2]{right:20px}}.theme-menu button[data-v-4e5670d2]{text-align:left;background:0 0;border:none;border-radius:14px;align-items:center;gap:12px;padding:8px 10px;font-weight:500;display:flex}.theme-menu button[data-v-4e5670d2]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 9%, transparent);box-shadow:none;transform:none}.theme-menu button[aria-checked=true][data-v-4e5670d2]{background:linear-gradient(120deg, #ffffffde, color-mix(in srgb, var(--glow-a) 40%, white));box-shadow:inset 0 1px 0 white, 0 8px 18px -13px var(--accent)}.theme-menu button>span[data-v-4e5670d2]:last-child{line-height:1.35;display:grid}.theme-menu b[data-v-4e5670d2]{font-size:13px}.theme-menu small[data-v-4e5670d2]{color:var(--ink-soft);font-size:11.5px}.pop-enter-active[data-v-4e5670d2]{transition:opacity .2s var(--ease), transform .3s var(--spring)}.pop-leave-active[data-v-4e5670d2]{transition:opacity .15s}.pop-enter-from[data-v-4e5670d2],.pop-leave-to[data-v-4e5670d2]{opacity:0;transform:translateY(6px)scale(.98)}.presence-dock[data-v-4625711b]{z-index:4;width:100%;height:calc(100dvh - 112px);max-height:calc(100dvh - 112px);color:var(--ink);background:linear-gradient(145deg,#ffffffeb,#f8fbffe0);border:1px solid #ffffffe0;border-radius:28px;align-content:start;align-self:start;gap:12px;padding:22px;display:grid;position:sticky;top:96px;overflow:auto;box-shadow:inset 0 1px #fffffff5,0 24px 48px -34px #2745808f}.presence-detail[data-v-4625711b]{align-content:start;gap:12px;min-width:0;display:grid}.mood-word[data-v-4625711b]{font-family:var(--font-display);letter-spacing:-.055em;background:linear-gradient(105deg, var(--ink) 4%, #83bcf2 52%, #dd9dca 95%);color:#0000;-webkit-background-clip:text;background-clip:text;font-size:clamp(48px,3.5vw,70px);font-weight:750}.chips[data-v-4625711b]{gap:7px}.chips .chip[data-v-4625711b]{background:#ffffffa3;border-color:#ffffffd6}.activity-chip[data-v-4625711b]{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%;line-height:1.5}.actions[data-v-4625711b]{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.actions>button[data-v-4625711b]{background:#ffffff8a;border-color:#ffffffe0;justify-content:center;width:100%}.actions>button.primary[data-v-4625711b]{color:#213e73;background:linear-gradient(120deg,#84bdfb,#a5b5f0 56%,#dfb4e5);box-shadow:0 16px 32px -16px #7ca9ef}.aside-bit[data-v-4625711b]{border-top:1px solid #ffffffb3;gap:4px;padding-top:10px;display:grid}.aside-bit p[data-v-4625711b]{font-size:13.5px;line-height:1.55}.aside-bit small[data-v-4625711b]{color:var(--ink-soft);font-size:12px}@media (width<=760px){.presence-dock[data-v-4625711b]{width:calc(100% - 28px);height:auto;max-height:none;margin:0 auto 8px;position:relative;top:auto}}.dialog-layer[data-v-2339e49c]{z-index:100;background:color-mix(in srgb, var(--sky-top) 44%, #3c51893d);-webkit-backdrop-filter:blur(13px)saturate(1.25);backdrop-filter:blur(13px)saturate(1.25);place-items:center;padding:20px;display:grid;position:fixed;inset:0}.dialog[data-v-2339e49c]{background:radial-gradient(ellipse at 9% -10%, #fffffffa, transparent 53%), linear-gradient(148deg, #ffffffc2, #e5efff70 64%, #f8e7fb8c), var(--glass-fill);-webkit-backdrop-filter:blur(32px)saturate(1.7);backdrop-filter:blur(32px)saturate(1.7);border:1.5px solid #ffffffe3;border-radius:34px;gap:17px;width:min(420px,100%);padding:42px 30px 26px;display:grid;position:relative;box-shadow:inset 0 2px 1px #fff,0 30px 72px -28px #3452956e}.dialog h2[data-v-2339e49c]{font-size:18px}.dialog p[data-v-2339e49c]{color:var(--ink-soft);white-space:pre-line;font-size:14px;line-height:1.7}.dialog-orb[data-v-2339e49c]{background:radial-gradient(circle at 38% 30%, var(--orb-a), var(--orb-b) 60%, var(--orb-c));width:52px;height:50px;box-shadow:inset 0 3px 3px #ffffffe0, 0 13px 24px -9px var(--orb-c);border:2px solid #ffffffe3;border-radius:44% 56% 57% 43%/50% 43% 57% 50%;animation:4s ease-in-out infinite alternate dialog-orb-breathe-2339e49c;position:absolute;top:-24px;left:30px}.dialog-enter-active[data-v-2339e49c],.dialog-leave-active[data-v-2339e49c]{transition:opacity .2s var(--ease)}.dialog-enter-active .dialog[data-v-2339e49c]{transition:transform .52s var(--spring)}.dialog-enter-from[data-v-2339e49c],.dialog-leave-to[data-v-2339e49c]{opacity:0}.dialog-enter-from .dialog[data-v-2339e49c]{transform:translateY(22px)scale(.9)}@keyframes dialog-orb-breathe-2339e49c{to{transform:translateY(-5px)rotate(8deg)scale(1.07)}}.icon[data-v-69e2db74]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:20px;height:20px}.sheet-layer[data-v-2c804a0d]{z-index:70;background:color-mix(in srgb, var(--sky-top) 42%, #3c518945);-webkit-backdrop-filter:blur(13px)saturate(1.3);backdrop-filter:blur(13px)saturate(1.3);justify-content:flex-end;padding:12px;display:flex;position:fixed;inset:0}.sheet[data-v-2c804a0d]{width:min(var(--sheet-w), calc(100vw - 24px));background:radial-gradient(ellipse at 0% 0%, #fffffff2, transparent 43%), linear-gradient(145deg, #ffffffba, #ecf4ff73 62%, #f6eafb99), var(--glass-fill);-webkit-backdrop-filter:blur(36px)saturate(1.8);backdrop-filter:blur(36px)saturate(1.8);border:1.5px solid #ffffffe0;border-radius:34px;outline:none;flex-direction:column;height:100%;display:flex;box-shadow:inset 0 2px 1px #fff,inset -1px -2px 2px #708fd221,0 32px 75px -28px #34529570}.sheet-head[data-v-2c804a0d]{border-bottom:1px solid #ffffffab;justify-content:space-between;align-items:flex-start;gap:12px;padding:26px 28px 18px;display:flex}.sheet-head h2[data-v-2c804a0d]{font-size:19px}.sheet-body[data-v-2c804a0d]{overscroll-behavior:contain;flex:1;padding:20px 28px 30px;overflow:auto}.sheet-enter-active[data-v-2c804a0d],.sheet-leave-active[data-v-2c804a0d]{transition:opacity .25s var(--ease)}.sheet-enter-active .sheet[data-v-2c804a0d],.sheet-leave-active .sheet[data-v-2c804a0d]{transition:transform .55s var(--spring)}.sheet-enter-from[data-v-2c804a0d],.sheet-leave-to[data-v-2c804a0d]{opacity:0}.sheet-enter-from .sheet[data-v-2c804a0d],.sheet-leave-to .sheet[data-v-2c804a0d]{transform:translate(74px)scale(.94)}@media (width<=760px){.sheet-layer[data-v-2c804a0d]{align-items:flex-end;padding:0}.sheet[data-v-2c804a0d]{border-radius:30px 30px 0 0;width:100vw;height:min(88dvh,100%)}.sheet-enter-from .sheet[data-v-2c804a0d],.sheet-leave-to .sheet[data-v-2c804a0d]{transform:translateY(40px)}}.card-head[data-v-2c88637b]{border-bottom:1px solid #ffffffb3;align-items:center;margin-bottom:19px;padding-bottom:13px;position:relative}.card-head h2[data-v-2c88637b]{letter-spacing:-.025em;margin-top:3px;font-size:clamp(18px,1.7vw,22px);font-weight:740}.card-head p[data-v-2c88637b]{margin-top:5px;line-height:1.55}.card-head .eyebrow[data-v-2c88637b]{color:var(--accent)}.meter-row[data-v-4f51518c]{grid-template-columns:minmax(64px,max-content) 1fr minmax(40px,max-content);align-items:center;gap:12px;font-size:12.5px;display:grid}.meter-label[data-v-4f51518c]{color:var(--ink-soft)}.meter-value[data-v-4f51518c]{text-align:right;font-variant-numeric:tabular-nums}.count[data-v-e8e03a3b]{opacity:.75;font-variant-numeric:tabular-nums;margin-left:6px;font-size:11px}.timeline[data-v-e79d18a9]{margin:0;padding:0;list-style:none;display:grid}.timeline li[data-v-e79d18a9]{content-visibility:auto;contain-intrinsic-size:auto 84px;grid-template-columns:24px minmax(0,1fr);gap:12px;display:grid}.stem[data-v-e79d18a9]{justify-items:center;display:grid;position:relative}.stem[data-v-e79d18a9]:before{content:"";background:linear-gradient(var(--glow-a), #ffffffd9, var(--glow-b));width:3px;box-shadow:0 0 10px color-mix(in srgb, var(--glow-a) 55%, transparent);border-radius:999px;position:absolute;top:0;bottom:0}.timeline li:first-child .stem[data-v-e79d18a9]:before{top:12px}.timeline li:last-child .stem[data-v-e79d18a9]:before{bottom:calc(100% - 14px)}.stem i[data-v-e79d18a9]{background:linear-gradient(145deg, white, var(--glow-a));width:13px;height:13px;box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 33%, transparent), 0 0 13px var(--glow-a);border:2px solid #fff;border-radius:50%;margin-top:18px;position:relative}li[data-tone=warm] .stem i[data-v-e79d18a9]{border-color:var(--cheek);background:var(--cheek)}li[data-tone=quiet] .stem i[data-v-e79d18a9]{border-color:var(--ink-faint)}li[data-tone=glow] .stem i[data-v-e79d18a9]{background:var(--accent)}li[data-tone=night] .stem i[data-v-e79d18a9]{border-color:var(--orb-c);background:var(--orb-c)}.entry[data-v-e79d18a9]{background:linear-gradient(125deg, #ffffffa8, #fff3), var(--glass-fill);min-width:0;box-shadow:inset 0 1px 0 white, 0 8px 21px -18px var(--accent);transition:transform .48s var(--jelly);border:1px solid #ffffffc2;border-radius:18px;margin-bottom:10px;padding:11px 15px}.timeline li:hover .entry[data-v-e79d18a9]{transform:translate(4px)scale(1.01)}.wallpaper-picker[data-v-01d9dcb6]{z-index:6;-webkit-backdrop-filter:blur(18px)saturate(1.4);backdrop-filter:blur(18px)saturate(1.4);background:#ffffffd1;border:1px solid #ffffffdb;border-radius:22px;gap:12px;width:min(280px,100% - 32px);max-height:calc(100% - 78px);padding:14px;display:grid;position:absolute;top:62px;right:16px;overflow:auto;box-shadow:inset 0 1px #fff,0 18px 40px -24px #2745808c}header[data-v-01d9dcb6]{justify-content:space-between;align-items:center;display:flex}header b[data-v-01d9dcb6]{font-size:14px}.choice[data-v-01d9dcb6]{gap:8px;display:grid}.choice>span[data-v-01d9dcb6]{font-size:12.5px;font-weight:700}.row[data-v-01d9dcb6]{gap:8px;display:flex}.row button[data-v-01d9dcb6]{border-radius:999px;flex:1;min-height:32px;padding:6px 8px;font-size:12px}.opacity[data-v-01d9dcb6]{gap:4px;display:grid}.opacity span[data-v-01d9dcb6],.opacity small[data-v-01d9dcb6]{color:var(--ink-soft);font-size:12px}.opacity input[data-v-01d9dcb6]{width:100%;accent-color:var(--accent)}.now-presentation[data-v-663ff302]{min-height:450px;margin-bottom:26px;position:relative}.now-hero[data-v-663ff302]{isolation:isolate;background:linear-gradient(145deg, var(--sky-top), var(--sky-mid) 58%, var(--sky-bottom));height:450px;min-height:450px;color:var(--ink);border:2px solid #ffffffcf;border-radius:42px;margin:0;padding:0;display:block;position:relative;overflow:hidden;box-shadow:inset 0 2px #fffffff2,0 35px 90px -45px #5a7acc8c}.wallpaper-layer[data-v-663ff302]{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.wallpaper-layer img[data-v-663ff302]{object-fit:cover;object-position:50% 50%;width:100%;height:100%;transition:object-position .26s var(--ease-spring);-webkit-user-select:none;user-select:none;display:block}.wallpaper-layer[data-v-663ff302]:after{content:"";background:linear-gradient(100deg,#ffecf633 0%,#fff4fa14 42%,#0000 68%),linear-gradient(#301c4024,#0000 24% 72%,#3018282e);position:absolute;inset:0}.wallpaper-adjusting .wallpaper-layer img[data-v-663ff302]{transition:none}.wallpaper-drag-layer[data-v-663ff302]{z-index:2;cursor:grab;touch-action:none;background:radial-gradient(#0000 55%,#212f5214);position:absolute;inset:0}.wallpaper-drag-layer[data-v-663ff302]:active{cursor:grabbing}.wallpaper-tip[data-v-663ff302]{color:#29416d;-webkit-backdrop-filter:blur(18px)saturate(1.4);backdrop-filter:blur(18px)saturate(1.4);white-space:nowrap;pointer-events:none;background:#ffffffad;border:1px solid #ffffffd1;border-radius:999px;padding:10px 16px;font-size:13px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 10px 32px #23375e29,inset 0 1px #fff}.wallpaper-controls[data-v-663ff302]{z-index:4;-webkit-backdrop-filter:blur(20px)saturate(1.45);backdrop-filter:blur(20px)saturate(1.45);background:#ffffff80;border:1px solid #ffffffc2;border-radius:999px;align-items:center;gap:8px;padding:6px;display:flex;position:absolute;top:16px;right:16px;box-shadow:0 10px 28px #30456b1a,inset 0 1px #fff}.wallpaper-controls button[data-v-663ff302]{border-radius:999px;min-height:34px;padding:7px 13px;font-size:12px}.wallpaper-controls .wallpaper-tip-inline[data-v-663ff302]{color:var(--muted);white-space:nowrap;padding:0 4px 0 9px;font-size:12px}.now-hero button.primary[data-v-663ff302]{color:#213e73;background:linear-gradient(120deg,#84bdfb,#a5b5f0 56%,#dfb4e5);box-shadow:0 16px 32px -16px #7ca9ef}.now-hero button[data-v-663ff302]:not(.primary){background:#ffffff7a;border-color:#ffffffe0}.notes[data-v-663ff302]{align-items:start;gap:var(--gap);grid-template-columns:repeat(3,minmax(0,1fr));margin:8px 0 28px;display:grid}.note[data-v-663ff302]{background:linear-gradient(180deg, #ffffff52, transparent 55%), var(--surface);border:1px solid var(--glass-edge);box-shadow:var(--glass-sheen), var(--shadow-soft);transition:transform .52s var(--jelly);border-top:1px solid #fffffff2;border-radius:27px;align-content:start;gap:8px;padding:24px;display:grid;position:relative}.note[data-v-663ff302]:hover{transform:translateY(-4px)scale(1.012)}.note .quote[data-v-663ff302]{font-size:16px;font-weight:600;line-height:1.6}.note small[data-v-663ff302]{color:var(--ink-soft);font-size:12px}.note .text-button[data-v-663ff302]{justify-self:start;margin-top:2px}.note .eyebrow[data-v-663ff302]{margin-bottom:8px}.note>p[data-v-663ff302],.note>ul[data-v-663ff302]{max-height:248px;overflow:auto}.recent-list[data-v-663ff302]{gap:11px;margin:0;padding:0;list-style:none;display:grid}.recent-list li[data-v-663ff302]{border-bottom:1px solid color-mix(in srgb, var(--glass-edge) 70%, transparent);padding-bottom:10px}.recent-list li[data-v-663ff302]:last-child{border-bottom:0;padding-bottom:0}.recent-list .quote[data-v-663ff302]{margin-bottom:3px}.note.ahead>ul[data-v-663ff302]{max-height:248px}.note li[data-v-663ff302]{gap:1px;font-size:13.5px;display:grid}.note li b[data-v-663ff302]{color:var(--accent);font-size:12px}.words[data-v-663ff302]{background:linear-gradient(150deg, color-mix(in srgb, var(--orb-a) 55%, var(--surface-strong)), var(--surface))}.now-grid[data-v-663ff302]{gap:var(--gap);grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr);align-items:start;display:grid}.today-scroll[data-v-663ff302]{max-height:620px;margin-right:-8px;padding-right:8px}.entry-head[data-v-663ff302]{flex-wrap:wrap;align-items:center;gap:4px 10px;display:flex}.entry-head time[data-v-663ff302]{font-variant-numeric:tabular-nums;color:var(--ink-soft);font-size:12px}.entry-head b[data-v-663ff302]{font-size:14px}.entry-head+p[data-v-663ff302]{margin-top:3px;font-size:13.5px;line-height:1.65}.entry-head+p small[data-v-663ff302]{color:var(--ink-soft)}.ledger-note[data-v-663ff302]{margin-top:12px}.small-text[data-v-663ff302]{font-size:13px}.grow[data-v-663ff302]{flex:1;min-width:0}.counts[data-v-663ff302]{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.counts button[data-v-663ff302]{text-align:left;border-radius:16px;justify-items:start;gap:0;padding:12px 14px;display:grid}.counts b[data-v-663ff302]{font:700 24px var(--font-display);color:var(--accent)}.counts span[data-v-663ff302]{color:var(--ink-soft);font-size:12px;font-weight:500}@media (width<=1100px){.now-grid[data-v-663ff302]{grid-template-columns:minmax(0,1fr)}}@media (width<=900px){.now-presentation[data-v-663ff302]{min-height:0}.now-hero[data-v-663ff302]{text-align:center;height:420px;min-height:420px}.notes[data-v-663ff302]{grid-template-columns:minmax(0,1fr)}}@media (width<=760px){.now-hero[data-v-663ff302]{border-radius:30px;height:370px;min-height:370px;padding:0}.today-scroll[data-v-663ff302]{max-height:520px}.wallpaper-controls[data-v-663ff302]{top:10px;right:10px}.wallpaper-controls .wallpaper-tip-inline[data-v-663ff302]{display:none}.wallpaper-controls button[data-v-663ff302]{min-height:32px;padding:6px 10px}.wallpaper-tip[data-v-663ff302]{text-align:center;max-width:calc(100% - 34px);padding:9px 12px;font-size:12px}}.access-gate[data-v-299ced1e]{background:radial-gradient(circle at 25% 20%,#dbe7ec 0,#0000 45%),radial-gradient(circle at 85% 70%,#efdfdd 0,#0000 45%),#f4f5ef;place-items:center;min-height:100dvh;padding:72px 24px;display:grid}.access-language[data-v-299ced1e]{position:absolute;top:22px;right:24px}.access-card[data-v-299ced1e]{background:#ffffffe0;border:1px solid #fff;border-radius:28px;width:min(100%,420px);padding:36px;box-shadow:0 24px 70px #69838618}.access-card h1[data-v-299ced1e]{margin:14px 0;font-size:26px}.access-card>p[data-v-299ced1e]{color:var(--muted);line-height:1.8}.access-orb[data-v-299ced1e]{color:#8b889c;background:radial-gradient(circle at 35% 30%,#fff,#e5dde8 60%,#cedfd8);border-radius:50%;place-items:center;width:70px;height:70px;margin-bottom:24px;font-size:32px;display:grid}.access-form[data-v-299ced1e],.access-form label[data-v-299ced1e]{gap:12px;display:grid}.access-form[data-v-299ced1e]{gap:20px;margin-top:28px}.access-form input[data-v-299ced1e]{box-sizing:border-box;width:100%;font:inherit;background:#fff;border:1px solid #d6deda;border-radius:12px;padding:12px 14px}.access-form small[data-v-299ced1e]{color:var(--muted);line-height:1.7}.access-form button[data-v-299ced1e]{min-height:44px}.access-error[data-v-299ced1e]{color:#b34e5b;font-size:13px}.spinning[data-v-0e622eac] svg{animation:.7s linear infinite refresh-turn-0e622eac}@keyframes refresh-turn-0e622eac{to{transform:rotate(360deg)}}.startup[data-v-0e622eac]{z-index:1;text-align:center;place-content:center;justify-items:center;gap:10px;min-height:100dvh;padding:24px;display:grid;position:relative}.startup h1[data-v-0e622eac]{font-size:26px}.startup p[data-v-0e622eac]{color:var(--ink-soft)}.shell[data-v-0e622eac]{z-index:1;grid-template-columns:var(--dock-w) minmax(0, 1fr);min-height:100dvh;display:grid;position:relative}.skip-link[data-v-0e622eac]{z-index:120;background:var(--accent);color:var(--accent-ink);border-radius:999px;padding:8px 14px;transition:transform .2s;position:fixed;top:10px;left:10px;transform:translateY(-160%)}.skip-link[data-v-0e622eac]:focus{transform:none}.dock[data-v-0e622eac]{background:linear-gradient(180deg, #ffffffb8, #ffffff24 46%, transparent 78%), var(--surface);height:calc(100dvh - 28px);color:var(--ink);border:1px solid var(--glass-edge);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border-radius:34px;flex-direction:column;gap:16px;margin:14px 0 14px 14px;padding:14px 12px;display:flex;position:sticky;top:14px;overflow:hidden auto;box-shadow:inset 1px 1px #ffffffe6,0 22px 60px -34px #455e9457}.dock-ta[data-v-0e622eac]{text-align:left;background:0 0;border:none;border-radius:22px;align-items:center;gap:10px;padding:6px 10px 6px 4px;display:flex}.dock-ta[data-v-0e622eac]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 8%, transparent);box-shadow:none;transform:none}.dock-ta.active[data-v-0e622eac]{background:var(--accent-soft)}.dock-ta-text[data-v-0e622eac]{min-width:0;line-height:1.3;display:grid}.dock-ta-text b[data-v-0e622eac]{font:700 16px var(--font-display);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dock-ta-text small[data-v-0e622eac]{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;overflow:hidden}.dock-groups[data-v-0e622eac]{gap:14px;display:grid}.dock-group[data-v-0e622eac]{gap:2px;display:grid}.dock-group h2[data-v-0e622eac]{font:700 10.5px/1.4 var(--font-display);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);padding:0 12px 4px}.dock-link[data-v-0e622eac],.dock-tool[data-v-0e622eac]{width:100%;color:var(--ink-soft);text-align:left;background:0 0;border:none;border-radius:14px;align-items:center;gap:12px;padding:10px 12px;font-size:14px;font-weight:600;text-decoration:none;display:flex}.dock-tool[data-v-0e622eac]{padding:8px 12px;font-size:13px}.dock-link[data-v-0e622eac]:hover:not(:disabled),.dock-tool[data-v-0e622eac]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 9%, transparent);color:var(--ink);box-shadow:none;transform:none}.dock-link.active[data-v-0e622eac]{background:linear-gradient(110deg, #ffffffeb, color-mix(in srgb, var(--glow-a) 44%, white));color:var(--accent);box-shadow:inset 0 1px 0 white, 0 9px 22px -14px var(--accent)}.dock-link.active[data-v-0e622eac]:after{content:"";background:var(--accent);width:7px;height:7px;box-shadow:0 0 10px var(--accent);border-radius:50%;margin-left:auto}.dock-foot[data-v-0e622eac]{border-top:1px solid var(--line);gap:2px;margin-top:auto;padding-top:10px;display:grid}main[data-v-0e622eac]{outline:none;min-width:0;padding-bottom:32px}.topbar[data-v-0e622eac]{background:linear-gradient(180deg, #ffffffb8, transparent 70%), var(--surface);border:1px solid var(--glass-edge);-webkit-backdrop-filter:blur(18px)saturate(1.5);border-radius:30px;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;width:min(1232px,100% - 36px);margin:16px auto 8px;padding:16px 22px;display:flex;box-shadow:inset 0 1px #fff,0 16px 38px -28px #455e944d}.topbar h1[data-v-0e622eac]{font-family:var(--font-display);letter-spacing:-.03em;font-size:29px;font-weight:700}.topbar p[data-v-0e622eac]{color:var(--ink-soft);margin-top:2px;font-size:13.5px}.topbar-actions[data-v-0e622eac]{align-items:center;gap:10px;margin-left:auto;display:flex}#connection[data-v-0e622eac]{padding:7px 14px}#connection.offline[data-v-0e622eac]{cursor:pointer}.draft-banner[data-v-0e622eac]{background:color-mix(in srgb, var(--warn) 12%, var(--surface-strong));border:1px solid color-mix(in srgb, var(--warn) 28%, transparent);border-radius:999px;align-items:center;gap:10px;width:min(1224px,100% - 56px);margin:0 auto 14px;padding:9px 16px;font-size:13px;font-weight:600;display:flex}.at-now .topbar-title p[data-v-0e622eac]{display:block}.at-chats main[data-v-0e622eac]{flex-direction:column;height:calc(100dvh - 104px);padding-bottom:16px;display:flex;overflow:hidden}.at-chats .view[data-v-0e622eac]{flex-direction:column;flex:1;min-height:0;display:flex}.tabbar[data-v-0e622eac]{display:none}.more-grid[data-v-0e622eac]{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.more-grid button[data-v-0e622eac]{text-align:left;border-radius:18px;justify-items:start;gap:4px;padding:14px;display:grid}.more-grid button.active[data-v-0e622eac]{border-color:var(--accent);background:var(--accent-soft)}.more-grid small[data-v-0e622eac]{color:var(--ink-soft);font-size:11.5px;font-weight:500}.more-title[data-v-0e622eac]{margin:20px 0 8px;font-size:14px}.more-tools[data-v-0e622eac]{margin-top:14px}@media (width<=1100px) and (width>=761px){.shell[data-v-0e622eac]{grid-template-columns:92px minmax(0,1fr)}.dock[data-v-0e622eac]{align-items:center;padding:14px 8px}.dock-ta[data-v-0e622eac]{padding:4px}.dock-link[data-v-0e622eac],.dock-tool[data-v-0e622eac]{justify-content:center;width:52px;padding:12px 0}.dock-group[data-v-0e622eac],.dock-foot[data-v-0e622eac]{justify-items:center}.dock[data-v-0e622eac] .theme-toggle{justify-content:center;width:52px;padding:10px 0}.dock-link.active[data-v-0e622eac]:after{display:none}.rail-label[data-v-0e622eac],.dock[data-v-0e622eac] .rail-label{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}}@media (width<=760px){.shell[data-v-0e622eac]{grid-template-columns:minmax(0,1fr)}.dock[data-v-0e622eac]{display:none}main[data-v-0e622eac]{padding-bottom:calc(128px + env(safe-area-inset-bottom))}.topbar[data-v-0e622eac]{align-items:center;padding:16px 14px 12px}.topbar h1[data-v-0e622eac]{font-size:22px}.topbar p[data-v-0e622eac]{display:none}.draft-banner[data-v-0e622eac]{width:calc(100% - 28px)}.at-chats main[data-v-0e622eac]{height:auto;padding-bottom:calc(96px + env(safe-area-inset-bottom));display:block;overflow:visible}.tabbar[data-v-0e622eac]{left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom));z-index:65;background:linear-gradient(180deg, #ffffff57, transparent 70%), var(--surface);border:1px solid var(--glass-edge);box-shadow:var(--glass-sheen), var(--shadow);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border-radius:24px;grid-template-columns:repeat(5,minmax(0,1fr));gap:2px;padding:6px;display:grid;position:fixed}.tabbar button[data-v-0e622eac]{color:var(--ink-soft);background:0 0;border:none;border-radius:18px;justify-items:center;gap:2px;padding:7px 0 6px;font-size:11px;display:grid}.tabbar button[data-v-0e622eac]:hover:not(:disabled){box-shadow:none;transform:none}.tabbar button.active[data-v-0e622eac]{background:var(--accent-soft);color:var(--accent)}}@media (width>=761px){.shell[data-v-0e622eac]{padding-top:1px;display:block}.dock[data-v-0e622eac]{z-index:66;background:radial-gradient(ellipse at 12% -80%, #fffffff0, transparent 58%), linear-gradient(110deg, #ffffffc7, #f2f6ff9c 52%, #ffffffc7), color-mix(in srgb, var(--sky-mid) 82%, white);border:1.5px solid #ffffffd4;border-radius:999px;flex-direction:row;align-items:center;gap:14px;width:min(1460px,100% - 40px);height:auto;min-height:72px;margin:14px auto 0;padding:8px 12px;display:flex;position:sticky;top:14px;overflow:visible;box-shadow:inset 0 2px 1px #fff,inset 0 -2px 2px #708fd221,0 22px 44px -28px #34529561}.dock-ta[data-v-0e622eac]{border:1px solid #0000;border-radius:999px;flex:none;min-width:160px;padding:4px 12px 4px 4px}.dock-ta.active[data-v-0e622eac],.dock-ta[data-v-0e622eac]:hover:not(:disabled){box-shadow:inset 0 1px 0 white, 0 8px 17px -14px var(--accent);background:#ffffff6b;border-color:#ffffffc4;transform:translateY(-2px)scale(1.02)}.dock-groups[data-v-0e622eac]{flex:1;justify-content:center;align-items:center;gap:2px;min-width:0;display:flex}.dock-group[data-v-0e622eac]{align-items:center;gap:2px;display:flex}.dock-group h2[data-v-0e622eac]{clip:rect(0 0 0 0);width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.dock-link[data-v-0e622eac]{white-space:nowrap;border:1px solid #0000;border-radius:999px;justify-content:center;gap:7px;width:auto;min-height:45px;padding:9px 12px;position:relative}.dock-link[data-v-0e622eac]:hover:not(:disabled){box-shadow:0 12px 18px -14px var(--accent);background:#ffffff85;border-color:#ffffffbf;transform:translateY(-3px)scale(1.045)}.dock-link.active[data-v-0e622eac]{color:var(--ink);background:linear-gradient(120deg, #fffffffa, color-mix(in srgb, var(--glow-a) 40%, white) 64%, color-mix(in srgb, var(--glow-b) 28%, white));box-shadow:inset 0 1px 0 white, 0 8px 19px -13px var(--accent);animation:dock-bloom-0e622eac .56s var(--spring) both;border-color:#fffffff7}.dock-link.active[data-v-0e622eac]:after{display:none}.dock-foot[data-v-0e622eac]{border:0;flex:none;align-items:center;gap:3px;margin:0;padding:0;display:flex}.dock-tool[data-v-0e622eac],.dock[data-v-0e622eac] .theme-toggle{border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;padding:0;display:flex}.dock-tool .rail-label[data-v-0e622eac],.dock[data-v-0e622eac] .theme-toggle .rail-label{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.dock-tool[data-v-0e622eac]:hover:not(:disabled),.dock[data-v-0e622eac] .theme-toggle:hover:not(:disabled){box-shadow:inset 0 1px white, 0 11px 17px -13px var(--accent);background:#ffffff9e;transform:translateY(-3px)scale(1.08)}main[data-v-0e622eac]{width:100%}.workspace[data-v-0e622eac]{grid-template-columns:300px minmax(0,1fr);align-items:start;gap:22px;width:min(1480px,100% - 36px);margin:8px auto 0;display:grid}.workspace>main[data-v-0e622eac]{width:auto;min-width:0}.workspace .topbar[data-v-0e622eac]{width:calc(100% - 56px);box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border:none;align-items:center;margin:14px 28px 6px;padding:4px 22px 8px}.topbar h1[data-v-0e622eac]{font-size:clamp(28px,2.8vw,38px);font-weight:760}}@keyframes dock-bloom-0e622eac{0%{filter:brightness(1.15);transform:scale(.88)translateY(4px)}to{filter:brightness();transform:scale(1)translateY(0)}}@media (width>=761px) and (width<=1100px){.dock[data-v-0e622eac]{gap:6px;padding-inline:9px}.dock-ta[data-v-0e622eac]{min-width:145px}.dock-ta-text.rail-label[data-v-0e622eac]{clip:auto;width:auto;height:auto;display:grid;position:static!important}.dock-ta-text small[data-v-0e622eac]{display:none}.dock-link[data-v-0e622eac]{width:42px;min-width:42px;padding:10px}.dock-tool[data-v-0e622eac],.dock[data-v-0e622eac] .theme-toggle{width:38px;height:38px}}@media (width<=760px){.workspace[data-v-0e622eac]{width:100%;margin:0;display:block}.topbar[data-v-0e622eac]{width:calc(100% - 28px);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border:0;gap:10px;margin-top:14px;padding:8px 5px 10px}.topbar-actions[data-v-0e622eac]{gap:6px}#connection[data-v-0e622eac]{padding:7px 10px;font-size:12px}.tabbar[data-v-0e622eac]{background:linear-gradient(130deg, #ffffffc4, #ffffff45 57%, #e6ecff8c), var(--glass-fill);border:1.5px solid #ffffffdb;box-shadow:inset 0 2px 1px #fff,0 20px 38px -24px #34529570}.tabbar button.active[data-v-0e622eac]{background:linear-gradient(130deg, white, color-mix(in srgb, var(--glow-a) 40%, white));box-shadow:0 6px 15px -10px var(--accent);animation:dock-bloom-0e622eac .48s var(--spring) both;border:1px solid #fff}}@property --sky-top{syntax:"<color>";inherits:true;initial-value:#c8f3e4}@property --sky-mid{syntax:"<color>";inherits:true;initial-value:#e7f7f1}@property --sky-bottom{syntax:"<color>";inherits:true;initial-value:#f6efe2}@property --glow-a{syntax:"<color>";inherits:true;initial-value:#5ddec0}@property --glow-b{syntax:"<color>";inherits:true;initial-value:#8eb6ff}@property --accent{syntax:"<color>";inherits:true;initial-value:#2c8465}@property --accent-soft{syntax:"<color>";inherits:true;initial-value:#dcf3e8}@property --ink{syntax:"<color>";inherits:true;initial-value:#14332d}@property --ink-soft{syntax:"<color>";inherits:true;initial-value:#466760}@property --surface{syntax:"<color>";inherits:true;initial-value:#ffffff94}@property --surface-strong{syntax:"<color>";inherits:true;initial-value:#ffffffe6}@property --line{syntax:"<color>";inherits:true;initial-value:#14332d1f}@property --orb-a{syntax:"<color>";inherits:true;initial-value:#c3f8e0}@property --orb-b{syntax:"<color>";inherits:true;initial-value:#7fdcbc}@property --orb-c{syntax:"<color>";inherits:true;initial-value:#4fa9c7}:root{--font-ui:"HarmonyOS Sans SC", "MiSans", "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif;--font-display:"Segoe UI Variable Display", "Segoe UI", "SF Pro Rounded", "HarmonyOS Sans SC", "PingFang SC", "Microsoft YaHei UI", sans-serif;--font-editorial:"Palatino Linotype", "Noto Serif SC", "Songti SC", "SimSun", serif;--font-mono:ui-monospace, "Cascadia Code", "SFMono-Regular", Consolas, monospace;--r-xs:8px;--r-s:12px;--r-m:18px;--r-l:27px;--r-xl:40px;--gap:22px;--dock-w:224px;--topbar-h:76px;--ease:cubic-bezier(.2, .8, .2, 1);--spring:cubic-bezier(.22, 1.45, .42, 1);--jelly:cubic-bezier(.34, 1.56, .5, 1);--tempo:1;--intensity:.5;--glass-blur:12px;--glass-saturate:1.35;--glass-fill:#ffffffb8;--glass-highlight:#ffffffe0;--glass-shadow:0 24px 54px -28px #34529545;--shadow:0 28px 70px -36px color-mix(in srgb, var(--ink) 32%, transparent);--shadow-soft:0 12px 32px -20px color-mix(in srgb, var(--ink) 24%, transparent);--glass-edge:color-mix(in srgb, white 62%, var(--line));--glass-sheen:inset 0 1px 0 #ffffffbd}:root,[data-mood=calm]{--sky-top:#d9e9ff;--sky-mid:#f1f6ff;--sky-bottom:#fff5f2;--glow-a:#a6d8ff;--glow-b:#efd5fa;--accent:#466db8;--accent-ink:#fff;--accent-soft:#e5edff;--ink:#263e69;--ink-soft:#5c6f91;--ink-faint:#8798b1;--surface:#ffffff7a;--surface-strong:#ffffffd1;--line:#6082bf2e;--orb-a:#d8fff0;--orb-b:#5ed4ae;--orb-c:#3a9ec4;--orb-face:#143b34;--cheek:#ff9db1;--particle:#fff;--danger:#b03a3a;--warn:#9a6512;--ok:#478c82;--paper:#fffdf6;--paper-line:#78643c1f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=sweet]{--sky-top:#f9e3f3;--sky-mid:#fdf1f9;--sky-bottom:#eeeaff;--glow-a:#f7badb;--glow-b:#cbd2ff;--accent:#8a3356;--accent-ink:#fff;--accent-soft:#ffe3ef;--ink:#3a2430;--ink-soft:#6e4d5c;--ink-faint:#8d6c7a;--surface:#ffffff94;--surface-strong:#ffffffe6;--line:#5a1e3c1f;--orb-a:#ffe0f0;--orb-b:#ff8fbf;--orb-c:#c5a6ff;--orb-face:#4a1f38;--cheek:#ff6f9f;--particle:#ffd0e6;--danger:#b03a4a;--warn:#9a6512;--ok:#2c8465;--paper:#fff9fb;--paper-line:#aa50781f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=bright]{--sky-top:#fff0ca;--sky-mid:#fff8eb;--sky-bottom:#ffebdf;--glow-a:#ffdc88;--glow-b:#ffc8b8;--accent:#b84312;--accent-ink:#fff;--accent-soft:#ffe4cc;--ink:#3d220c;--ink-soft:#7a4e28;--ink-faint:#9a6e48;--surface:#ffffff94;--surface-strong:#fffcf7eb;--line:#6e3c1424;--orb-a:#fff3ae;--orb-b:#ffc15f;--orb-c:#ff8a6b;--orb-face:#4a2a10;--cheek:#ff7b6b;--particle:#ffe08a;--danger:#b03a2a;--warn:#9a6512;--ok:#2c7a55;--paper:#fffbf0;--paper-line:#aa6e2824;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=blue]{--sky-top:#b7d0f2;--sky-mid:#d5e4f6;--sky-bottom:#e7eef8;--glow-a:#6aa4ee;--glow-b:#b7c8ea;--accent:#245488;--accent-ink:#fff;--accent-soft:#dce8f8;--ink:#172433;--ink-soft:#3e536c;--ink-faint:#627890;--surface:#ffffff8f;--surface-strong:#f8fbffe6;--line:#17243321;--orb-a:#e4eefc;--orb-b:#8aafdc;--orb-c:#5d7eae;--orb-face:#1e2b3f;--cheek:#c8a0b5;--particle:#d5e4f6;--danger:#a23c3c;--warn:#8a5e18;--ok:#2c7560;--paper:#f8fafd;--paper-line:#3c5a821f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=stormy]{--sky-top:#e3def4;--sky-mid:#eeebf7;--sky-bottom:#e8ecf6;--glow-a:#c8b8ed;--glow-b:#bcc9e5;--accent:#53368c;--accent-ink:#fff;--accent-soft:#ece4f8;--ink:#241c33;--ink-soft:#534866;--ink-faint:#746888;--surface:#ffffff8f;--surface-strong:#faf8ffe6;--line:#241c3324;--orb-a:#ece4f8;--orb-b:#a894d4;--orb-c:#6e5f9e;--orb-face:#231a36;--cheek:#c99ab8;--particle:#ddd2ee;--danger:#a53a48;--warn:#8a5e18;--ok:#2c7560;--paper:#faf9fd;--paper-line:#5a46821f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=drowsy]{--sky-top:#e8e0fa;--sky-mid:#f5eef9;--sky-bottom:#fff1e9;--glow-a:#d2c4f5;--glow-b:#f5d3c9;--accent:#634678;--accent-ink:#fff;--accent-soft:#f3e6ff;--ink:#2c2140;--ink-soft:#5c5074;--ink-faint:#7e7296;--surface:#ffffff94;--surface-strong:#fffcffe6;--line:#2c21401f;--orb-a:#f4e9ff;--orb-b:#d0b4f8;--orb-c:#f0b8d4;--orb-face:#30264a;--cheek:#f3a3c0;--particle:#eadbff;--danger:#a53a48;--warn:#8a5e18;--ok:#2c7560;--paper:#fffaf6;--paper-line:#966ea021;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=night]{--sky-top:#cbdafa;--sky-mid:#e5eafa;--sky-bottom:#f8edfa;--glow-a:#9db9f0;--glow-b:#cdbdf4;--accent:#5667ab;--accent-ink:#fff;--accent-soft:#e3e7fa;--ink:#29375e;--ink-soft:#606d96;--ink-faint:#8691b3;--surface:#ffffff75;--surface-strong:#ffffffd1;--line:#5d6ca530;--orb-a:#d0d8ff;--orb-b:#7d8ef0;--orb-c:#4d5cc0;--orb-face:#0f1433;--cheek:#c9a0e0;--particle:#fff;--danger:#b24c71;--warn:#936930;--ok:#478c82;--paper:#fbf9ff;--paper-line:#c8d2ff1a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root{transition:--sky-top 1.4s var(--ease), --sky-mid 1.4s var(--ease), --sky-bottom 1.4s var(--ease), --glow-a 1.4s var(--ease), --glow-b 1.4s var(--ease), --accent 1.1s var(--ease), --accent-soft 1.1s var(--ease), --ink .9s var(--ease), --ink-soft .9s var(--ease), --surface .9s var(--ease), --surface-strong .9s var(--ease), --line .9s var(--ease), --orb-a 1.2s var(--ease), --orb-b 1.2s var(--ease), --orb-c 1.2s var(--ease)}[data-motion=quiet]{transition:none}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;font-size:15px;overflow-x:clip}body{min-height:100dvh;font-family:var(--font-ui);color:var(--ink);background:var(--sky-mid);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;line-height:1.6;overflow-x:clip}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);letter-spacing:-.01em;margin:0;line-height:1.25}p{margin:0}a{color:var(--accent);text-underline-offset:3px}img,svg,canvas{display:block}code,pre,kbd{font-family:var(--font-mono);font-size:.92em}pre{white-space:pre-wrap;word-break:break-word;margin:0}::selection{background:color-mix(in srgb, var(--accent) 26%, transparent)}:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}*{scrollbar-width:thin;scrollbar-color:color-mix(in srgb, var(--ink) 22%, transparent) transparent}button{font:inherit;color:var(--ink);background:var(--surface-strong);border:1px solid var(--line);cursor:pointer;transition:transform .2s var(--spring), background-color .2s, border-color .2s, box-shadow .2s, color .2s;border-radius:15px;padding:10px 16px;font-size:13px;font-weight:600;line-height:1.3}button:hover:not(:disabled){border-color:color-mix(in srgb, var(--accent) 40%, var(--line));box-shadow:var(--shadow-soft);transform:translateY(-1px)}button:active:not(:disabled){transform:scale(.97)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{color:var(--accent-ink);background:linear-gradient(125deg, color-mix(in srgb, var(--accent) 85%, #8cc8ff), var(--accent));box-shadow:inset 0 1px 0 #ffffff52, 0 12px 26px -15px var(--accent);border-color:#0000}button.primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 88%, var(--ink))}button.ghost{background:0 0}button.danger{color:var(--danger);background:color-mix(in srgb, var(--danger) 8%, var(--surface-strong));border-color:color-mix(in srgb, var(--danger) 22%, transparent)}button.small{padding:5px 11px;font-size:12px}button.text-button{color:var(--accent);text-underline-offset:3px;background:0 0;border:none;border-radius:6px;padding:2px 4px;text-decoration:underline}button.text-button:hover:not(:disabled){box-shadow:none;transform:none}button.icon-button{place-items:center;width:38px;height:38px;padding:0;display:inline-grid}button.icon-button svg{width:18px;height:18px}input,select,textarea{width:100%;font:inherit;color:var(--ink);background:color-mix(in srgb, var(--surface-strong) 86%, transparent);border:1px solid var(--glass-edge);border-radius:var(--r-s);box-shadow:var(--glass-sheen);padding:9px 12px;font-size:14px;transition:border-color .2s,box-shadow .2s}textarea{resize:vertical;line-height:1.6}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}input::placeholder,textarea::placeholder{color:var(--ink-faint)}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--accent)}input[type=range]{accent-color:var(--accent);background:0 0;border:none;padding:0}input[type=range]:focus{box-shadow:none}label{color:var(--ink-soft);gap:6px;font-size:12.5px;font-weight:600;display:grid}label>small,.hint{color:var(--ink-soft);font-size:12px;font-weight:400}.check{color:var(--ink);cursor:pointer;align-items:center;gap:8px;font-size:13px;font-weight:500;display:inline-flex}.switch{color:var(--ink);cursor:pointer;align-items:center;gap:10px;font-size:13px;font-weight:600;display:inline-flex}.switch input{appearance:none;background:color-mix(in srgb, var(--ink) 18%, transparent);cursor:pointer;border-radius:999px;flex:none;width:42px;height:24px;margin:0;transition:background-color .25s;position:relative}.switch input:after{content:"";background:var(--surface-strong);width:18px;height:18px;transition:transform .3s var(--spring);border-radius:50%;position:absolute;top:3px;left:3px;box-shadow:0 2px 6px #0003}.switch input:checked{background:var(--accent)}.switch input:checked:after{transform:translate(18px)}.switch input:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}details>summary{cursor:pointer;list-style:none}details>summary::-webkit-details-marker{display:none}.page{width:min(1280px,100%);margin:0 auto;padding:0 28px 48px}.page>*,.stack>*,.card>*{min-width:0}.stack{gap:var(--gap);align-content:start;display:grid}.stack.tight{gap:10px}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.row.end{justify-content:flex-end}.row.between{justify-content:space-between}.grid-2{gap:var(--gap);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.grid-3{gap:var(--gap);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.form-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:start;gap:14px;display:grid}.form-grid>label{grid-template-rows:2.6em auto auto;align-content:start;gap:6px;display:grid}.form-grid>label.wide{grid-template-rows:auto auto auto}.form-grid .wide{grid-column:1/-1}.scroll-pane{overscroll-behavior:contain;overflow:auto}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.card{background:linear-gradient(180deg, #ffffff9e, #ffffff0f 42%, transparent 72%), var(--surface);border:1px solid var(--glass-edge);border-radius:var(--r-l);padding:20px 22px;position:relative;box-shadow:inset 0 1px #ffffffed,0 20px 45px -32px #4962a14f}.card.flat{box-shadow:none}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px 16px;margin-bottom:14px;display:flex}.card-head h2{font-size:17px}.card-head p{color:var(--ink-soft);margin-top:3px;font-size:13px}.eyebrow{font:700 10.5px/1.4 var(--font-display);letter-spacing:.18em;text-transform:uppercase;color:var(--accent);display:block}.muted{color:var(--ink-soft)}.faint{color:var(--ink-faint);font-size:12px}.lede{font-size:15px;line-height:1.8}.chip{background:var(--accent-soft);max-width:100%;color:var(--ink);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-flex}.chip[data-tone=warn]{background:color-mix(in srgb, var(--warn) 16%, transparent);color:var(--warn)}.chip[data-tone=danger]{background:color-mix(in srgb, var(--danger) 14%, transparent);color:var(--danger)}.chip[data-tone=quiet]{background:color-mix(in srgb, var(--ink) 7%, transparent);color:var(--ink-soft)}.chip[data-tone=ok]{background:color-mix(in srgb, var(--ok) 16%, transparent);color:var(--ok)}.pill{background:var(--surface);border:1px solid var(--glass-edge);box-shadow:var(--glass-sheen);white-space:nowrap;border-radius:999px;align-items:center;gap:8px;padding:7px 14px;font-size:12.5px;font-weight:600;display:inline-flex}.dot{background:var(--ok);width:8px;height:8px;box-shadow:0 0 0 4px color-mix(in srgb, var(--ok) 18%, transparent);border-radius:50%;flex:none;display:inline-block}.dot.off{background:var(--ink-faint);box-shadow:0 0 0 4px color-mix(in srgb, var(--ink-faint) 16%, transparent)}.dot.warn{background:var(--warn);box-shadow:0 0 0 4px color-mix(in srgb, var(--warn) 18%, transparent)}.meter{background:color-mix(in srgb, var(--ink) 9%, transparent);border-radius:999px;height:8px;overflow:hidden}.meter>i{border-radius:inherit;background:linear-gradient(90deg, var(--orb-b), var(--accent));height:100%;transition:width .7s var(--ease);display:block}.meter.warn>i{background:linear-gradient(90deg, #ffc15f, var(--warn))}.seg{background:var(--surface);border:1px solid var(--line);border-radius:999px;flex-wrap:wrap;gap:4px;padding:4px;display:inline-flex}.seg button{background:0 0;border:none;padding:7px 14px}.seg button:hover:not(:disabled){box-shadow:none;background:color-mix(in srgb, var(--accent) 10%, transparent);transform:none}.seg button.active,.seg button[aria-selected=true]{background:var(--accent);color:var(--accent-ink)}.empty{text-align:center;color:var(--ink-soft);justify-items:center;gap:6px;padding:30px 16px;font-size:13px;display:grid}.empty b{color:var(--ink);font-size:15px}.kv{grid-template-columns:max-content 1fr;gap:6px 16px;font-size:13px;display:grid}.kv dt{color:var(--ink-soft)}.kv dd{overflow-wrap:anywhere;min-width:0;margin:0}.list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.list-row{border-radius:var(--r-m);background:color-mix(in srgb, var(--surface-strong) 70%, transparent);border:1px solid var(--line);align-items:center;gap:12px;padding:10px 14px;display:flex}.pagination{color:var(--ink-soft);justify-content:center;align-items:center;gap:12px;padding-top:10px;font-size:12.5px;display:flex}.notice{border-radius:var(--r-m);background:color-mix(in srgb, var(--warn) 12%, var(--surface-strong));border:1px solid color-mix(in srgb, var(--warn) 26%, transparent);color:var(--ink);padding:12px 16px;font-size:13px}.error-text{color:var(--danger);font-size:13px}.bubble{overflow-wrap:anywhere;background:var(--surface-strong);border:1px solid var(--line);border-radius:18px;max-width:min(560px,86%);padding:10px 14px;font-size:14px;line-height:1.6;position:relative}.bubble.ta{background:linear-gradient(135deg, color-mix(in srgb, var(--orb-a) 80%, var(--surface-strong)), color-mix(in srgb, var(--orb-b) 55%, var(--surface-strong)));color:var(--ink);border-color:#0000}[data-mood=night] .bubble.ta{background:linear-gradient(135deg, color-mix(in srgb, var(--orb-b) 45%, var(--surface-strong)), color-mix(in srgb, var(--orb-c) 45%, var(--surface-strong)))}#toast{z-index:90;background:var(--surface-strong);border:1px solid var(--line);max-width:min(360px,100vw - 32px);box-shadow:var(--shadow);color:var(--ink);opacity:0;pointer-events:none;transition:opacity .25s var(--ease), transform .35s var(--spring);border-radius:20px 20px 6px;padding:12px 18px;font-size:13.5px;font-weight:600;position:fixed;bottom:34px;right:96px;transform:translateY(10px)scale(.96)}#toast.show{opacity:1;transform:none}#toast.error{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 35%, transparent)}.route-page{animation:page-arrive .32s var(--spring) both}[data-visibility=hidden] *,[data-visibility=hidden] :before,[data-visibility=hidden] :after{animation-play-state:paused!important}.route-page>:nth-child(-n+6){animation:section-arrive .4s var(--spring) both}.route-page>:nth-child(2){animation-delay:25ms}.route-page>:nth-child(3){animation-delay:45ms}.route-page>:nth-child(4){animation-delay:65ms}.route-page>:nth-child(5){animation-delay:85ms}.route-page>:nth-child(6){animation-delay:.105s}@keyframes section-arrive{0%{opacity:.45;transform:translateY(12px)scale(.99)}to{opacity:1;transform:none}}@keyframes page-arrive{0%{opacity:.5;transform:translateY(5px)}to{opacity:1;transform:none}}.rise-enter-active,.rise-move{transition:opacity .35s var(--ease), transform .45s var(--spring)}.rise-enter-from{opacity:0;transform:translateY(10px)}@keyframes float-y{0%{transform:translateY(0)}to{transform:translateY(-6px)}}@keyframes pulse-soft{0%,to{opacity:.55}50%{opacity:1}}[data-motion=quiet] *,[data-motion=quiet] :before,[data-motion=quiet] :after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}@media (width<=900px){.grid-2,.grid-3{grid-template-columns:minmax(0,1fr)}}@media (width<=760px){.page{padding:0 14px 28px}.card{border-radius:var(--r-m);padding:16px}#toast{right:16px;bottom:calc(86px + env(safe-area-inset-bottom))}}.page{overflow-wrap:anywhere}.page>*,.card,.card>*,.field,.row>*,.kv dd{min-width:0}.eyebrow{letter-spacing:.18em}.card{border-top-color:color-mix(in srgb, white 70%, var(--line))}.card-head{flex-wrap:wrap;gap:14px}.save-bar,form>.actions{z-index:4;border:1px solid var(--glass-edge);background:linear-gradient(180deg, #ffffff47, transparent 60%), var(--surface-strong);box-shadow:var(--glass-sheen), var(--shadow-soft);border-radius:18px;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:14px;display:flex;position:sticky;bottom:12px}@media (width<=760px){.save-bar,form>.actions{bottom:84px}}.card,.list-row,.bubble,.pill,.seg,.save-bar,form>.actions{background:radial-gradient(ellipse at 4% 0%, #ffffffe6, transparent 43%), linear-gradient(145deg, #ffffff9e, #ffffff2b 58%, #e2e9ff52), var(--glass-fill);box-shadow:inset 0 1.5px 1px #fffffff5, inset 1px 0 1px #ffffffb3, inset -1px -2px 2px #708fd221, var(--glass-shadow);border-color:#ffffffc2}.card{border-radius:var(--r-l);transition:transform .56s var(--jelly)}.card:hover{border-color:#fffffff7;transform:translateY(-4px)scale(1.012)}button:where(:not(.text-button):not(.ghost)){transition:transform .52s var(--jelly);background-image:linear-gradient(145deg,#ffffffc7,#ffffff38);border-color:#ffffffb8;box-shadow:inset 0 1px #ffffffeb,0 7px 20px -14px #415b9b52}button:hover:where(:not(:disabled):not(.text-button)){transform:translateY(-3px)scale(1.035)}button:active:where(:not(:disabled):not(.text-button)){transition-duration:90ms;transform:translateY(2px)scale(.9,1.06)}button.primary:where(:not(.ghost)){color:#244676;background-color:color-mix(in srgb, var(--glow-a) 44%, white);background-image:radial-gradient(circle at 15% 0,#ffffffeb,#0000 45%),linear-gradient(115deg,#a7d8fb,#c0c6fb 55%,#f4cce8);border-color:#ffffffd1;box-shadow:inset 0 2px 1px #ffffffde,0 13px 24px -12px #5d7fcd6b}button.primary:hover:not(:disabled){background-color:color-mix(in srgb, var(--glow-a) 58%, white);background-image:radial-gradient(circle at 35% -10%,#fff,#0000 48%),linear-gradient(115deg,#9ed9ff,#b9c3fa 55%,#f4c5e1)}input:not([type=checkbox]):not([type=radio]):not([type=range]),select,textarea{background:linear-gradient(150deg, #ffffffab, #ffffff47), var(--glass-fill);transition:transform .42s var(--jelly), border-color .26s ease;border-color:#ffffffd4;border-radius:17px;box-shadow:inset 0 2px 3px #5371b31a,inset 0 -1px 1px #fff}input:not([type=checkbox]):not([type=radio]):not([type=range]):focus,select:focus,textarea:focus{border-color:color-mix(in srgb, var(--accent) 48%, white);box-shadow:inset 0 1px 2px #5371b314, 0 0 0 4px color-mix(in srgb, var(--glow-a) 42%, transparent), 0 12px 22px -17px var(--accent);transform:translateY(-1px)}.chip{background:color-mix(in srgb, var(--accent-soft) 44%, #ffffff85);box-shadow:inset 0 1px 0 #ffffffe6, 0 4px 12px -9px var(--accent);border:1px solid #ffffffb3}.seg{border-radius:999px;padding:5px}.seg button.active,.seg button[aria-selected=true]{color:var(--ink);background:linear-gradient(120deg, #fffffff2, color-mix(in srgb, var(--glow-a) 42%, white));box-shadow:0 5px 14px -9px var(--accent), inset 0 1px 0 white;animation:glass-settle .48s var(--spring) both;border:1px solid #fffffff5}.list-row{transition:transform .48s var(--jelly);border-radius:18px}.list-row:hover{transform:translate(4px)scale(1.01)}.meter{background:#ffffff70;border:1px solid #ffffffb8;height:10px;padding:2px;box-shadow:inset 0 2px 3px #425c9921,0 1px #fff}.meter>i{box-shadow:inset 0 1px 0 #ffffffe0, 0 0 13px color-mix(in srgb, var(--glow-a) 55%, transparent);transition:width .9s var(--spring)}.bubble{border-radius:22px}.bubble.ta{background:linear-gradient(125deg, color-mix(in srgb, var(--orb-a) 54%, white), color-mix(in srgb, var(--glow-a) 40%, #fff9));border-color:#ffffffd1}@keyframes glass-settle{0%{opacity:.5;transform:scale(.86,.78)translateY(6px)}70%{opacity:1;transform:scale(1.04,.98)translateY(-1px)}to{opacity:1;transform:none}}.card,.list-row,.bubble,.pill,.seg,.note,.chip,.message .text,.session-row,.feedback-item,.face-card,.entry,.facts,.fold,.preview-bubble,button,input,textarea,select{-webkit-backdrop-filter:none!important}
|
|
1
|
+
.sky[data-v-d7604463]{z-index:0;contain:paint;pointer-events:none;position:fixed;inset:0;overflow:hidden}.sky-base[data-v-d7604463]{background:radial-gradient(ellipse at 13% 16%, #ffffffd4, transparent 38%), radial-gradient(ellipse at 82% 8%, color-mix(in srgb, var(--glow-b) 36%, transparent), transparent 46%), linear-gradient(168deg, var(--sky-top) 0%, var(--sky-mid) 48%, var(--sky-bottom) 100%);position:absolute;inset:0}.garden[data-v-d7604463]{opacity:.22;background:url(/app/assets/liquid-garden-IMoHBwzc.png) 50% 58%/cover no-repeat;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000 8%,#000 42% 100%);mask-image:linear-gradient(#0000 8%,#000 42% 100%)}.garden.custom[data-v-d7604463]{background-position:50%;background-size:cover;-webkit-mask-image:none;mask-image:none}.glow[data-v-d7604463]{opacity:calc(.55 + var(--intensity,.5) * .2);border-radius:50%;position:absolute}.g1[data-v-d7604463]{background:radial-gradient(circle, var(--glow-a) 0%, transparent 64%);width:58vmax;height:58vmax;animation:sky-drift-a-d7604463 calc(34s / var(--tempo,1)) ease-in-out infinite alternate;top:-20vmax;left:-18vmax}.g2[data-v-d7604463]{background:radial-gradient(circle, var(--glow-b) 0%, transparent 66%);width:48vmax;height:48vmax;animation:sky-drift-b-d7604463 calc(41s / var(--tempo,1)) ease-in-out infinite alternate;top:8vh;right:-16vmax}.g3[data-v-d7604463]{background:radial-gradient(circle, color-mix(in srgb, var(--glow-a) 70%, var(--glow-b)) 0%, transparent 68%);width:46vmax;height:46vmax;animation:sky-drift-a-d7604463 calc(47s / var(--tempo,1)) ease-in-out infinite alternate-reverse;bottom:-24vmax;left:22vw}.g4[data-v-d7604463]{background:radial-gradient(circle, color-mix(in srgb, white 55%, var(--glow-b)) 0%, transparent 70%);opacity:.45;width:28vmax;height:28vmax;animation:sky-drift-b-d7604463 calc(28s / var(--tempo,1)) ease-in-out infinite alternate-reverse;top:18vh;left:48vw}.horizon[data-v-d7604463]{background:radial-gradient(ellipse at 50% 0%, color-mix(in srgb, var(--glow-a) 62%, transparent), transparent 68%);height:46%;position:absolute;bottom:-6%;left:-12%;right:-12%}.sheen[data-v-d7604463]{pointer-events:none;background:linear-gradient(115deg,#0000 36%,#ffffff24 50%,#0000 64%);position:absolute;inset:0}.vignette[data-v-d7604463]{background:radial-gradient(ellipse at 50% 40%, transparent 42%, color-mix(in srgb, var(--ink) 14%, transparent) 100%);position:absolute;inset:0}.moon[data-v-d7604463]{filter:drop-shadow(0 0 26px #fff0be73);opacity:.92;border-radius:50%;width:78px;height:78px;position:absolute;top:3vh;right:24vw;transform:rotate(-20deg);box-shadow:inset -20px -7px #fff4c2}.particles[data-v-d7604463]{opacity:.55;width:100%;height:100%;position:absolute;inset:0}.particles.off[data-v-d7604463]{display:none}@keyframes sky-drift-a-d7604463{to{transform:translate(6vmax,4vmax)scale(1.08)}}@keyframes sky-drift-b-d7604463{to{transform:translate(-5vmax,6vmax)scale(.94)}}@media (width<=760px){.moon[data-v-d7604463]{width:52px;height:52px;top:1.5vh;right:36vw;box-shadow:inset -13px -5px #fff4c2}}.landscape[data-v-d7604463]{contain:paint;opacity:.55;pointer-events:none;position:absolute;inset:0;overflow:hidden}.landscape i[data-v-d7604463]{background:radial-gradient(ellipse at 34% 42%, #ffffffd9, color-mix(in srgb, var(--glow-b) 53%, transparent) 38%, transparent 72%);border-radius:61% 39% 45% 55%/47% 65% 35% 53%;width:77vw;height:48vw;position:absolute;top:6vh;right:-20vw;transform:rotate(-24deg)}.landscape i[data-v-d7604463]:nth-child(2){opacity:.66;background:radial-gradient(ellipse at 44% 48%, #ffffffc2, color-mix(in srgb, var(--glow-a) 48%, transparent) 46%, transparent 74%);width:61vw;height:35vw;top:38vh;right:-19vw}.landscape i[data-v-d7604463]:nth-child(3){opacity:.72;background:radial-gradient(ellipse at 52% 52%, #ffffffdb, color-mix(in srgb, var(--glow-a) 52%, transparent) 43%, transparent 71%);width:72vw;height:43vw;top:32vh;left:-34vw;right:auto}.landscape i[data-v-d7604463]:nth-child(4){opacity:.58;background:radial-gradient(ellipse at 49% 31%, #ffffffeb, color-mix(in srgb, var(--glow-b) 38%, transparent) 55%, transparent 80%);width:69vw;height:28vw;top:74vh;left:5vw;right:auto}.ta-orb[data-v-3fb60aa5]{-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;border-radius:50%;flex:none;position:relative}.ta-orb.interactive[data-v-3fb60aa5]{cursor:pointer}.ta-orb[data-v-3fb60aa5]:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:4px}svg[data-v-3fb60aa5]{width:100%;height:100%;transition:filter .6s var(--ease), transform .6s var(--spring);overflow:visible}.aura[data-v-3fb60aa5]{transform-box:fill-box;transform-origin:50%;animation:orb-aura-3fb60aa5 calc(4.8s / var(--tempo,1)) ease-in-out infinite}.shadow[data-v-3fb60aa5]{fill:var(--ink);opacity:.1}.body[data-v-3fb60aa5]{filter:drop-shadow(0 8px 14px color-mix(in srgb, var(--orb-c) 40%, transparent))}.shine[data-v-3fb60aa5]{fill:#fff;opacity:.5}.shine.dot[data-v-3fb60aa5]{opacity:.7}.ink[data-v-3fb60aa5]{fill:var(--orb-face)}.line[data-v-3fb60aa5]{fill:none;stroke:var(--orb-face);stroke-width:3.6px;stroke-linecap:round;stroke-linejoin:round}.line.thin[data-v-3fb60aa5]{stroke-width:2.6px}.line.hair[data-v-3fb60aa5]{stroke-width:1.6px;opacity:.5}.glint[data-v-3fb60aa5]{fill:#fff}.tongue[data-v-3fb60aa5],.cheeks ellipse[data-v-3fb60aa5]{fill:var(--cheek)}.cheeks[data-v-3fb60aa5]{transition:opacity .5s var(--ease)}.squish[data-v-3fb60aa5]{transform-box:view-box;transform-origin:100px 180px}.is-press .squish[data-v-3fb60aa5]{transition:transform .2s var(--ease);transform:scale(1.06,.93)}.is-poke .squish[data-v-3fb60aa5]{animation:orb-squish-3fb60aa5 .65s var(--spring)}.is-pet .squish[data-v-3fb60aa5]{animation:1.4s ease-in-out orb-wiggle-3fb60aa5}.eye[data-v-3fb60aa5]{transform-box:fill-box;transform-origin:50%}.eyes.blinks .eye[data-v-3fb60aa5]{animation:orb-blink-3fb60aa5 calc(5.6s / var(--tempo,1)) var(--blink-delay,0s) infinite}.eyes.blinks .eye.wink[data-v-3fb60aa5]{animation:6.5s 2s infinite orb-wink-3fb60aa5}.talk[data-v-3fb60aa5],.yawn[data-v-3fb60aa5]{transform-box:fill-box;transform-origin:50%}.talk[data-v-3fb60aa5]{animation:.42s ease-in-out infinite alternate orb-talk-3fb60aa5}.yawn[data-v-3fb60aa5]{animation:6s ease-in-out infinite orb-yawn-3fb60aa5}.page[data-v-3fb60aa5]{fill:var(--paper,#fffdf6);stroke:var(--orb-face);stroke-width:1.8px;stroke-linejoin:round}.pen rect[data-v-3fb60aa5],.pen path[data-v-3fb60aa5]{fill:var(--accent);stroke:var(--orb-face);stroke-width:1.4px}.halo circle[data-v-3fb60aa5]{fill:none;stroke:var(--orb-b);stroke-width:2px;stroke-dasharray:3 9;opacity:.85;transform-box:view-box;transform-origin:100px 112px;animation:26s linear infinite orb-spin-3fb60aa5}.halo .halo-soft[data-v-3fb60aa5]{stroke-dasharray:none;stroke-width:10px;opacity:.18;animation:5s ease-in-out infinite orb-breathe-3fb60aa5}.fx .sparkle[data-v-3fb60aa5]{fill:var(--particle);stroke:color-mix(in srgb, var(--accent) 50%, transparent);stroke-width:.8px;transform-box:fill-box;transform-origin:50%;animation:2.4s ease-in-out infinite orb-twinkle-3fb60aa5}.fx .heart[data-v-3fb60aa5]{fill:var(--cheek);opacity:.85;transform-box:fill-box;transform-origin:50%;animation:3.6s ease-out infinite orb-rise-3fb60aa5}.fx .cloud[data-v-3fb60aa5]{fill:color-mix(in srgb, var(--orb-c) 55%, #fff);animation:3.5s ease-in-out infinite alternate orb-float-3fb60aa5}.storm .cloud[data-v-3fb60aa5]{fill:color-mix(in srgb, var(--orb-c) 75%, #444)}.drop[data-v-3fb60aa5]{stroke:var(--orb-c);stroke-width:2.2px;stroke-linecap:round;animation:1.35s linear infinite orb-drop-3fb60aa5}.scribble[data-v-3fb60aa5]{fill:none;stroke:var(--orb-c);stroke-width:2.4px;stroke-linecap:round;animation:.9s ease-in-out infinite alternate orb-float-3fb60aa5}.zz[data-v-3fb60aa5]{font:700 13px/1 var(--font-display);fill:var(--orb-face);opacity:.7;transform-box:fill-box;animation:3.2s ease-in-out infinite orb-z-3fb60aa5}[data-mood=night] .zz[data-v-3fb60aa5]{fill:var(--ink)}.moon[data-v-3fb60aa5]{fill:#fff4c2;filter:drop-shadow(0 0 6px #fff0b499)}.floating-page[data-v-3fb60aa5]{animation:3s ease-in-out infinite alternate orb-float-3fb60aa5}.think .puff[data-v-3fb60aa5]{fill:var(--surface-strong);stroke:var(--line);stroke-width:1.2px}.think .dot[data-v-3fb60aa5]{fill:var(--orb-face);transform-box:fill-box;animation:1.1s ease-in-out infinite orb-dots-3fb60aa5}.talkwaves path[data-v-3fb60aa5]{stroke:var(--accent);animation:1.2s ease-in-out infinite pulse-soft}.orb-say[data-v-3fb60aa5]{z-index:3;background:var(--surface-strong);border:1px solid var(--line);width:max-content;max-width:min(260px,70vw);box-shadow:var(--shadow-soft);color:var(--ink);text-align:left;pointer-events:none;border-radius:16px 16px 16px 4px;margin:0;padding:8px 14px;font-size:13px;font-weight:600;line-height:1.5;position:absolute;bottom:92%;left:50%}.orb-say.say-left[data-v-3fb60aa5]{border-radius:16px 16px 4px;bottom:56%;left:auto;right:88%}.orb-say-enter-active[data-v-3fb60aa5]{transition:opacity .25s var(--ease), transform .4s var(--spring)}.orb-say-leave-active[data-v-3fb60aa5]{transition:opacity .2s}.orb-say-enter-from[data-v-3fb60aa5]{opacity:0;transform:translateY(8px)scale(.9)}.orb-say-leave-to[data-v-3fb60aa5]{opacity:0}@keyframes orb-blink-3fb60aa5{0%,92%,to{transform:scaleY(1)}95%{transform:scaleY(.12)}}@keyframes orb-wink-3fb60aa5{0%,86%,to{transform:scaleY(1)}90%,94%{transform:scaleY(.12)}}@keyframes orb-squish-3fb60aa5{0%{transform:scale(1)}18%{transform:scale(1.2,.76)}42%{transform:scale(.9,1.12)}66%{transform:scale(1.05,.96)}to{transform:scale(1)}}@keyframes orb-wiggle-3fb60aa5{0%,to{transform:rotate(0)}15%{transform:rotate(-6deg)}35%{transform:rotate(5deg)}55%{transform:rotate(-4deg)}75%{transform:rotate(2deg)}}@keyframes orb-aura-3fb60aa5{0%,to{opacity:.75;transform:scale(.94)}50%{opacity:1;transform:scale(1.04)}}@keyframes orb-breathe-3fb60aa5{0%,to{opacity:.12}50%{opacity:.28}}@keyframes orb-talk-3fb60aa5{0%{transform:scaleY(.45)}to{transform:scaleY(1.1)}}@keyframes orb-yawn-3fb60aa5{0%,70%,to{transform:scale(.7)}80%,88%{transform:scale(1.35)}}@keyframes orb-spin-3fb60aa5{to{transform:rotate(360deg)}}@keyframes orb-twinkle-3fb60aa5{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.45)}}@keyframes orb-rise-3fb60aa5{0%{opacity:.85;transform:translateY(0)scale(1)}70%{opacity:.5}to{opacity:0;transform:translateY(-26px)scale(1.15)}}@keyframes orb-drop-3fb60aa5{0%{opacity:.9;transform:translateY(0)}to{opacity:0;transform:translateY(16px)}}@keyframes orb-z-3fb60aa5{0%{opacity:.7;transform:translate(0)scale(1)}to{opacity:0;transform:translate(10px,-16px)scale(1.15)}}@keyframes orb-dots-3fb60aa5{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes orb-float-3fb60aa5{0%{transform:translateY(0)}to{transform:translateY(-4px)}}.menu-select[data-v-fc4ee90c]{min-width:0;position:relative}.menu-face[data-v-fc4ee90c]{background:linear-gradient(180deg, #ffffffb8, #fff6), var(--surface-strong);border:1px solid var(--glass-edge);width:100%;min-height:42px;box-shadow:var(--glass-sheen);text-align:left;border-radius:14px;justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;display:flex}.menu-face span[data-v-fc4ee90c]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.menu-face i[data-v-fc4ee90c]{border-right:1.5px solid var(--ink-soft);border-bottom:1.5px solid var(--ink-soft);width:8px;height:8px;transform:translateY(-2px)rotate(45deg)}.menu-list[data-v-fc4ee90c]{z-index:200;background:var(--surface-strong);border:1px solid var(--glass-edge);max-height:280px;box-shadow:var(--glass-sheen), var(--shadow);transform-origin:top;animation:menu-pop-fc4ee90c .46s var(--jelly) both;border-radius:16px;margin:0;padding:6px;list-style:none;display:grid;position:fixed;overflow:auto}.menu-list.up[data-v-fc4ee90c]{transform-origin:bottom}@keyframes menu-pop-fc4ee90c{0%{opacity:0;transform:translateY(10px)scale(.92,.82)}70%{opacity:1;transform:translateY(-2px)scale(1.02,1.04)}to{transform:none}}.menu-list button[data-v-fc4ee90c]{text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:10px;width:100%;padding:8px 10px;font-weight:550}.menu-list button[aria-selected=true][data-v-fc4ee90c]{background:color-mix(in srgb, var(--accent) 16%, transparent);color:var(--ink)}.empty[data-v-fc4ee90c]{color:var(--ink-soft);padding:8px 10px;font-size:13px}.menu-list button[data-v-fc4ee90c]:hover:not(:disabled){box-shadow:none;background:color-mix(in srgb, var(--accent) 10%, transparent);transform:none}.native[data-v-fc4ee90c]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.ta-chat[data-v-235059b5]{flex-direction:column;gap:10px;height:100%;min-height:0;display:flex}.preview-meta[data-v-235059b5]{color:var(--ink-soft);font-size:12px}.ta-chat-log[data-v-235059b5]{flex-direction:column;flex:1;gap:10px;min-height:64px;padding:4px 2px;display:flex}.preview-bubble[data-v-235059b5]{overflow-wrap:anywhere;max-width:88%;animation:bubble-in-235059b5 .35s var(--spring);border-radius:18px;padding:9px 13px;font-size:14px;line-height:1.6}.preview-bubble p+p[data-v-235059b5]{margin-top:4px}.preview-bubble.me[data-v-235059b5]{background:var(--accent);color:var(--accent-ink);border-bottom-right-radius:6px;align-self:flex-end}.preview-bubble.bot[data-v-235059b5]{background:linear-gradient(135deg, color-mix(in srgb, var(--orb-a) 80%, var(--surface-strong)), color-mix(in srgb, var(--orb-b) 50%, var(--surface-strong)));color:var(--ink);border-bottom-left-radius:6px;align-self:flex-start}[data-mood=night] .preview-bubble.bot[data-v-235059b5]{background:color-mix(in srgb, var(--orb-b) 40%, var(--surface-strong))}.why[data-v-235059b5]{margin-top:6px;font-size:12px}.why summary[data-v-235059b5]{color:var(--ink-soft);font-weight:600}.why summary[data-v-235059b5]:before{content:"▸ "}.why[open] summary[data-v-235059b5]:before{content:"▾ "}.why p[data-v-235059b5]{color:var(--ink-soft);margin-top:4px}.typing[data-v-235059b5]{background:color-mix(in srgb, var(--orb-a) 70%, var(--surface-strong));border-radius:18px 18px 18px 6px;align-self:flex-start;gap:5px;padding:12px 14px;display:inline-flex}.typing i[data-v-235059b5]{background:var(--orb-face);opacity:.5;border-radius:50%;width:7px;height:7px;animation:1.1s ease-in-out infinite typing-235059b5}.typing i[data-v-235059b5]:nth-child(2){animation-delay:.15s}.typing i[data-v-235059b5]:nth-child(3){animation-delay:.3s}.ta-chat-form[data-v-235059b5]{flex-shrink:0;gap:8px;display:grid}.ta-chat-options[data-v-235059b5]{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.where[data-v-235059b5]{flex:1;align-items:center;gap:8px;min-width:180px;display:flex}.where[data-v-235059b5] .menu-select{flex:1;min-width:0}.where span[data-v-235059b5]{white-space:nowrap}.where select[data-v-235059b5]{padding:6px 10px;font-size:13px}.composer[data-v-235059b5]{gap:8px;display:flex}.composer input[data-v-235059b5]{border-radius:999px;padding-inline:16px}@keyframes bubble-in-235059b5{0%{opacity:0;transform:translateY(6px)scale(.97)}}@keyframes typing-235059b5{0%,to{opacity:.4;transform:translateY(0)}50%{opacity:1;transform:translateY(-3px)}}.companion[data-v-038fa72e]{z-index:80;pointer-events:none;justify-items:end;gap:10px;display:grid;position:fixed;bottom:16px;right:18px}.companion[data-v-038fa72e]>*{pointer-events:auto}.companion-dock[data-v-038fa72e]{align-items:flex-end;gap:4px;display:flex}.companion-talk[data-v-038fa72e]{opacity:1;transition:opacity .25s var(--ease), transform .3s var(--spring);margin-bottom:14px;padding:6px 12px;font-size:12px;transform:none}.companion-dock:hover .companion-talk[data-v-038fa72e],.companion-talk[data-v-038fa72e]:focus-visible,.companion-talk[aria-expanded=true][data-v-038fa72e]{opacity:1;transform:none}@media (hover:none){.companion-talk[data-v-038fa72e]{opacity:1;transform:none}}.scrim[data-v-038fa72e]{z-index:1;background:color-mix(in srgb, var(--ink) 32%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:100vw;height:100dvh;box-shadow:none;cursor:pointer;border:none;border-radius:0;margin:0;padding:0;position:fixed;inset:0}.scrim[data-v-038fa72e]:hover:not(:disabled),.scrim[data-v-038fa72e]:active:not(:disabled){box-shadow:none;border:none;transform:none}.scrim-enter-active[data-v-038fa72e],.scrim-leave-active[data-v-038fa72e]{transition:opacity .2s var(--ease)}.scrim-enter-from[data-v-038fa72e],.scrim-leave-to[data-v-038fa72e]{opacity:0}.ta-drawer[data-v-038fa72e]{z-index:2;background:radial-gradient(ellipse at 0% 0%, #ffffffeb, transparent 50%), linear-gradient(145deg, #ffffffb8, #ebf3ff6e 65%, #f8e8fb94), var(--glass-fill);-webkit-backdrop-filter:blur(34px)saturate(1.8);backdrop-filter:blur(34px)saturate(1.8);border:1.5px solid #ffffffde;border-radius:34px;flex-direction:column;gap:12px;width:min(460px,100vw - 28px);height:min(640px,100dvh - 140px);padding:16px 18px 18px;display:flex;position:relative;box-shadow:inset 0 2px 1px #fff,0 28px 64px -27px #3452956b}.drawer-head[data-v-038fa72e]{align-items:center;gap:10px;display:flex}.drawer-title[data-v-038fa72e]{flex:1;justify-items:start;gap:3px;display:grid}.drawer-head h2[data-v-038fa72e]{font-size:16px}.drawer-enter-active[data-v-038fa72e]{transition:opacity .28s var(--ease), transform .55s var(--spring)}.drawer-leave-active[data-v-038fa72e]{transition:opacity .18s,transform .2s}.drawer-enter-from[data-v-038fa72e],.drawer-leave-to[data-v-038fa72e]{opacity:0;transform-origin:100% 100%;transform:translateY(34px)scale(.88)rotate(2deg)}@media (width<=760px){.companion[data-v-038fa72e]{right:12px;bottom:calc(84px + env(safe-area-inset-bottom))}.companion-dock[data-v-038fa72e] .ta-orb{width:58px!important;height:58px!important}.companion-talk[data-v-038fa72e]{margin-bottom:10px;padding:5px 10px}.ta-drawer[data-v-038fa72e]{height:min(520px,100dvh - 190px)}}.drawer-head[data-v-038fa72e] .ta-orb{flex:0 0 42px}.drawer-head[data-v-038fa72e]{border-bottom:1px solid var(--line);flex-shrink:0;padding-bottom:12px}.ta-drawer[data-v-038fa72e] .ta-chat{min-height:0;overflow:hidden}.companion-dock[data-v-038fa72e]{background:linear-gradient(140deg, #ffffffd1, #e8f2ff6b), var(--glass-fill);-webkit-backdrop-filter:blur(22px)saturate(1.75);backdrop-filter:blur(22px)saturate(1.75);transition:transform .42s var(--spring), box-shadow .32s ease;border:1.5px solid #ffffffe0;border-radius:999px;align-items:center;padding:5px 10px;box-shadow:inset 0 2px 1px #fff,0 15px 28px -17px #34529561}.companion-dock[data-v-038fa72e]:hover{transform:translateY(-5px)scale(1.035);box-shadow:inset 0 2px 1px #fff,0 23px 32px -17px #34529573}.companion-talk[data-v-038fa72e]{background:0 0;border:0;margin:0}@media (width<=760px){.companion-dock[data-v-038fa72e] .ta-orb{width:36px!important;height:36px!important}.companion-talk[data-v-038fa72e]{margin:0}}.locale-switch[data-v-bc942b38]{flex-wrap:nowrap;gap:2px;padding:3px}.locale-switch button[data-v-bc942b38]{letter-spacing:.02em;min-width:36px;padding:5px 10px;font-size:12.5px;font-weight:700}@media (width<=760px){.locale-switch button[data-v-bc942b38]{min-width:30px;padding:5px 8px}}.theme-picker[data-v-4e5670d2]{position:relative}.theme-toggle[data-v-4e5670d2]{width:100%;color:var(--ink-soft);text-align:left;background:0 0;border:none;border-radius:14px;align-items:center;gap:10px;padding:8px 12px;display:flex}.theme-toggle[data-v-4e5670d2]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 8%, transparent);color:var(--ink);box-shadow:none;transform:none}.swatch[data-v-4e5670d2]{background:radial-gradient(circle at 36% 30%, var(--orb-a), var(--orb-b) 58%, var(--orb-c));width:20px;height:20px;box-shadow:0 0 0 2px var(--surface-strong), 0 0 0 3px var(--line);border-radius:50%;flex:none}.swatch.auto[data-v-4e5670d2]{background:conic-gradient(#ffc15f,#ffa8cf,#7fdcbc,#99b2d8,#9a8cc4,#cdb6f7,#6f7ee6,#ffc15f)}.theme-menu[data-v-4e5670d2]{z-index:80;background:radial-gradient(ellipse at 0% 0%, #ffffffed, transparent 52%), linear-gradient(145deg, #ffffffb8, #edf3ff5e), var(--glass-fill);-webkit-backdrop-filter:blur(30px)saturate(1.8);backdrop-filter:blur(30px)saturate(1.8);border:1.5px solid #ffffffd9;border-radius:28px;gap:2px;width:250px;max-height:calc(100dvh - 64px);padding:8px;display:grid;position:fixed;top:96px;right:28px;overflow:auto;box-shadow:inset 0 2px 1px #fff,0 24px 58px -27px #34529566}.theme-menu.inline-menu[data-v-4e5670d2]{width:100%;box-shadow:none;position:static}@media (width>=761px) and (width<=1100px){.theme-menu[data-v-4e5670d2]{right:20px}}.theme-menu button[data-v-4e5670d2]{text-align:left;background:0 0;border:none;border-radius:14px;align-items:center;gap:12px;padding:8px 10px;font-weight:500;display:flex}.theme-menu button[data-v-4e5670d2]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 9%, transparent);box-shadow:none;transform:none}.theme-menu button[aria-checked=true][data-v-4e5670d2]{background:linear-gradient(120deg, #ffffffde, color-mix(in srgb, var(--glow-a) 40%, white));box-shadow:inset 0 1px 0 white, 0 8px 18px -13px var(--accent)}.theme-menu button>span[data-v-4e5670d2]:last-child{line-height:1.35;display:grid}.theme-menu b[data-v-4e5670d2]{font-size:13px}.theme-menu small[data-v-4e5670d2]{color:var(--ink-soft);font-size:11.5px}.pop-enter-active[data-v-4e5670d2]{transition:opacity .2s var(--ease), transform .3s var(--spring)}.pop-leave-active[data-v-4e5670d2]{transition:opacity .15s}.pop-enter-from[data-v-4e5670d2],.pop-leave-to[data-v-4e5670d2]{opacity:0;transform:translateY(6px)scale(.98)}.presence-dock[data-v-4625711b]{z-index:4;width:100%;height:calc(100dvh - 112px);max-height:calc(100dvh - 112px);color:var(--ink);background:linear-gradient(145deg,#ffffffeb,#f8fbffe0);border:1px solid #ffffffe0;border-radius:28px;align-content:start;align-self:start;gap:12px;padding:22px;display:grid;position:sticky;top:96px;overflow:auto;box-shadow:inset 0 1px #fffffff5,0 24px 48px -34px #2745808f}.presence-detail[data-v-4625711b]{align-content:start;gap:12px;min-width:0;display:grid}.mood-word[data-v-4625711b]{font-family:var(--font-display);letter-spacing:-.055em;background:linear-gradient(105deg, var(--ink) 4%, #83bcf2 52%, #dd9dca 95%);color:#0000;-webkit-background-clip:text;background-clip:text;font-size:clamp(48px,3.5vw,70px);font-weight:750}.chips[data-v-4625711b]{gap:7px}.chips .chip[data-v-4625711b]{background:#ffffffa3;border-color:#ffffffd6}.activity-chip[data-v-4625711b]{white-space:normal;overflow-wrap:anywhere;min-width:0;max-width:100%;line-height:1.5}.actions[data-v-4625711b]{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.actions>button[data-v-4625711b]{background:#ffffff8a;border-color:#ffffffe0;justify-content:center;width:100%}.actions>button.primary[data-v-4625711b]{color:#213e73;background:linear-gradient(120deg,#84bdfb,#a5b5f0 56%,#dfb4e5);box-shadow:0 16px 32px -16px #7ca9ef}.aside-bit[data-v-4625711b]{border-top:1px solid #ffffffb3;gap:4px;padding-top:10px;display:grid}.aside-bit p[data-v-4625711b]{font-size:13.5px;line-height:1.55}.aside-bit small[data-v-4625711b]{color:var(--ink-soft);font-size:12px}@media (width<=760px){.presence-dock[data-v-4625711b]{width:calc(100% - 28px);height:auto;max-height:none;margin:0 auto 8px;position:relative;top:auto}}.dialog-layer[data-v-2339e49c]{z-index:100;background:color-mix(in srgb, var(--sky-top) 44%, #3c51893d);-webkit-backdrop-filter:blur(13px)saturate(1.25);backdrop-filter:blur(13px)saturate(1.25);place-items:center;padding:20px;display:grid;position:fixed;inset:0}.dialog[data-v-2339e49c]{background:radial-gradient(ellipse at 9% -10%, #fffffffa, transparent 53%), linear-gradient(148deg, #ffffffc2, #e5efff70 64%, #f8e7fb8c), var(--glass-fill);-webkit-backdrop-filter:blur(32px)saturate(1.7);backdrop-filter:blur(32px)saturate(1.7);border:1.5px solid #ffffffe3;border-radius:34px;gap:17px;width:min(420px,100%);padding:42px 30px 26px;display:grid;position:relative;box-shadow:inset 0 2px 1px #fff,0 30px 72px -28px #3452956e}.dialog h2[data-v-2339e49c]{font-size:18px}.dialog p[data-v-2339e49c]{color:var(--ink-soft);white-space:pre-line;font-size:14px;line-height:1.7}.dialog-orb[data-v-2339e49c]{background:radial-gradient(circle at 38% 30%, var(--orb-a), var(--orb-b) 60%, var(--orb-c));width:52px;height:50px;box-shadow:inset 0 3px 3px #ffffffe0, 0 13px 24px -9px var(--orb-c);border:2px solid #ffffffe3;border-radius:44% 56% 57% 43%/50% 43% 57% 50%;animation:4s ease-in-out infinite alternate dialog-orb-breathe-2339e49c;position:absolute;top:-24px;left:30px}.dialog-enter-active[data-v-2339e49c],.dialog-leave-active[data-v-2339e49c]{transition:opacity .2s var(--ease)}.dialog-enter-active .dialog[data-v-2339e49c]{transition:transform .52s var(--spring)}.dialog-enter-from[data-v-2339e49c],.dialog-leave-to[data-v-2339e49c]{opacity:0}.dialog-enter-from .dialog[data-v-2339e49c]{transform:translateY(22px)scale(.9)}@keyframes dialog-orb-breathe-2339e49c{to{transform:translateY(-5px)rotate(8deg)scale(1.07)}}.icon[data-v-69e2db74]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:20px;height:20px}.sheet-layer[data-v-2c804a0d]{z-index:70;background:color-mix(in srgb, var(--sky-top) 42%, #3c518945);-webkit-backdrop-filter:blur(13px)saturate(1.3);backdrop-filter:blur(13px)saturate(1.3);justify-content:flex-end;padding:12px;display:flex;position:fixed;inset:0}.sheet[data-v-2c804a0d]{width:min(var(--sheet-w), calc(100vw - 24px));background:radial-gradient(ellipse at 0% 0%, #fffffff2, transparent 43%), linear-gradient(145deg, #ffffffba, #ecf4ff73 62%, #f6eafb99), var(--glass-fill);-webkit-backdrop-filter:blur(36px)saturate(1.8);backdrop-filter:blur(36px)saturate(1.8);border:1.5px solid #ffffffe0;border-radius:34px;outline:none;flex-direction:column;height:100%;display:flex;box-shadow:inset 0 2px 1px #fff,inset -1px -2px 2px #708fd221,0 32px 75px -28px #34529570}.sheet-head[data-v-2c804a0d]{border-bottom:1px solid #ffffffab;justify-content:space-between;align-items:flex-start;gap:12px;padding:26px 28px 18px;display:flex}.sheet-head h2[data-v-2c804a0d]{font-size:19px}.sheet-body[data-v-2c804a0d]{overscroll-behavior:contain;flex:1;padding:20px 28px 30px;overflow:auto}.sheet-enter-active[data-v-2c804a0d],.sheet-leave-active[data-v-2c804a0d]{transition:opacity .25s var(--ease)}.sheet-enter-active .sheet[data-v-2c804a0d],.sheet-leave-active .sheet[data-v-2c804a0d]{transition:transform .55s var(--spring)}.sheet-enter-from[data-v-2c804a0d],.sheet-leave-to[data-v-2c804a0d]{opacity:0}.sheet-enter-from .sheet[data-v-2c804a0d],.sheet-leave-to .sheet[data-v-2c804a0d]{transform:translate(74px)scale(.94)}@media (width<=760px){.sheet-layer[data-v-2c804a0d]{align-items:flex-end;padding:0}.sheet[data-v-2c804a0d]{border-radius:30px 30px 0 0;width:100vw;height:min(88dvh,100%)}.sheet-enter-from .sheet[data-v-2c804a0d],.sheet-leave-to .sheet[data-v-2c804a0d]{transform:translateY(40px)}}.card-head[data-v-2c88637b]{border-bottom:1px solid #ffffffb3;align-items:center;margin-bottom:19px;padding-bottom:13px;position:relative}.card-head h2[data-v-2c88637b]{letter-spacing:-.025em;margin-top:3px;font-size:clamp(18px,1.7vw,22px);font-weight:740}.card-head p[data-v-2c88637b]{margin-top:5px;line-height:1.55}.card-head .eyebrow[data-v-2c88637b]{color:var(--accent)}.meter-row[data-v-4f51518c]{grid-template-columns:minmax(64px,max-content) 1fr minmax(40px,max-content);align-items:center;gap:12px;font-size:12.5px;display:grid}.meter-label[data-v-4f51518c]{color:var(--ink-soft)}.meter-value[data-v-4f51518c]{text-align:right;font-variant-numeric:tabular-nums}.count[data-v-e8e03a3b]{opacity:.75;font-variant-numeric:tabular-nums;margin-left:6px;font-size:11px}.timeline[data-v-e79d18a9]{margin:0;padding:0;list-style:none;display:grid}.timeline li[data-v-e79d18a9]{content-visibility:auto;contain-intrinsic-size:auto 84px;grid-template-columns:24px minmax(0,1fr);gap:12px;display:grid}.stem[data-v-e79d18a9]{justify-items:center;display:grid;position:relative}.stem[data-v-e79d18a9]:before{content:"";background:linear-gradient(var(--glow-a), #ffffffd9, var(--glow-b));width:3px;box-shadow:0 0 10px color-mix(in srgb, var(--glow-a) 55%, transparent);border-radius:999px;position:absolute;top:0;bottom:0}.timeline li:first-child .stem[data-v-e79d18a9]:before{top:12px}.timeline li:last-child .stem[data-v-e79d18a9]:before{bottom:calc(100% - 14px)}.stem i[data-v-e79d18a9]{background:linear-gradient(145deg, white, var(--glow-a));width:13px;height:13px;box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 33%, transparent), 0 0 13px var(--glow-a);border:2px solid #fff;border-radius:50%;margin-top:18px;position:relative}li[data-tone=warm] .stem i[data-v-e79d18a9]{border-color:var(--cheek);background:var(--cheek)}li[data-tone=quiet] .stem i[data-v-e79d18a9]{border-color:var(--ink-faint)}li[data-tone=glow] .stem i[data-v-e79d18a9]{background:var(--accent)}li[data-tone=night] .stem i[data-v-e79d18a9]{border-color:var(--orb-c);background:var(--orb-c)}.entry[data-v-e79d18a9]{background:linear-gradient(125deg, #ffffffa8, #fff3), var(--glass-fill);min-width:0;box-shadow:inset 0 1px 0 white, 0 8px 21px -18px var(--accent);transition:transform .48s var(--jelly);border:1px solid #ffffffc2;border-radius:18px;margin-bottom:10px;padding:11px 15px}.timeline li:hover .entry[data-v-e79d18a9]{transform:translate(4px)scale(1.01)}.wallpaper-picker[data-v-01d9dcb6]{z-index:6;-webkit-backdrop-filter:blur(18px)saturate(1.4);backdrop-filter:blur(18px)saturate(1.4);background:#ffffffd1;border:1px solid #ffffffdb;border-radius:22px;gap:12px;width:min(280px,100% - 32px);max-height:calc(100% - 78px);padding:14px;display:grid;position:absolute;top:62px;right:16px;overflow:auto;box-shadow:inset 0 1px #fff,0 18px 40px -24px #2745808c}header[data-v-01d9dcb6]{justify-content:space-between;align-items:center;display:flex}header b[data-v-01d9dcb6]{font-size:14px}.choice[data-v-01d9dcb6]{gap:8px;display:grid}.choice>span[data-v-01d9dcb6]{font-size:12.5px;font-weight:700}.row[data-v-01d9dcb6]{gap:8px;display:flex}.row button[data-v-01d9dcb6]{border-radius:999px;flex:1;min-height:32px;padding:6px 8px;font-size:12px}.opacity[data-v-01d9dcb6]{gap:4px;display:grid}.opacity span[data-v-01d9dcb6],.opacity small[data-v-01d9dcb6]{color:var(--ink-soft);font-size:12px}.opacity input[data-v-01d9dcb6]{width:100%;accent-color:var(--accent)}.now-presentation[data-v-663ff302]{min-height:450px;margin-bottom:26px;position:relative}.now-hero[data-v-663ff302]{isolation:isolate;background:linear-gradient(145deg, var(--sky-top), var(--sky-mid) 58%, var(--sky-bottom));height:450px;min-height:450px;color:var(--ink);border:2px solid #ffffffcf;border-radius:42px;margin:0;padding:0;display:block;position:relative;overflow:hidden;box-shadow:inset 0 2px #fffffff2,0 35px 90px -45px #5a7acc8c}.wallpaper-layer[data-v-663ff302]{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.wallpaper-layer img[data-v-663ff302]{object-fit:cover;object-position:50% 50%;width:100%;height:100%;transition:object-position .26s var(--ease-spring);-webkit-user-select:none;user-select:none;display:block}.wallpaper-layer[data-v-663ff302]:after{content:"";background:linear-gradient(100deg,#ffecf633 0%,#fff4fa14 42%,#0000 68%),linear-gradient(#301c4024,#0000 24% 72%,#3018282e);position:absolute;inset:0}.wallpaper-adjusting .wallpaper-layer img[data-v-663ff302]{transition:none}.wallpaper-drag-layer[data-v-663ff302]{z-index:2;cursor:grab;touch-action:none;background:radial-gradient(#0000 55%,#212f5214);position:absolute;inset:0}.wallpaper-drag-layer[data-v-663ff302]:active{cursor:grabbing}.wallpaper-tip[data-v-663ff302]{color:#29416d;-webkit-backdrop-filter:blur(18px)saturate(1.4);backdrop-filter:blur(18px)saturate(1.4);white-space:nowrap;pointer-events:none;background:#ffffffad;border:1px solid #ffffffd1;border-radius:999px;padding:10px 16px;font-size:13px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 10px 32px #23375e29,inset 0 1px #fff}.wallpaper-controls[data-v-663ff302]{z-index:4;-webkit-backdrop-filter:blur(20px)saturate(1.45);backdrop-filter:blur(20px)saturate(1.45);background:#ffffff80;border:1px solid #ffffffc2;border-radius:999px;align-items:center;gap:8px;padding:6px;display:flex;position:absolute;top:16px;right:16px;box-shadow:0 10px 28px #30456b1a,inset 0 1px #fff}.wallpaper-controls button[data-v-663ff302]{border-radius:999px;min-height:34px;padding:7px 13px;font-size:12px}.wallpaper-controls .wallpaper-tip-inline[data-v-663ff302]{color:var(--muted);white-space:nowrap;padding:0 4px 0 9px;font-size:12px}.now-hero button.primary[data-v-663ff302]{color:#213e73;background:linear-gradient(120deg,#84bdfb,#a5b5f0 56%,#dfb4e5);box-shadow:0 16px 32px -16px #7ca9ef}.now-hero button[data-v-663ff302]:not(.primary){background:#ffffff7a;border-color:#ffffffe0}.notes[data-v-663ff302]{align-items:start;gap:var(--gap);grid-template-columns:repeat(3,minmax(0,1fr));margin:8px 0 28px;display:grid}.note[data-v-663ff302]{background:linear-gradient(180deg, #ffffff52, transparent 55%), var(--surface);border:1px solid var(--glass-edge);box-shadow:var(--glass-sheen), var(--shadow-soft);transition:transform .52s var(--jelly);border-top:1px solid #fffffff2;border-radius:27px;align-content:start;gap:8px;padding:24px;display:grid;position:relative}.note[data-v-663ff302]:hover{transform:translateY(-4px)scale(1.012)}.note .quote[data-v-663ff302]{font-size:16px;font-weight:600;line-height:1.6}.note small[data-v-663ff302]{color:var(--ink-soft);font-size:12px}.note .text-button[data-v-663ff302]{justify-self:start;margin-top:2px}.note .eyebrow[data-v-663ff302]{margin-bottom:8px}.note>p[data-v-663ff302],.note>ul[data-v-663ff302]{max-height:248px;overflow:auto}.recent-list[data-v-663ff302]{gap:11px;margin:0;padding:0;list-style:none;display:grid}.recent-list li[data-v-663ff302]{border-bottom:1px solid color-mix(in srgb, var(--glass-edge) 70%, transparent);padding-bottom:10px}.recent-list li[data-v-663ff302]:last-child{border-bottom:0;padding-bottom:0}.recent-list .quote[data-v-663ff302]{margin-bottom:3px}.note.ahead>ul[data-v-663ff302]{max-height:248px}.note li[data-v-663ff302]{gap:1px;font-size:13.5px;display:grid}.note li b[data-v-663ff302]{color:var(--accent);font-size:12px}.words[data-v-663ff302]{background:linear-gradient(150deg, color-mix(in srgb, var(--orb-a) 55%, var(--surface-strong)), var(--surface))}.now-grid[data-v-663ff302]{gap:var(--gap);grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr);align-items:start;display:grid}.today-scroll[data-v-663ff302]{max-height:620px;margin-right:-8px;padding-right:8px}.entry-head[data-v-663ff302]{flex-wrap:wrap;align-items:center;gap:4px 10px;display:flex}.entry-head time[data-v-663ff302]{font-variant-numeric:tabular-nums;color:var(--ink-soft);font-size:12px}.entry-head b[data-v-663ff302]{font-size:14px}.entry-head+p[data-v-663ff302]{margin-top:3px;font-size:13.5px;line-height:1.65}.entry-head+p small[data-v-663ff302]{color:var(--ink-soft)}.ledger-note[data-v-663ff302]{margin-top:12px}.small-text[data-v-663ff302]{font-size:13px}.grow[data-v-663ff302]{flex:1;min-width:0}.counts[data-v-663ff302]{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.counts button[data-v-663ff302]{text-align:left;border-radius:16px;justify-items:start;gap:0;padding:12px 14px;display:grid}.counts b[data-v-663ff302]{font:700 24px var(--font-display);color:var(--accent)}.counts span[data-v-663ff302]{color:var(--ink-soft);font-size:12px;font-weight:500}@media (width<=1100px){.now-grid[data-v-663ff302]{grid-template-columns:minmax(0,1fr)}}@media (width<=900px){.now-presentation[data-v-663ff302]{min-height:0}.now-hero[data-v-663ff302]{text-align:center;height:420px;min-height:420px}.notes[data-v-663ff302]{grid-template-columns:minmax(0,1fr)}}@media (width<=760px){.now-hero[data-v-663ff302]{border-radius:30px;height:370px;min-height:370px;padding:0}.today-scroll[data-v-663ff302]{max-height:520px}.wallpaper-controls[data-v-663ff302]{top:10px;right:10px}.wallpaper-controls .wallpaper-tip-inline[data-v-663ff302]{display:none}.wallpaper-controls button[data-v-663ff302]{min-height:32px;padding:6px 10px}.wallpaper-tip[data-v-663ff302]{text-align:center;max-width:calc(100% - 34px);padding:9px 12px;font-size:12px}}.access-gate[data-v-299ced1e]{background:radial-gradient(circle at 25% 20%,#dbe7ec 0,#0000 45%),radial-gradient(circle at 85% 70%,#efdfdd 0,#0000 45%),#f4f5ef;place-items:center;min-height:100dvh;padding:72px 24px;display:grid}.access-language[data-v-299ced1e]{position:absolute;top:22px;right:24px}.access-card[data-v-299ced1e]{background:#ffffffe0;border:1px solid #fff;border-radius:28px;width:min(100%,420px);padding:36px;box-shadow:0 24px 70px #69838618}.access-card h1[data-v-299ced1e]{margin:14px 0;font-size:26px}.access-card>p[data-v-299ced1e]{color:var(--muted);line-height:1.8}.access-orb[data-v-299ced1e]{color:#8b889c;background:radial-gradient(circle at 35% 30%,#fff,#e5dde8 60%,#cedfd8);border-radius:50%;place-items:center;width:70px;height:70px;margin-bottom:24px;font-size:32px;display:grid}.access-form[data-v-299ced1e],.access-form label[data-v-299ced1e]{gap:12px;display:grid}.access-form[data-v-299ced1e]{gap:20px;margin-top:28px}.access-form input[data-v-299ced1e]{box-sizing:border-box;width:100%;font:inherit;background:#fff;border:1px solid #d6deda;border-radius:12px;padding:12px 14px}.access-form small[data-v-299ced1e]{color:var(--muted);line-height:1.7}.access-form button[data-v-299ced1e]{min-height:44px}.access-error[data-v-299ced1e]{color:#b34e5b;font-size:13px}.spinning[data-v-0e622eac] svg{animation:.7s linear infinite refresh-turn-0e622eac}@keyframes refresh-turn-0e622eac{to{transform:rotate(360deg)}}.startup[data-v-0e622eac]{z-index:1;text-align:center;place-content:center;justify-items:center;gap:10px;min-height:100dvh;padding:24px;display:grid;position:relative}.startup h1[data-v-0e622eac]{font-size:26px}.startup p[data-v-0e622eac]{color:var(--ink-soft)}.shell[data-v-0e622eac]{z-index:1;grid-template-columns:var(--dock-w) minmax(0, 1fr);min-height:100dvh;display:grid;position:relative}.skip-link[data-v-0e622eac]{z-index:120;background:var(--accent);color:var(--accent-ink);border-radius:999px;padding:8px 14px;transition:transform .2s;position:fixed;top:10px;left:10px;transform:translateY(-160%)}.skip-link[data-v-0e622eac]:focus{transform:none}.dock[data-v-0e622eac]{background:linear-gradient(180deg, #ffffffb8, #ffffff24 46%, transparent 78%), var(--surface);height:calc(100dvh - 28px);color:var(--ink);border:1px solid var(--glass-edge);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border-radius:34px;flex-direction:column;gap:16px;margin:14px 0 14px 14px;padding:14px 12px;display:flex;position:sticky;top:14px;overflow:hidden auto;box-shadow:inset 1px 1px #ffffffe6,0 22px 60px -34px #455e9457}.dock-ta[data-v-0e622eac]{text-align:left;background:0 0;border:none;border-radius:22px;align-items:center;gap:10px;padding:6px 10px 6px 4px;display:flex}.dock-ta[data-v-0e622eac]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 8%, transparent);box-shadow:none;transform:none}.dock-ta.active[data-v-0e622eac]{background:var(--accent-soft)}.dock-ta-text[data-v-0e622eac]{min-width:0;line-height:1.3;display:grid}.dock-ta-text b[data-v-0e622eac]{font:700 16px var(--font-display);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dock-ta-text small[data-v-0e622eac]{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;overflow:hidden}.dock-groups[data-v-0e622eac]{gap:14px;display:grid}.dock-group[data-v-0e622eac]{gap:2px;display:grid}.dock-group h2[data-v-0e622eac]{font:700 10.5px/1.4 var(--font-display);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);padding:0 12px 4px}.dock-link[data-v-0e622eac],.dock-tool[data-v-0e622eac]{width:100%;color:var(--ink-soft);text-align:left;background:0 0;border:none;border-radius:14px;align-items:center;gap:12px;padding:10px 12px;font-size:14px;font-weight:600;text-decoration:none;display:flex}.dock-tool[data-v-0e622eac]{padding:8px 12px;font-size:13px}.dock-link[data-v-0e622eac]:hover:not(:disabled),.dock-tool[data-v-0e622eac]:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 9%, transparent);color:var(--ink);box-shadow:none;transform:none}.dock-link.active[data-v-0e622eac]{background:linear-gradient(110deg, #ffffffeb, color-mix(in srgb, var(--glow-a) 44%, white));color:var(--accent);box-shadow:inset 0 1px 0 white, 0 9px 22px -14px var(--accent)}.dock-link.active[data-v-0e622eac]:after{content:"";background:var(--accent);width:7px;height:7px;box-shadow:0 0 10px var(--accent);border-radius:50%;margin-left:auto}.dock-foot[data-v-0e622eac]{border-top:1px solid var(--line);gap:2px;margin-top:auto;padding-top:10px;display:grid}main[data-v-0e622eac]{outline:none;min-width:0;padding-bottom:32px}.topbar[data-v-0e622eac]{background:linear-gradient(180deg, #ffffffb8, transparent 70%), var(--surface);border:1px solid var(--glass-edge);-webkit-backdrop-filter:blur(18px)saturate(1.5);border-radius:30px;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;width:min(1232px,100% - 36px);margin:16px auto 8px;padding:16px 22px;display:flex;box-shadow:inset 0 1px #fff,0 16px 38px -28px #455e944d}.topbar h1[data-v-0e622eac]{font-family:var(--font-display);letter-spacing:-.03em;font-size:29px;font-weight:700}.topbar p[data-v-0e622eac]{color:var(--ink-soft);margin-top:2px;font-size:13.5px}.topbar-actions[data-v-0e622eac]{align-items:center;gap:10px;margin-left:auto;display:flex}#connection[data-v-0e622eac]{padding:7px 14px}#connection.offline[data-v-0e622eac]{cursor:pointer}.draft-banner[data-v-0e622eac]{background:color-mix(in srgb, var(--warn) 12%, var(--surface-strong));border:1px solid color-mix(in srgb, var(--warn) 28%, transparent);border-radius:999px;align-items:center;gap:10px;width:min(1224px,100% - 56px);margin:0 auto 14px;padding:9px 16px;font-size:13px;font-weight:600;display:flex}.at-now .topbar-title p[data-v-0e622eac]{display:block}.at-chats main[data-v-0e622eac]{flex-direction:column;height:calc(100dvh - 104px);padding-bottom:16px;display:flex;overflow:hidden}.at-chats .view[data-v-0e622eac]{flex-direction:column;flex:1;min-height:0;display:flex}.tabbar[data-v-0e622eac]{display:none}.more-grid[data-v-0e622eac]{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.more-grid button[data-v-0e622eac]{text-align:left;border-radius:18px;justify-items:start;gap:4px;padding:14px;display:grid}.more-grid button.active[data-v-0e622eac]{border-color:var(--accent);background:var(--accent-soft)}.more-grid small[data-v-0e622eac]{color:var(--ink-soft);font-size:11.5px;font-weight:500}.more-title[data-v-0e622eac]{margin:20px 0 8px;font-size:14px}.more-tools[data-v-0e622eac]{margin-top:14px}@media (width<=1100px) and (width>=761px){.shell[data-v-0e622eac]{grid-template-columns:92px minmax(0,1fr)}.dock[data-v-0e622eac]{align-items:center;padding:14px 8px}.dock-ta[data-v-0e622eac]{padding:4px}.dock-link[data-v-0e622eac],.dock-tool[data-v-0e622eac]{justify-content:center;width:52px;padding:12px 0}.dock-group[data-v-0e622eac],.dock-foot[data-v-0e622eac]{justify-items:center}.dock[data-v-0e622eac] .theme-toggle{justify-content:center;width:52px;padding:10px 0}.dock-link.active[data-v-0e622eac]:after{display:none}.rail-label[data-v-0e622eac],.dock[data-v-0e622eac] .rail-label{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}}@media (width<=760px){.shell[data-v-0e622eac]{grid-template-columns:minmax(0,1fr)}.dock[data-v-0e622eac]{display:none}main[data-v-0e622eac]{padding-bottom:calc(128px + env(safe-area-inset-bottom))}.topbar[data-v-0e622eac]{align-items:center;padding:16px 14px 12px}.topbar h1[data-v-0e622eac]{font-size:22px}.topbar p[data-v-0e622eac]{display:none}.draft-banner[data-v-0e622eac]{width:calc(100% - 28px)}.at-chats main[data-v-0e622eac]{height:auto;padding-bottom:calc(96px + env(safe-area-inset-bottom));display:block;overflow:visible}.tabbar[data-v-0e622eac]{left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom));z-index:65;background:linear-gradient(180deg, #ffffff57, transparent 70%), var(--surface);border:1px solid var(--glass-edge);box-shadow:var(--glass-sheen), var(--shadow);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border-radius:24px;grid-template-columns:repeat(5,minmax(0,1fr));gap:2px;padding:6px;display:grid;position:fixed}.tabbar button[data-v-0e622eac]{color:var(--ink-soft);background:0 0;border:none;border-radius:18px;justify-items:center;gap:2px;padding:7px 0 6px;font-size:11px;display:grid}.tabbar button[data-v-0e622eac]:hover:not(:disabled){box-shadow:none;transform:none}.tabbar button.active[data-v-0e622eac]{background:var(--accent-soft);color:var(--accent)}}@media (width>=761px){.shell[data-v-0e622eac]{padding-top:1px;display:block}.dock[data-v-0e622eac]{z-index:66;background:radial-gradient(ellipse at 12% -80%, #fffffff0, transparent 58%), linear-gradient(110deg, #ffffffc7, #f2f6ff9c 52%, #ffffffc7), color-mix(in srgb, var(--sky-mid) 82%, white);border:1.5px solid #ffffffd4;border-radius:999px;flex-direction:row;align-items:center;gap:14px;width:min(1460px,100% - 40px);height:auto;min-height:72px;margin:14px auto 0;padding:8px 12px;display:flex;position:sticky;top:14px;overflow:visible;box-shadow:inset 0 2px 1px #fff,inset 0 -2px 2px #708fd221,0 22px 44px -28px #34529561}.dock-ta[data-v-0e622eac]{border:1px solid #0000;border-radius:999px;flex:none;min-width:160px;padding:4px 12px 4px 4px}.dock-ta.active[data-v-0e622eac],.dock-ta[data-v-0e622eac]:hover:not(:disabled){box-shadow:inset 0 1px 0 white, 0 8px 17px -14px var(--accent);background:#ffffff6b;border-color:#ffffffc4;transform:translateY(-2px)scale(1.02)}.dock-groups[data-v-0e622eac]{flex:1;justify-content:center;align-items:center;gap:2px;min-width:0;display:flex}.dock-group[data-v-0e622eac]{align-items:center;gap:2px;display:flex}.dock-group h2[data-v-0e622eac]{clip:rect(0 0 0 0);width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.dock-link[data-v-0e622eac]{white-space:nowrap;border:1px solid #0000;border-radius:999px;justify-content:center;gap:7px;width:auto;min-height:45px;padding:9px 12px;position:relative}.dock-link[data-v-0e622eac]:hover:not(:disabled){box-shadow:0 12px 18px -14px var(--accent);background:#ffffff85;border-color:#ffffffbf;transform:translateY(-3px)scale(1.045)}.dock-link.active[data-v-0e622eac]{color:var(--ink);background:linear-gradient(120deg, #fffffffa, color-mix(in srgb, var(--glow-a) 40%, white) 64%, color-mix(in srgb, var(--glow-b) 28%, white));box-shadow:inset 0 1px 0 white, 0 8px 19px -13px var(--accent);animation:dock-bloom-0e622eac .56s var(--spring) both;border-color:#fffffff7}.dock-link.active[data-v-0e622eac]:after{display:none}.dock-foot[data-v-0e622eac]{border:0;flex:none;align-items:center;gap:3px;margin:0;padding:0;display:flex}.dock-tool[data-v-0e622eac],.dock[data-v-0e622eac] .theme-toggle{border-radius:50%;justify-content:center;align-items:center;width:42px;height:42px;padding:0;display:flex}.dock-tool .rail-label[data-v-0e622eac],.dock[data-v-0e622eac] .theme-toggle .rail-label{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.dock-tool[data-v-0e622eac]:hover:not(:disabled),.dock[data-v-0e622eac] .theme-toggle:hover:not(:disabled){box-shadow:inset 0 1px white, 0 11px 17px -13px var(--accent);background:#ffffff9e;transform:translateY(-3px)scale(1.08)}main[data-v-0e622eac]{width:100%}.workspace[data-v-0e622eac]{grid-template-columns:300px minmax(0,1fr);align-items:start;gap:22px;width:min(1480px,100% - 36px);margin:8px auto 0;display:grid}.workspace>main[data-v-0e622eac]{width:auto;min-width:0}.workspace .topbar[data-v-0e622eac]{width:calc(100% - 56px);box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border:none;align-items:center;margin:14px 28px 6px;padding:4px 22px 8px}.topbar h1[data-v-0e622eac]{font-size:clamp(28px,2.8vw,38px);font-weight:760}}@keyframes dock-bloom-0e622eac{0%{filter:brightness(1.15);transform:scale(.88)translateY(4px)}to{filter:brightness();transform:scale(1)translateY(0)}}@media (width>=761px) and (width<=1100px){.dock[data-v-0e622eac]{gap:6px;padding-inline:9px}.dock-ta[data-v-0e622eac]{min-width:145px}.dock-ta-text.rail-label[data-v-0e622eac]{clip:auto;width:auto;height:auto;display:grid;position:static!important}.dock-ta-text small[data-v-0e622eac]{display:none}.dock-link[data-v-0e622eac]{width:42px;min-width:42px;padding:10px}.dock-tool[data-v-0e622eac],.dock[data-v-0e622eac] .theme-toggle{width:38px;height:38px}}@media (width<=760px){.workspace[data-v-0e622eac]{width:100%;margin:0;display:block}.topbar[data-v-0e622eac]{width:calc(100% - 28px);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border:0;gap:10px;margin-top:14px;padding:8px 5px 10px}.topbar-actions[data-v-0e622eac]{gap:6px}#connection[data-v-0e622eac]{padding:7px 10px;font-size:12px}.tabbar[data-v-0e622eac]{background:linear-gradient(130deg, #ffffffc4, #ffffff45 57%, #e6ecff8c), var(--glass-fill);border:1.5px solid #ffffffdb;box-shadow:inset 0 2px 1px #fff,0 20px 38px -24px #34529570}.tabbar button.active[data-v-0e622eac]{background:linear-gradient(130deg, white, color-mix(in srgb, var(--glow-a) 40%, white));box-shadow:0 6px 15px -10px var(--accent);animation:dock-bloom-0e622eac .48s var(--spring) both;border:1px solid #fff}}@property --sky-top{syntax:"<color>";inherits:true;initial-value:#c8f3e4}@property --sky-mid{syntax:"<color>";inherits:true;initial-value:#e7f7f1}@property --sky-bottom{syntax:"<color>";inherits:true;initial-value:#f6efe2}@property --glow-a{syntax:"<color>";inherits:true;initial-value:#5ddec0}@property --glow-b{syntax:"<color>";inherits:true;initial-value:#8eb6ff}@property --accent{syntax:"<color>";inherits:true;initial-value:#2c8465}@property --accent-soft{syntax:"<color>";inherits:true;initial-value:#dcf3e8}@property --ink{syntax:"<color>";inherits:true;initial-value:#14332d}@property --ink-soft{syntax:"<color>";inherits:true;initial-value:#466760}@property --surface{syntax:"<color>";inherits:true;initial-value:#ffffff94}@property --surface-strong{syntax:"<color>";inherits:true;initial-value:#ffffffe6}@property --line{syntax:"<color>";inherits:true;initial-value:#14332d1f}@property --orb-a{syntax:"<color>";inherits:true;initial-value:#c3f8e0}@property --orb-b{syntax:"<color>";inherits:true;initial-value:#7fdcbc}@property --orb-c{syntax:"<color>";inherits:true;initial-value:#4fa9c7}:root{--font-ui:"HarmonyOS Sans SC", "MiSans", "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif;--font-display:"Segoe UI Variable Display", "Segoe UI", "SF Pro Rounded", "HarmonyOS Sans SC", "PingFang SC", "Microsoft YaHei UI", sans-serif;--font-editorial:"Palatino Linotype", "Noto Serif SC", "Songti SC", "SimSun", serif;--font-mono:ui-monospace, "Cascadia Code", "SFMono-Regular", Consolas, monospace;--r-xs:8px;--r-s:12px;--r-m:18px;--r-l:27px;--r-xl:40px;--gap:22px;--dock-w:224px;--topbar-h:76px;--ease:cubic-bezier(.2, .8, .2, 1);--spring:cubic-bezier(.22, 1.45, .42, 1);--jelly:cubic-bezier(.34, 1.56, .5, 1);--tempo:1;--intensity:.5;--glass-blur:12px;--glass-saturate:1.35;--glass-fill:#ffffffb8;--glass-highlight:#ffffffe0;--glass-shadow:0 24px 54px -28px #34529545;--shadow:0 28px 70px -36px color-mix(in srgb, var(--ink) 32%, transparent);--shadow-soft:0 12px 32px -20px color-mix(in srgb, var(--ink) 24%, transparent);--glass-edge:color-mix(in srgb, white 62%, var(--line));--glass-sheen:inset 0 1px 0 #ffffffbd}:root,[data-mood=calm]{--sky-top:#d9e9ff;--sky-mid:#f1f6ff;--sky-bottom:#fff5f2;--glow-a:#a6d8ff;--glow-b:#efd5fa;--accent:#466db8;--accent-ink:#fff;--accent-soft:#e5edff;--ink:#263e69;--ink-soft:#5c6f91;--ink-faint:#8798b1;--surface:#ffffff7a;--surface-strong:#ffffffd1;--line:#6082bf2e;--orb-a:#d8fff0;--orb-b:#5ed4ae;--orb-c:#3a9ec4;--orb-face:#143b34;--cheek:#ff9db1;--particle:#fff;--danger:#b03a3a;--warn:#9a6512;--ok:#478c82;--paper:#fffdf6;--paper-line:#78643c1f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=sweet]{--sky-top:#f9e3f3;--sky-mid:#fdf1f9;--sky-bottom:#eeeaff;--glow-a:#f7badb;--glow-b:#cbd2ff;--accent:#8a3356;--accent-ink:#fff;--accent-soft:#ffe3ef;--ink:#3a2430;--ink-soft:#6e4d5c;--ink-faint:#8d6c7a;--surface:#ffffff94;--surface-strong:#ffffffe6;--line:#5a1e3c1f;--orb-a:#ffe0f0;--orb-b:#ff8fbf;--orb-c:#c5a6ff;--orb-face:#4a1f38;--cheek:#ff6f9f;--particle:#ffd0e6;--danger:#b03a4a;--warn:#9a6512;--ok:#2c8465;--paper:#fff9fb;--paper-line:#aa50781f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=bright]{--sky-top:#fff0ca;--sky-mid:#fff8eb;--sky-bottom:#ffebdf;--glow-a:#ffdc88;--glow-b:#ffc8b8;--accent:#b84312;--accent-ink:#fff;--accent-soft:#ffe4cc;--ink:#3d220c;--ink-soft:#7a4e28;--ink-faint:#9a6e48;--surface:#ffffff94;--surface-strong:#fffcf7eb;--line:#6e3c1424;--orb-a:#fff3ae;--orb-b:#ffc15f;--orb-c:#ff8a6b;--orb-face:#4a2a10;--cheek:#ff7b6b;--particle:#ffe08a;--danger:#b03a2a;--warn:#9a6512;--ok:#2c7a55;--paper:#fffbf0;--paper-line:#aa6e2824;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=blue]{--sky-top:#b7d0f2;--sky-mid:#d5e4f6;--sky-bottom:#e7eef8;--glow-a:#6aa4ee;--glow-b:#b7c8ea;--accent:#245488;--accent-ink:#fff;--accent-soft:#dce8f8;--ink:#172433;--ink-soft:#3e536c;--ink-faint:#627890;--surface:#ffffff8f;--surface-strong:#f8fbffe6;--line:#17243321;--orb-a:#e4eefc;--orb-b:#8aafdc;--orb-c:#5d7eae;--orb-face:#1e2b3f;--cheek:#c8a0b5;--particle:#d5e4f6;--danger:#a23c3c;--warn:#8a5e18;--ok:#2c7560;--paper:#f8fafd;--paper-line:#3c5a821f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=stormy]{--sky-top:#e3def4;--sky-mid:#eeebf7;--sky-bottom:#e8ecf6;--glow-a:#c8b8ed;--glow-b:#bcc9e5;--accent:#53368c;--accent-ink:#fff;--accent-soft:#ece4f8;--ink:#241c33;--ink-soft:#534866;--ink-faint:#746888;--surface:#ffffff8f;--surface-strong:#faf8ffe6;--line:#241c3324;--orb-a:#ece4f8;--orb-b:#a894d4;--orb-c:#6e5f9e;--orb-face:#231a36;--cheek:#c99ab8;--particle:#ddd2ee;--danger:#a53a48;--warn:#8a5e18;--ok:#2c7560;--paper:#faf9fd;--paper-line:#5a46821f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=drowsy]{--sky-top:#e8e0fa;--sky-mid:#f5eef9;--sky-bottom:#fff1e9;--glow-a:#d2c4f5;--glow-b:#f5d3c9;--accent:#634678;--accent-ink:#fff;--accent-soft:#f3e6ff;--ink:#2c2140;--ink-soft:#5c5074;--ink-faint:#7e7296;--surface:#ffffff94;--surface-strong:#fffcffe6;--line:#2c21401f;--orb-a:#f4e9ff;--orb-b:#d0b4f8;--orb-c:#f0b8d4;--orb-face:#30264a;--cheek:#f3a3c0;--particle:#eadbff;--danger:#a53a48;--warn:#8a5e18;--ok:#2c7560;--paper:#fffaf6;--paper-line:#966ea021;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-mood=night]{--sky-top:#cbdafa;--sky-mid:#e5eafa;--sky-bottom:#f8edfa;--glow-a:#9db9f0;--glow-b:#cdbdf4;--accent:#5667ab;--accent-ink:#fff;--accent-soft:#e3e7fa;--ink:#29375e;--ink-soft:#606d96;--ink-faint:#8691b3;--surface:#ffffff75;--surface-strong:#ffffffd1;--line:#5d6ca530;--orb-a:#d0d8ff;--orb-b:#7d8ef0;--orb-c:#4d5cc0;--orb-face:#0f1433;--cheek:#c9a0e0;--particle:#fff;--danger:#b24c71;--warn:#936930;--ok:#478c82;--paper:#fbf9ff;--paper-line:#c8d2ff1a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root{transition:--sky-top 1.4s var(--ease), --sky-mid 1.4s var(--ease), --sky-bottom 1.4s var(--ease), --glow-a 1.4s var(--ease), --glow-b 1.4s var(--ease), --accent 1.1s var(--ease), --accent-soft 1.1s var(--ease), --ink .9s var(--ease), --ink-soft .9s var(--ease), --surface .9s var(--ease), --surface-strong .9s var(--ease), --line .9s var(--ease), --orb-a 1.2s var(--ease), --orb-b 1.2s var(--ease), --orb-c 1.2s var(--ease)}[data-motion=quiet]{transition:none}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;font-size:15px;overflow-x:clip}body{min-height:100dvh;font-family:var(--font-ui);color:var(--ink);background:var(--sky-mid);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;line-height:1.6;overflow-x:clip}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);letter-spacing:-.01em;margin:0;line-height:1.25}p{margin:0}a{color:var(--accent);text-underline-offset:3px}img,svg,canvas{display:block}code,pre,kbd{font-family:var(--font-mono);font-size:.92em}pre{white-space:pre-wrap;word-break:break-word;margin:0}::selection{background:color-mix(in srgb, var(--accent) 26%, transparent)}:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}*{scrollbar-width:thin;scrollbar-color:color-mix(in srgb, var(--ink) 22%, transparent) transparent}button{font:inherit;color:var(--ink);background:var(--surface-strong);border:1px solid var(--line);cursor:pointer;transition:transform .2s var(--spring), background-color .2s, border-color .2s, box-shadow .2s, color .2s;border-radius:15px;padding:10px 16px;font-size:13px;font-weight:600;line-height:1.3}button:hover:not(:disabled){border-color:color-mix(in srgb, var(--accent) 40%, var(--line));box-shadow:var(--shadow-soft);transform:translateY(-1px)}button:active:not(:disabled){transform:scale(.97)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{color:var(--accent-ink);background:linear-gradient(125deg, color-mix(in srgb, var(--accent) 85%, #8cc8ff), var(--accent));box-shadow:inset 0 1px 0 #ffffff52, 0 12px 26px -15px var(--accent);border-color:#0000}button.primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 88%, var(--ink))}button.ghost{background:0 0}button.danger{color:var(--danger);background:color-mix(in srgb, var(--danger) 8%, var(--surface-strong));border-color:color-mix(in srgb, var(--danger) 22%, transparent)}button.small{padding:5px 11px;font-size:12px}button.text-button{color:var(--accent);text-underline-offset:3px;background:0 0;border:none;border-radius:6px;padding:2px 4px;text-decoration:underline}button.text-button:hover:not(:disabled){box-shadow:none;transform:none}button.icon-button{place-items:center;width:38px;height:38px;padding:0;display:inline-grid}button.icon-button svg{width:18px;height:18px}input,select,textarea{width:100%;font:inherit;color:var(--ink);background:color-mix(in srgb, var(--surface-strong) 86%, transparent);border:1px solid var(--glass-edge);border-radius:var(--r-s);box-shadow:var(--glass-sheen);padding:9px 12px;font-size:14px;transition:border-color .2s,box-shadow .2s}textarea{resize:vertical;line-height:1.6}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}input::placeholder,textarea::placeholder{color:var(--ink-faint)}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--accent)}input[type=range]{accent-color:var(--accent);background:0 0;border:none;padding:0}input[type=range]:focus{box-shadow:none}label{color:var(--ink-soft);gap:6px;font-size:12.5px;font-weight:600;display:grid}label>small,.hint{color:var(--ink-soft);font-size:12px;font-weight:400}.check{color:var(--ink);cursor:pointer;align-items:center;gap:8px;font-size:13px;font-weight:500;display:inline-flex}.switch{color:var(--ink);cursor:pointer;align-items:center;gap:10px;font-size:13px;font-weight:600;display:inline-flex}.switch input{appearance:none;background:color-mix(in srgb, var(--ink) 18%, transparent);cursor:pointer;border-radius:999px;flex:none;width:42px;height:24px;margin:0;transition:background-color .25s;position:relative}.switch input:after{content:"";background:var(--surface-strong);width:18px;height:18px;transition:transform .3s var(--spring);border-radius:50%;position:absolute;top:3px;left:3px;box-shadow:0 2px 6px #0003}.switch input:checked{background:var(--accent)}.switch input:checked:after{transform:translate(18px)}.switch input:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}details>summary{cursor:pointer;list-style:none}details>summary::-webkit-details-marker{display:none}.page{width:min(1280px,100%);margin:0 auto;padding:0 28px 48px}.page>*,.stack>*,.card>*{min-width:0}.stack{gap:var(--gap);align-content:start;display:grid}.stack.tight{gap:10px}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.row.end{justify-content:flex-end}.row.between{justify-content:space-between}.grid-2{gap:var(--gap);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.grid-3{gap:var(--gap);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.form-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:start;gap:14px;display:grid}.form-grid>label{grid-template-rows:2.6em auto auto;align-content:start;gap:6px;display:grid}.form-grid>label.wide{grid-template-rows:auto auto auto}.form-grid .wide{grid-column:1/-1}.scroll-pane{overscroll-behavior:contain;overflow:auto}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.card{background:linear-gradient(180deg, #ffffff9e, #ffffff0f 42%, transparent 72%), var(--surface);border:1px solid var(--glass-edge);border-radius:var(--r-l);padding:20px 22px;position:relative;box-shadow:inset 0 1px #ffffffed,0 20px 45px -32px #4962a14f}.card.flat{box-shadow:none}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px 16px;margin-bottom:14px;display:flex}.card-head h2{font-size:17px}.card-head p{color:var(--ink-soft);margin-top:3px;font-size:13px}.eyebrow{font:700 10.5px/1.4 var(--font-display);letter-spacing:.18em;text-transform:uppercase;color:var(--accent);display:block}.muted{color:var(--ink-soft)}.faint{color:var(--ink-faint);font-size:12px}.lede{font-size:15px;line-height:1.8}.chip{background:var(--accent-soft);max-width:100%;color:var(--ink);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-flex}.chip[data-tone=warn]{background:color-mix(in srgb, var(--warn) 16%, transparent);color:var(--warn)}.chip[data-tone=danger]{background:color-mix(in srgb, var(--danger) 14%, transparent);color:var(--danger)}.chip[data-tone=quiet]{background:color-mix(in srgb, var(--ink) 7%, transparent);color:var(--ink-soft)}.chip[data-tone=ok]{background:color-mix(in srgb, var(--ok) 16%, transparent);color:var(--ok)}.pill{background:var(--surface);border:1px solid var(--glass-edge);box-shadow:var(--glass-sheen);white-space:nowrap;border-radius:999px;align-items:center;gap:8px;padding:7px 14px;font-size:12.5px;font-weight:600;display:inline-flex}.dot{background:var(--ok);width:8px;height:8px;box-shadow:0 0 0 4px color-mix(in srgb, var(--ok) 18%, transparent);border-radius:50%;flex:none;display:inline-block}.dot.off{background:var(--ink-faint);box-shadow:0 0 0 4px color-mix(in srgb, var(--ink-faint) 16%, transparent)}.dot.warn{background:var(--warn);box-shadow:0 0 0 4px color-mix(in srgb, var(--warn) 18%, transparent)}.meter{background:color-mix(in srgb, var(--ink) 9%, transparent);border-radius:999px;height:8px;overflow:hidden}.meter>i{border-radius:inherit;background:linear-gradient(90deg, var(--orb-b), var(--accent));height:100%;transition:width .7s var(--ease);display:block}.meter.warn>i{background:linear-gradient(90deg, #ffc15f, var(--warn))}.seg{background:var(--surface);border:1px solid var(--line);border-radius:999px;flex-wrap:wrap;gap:4px;padding:4px;display:inline-flex}.seg button{background:0 0;border:none;padding:7px 14px}.seg button:hover:not(:disabled){box-shadow:none;background:color-mix(in srgb, var(--accent) 10%, transparent);transform:none}.seg button.active,.seg button[aria-selected=true]{background:var(--accent);color:var(--accent-ink)}.empty{text-align:center;color:var(--ink-soft);justify-items:center;gap:6px;padding:30px 16px;font-size:13px;display:grid}.empty b{color:var(--ink);font-size:15px}.kv{grid-template-columns:max-content 1fr;gap:6px 16px;font-size:13px;display:grid}.kv dt{color:var(--ink-soft)}.kv dd{overflow-wrap:anywhere;min-width:0;margin:0}.list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.list-row{border-radius:var(--r-m);background:color-mix(in srgb, var(--surface-strong) 70%, transparent);border:1px solid var(--line);align-items:center;gap:12px;padding:10px 14px;display:flex}.pagination{color:var(--ink-soft);justify-content:center;align-items:center;gap:12px;padding-top:10px;font-size:12.5px;display:flex}.notice{border-radius:var(--r-m);background:color-mix(in srgb, var(--warn) 12%, var(--surface-strong));border:1px solid color-mix(in srgb, var(--warn) 26%, transparent);color:var(--ink);padding:12px 16px;font-size:13px}.error-text{color:var(--danger);font-size:13px}.bubble{overflow-wrap:anywhere;background:var(--surface-strong);border:1px solid var(--line);border-radius:18px;max-width:min(560px,86%);padding:10px 14px;font-size:14px;line-height:1.6;position:relative}.bubble.ta{background:linear-gradient(135deg, color-mix(in srgb, var(--orb-a) 80%, var(--surface-strong)), color-mix(in srgb, var(--orb-b) 55%, var(--surface-strong)));color:var(--ink);border-color:#0000}[data-mood=night] .bubble.ta{background:linear-gradient(135deg, color-mix(in srgb, var(--orb-b) 45%, var(--surface-strong)), color-mix(in srgb, var(--orb-c) 45%, var(--surface-strong)))}#toast{z-index:90;background:var(--surface-strong);border:1px solid var(--line);max-width:min(360px,100vw - 32px);box-shadow:var(--shadow);color:var(--ink);opacity:0;pointer-events:none;transition:opacity .25s var(--ease), transform .35s var(--spring);border-radius:20px 20px 6px;padding:12px 18px;font-size:13.5px;font-weight:600;position:fixed;bottom:34px;right:96px;transform:translateY(10px)scale(.96)}#toast.show{opacity:1;transform:none}#toast.error{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 35%, transparent)}.route-page{animation:page-arrive .32s var(--spring) both}[data-visibility=hidden] *,[data-visibility=hidden] :before,[data-visibility=hidden] :after{animation-play-state:paused!important}.route-page>:nth-child(-n+6){animation:section-arrive .4s var(--spring) both}.route-page>:nth-child(2){animation-delay:25ms}.route-page>:nth-child(3){animation-delay:45ms}.route-page>:nth-child(4){animation-delay:65ms}.route-page>:nth-child(5){animation-delay:85ms}.route-page>:nth-child(6){animation-delay:.105s}@keyframes section-arrive{0%{opacity:.45;transform:translateY(12px)scale(.99)}to{opacity:1;transform:none}}@keyframes page-arrive{0%{opacity:.5;transform:translateY(5px)}to{opacity:1;transform:none}}.rise-enter-active,.rise-move{transition:opacity .35s var(--ease), transform .45s var(--spring)}.rise-enter-from{opacity:0;transform:translateY(10px)}@keyframes float-y{0%{transform:translateY(0)}to{transform:translateY(-6px)}}@keyframes pulse-soft{0%,to{opacity:.55}50%{opacity:1}}[data-motion=quiet] *,[data-motion=quiet] :before,[data-motion=quiet] :after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}@media (width<=900px){.grid-2,.grid-3{grid-template-columns:minmax(0,1fr)}}@media (width<=760px){.page{padding:0 14px 28px}.card{border-radius:var(--r-m);padding:16px}#toast{right:16px;bottom:calc(86px + env(safe-area-inset-bottom))}}.page{overflow-wrap:anywhere}.page>*,.card,.card>*,.field,.row>*,.kv dd{min-width:0}.eyebrow{letter-spacing:.18em}.card{border-top-color:color-mix(in srgb, white 70%, var(--line))}.card-head{flex-wrap:wrap;gap:14px}.save-bar,form>.actions{z-index:4;border:1px solid var(--glass-edge);background:linear-gradient(180deg, #ffffff47, transparent 60%), var(--surface-strong);box-shadow:var(--glass-sheen), var(--shadow-soft);border-radius:18px;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:14px;display:flex;position:sticky;bottom:12px}@media (width<=760px){.save-bar,form>.actions{bottom:84px}}.card,.list-row,.bubble,.pill,.seg,.save-bar,form>.actions{background:radial-gradient(ellipse at 4% 0%, #ffffffe6, transparent 43%), linear-gradient(145deg, #ffffff9e, #ffffff2b 58%, #e2e9ff52), var(--glass-fill);box-shadow:inset 0 1.5px 1px #fffffff5, inset 1px 0 1px #ffffffb3, inset -1px -2px 2px #708fd221, var(--glass-shadow);border-color:#ffffffc2}.card{border-radius:var(--r-l);transition:transform .56s var(--jelly)}.card:hover{border-color:#fffffff7;transform:translateY(-4px)scale(1.012)}button:where(:not(.text-button):not(.ghost)){transition:transform .52s var(--jelly);background-image:linear-gradient(145deg,#ffffffc7,#ffffff38);border-color:#ffffffb8;box-shadow:inset 0 1px #ffffffeb,0 7px 20px -14px #415b9b52}button:hover:where(:not(:disabled):not(.text-button)){transform:translateY(-3px)scale(1.035)}button:active:where(:not(:disabled):not(.text-button)){transition-duration:90ms;transform:translateY(2px)scale(.9,1.06)}button.primary:where(:not(.ghost)){color:#244676;background-color:color-mix(in srgb, var(--glow-a) 44%, white);background-image:radial-gradient(circle at 15% 0,#ffffffeb,#0000 45%),linear-gradient(115deg,#a7d8fb,#c0c6fb 55%,#f4cce8);border-color:#ffffffd1;box-shadow:inset 0 2px 1px #ffffffde,0 13px 24px -12px #5d7fcd6b}button.primary:hover:not(:disabled){background-color:color-mix(in srgb, var(--glow-a) 58%, white);background-image:radial-gradient(circle at 35% -10%,#fff,#0000 48%),linear-gradient(115deg,#9ed9ff,#b9c3fa 55%,#f4c5e1)}input:not([type=checkbox]):not([type=radio]):not([type=range]),select,textarea{background:linear-gradient(150deg, #ffffffab, #ffffff47), var(--glass-fill);transition:transform .42s var(--jelly), border-color .26s ease;border-color:#ffffffd4;border-radius:17px;box-shadow:inset 0 2px 3px #5371b31a,inset 0 -1px 1px #fff}input:not([type=checkbox]):not([type=radio]):not([type=range]):focus,select:focus,textarea:focus{border-color:color-mix(in srgb, var(--accent) 48%, white);box-shadow:inset 0 1px 2px #5371b314, 0 0 0 4px color-mix(in srgb, var(--glow-a) 42%, transparent), 0 12px 22px -17px var(--accent);transform:translateY(-1px)}.chip{background:color-mix(in srgb, var(--accent-soft) 44%, #ffffff85);box-shadow:inset 0 1px 0 #ffffffe6, 0 4px 12px -9px var(--accent);border:1px solid #ffffffb3}.seg{border-radius:999px;padding:5px}.seg button.active,.seg button[aria-selected=true]{color:var(--ink);background:linear-gradient(120deg, #fffffff2, color-mix(in srgb, var(--glow-a) 42%, white));box-shadow:0 5px 14px -9px var(--accent), inset 0 1px 0 white;animation:glass-settle .48s var(--spring) both;border:1px solid #fffffff5}.list-row{transition:transform .48s var(--jelly);border-radius:18px}.list-row:hover{transform:translate(4px)scale(1.01)}.meter{background:#ffffff70;border:1px solid #ffffffb8;height:10px;padding:2px;box-shadow:inset 0 2px 3px #425c9921,0 1px #fff}.meter>i{box-shadow:inset 0 1px 0 #ffffffe0, 0 0 13px color-mix(in srgb, var(--glow-a) 55%, transparent);transition:width .9s var(--spring)}.bubble{border-radius:22px}.bubble.ta{background:linear-gradient(125deg, color-mix(in srgb, var(--orb-a) 54%, white), color-mix(in srgb, var(--glow-a) 40%, #fff9));border-color:#ffffffd1}@keyframes glass-settle{0%{opacity:.5;transform:scale(.86,.78)translateY(6px)}70%{opacity:1;transform:scale(1.04,.98)translateY(-1px)}to{opacity:1;transform:none}}.card,.list-row,.bubble,.pill,.seg,.note,.chip,.message .text,.session-row,.feedback-item,.face-card,.entry,.facts,.fold,.preview-bubble,button,input,textarea,select{-webkit-backdrop-filter:none!important}
|