luckytri 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/docs/en/CHANGELOG.md +13 -0
  2. package/docs/en/guide.md +16 -0
  3. package/docs/en/her-life.md +2 -0
  4. package/docs/en/webui.md +2 -0
  5. package/docs/zh/CHANGELOG.md +13 -0
  6. package/docs/zh/guide.md +17 -1
  7. package/docs/zh/her-life.md +4 -2
  8. package/docs/zh/webui.md +2 -0
  9. package/package.json +110 -109
  10. package/public/app/assets/ChatsPage-B83Evc79.js +3 -0
  11. package/public/app/assets/{Empty-SkA8PyMo.js → Empty-ddEfu0w8.js} +1 -1
  12. package/public/app/assets/{Field-BjLhi8pL.js → Field-mIhV5YBA.js} +1 -1
  13. package/public/app/assets/HeartPage-BGEn24rc.js +1 -0
  14. package/public/app/assets/LifePage-BleqPj4O.js +1 -0
  15. package/public/app/assets/MemoryPage-BM3-0_lF.js +1 -0
  16. package/public/app/assets/{NaturePage-CTXHCE2D.css → NaturePage-CHkpb5NK.css} +1 -1
  17. package/public/app/assets/NaturePage-CxxMnQIc.js +3 -0
  18. package/public/app/assets/PeoplePage-D12cvuy7.js +1 -0
  19. package/public/app/assets/{PeoplePage-BmUxkrOU.css → PeoplePage-DDDHESQp.css} +1 -1
  20. package/public/app/assets/{PluginsPage-BhVm1SUi.js → PluginsPage-DE_-Q3ra.js} +1 -1
  21. package/public/app/assets/SystemPage-BWQKEQRU.js +1 -0
  22. package/public/app/assets/{SystemPage-5yYqyUgR.css → SystemPage-Be1a6UDP.css} +1 -1
  23. package/public/app/assets/TimePage-Dzt8t8kL.js +3 -0
  24. package/public/app/assets/index-oLIXWxsn.js +4 -0
  25. package/public/app/assets/{knowledge-DNDLyN9m.js → knowledge-Dvtmpd45.js} +1 -1
  26. package/public/app/assets/{media-CKVAvML2.js → media-keE52cIX.js} +1 -1
  27. package/public/app/assets/mind-DYRfFMwh.js +1 -0
  28. package/public/app/index.html +3 -3
  29. package/public/guide.en.html +57 -3
  30. package/public/guide.html +36 -4
  31. package/public/tutorial.en.md +16 -0
  32. package/public/tutorial.md +17 -1
  33. package/scripts/import-data.js +128 -0
  34. package/server/app.js +6 -1
  35. package/server/core/persona-manager.js +20 -5
  36. package/server/i18n/errors.js +49 -2
  37. package/server/index.js +46 -2
  38. package/server/knowledge/schema.js +12 -8
  39. package/server/mind/api.js +1 -0
  40. package/server/mind/faces.js +257 -22
  41. package/server/mind/life/context.js +9 -6
  42. package/server/mind/life/growth.js +4 -3
  43. package/server/mind/nature.js +77 -2
  44. package/server/mind/schema.js +3 -0
  45. package/server/mind/view.js +3 -0
  46. package/server/storage/archive.js +5 -4
  47. package/server/storage/backup-cleanup.js +1 -0
  48. package/server/storage/data-package.js +298 -0
  49. package/server/storage/data-transfer-api.js +50 -0
  50. package/server/storage/data-transfer-worker.js +18 -0
  51. package/server/storage/data-transfer.js +415 -0
  52. package/server/storage/store.js +5 -2
  53. package/server/studio/updates.js +133 -0
  54. package/public/app/assets/ChatsPage-B9Odvzfz.js +0 -3
  55. package/public/app/assets/HeartPage-CscKqMsr.js +0 -1
  56. package/public/app/assets/LifePage-BHCmBHlH.js +0 -1
  57. package/public/app/assets/MemoryPage-Bhs2xa1k.js +0 -1
  58. package/public/app/assets/NaturePage-CaPIar_5.js +0 -3
  59. package/public/app/assets/PeoplePage-CuwSSVeX.js +0 -1
  60. package/public/app/assets/SystemPage-Chm5fiGP.js +0 -1
  61. package/public/app/assets/TimePage-BUm4eUzB.js +0 -3
  62. package/public/app/assets/formatters-ZmW_xFHw.js +0 -1
  63. package/public/app/assets/index-BIAdfObg.js +0 -4
@@ -1 +1 @@
1
- .connect[data-v-6f4553ed]{gap:var(--gap);grid-template-columns:minmax(0,1.25fr) minmax(290px,.9fr);align-items:start;display:grid}.connection[data-v-6f4553ed]{gap:20px;display:grid}.connection-details[data-v-6f4553ed]{gap:10px;display:grid}.detail[data-v-6f4553ed]{border:1px solid var(--line);background:color-mix(in srgb, var(--surface-strong) 70%, transparent);border-radius:14px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;padding:13px 16px;display:flex}.detail code[data-v-6f4553ed]{overflow-wrap:anywhere}.warn-text[data-v-6f4553ed]{color:var(--warn);overflow-wrap:anywhere}.instructions[data-v-6f4553ed]{gap:11px;margin:0;padding-left:22px;line-height:1.65;display:grid}.notes[data-v-6f4553ed]{gap:8px;margin:0;padding-left:20px;font-size:13px;line-height:1.6;display:grid}.note[data-v-6f4553ed]{margin:-8px 0 0;font-size:12px}.checks[data-v-6f4553ed]{gap:8px;margin:0;padding:0;list-style:none;display:grid}.checks li[data-v-6f4553ed]{background:color-mix(in srgb, var(--surface-strong) 70%, transparent);border:1px solid var(--line);border-radius:14px;align-items:center;gap:12px;padding:10px 12px;display:flex}.checks li>div[data-v-6f4553ed]{flex:1;min-width:0;display:grid}.checks small[data-v-6f4553ed]{font-size:12px}.mark[data-v-6f4553ed]{border:2px solid var(--line);border-radius:50%;flex:none;place-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:grid}.done .mark[data-v-6f4553ed]{border-color:var(--ok);background:var(--ok);color:var(--accent-ink)}@media (width<=1000px){.connect[data-v-6f4553ed]{grid-template-columns:minmax(0,1fr)}}.embedding-profile[data-v-6873efbb]{min-width:0}.fields[data-v-6873efbb]{grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:14px;margin:16px 0;display:grid}.save-bar[data-v-6873efbb]{position:relative;bottom:auto}.library[data-v-59f18516]{gap:var(--gap);grid-template-columns:minmax(0,1fr);display:grid}.model-workspace[data-v-59f18516]{gap:var(--gap);grid-template-columns:minmax(260px,.32fr) minmax(0,1fr);align-items:start;display:grid}.shelf[data-v-59f18516]{background:radial-gradient(ellipse at 0 0, color-mix(in srgb, var(--glow-a) 23%, transparent), transparent 56%), var(--surface);gap:15px;display:grid;position:sticky;top:14px}.detail[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-b) 16%, transparent), transparent 47%), var(--surface)}.usage-panel[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 25%, transparent), transparent 42%), radial-gradient(ellipse at 0 100%, color-mix(in srgb, var(--glow-b) 20%, transparent), transparent 46%), var(--surface);grid-column:1/-1;gap:18px;display:grid;overflow:hidden}.usage-intro[data-v-59f18516]{justify-content:space-between;align-items:end;gap:20px;display:flex}.usage-intro h2[data-v-59f18516]{letter-spacing:-.04em;margin:5px 0 4px;font-size:22px}.usage-intro p[data-v-59f18516],.usage-foot small[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.usage-total[data-v-59f18516]{flex:none;justify-items:end;display:grid}.usage-total strong[data-v-59f18516]{color:var(--accent);font:700 clamp(28px, 4vw, 42px) var(--font-display);letter-spacing:-.055em;font-variant-numeric:tabular-nums;line-height:1.05}.usage-total span[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.usage-detail[data-v-59f18516]{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.usage-stat[data-v-59f18516]{background:#ffffff5c;border:1px solid #ffffffc7;border-radius:18px;gap:5px;min-width:0;padding:14px 16px;display:grid;box-shadow:inset 0 1px #fff}.usage-stat span[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.usage-stat span small[data-v-59f18516]{font-size:10px}.usage-stat b[data-v-59f18516]{font-variant-numeric:tabular-nums;text-overflow:ellipsis;font-size:19px;overflow:hidden}.usage-foot[data-v-59f18516]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.usage-error[data-v-59f18516]{color:var(--danger)!important}.usage-refresh[data-v-59f18516]{color:var(--accent);font-size:12px}.shelf-head[data-v-59f18516]{justify-content:space-between;align-items:center;gap:8px;display:flex}.shelf-head h2[data-v-59f18516]{letter-spacing:-.04em;font-size:21px}.shelf-head small[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.rows[data-v-59f18516]{gap:8px;max-height:520px;display:grid;overflow:auto}.saved-vendor[data-v-59f18516]{background:#fff3;border:1px solid #ffffffad;border-radius:17px;overflow:hidden;box-shadow:inset 0 1px #ffffffb8}.saved-vendor>summary[data-v-59f18516]{color:var(--ink);cursor:pointer;justify-content:space-between;align-items:center;gap:8px;padding:11px 13px;font-size:12px;font-weight:700;list-style:none;display:flex}.saved-vendor>summary[data-v-59f18516]::-webkit-details-marker{display:none}.vendor-summary[data-v-59f18516]::-webkit-details-marker{display:none}.saved-vendor>summary[data-v-59f18516]:after{color:var(--accent);content:"⌄";transition:transform .24s var(--spring);font-size:15px}.saved-vendor[open]>summary[data-v-59f18516]{background:#ffffff40;border-bottom:1px solid #fff9}.saved-vendor[open]>summary[data-v-59f18516]:after{transform:rotate(180deg)}.saved-vendor>summary small[data-v-59f18516]{color:var(--ink-soft);margin-left:auto;font-size:10px;font-weight:500}.vendor-models[data-v-59f18516]{gap:6px;padding:7px;display:grid}.entity-row[data-v-59f18516]{text-align:left;-webkit-backdrop-filter:blur(16px)saturate(1.5);backdrop-filter:blur(16px)saturate(1.5);width:100%;transition:transform .32s var(--spring), background-color .2s, box-shadow .25s;background:#ffffff5c;border:1px solid #ffffffbf;border-radius:18px;align-items:center;gap:10px;padding:11px 12px;display:flex;box-shadow:inset 0 1px #fff}.entity-row[data-v-59f18516]:hover:not(:disabled){box-shadow:0 12px 22px -19px var(--accent);background:#ffffffa8;transform:translate(4px)scale(1.01)}.entity-row.selected[data-v-59f18516]{border-color:color-mix(in srgb, var(--accent) 22%, white);background:linear-gradient(115deg, white, color-mix(in srgb, var(--accent-soft) 60%, white));box-shadow:inset 0 1px 0 white, 0 13px 23px -20px var(--accent)}.badge[data-v-59f18516]{background:linear-gradient(145deg, white, hsl(var(--hue) 70% 88%));width:36px;height:36px;color:hsl(var(--hue) 45% 25%);box-shadow:inset 0 1px 0 white, 0 5px 13px -10px hsl(var(--hue) 45% 32%);border-radius:14px;flex:none;place-items:center;font-weight:700;display:grid}.who[data-v-59f18516]{min-width:0;line-height:1.35;display:grid}.who b[data-v-59f18516]{text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;overflow:hidden}.who small[data-v-59f18516]{color:var(--ink-soft);font-size:11.5px;font-weight:500}fieldset[data-v-59f18516]{background:linear-gradient(142deg, #ffffffa1, #ffffff47), var(--surface);box-shadow:inset 0 1px 0 white, 0 14px 30px -27px var(--accent);-webkit-backdrop-filter:blur(20px)saturate(1.6);backdrop-filter:blur(20px)saturate(1.6);border:1px solid #ffffffcf;border-radius:24px;gap:10px;margin:0;padding:20px;display:grid}legend[data-v-59f18516]{padding:0 8px;font-size:13px;font-weight:700}.advanced summary[data-v-59f18516]{color:var(--accent);transition:transform .3s var(--spring), background-color .2s;background:#ffffff6b;border:1px solid #fffc;border-radius:14px;padding:12px 15px;font-weight:600;box-shadow:inset 0 1px #fff}.advanced summary[data-v-59f18516]:hover{background:#ffffffa6;transform:translate(3px)}.advanced[open] summary[data-v-59f18516]{margin-bottom:12px}.caps[data-v-59f18516]{flex-wrap:wrap;gap:8px 18px;margin-top:10px;display:flex}.actions[data-v-59f18516]{flex-wrap:wrap;gap:8px;display:flex}.actions .push[data-v-59f18516]{margin-left:auto}.model-picker[data-v-59f18516]{gap:16px;display:grid}.catalog-search[data-v-59f18516]{color:var(--ink-soft);gap:6px;font-size:12px;font-weight:600;display:grid}.catalog-search input[data-v-59f18516]{width:100%;min-height:42px;color:var(--ink);-webkit-backdrop-filter:blur(14px)saturate(1.4);backdrop-filter:blur(14px)saturate(1.4);background:#ffffff9e;border:1px solid #ffffffd9;border-radius:14px;outline:none;padding:0 13px;box-shadow:inset 0 1px #fff}.catalog-search input[data-v-59f18516]:focus{border-color:color-mix(in srgb, var(--accent) 42%, white);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 10%, transparent)}.vendor[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 13%, transparent), transparent 48%), #ffffff3b;-webkit-backdrop-filter:blur(18px)saturate(1.35);backdrop-filter:blur(18px)saturate(1.35);border:1px solid #ffffffb8;border-radius:21px;overflow:hidden;box-shadow:inset 0 1px #ffffffc7}.vendor-summary[data-v-59f18516]{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;min-height:62px;padding:12px 17px;list-style:none;transition:background-color .2s;display:flex}.vendor-summary[data-v-59f18516]:hover{background:#ffffff57}.vendor-name[data-v-59f18516]{align-items:center;gap:10px;min-width:0;display:flex}.vendor-name b[data-v-59f18516]{font-size:13px}.vendor-name small[data-v-59f18516]{color:var(--ink-soft);font-size:10px}.vendor-chevron[data-v-59f18516]{color:var(--accent);transition:transform .28s var(--spring);font-size:20px;line-height:1}.vendor[open] .vendor-chevron[data-v-59f18516]{transform:rotate(180deg)}.vendor[open] .presets[data-v-59f18516]{animation:vendor-reveal-59f18516 .24s var(--spring) both}@keyframes vendor-reveal-59f18516{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.search-empty[data-v-59f18516]{margin:0}.presets[data-v-59f18516]{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;padding:0 12px 12px;display:grid}.preset-card[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 22%, transparent), transparent 55%), #ffffff80;box-shadow:inset 0 1px 0 white, 0 12px 22px -20px var(--accent);text-align:left;-webkit-backdrop-filter:blur(16px)saturate(1.5);backdrop-filter:blur(16px)saturate(1.5);transition:transform .42s var(--spring), box-shadow .25s;border:1px solid #ffffffd1;border-radius:21px;justify-items:start;gap:3px;padding:17px;font-weight:500;display:grid}.preset-card[data-v-59f18516]:hover:not(:disabled){box-shadow:inset 0 1px 0 white, 0 22px 33px -22px var(--accent);transform:translateY(-6px)rotate(-.5deg)scale(1.025)}.preset-card small[data-v-59f18516]{color:var(--ink-soft);font-size:11.5px}@media (width<=900px){.model-workspace[data-v-59f18516]{grid-template-columns:minmax(0,1fr)}.usage-panel[data-v-59f18516]{grid-column:auto}.shelf[data-v-59f18516]{position:static}}@media (width<=620px){.usage-intro[data-v-59f18516]{flex-direction:column;align-items:start}.usage-total[data-v-59f18516]{justify-items:start}.usage-detail[data-v-59f18516]{grid-template-columns:repeat(2,minmax(0,1fr))}}.runtime-grid[data-v-1f197523]{gap:var(--gap);grid-template-columns:minmax(0,1.55fr) minmax(260px,.8fr);align-items:start;display:grid}.runtime-grid>.card[data-v-1f197523]{background:radial-gradient(ellipse at 90% 0, color-mix(in srgb, var(--glow-a) 20%, transparent), transparent 55%), var(--surface)}.runtime-grid .card-head h2[data-v-1f197523]{letter-spacing:-.035em;margin-top:5px;font-size:23px}.switches[data-v-1f197523]{gap:12px;margin-bottom:20px;display:grid}.switches[data-v-1f197523] .switch{box-shadow:inset 0 1px 0 white, 0 10px 22px -23px var(--accent);-webkit-backdrop-filter:blur(18px)saturate(1.5);backdrop-filter:blur(18px)saturate(1.5);transition:transform .35s var(--spring), background-color .2s;background:#ffffff69;border:1px solid #ffffffc7;border-radius:22px;align-items:flex-start;padding:18px}.switches[data-v-1f197523] .switch:hover{background:#ffffffa3;transform:translateY(-3px)scale(1.008)}.switches[data-v-1f197523] .switch>span{gap:2px;display:grid}.switches small[data-v-1f197523]{color:var(--ink-soft);font-size:12.5px;font-weight:400}.numbers[data-v-1f197523]{gap:12px;display:grid}.numbers button[data-v-1f197523],.numbers .stat[data-v-1f197523]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-b) 24%, transparent), transparent 63%), #ffffff70;box-shadow:inset 0 1px 0 white, 0 12px 26px -24px var(--accent);text-align:left;-webkit-backdrop-filter:blur(18px)saturate(1.55);backdrop-filter:blur(18px)saturate(1.55);transition:transform .38s var(--spring), box-shadow .23s;border:1px solid #ffffffd4;border-radius:22px;justify-items:start;gap:2px;padding:20px 21px;display:grid}.numbers button[data-v-1f197523]:hover:not(:disabled){box-shadow:inset 0 1px 0 white, 0 18px 28px -22px var(--accent);transform:translate(5px)scale(1.018)}.numbers b[data-v-1f197523]{font:750 29px var(--font-display);color:var(--accent)}.numbers .stat.warn b[data-v-1f197523]{color:var(--warn)}.numbers .stat.danger b[data-v-1f197523]{color:var(--danger)}.numbers span[data-v-1f197523]{color:var(--ink-soft);font-size:12.5px;font-weight:500}@media (width<=900px){.runtime-grid[data-v-1f197523]{grid-template-columns:minmax(0,1fr)}}.search-profile[data-v-e874d8b6]{gap:16px;min-width:0;display:grid}.search-profile form[data-v-e874d8b6]{gap:18px;display:grid}.search-fields[data-v-e874d8b6]{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.search-fields label[data-v-e874d8b6]{gap:8px;min-width:0;display:grid}.search-fields input[data-v-e874d8b6],.search-fields .menu-select[data-v-e874d8b6]{width:100%;min-width:0}.search-usage[data-v-e874d8b6]{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.search-result[data-v-e874d8b6]{border:1px solid var(--line);background:var(--surface);overflow-wrap:anywhere;border-radius:16px;padding:14px 16px}.search-result.failed[data-v-e874d8b6]{border-color:color-mix(in srgb, var(--warn) 40%, var(--line))}@media (width<=620px){.search-fields[data-v-e874d8b6]{grid-template-columns:minmax(0,1fr)}}.storage-page[data-v-79fb7512]{gap:var(--gap);display:grid}.storage-page>.card[data-v-79fb7512],.storage-grid>.card[data-v-79fb7512]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 20%, transparent), transparent 60%), var(--surface)}.storage-overview h2[data-v-79fb7512]{margin:8px 0;font-size:clamp(24px,3vw,36px)}.storage-overview p[data-v-79fb7512],.storage-note[data-v-79fb7512]{color:var(--ink-soft);font-size:13px;line-height:1.65}.storage-metrics[data-v-79fb7512]{flex-wrap:wrap;gap:12px;margin-top:22px;display:flex}.storage-metrics>div[data-v-79fb7512]{background:#ffffff6b;border:1px solid #fffc;border-radius:18px;gap:3px;min-width:150px;padding:15px 20px;display:grid}.storage-metrics b[data-v-79fb7512]{color:var(--accent);font-size:23px}.storage-metrics span[data-v-79fb7512]{color:var(--ink-soft);font-size:12px}.storage-grid[data-v-79fb7512]{gap:var(--gap);grid-template-columns:minmax(270px,.8fr) minmax(0,1.5fr);align-items:start;display:grid}.storage-grid .card-head h2[data-v-79fb7512]{margin:4px 0 16px;font-size:23px}.storage-check[data-v-79fb7512]{align-items:center;gap:9px;margin-bottom:16px;display:flex}.storage-fields[data-v-79fb7512]{gap:13px;display:grid}.storage-fields label[data-v-79fb7512]{color:var(--ink-soft);gap:6px;font-size:12px;font-weight:700;display:grid}.storage-fields input[data-v-79fb7512]{border:1px solid color-mix(in srgb, var(--accent) 25%, white);width:100%;min-width:0;color:var(--ink);background:#ffffffb3;border-radius:15px;padding:11px 13px}.storage-policy .primary[data-v-79fb7512]{margin-top:14px}.storage-actions[data-v-79fb7512]{flex-wrap:wrap;gap:8px;margin:16px 0;display:flex}.storage-actions button[data-v-79fb7512]{background:#ffffffa6;border-radius:999px;padding:8px 12px}.storage-scroll[data-v-79fb7512]{gap:7px;max-height:520px;padding:2px;display:grid;overflow:auto}.storage-row[data-v-79fb7512]{cursor:pointer;background:#ffffff7a;border:1px solid #ffffffbf;border-radius:16px;align-items:center;gap:12px;min-width:0;padding:10px 12px;display:flex}.storage-row.protected[data-v-79fb7512]{opacity:.7;cursor:default}.storage-item[data-v-79fb7512]{flex:1;gap:3px;min-width:0;display:grid}.storage-item strong[data-v-79fb7512]{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.storage-item small[data-v-79fb7512]{color:var(--ink-soft);font-size:11px}.storage-row>b[data-v-79fb7512]{white-space:nowrap;color:var(--accent);font-size:12px}.storage-footer[data-v-79fb7512]{color:var(--ink-soft);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding-top:18px;font-size:12px;display:flex}.storage-error[data-v-79fb7512]{color:var(--danger);overflow-wrap:anywhere}@media (width<=900px){.storage-grid[data-v-79fb7512]{grid-template-columns:minmax(0,1fr)}}@media (width<=560px){.storage-row[data-v-79fb7512]{flex-wrap:wrap;align-items:flex-start}.storage-row>b[data-v-79fb7512]{margin-left:26px}.storage-metrics>div[data-v-79fb7512]{flex:1;min-width:130px}}.password-settings[data-v-36cd9f70]{margin-top:24px}form[data-v-36cd9f70]{gap:16px;max-width:520px;display:grid}label[data-v-36cd9f70]{gap:8px;display:grid}input[data-v-36cd9f70]{box-sizing:border-box;width:100%}.system[data-v-0f629207]{gap:var(--gap);display:grid}.system-intro[data-v-0f629207]{background:radial-gradient(ellipse at 90% 7%, color-mix(in srgb, var(--glow-a) 48%, transparent), transparent 51%), radial-gradient(ellipse at 62% 115%, color-mix(in srgb, var(--glow-b) 38%, transparent), transparent 55%), linear-gradient(115deg, #fffc, #ffffff4d);min-height:190px;box-shadow:inset 0 2px 0 white, 0 25px 54px -35px color-mix(in srgb, var(--accent) 43%, transparent);-webkit-backdrop-filter:blur(28px)saturate(1.8);backdrop-filter:blur(28px)saturate(1.8);border:1px solid #ffffffd9;border-radius:36px;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:20px;padding:32px clamp(26px,5vw,60px);display:flex;position:relative;overflow:hidden}.system-intro[data-v-0f629207]:before{content:"";width:350px;height:350px;box-shadow:0 0 0 29px #ffffff21, 0 0 0 58px color-mix(in srgb, var(--glow-b) 12%, transparent);pointer-events:none;border:1px solid #ffffffb8;border-radius:50%;animation:10s ease-in-out infinite alternate system-bob-0f629207;position:absolute;top:-85%;right:13%}.system-intro h1[data-v-0f629207]{letter-spacing:-.055em;margin:10px 0 7px;font-size:clamp(28px,3.25vw,42px)}.system-intro h1 em[data-v-0f629207]{color:var(--accent);font-style:normal}.system-intro p[data-v-0f629207]{max-width:560px;color:var(--ink-soft);font-size:13.5px;position:relative}.system-status[data-v-0f629207]{z-index:1;box-shadow:inset 0 1px 0 white, 0 7px 19px -15px var(--accent);white-space:nowrap;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#ffffff87;border:1px solid #fff;border-radius:999px;align-items:center;gap:9px;padding:10px 16px;font-size:12.5px;font-weight:700;display:inline-flex}.system-status i[data-v-0f629207]{background:var(--ok);width:9px;height:9px;box-shadow:0 0 0 4px color-mix(in srgb, var(--ok) 18%, transparent);border-radius:50%;animation:2.6s ease-in-out infinite pulse-soft}.system-status i.off[data-v-0f629207]{background:var(--ink-faint);box-shadow:0 0 0 4px color-mix(in srgb, var(--ink-faint) 14%, transparent);animation:none}.system>.tabs[data-v-0f629207]{box-shadow:inset 0 1px 0 white, 0 10px 30px -24px var(--accent);-webkit-backdrop-filter:blur(22px)saturate(1.7);backdrop-filter:blur(22px)saturate(1.7);border:1px solid #fffc;justify-self:start;padding:5px}.system[data-v-0f629207]>.tabs button{transition:transform .35s var(--spring), background-color .2s, box-shadow .2s;border-radius:999px;padding:9px 18px}.system[data-v-0f629207]>.tabs button:hover{transform:translateY(-2px)scale(1.03)}.system[data-v-0f629207] .connect .step,.system[data-v-0f629207] .connect .checks li{background:linear-gradient(145deg, #ffffffad, #ffffff47), var(--surface);box-shadow:inset 0 1px 0 white, 0 12px 24px -24px var(--accent);-webkit-backdrop-filter:blur(18px)saturate(1.55);backdrop-filter:blur(18px)saturate(1.55);transition:transform .35s var(--spring), box-shadow .25s;border:1px solid #ffffffd9;border-radius:22px}.system[data-v-0f629207] .connect .step:hover,.system[data-v-0f629207] .connect .checks li:hover{box-shadow:inset 0 1px 0 white, 0 16px 28px -21px var(--accent);transform:translateY(-3px)}.system[data-v-0f629207] .connect .num{background:linear-gradient(145deg, white, color-mix(in srgb, var(--glow-a) 75%, white));box-shadow:inset 0 1px 0 white, 0 5px 14px -9px var(--accent);color:var(--accent);border:1px solid #fff}@keyframes system-bob-0f629207{to{transform:translateY(22px)scale(1.08)}}@media (width<=760px){.system-intro[data-v-0f629207]{min-height:0;padding:27px 23px}}
1
+ .connect[data-v-6f4553ed]{gap:var(--gap);grid-template-columns:minmax(0,1.25fr) minmax(290px,.9fr);align-items:start;display:grid}.connection[data-v-6f4553ed]{gap:20px;display:grid}.connection-details[data-v-6f4553ed]{gap:10px;display:grid}.detail[data-v-6f4553ed]{border:1px solid var(--line);background:color-mix(in srgb, var(--surface-strong) 70%, transparent);border-radius:14px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;padding:13px 16px;display:flex}.detail code[data-v-6f4553ed]{overflow-wrap:anywhere}.warn-text[data-v-6f4553ed]{color:var(--warn);overflow-wrap:anywhere}.instructions[data-v-6f4553ed]{gap:11px;margin:0;padding-left:22px;line-height:1.65;display:grid}.notes[data-v-6f4553ed]{gap:8px;margin:0;padding-left:20px;font-size:13px;line-height:1.6;display:grid}.note[data-v-6f4553ed]{margin:-8px 0 0;font-size:12px}.checks[data-v-6f4553ed]{gap:8px;margin:0;padding:0;list-style:none;display:grid}.checks li[data-v-6f4553ed]{background:color-mix(in srgb, var(--surface-strong) 70%, transparent);border:1px solid var(--line);border-radius:14px;align-items:center;gap:12px;padding:10px 12px;display:flex}.checks li>div[data-v-6f4553ed]{flex:1;min-width:0;display:grid}.checks small[data-v-6f4553ed]{font-size:12px}.mark[data-v-6f4553ed]{border:2px solid var(--line);border-radius:50%;flex:none;place-items:center;width:22px;height:22px;font-size:11px;font-weight:700;display:grid}.done .mark[data-v-6f4553ed]{border-color:var(--ok);background:var(--ok);color:var(--accent-ink)}@media (width<=1000px){.connect[data-v-6f4553ed]{grid-template-columns:minmax(0,1fr)}}.embedding-profile[data-v-6873efbb]{min-width:0}.fields[data-v-6873efbb]{grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:14px;margin:16px 0;display:grid}.save-bar[data-v-6873efbb]{position:relative;bottom:auto}.library[data-v-59f18516]{gap:var(--gap);grid-template-columns:minmax(0,1fr);display:grid}.model-workspace[data-v-59f18516]{gap:var(--gap);grid-template-columns:minmax(260px,.32fr) minmax(0,1fr);align-items:start;display:grid}.shelf[data-v-59f18516]{background:radial-gradient(ellipse at 0 0, color-mix(in srgb, var(--glow-a) 23%, transparent), transparent 56%), var(--surface);gap:15px;display:grid;position:sticky;top:14px}.detail[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-b) 16%, transparent), transparent 47%), var(--surface)}.usage-panel[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 25%, transparent), transparent 42%), radial-gradient(ellipse at 0 100%, color-mix(in srgb, var(--glow-b) 20%, transparent), transparent 46%), var(--surface);grid-column:1/-1;gap:18px;display:grid;overflow:hidden}.usage-intro[data-v-59f18516]{justify-content:space-between;align-items:end;gap:20px;display:flex}.usage-intro h2[data-v-59f18516]{letter-spacing:-.04em;margin:5px 0 4px;font-size:22px}.usage-intro p[data-v-59f18516],.usage-foot small[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.usage-total[data-v-59f18516]{flex:none;justify-items:end;display:grid}.usage-total strong[data-v-59f18516]{color:var(--accent);font:700 clamp(28px, 4vw, 42px) var(--font-display);letter-spacing:-.055em;font-variant-numeric:tabular-nums;line-height:1.05}.usage-total span[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.usage-detail[data-v-59f18516]{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.usage-stat[data-v-59f18516]{background:#ffffff5c;border:1px solid #ffffffc7;border-radius:18px;gap:5px;min-width:0;padding:14px 16px;display:grid;box-shadow:inset 0 1px #fff}.usage-stat span[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.usage-stat span small[data-v-59f18516]{font-size:10px}.usage-stat b[data-v-59f18516]{font-variant-numeric:tabular-nums;text-overflow:ellipsis;font-size:19px;overflow:hidden}.usage-foot[data-v-59f18516]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.usage-error[data-v-59f18516]{color:var(--danger)!important}.usage-refresh[data-v-59f18516]{color:var(--accent);font-size:12px}.shelf-head[data-v-59f18516]{justify-content:space-between;align-items:center;gap:8px;display:flex}.shelf-head h2[data-v-59f18516]{letter-spacing:-.04em;font-size:21px}.shelf-head small[data-v-59f18516]{color:var(--ink-soft);font-size:12px}.rows[data-v-59f18516]{gap:8px;max-height:520px;display:grid;overflow:auto}.saved-vendor[data-v-59f18516]{background:#fff3;border:1px solid #ffffffad;border-radius:17px;overflow:hidden;box-shadow:inset 0 1px #ffffffb8}.saved-vendor>summary[data-v-59f18516]{color:var(--ink);cursor:pointer;justify-content:space-between;align-items:center;gap:8px;padding:11px 13px;font-size:12px;font-weight:700;list-style:none;display:flex}.saved-vendor>summary[data-v-59f18516]::-webkit-details-marker{display:none}.vendor-summary[data-v-59f18516]::-webkit-details-marker{display:none}.saved-vendor>summary[data-v-59f18516]:after{color:var(--accent);content:"⌄";transition:transform .24s var(--spring);font-size:15px}.saved-vendor[open]>summary[data-v-59f18516]{background:#ffffff40;border-bottom:1px solid #fff9}.saved-vendor[open]>summary[data-v-59f18516]:after{transform:rotate(180deg)}.saved-vendor>summary small[data-v-59f18516]{color:var(--ink-soft);margin-left:auto;font-size:10px;font-weight:500}.vendor-models[data-v-59f18516]{gap:6px;padding:7px;display:grid}.entity-row[data-v-59f18516]{text-align:left;-webkit-backdrop-filter:blur(16px)saturate(1.5);backdrop-filter:blur(16px)saturate(1.5);width:100%;transition:transform .32s var(--spring), background-color .2s, box-shadow .25s;background:#ffffff5c;border:1px solid #ffffffbf;border-radius:18px;align-items:center;gap:10px;padding:11px 12px;display:flex;box-shadow:inset 0 1px #fff}.entity-row[data-v-59f18516]:hover:not(:disabled){box-shadow:0 12px 22px -19px var(--accent);background:#ffffffa8;transform:translate(4px)scale(1.01)}.entity-row.selected[data-v-59f18516]{border-color:color-mix(in srgb, var(--accent) 22%, white);background:linear-gradient(115deg, white, color-mix(in srgb, var(--accent-soft) 60%, white));box-shadow:inset 0 1px 0 white, 0 13px 23px -20px var(--accent)}.badge[data-v-59f18516]{background:linear-gradient(145deg, white, hsl(var(--hue) 70% 88%));width:36px;height:36px;color:hsl(var(--hue) 45% 25%);box-shadow:inset 0 1px 0 white, 0 5px 13px -10px hsl(var(--hue) 45% 32%);border-radius:14px;flex:none;place-items:center;font-weight:700;display:grid}.who[data-v-59f18516]{min-width:0;line-height:1.35;display:grid}.who b[data-v-59f18516]{text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;overflow:hidden}.who small[data-v-59f18516]{color:var(--ink-soft);font-size:11.5px;font-weight:500}fieldset[data-v-59f18516]{background:linear-gradient(142deg, #ffffffa1, #ffffff47), var(--surface);box-shadow:inset 0 1px 0 white, 0 14px 30px -27px var(--accent);-webkit-backdrop-filter:blur(20px)saturate(1.6);backdrop-filter:blur(20px)saturate(1.6);border:1px solid #ffffffcf;border-radius:24px;gap:10px;margin:0;padding:20px;display:grid}legend[data-v-59f18516]{padding:0 8px;font-size:13px;font-weight:700}.advanced summary[data-v-59f18516]{color:var(--accent);transition:transform .3s var(--spring), background-color .2s;background:#ffffff6b;border:1px solid #fffc;border-radius:14px;padding:12px 15px;font-weight:600;box-shadow:inset 0 1px #fff}.advanced summary[data-v-59f18516]:hover{background:#ffffffa6;transform:translate(3px)}.advanced[open] summary[data-v-59f18516]{margin-bottom:12px}.caps[data-v-59f18516]{flex-wrap:wrap;gap:8px 18px;margin-top:10px;display:flex}.actions[data-v-59f18516]{flex-wrap:wrap;gap:8px;display:flex}.actions .push[data-v-59f18516]{margin-left:auto}.model-picker[data-v-59f18516]{gap:16px;display:grid}.catalog-search[data-v-59f18516]{color:var(--ink-soft);gap:6px;font-size:12px;font-weight:600;display:grid}.catalog-search input[data-v-59f18516]{width:100%;min-height:42px;color:var(--ink);-webkit-backdrop-filter:blur(14px)saturate(1.4);backdrop-filter:blur(14px)saturate(1.4);background:#ffffff9e;border:1px solid #ffffffd9;border-radius:14px;outline:none;padding:0 13px;box-shadow:inset 0 1px #fff}.catalog-search input[data-v-59f18516]:focus{border-color:color-mix(in srgb, var(--accent) 42%, white);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 10%, transparent)}.vendor[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 13%, transparent), transparent 48%), #ffffff3b;-webkit-backdrop-filter:blur(18px)saturate(1.35);backdrop-filter:blur(18px)saturate(1.35);border:1px solid #ffffffb8;border-radius:21px;overflow:hidden;box-shadow:inset 0 1px #ffffffc7}.vendor-summary[data-v-59f18516]{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;min-height:62px;padding:12px 17px;list-style:none;transition:background-color .2s;display:flex}.vendor-summary[data-v-59f18516]:hover{background:#ffffff57}.vendor-name[data-v-59f18516]{align-items:center;gap:10px;min-width:0;display:flex}.vendor-name b[data-v-59f18516]{font-size:13px}.vendor-name small[data-v-59f18516]{color:var(--ink-soft);font-size:10px}.vendor-chevron[data-v-59f18516]{color:var(--accent);transition:transform .28s var(--spring);font-size:20px;line-height:1}.vendor[open] .vendor-chevron[data-v-59f18516]{transform:rotate(180deg)}.vendor[open] .presets[data-v-59f18516]{animation:vendor-reveal-59f18516 .24s var(--spring) both}@keyframes vendor-reveal-59f18516{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.search-empty[data-v-59f18516]{margin:0}.presets[data-v-59f18516]{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;padding:0 12px 12px;display:grid}.preset-card[data-v-59f18516]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 22%, transparent), transparent 55%), #ffffff80;box-shadow:inset 0 1px 0 white, 0 12px 22px -20px var(--accent);text-align:left;-webkit-backdrop-filter:blur(16px)saturate(1.5);backdrop-filter:blur(16px)saturate(1.5);transition:transform .42s var(--spring), box-shadow .25s;border:1px solid #ffffffd1;border-radius:21px;justify-items:start;gap:3px;padding:17px;font-weight:500;display:grid}.preset-card[data-v-59f18516]:hover:not(:disabled){box-shadow:inset 0 1px 0 white, 0 22px 33px -22px var(--accent);transform:translateY(-6px)rotate(-.5deg)scale(1.025)}.preset-card small[data-v-59f18516]{color:var(--ink-soft);font-size:11.5px}@media (width<=900px){.model-workspace[data-v-59f18516]{grid-template-columns:minmax(0,1fr)}.usage-panel[data-v-59f18516]{grid-column:auto}.shelf[data-v-59f18516]{position:static}}@media (width<=620px){.usage-intro[data-v-59f18516]{flex-direction:column;align-items:start}.usage-total[data-v-59f18516]{justify-items:start}.usage-detail[data-v-59f18516]{grid-template-columns:repeat(2,minmax(0,1fr))}}.runtime-grid[data-v-1f197523]{gap:var(--gap);grid-template-columns:minmax(0,1.55fr) minmax(260px,.8fr);align-items:start;display:grid}.runtime-grid>.card[data-v-1f197523]{background:radial-gradient(ellipse at 90% 0, color-mix(in srgb, var(--glow-a) 20%, transparent), transparent 55%), var(--surface)}.runtime-grid .card-head h2[data-v-1f197523]{letter-spacing:-.035em;margin-top:5px;font-size:23px}.switches[data-v-1f197523]{gap:12px;margin-bottom:20px;display:grid}.switches[data-v-1f197523] .switch{box-shadow:inset 0 1px 0 white, 0 10px 22px -23px var(--accent);-webkit-backdrop-filter:blur(18px)saturate(1.5);backdrop-filter:blur(18px)saturate(1.5);transition:transform .35s var(--spring), background-color .2s;background:#ffffff69;border:1px solid #ffffffc7;border-radius:22px;align-items:flex-start;padding:18px}.switches[data-v-1f197523] .switch:hover{background:#ffffffa3;transform:translateY(-3px)scale(1.008)}.switches[data-v-1f197523] .switch>span{gap:2px;display:grid}.switches small[data-v-1f197523]{color:var(--ink-soft);font-size:12.5px;font-weight:400}.numbers[data-v-1f197523]{gap:12px;display:grid}.numbers button[data-v-1f197523],.numbers .stat[data-v-1f197523]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-b) 24%, transparent), transparent 63%), #ffffff70;box-shadow:inset 0 1px 0 white, 0 12px 26px -24px var(--accent);text-align:left;-webkit-backdrop-filter:blur(18px)saturate(1.55);backdrop-filter:blur(18px)saturate(1.55);transition:transform .38s var(--spring), box-shadow .23s;border:1px solid #ffffffd4;border-radius:22px;justify-items:start;gap:2px;padding:20px 21px;display:grid}.numbers button[data-v-1f197523]:hover:not(:disabled){box-shadow:inset 0 1px 0 white, 0 18px 28px -22px var(--accent);transform:translate(5px)scale(1.018)}.numbers b[data-v-1f197523]{font:750 29px var(--font-display);color:var(--accent)}.numbers .stat.warn b[data-v-1f197523]{color:var(--warn)}.numbers .stat.danger b[data-v-1f197523]{color:var(--danger)}.numbers span[data-v-1f197523]{color:var(--ink-soft);font-size:12.5px;font-weight:500}@media (width<=900px){.runtime-grid[data-v-1f197523]{grid-template-columns:minmax(0,1fr)}}.search-profile[data-v-e874d8b6]{gap:16px;min-width:0;display:grid}.search-profile form[data-v-e874d8b6]{gap:18px;display:grid}.search-fields[data-v-e874d8b6]{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.search-fields label[data-v-e874d8b6]{gap:8px;min-width:0;display:grid}.search-fields input[data-v-e874d8b6],.search-fields .menu-select[data-v-e874d8b6]{width:100%;min-width:0}.search-usage[data-v-e874d8b6]{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.search-result[data-v-e874d8b6]{border:1px solid var(--line);background:var(--surface);overflow-wrap:anywhere;border-radius:16px;padding:14px 16px}.search-result.failed[data-v-e874d8b6]{border-color:color-mix(in srgb, var(--warn) 40%, var(--line))}@media (width<=620px){.search-fields[data-v-e874d8b6]{grid-template-columns:minmax(0,1fr)}}.data-transfer[data-v-ea16c0c1]{min-width:0}.data-transfer h2[data-v-ea16c0c1]{margin:8px 0 14px;font-size:clamp(23px,3vw,32px)}.transfer-note[data-v-ea16c0c1]{color:var(--ink-soft);overflow-wrap:anywhere;font-size:13px;line-height:1.7}.transfer-actions[data-v-ea16c0c1]{flex-wrap:wrap;gap:10px;margin:18px 0;display:flex}.transfer-actions button[data-v-ea16c0c1]{border-radius:16px;padding:11px 17px}.transfer-actions button[data-v-ea16c0c1]:not(.primary){background:#ffffffb8}.transfer-file[data-v-ea16c0c1]{display:none}.transfer-preview[data-v-ea16c0c1]{overflow-wrap:anywhere;background:#fff6;border:1px solid #ffffffd9;border-radius:22px;margin-top:20px;padding:20px}.transfer-preview h3[data-v-ea16c0c1]{margin:8px 0}.transfer-counts[data-v-ea16c0c1]{flex-wrap:wrap;gap:10px;display:flex}.transfer-counts>div[data-v-ea16c0c1]{background:#ffffffa6;border-radius:14px;gap:4px;min-width:70px;padding:12px;display:grid}.transfer-counts b[data-v-ea16c0c1],.transfer-progress[data-v-ea16c0c1]{color:var(--accent)}.transfer-counts span[data-v-ea16c0c1]{color:var(--ink-soft);font-size:12px}.transfer-error[data-v-ea16c0c1]{color:var(--danger);overflow-wrap:anywhere}.storage-page[data-v-4593780e]{gap:var(--gap);display:grid}.storage-page>.card[data-v-4593780e],.storage-grid>.card[data-v-4593780e]{background:radial-gradient(ellipse at 100% 0, color-mix(in srgb, var(--glow-a) 20%, transparent), transparent 60%), var(--surface)}.storage-overview h2[data-v-4593780e]{margin:8px 0;font-size:clamp(24px,3vw,36px)}.storage-overview p[data-v-4593780e],.storage-note[data-v-4593780e]{color:var(--ink-soft);font-size:13px;line-height:1.65}.storage-metrics[data-v-4593780e]{flex-wrap:wrap;gap:12px;margin-top:22px;display:flex}.storage-metrics>div[data-v-4593780e]{background:#ffffff6b;border:1px solid #fffc;border-radius:18px;gap:3px;min-width:150px;padding:15px 20px;display:grid}.storage-metrics b[data-v-4593780e]{color:var(--accent);font-size:23px}.storage-metrics span[data-v-4593780e]{color:var(--ink-soft);font-size:12px}.storage-grid[data-v-4593780e]{gap:var(--gap);grid-template-columns:minmax(270px,.8fr) minmax(0,1.5fr);align-items:start;display:grid}.storage-grid .card-head h2[data-v-4593780e]{margin:4px 0 16px;font-size:23px}.storage-check[data-v-4593780e]{align-items:center;gap:9px;margin-bottom:16px;display:flex}.storage-fields[data-v-4593780e]{gap:13px;display:grid}.storage-fields label[data-v-4593780e]{color:var(--ink-soft);gap:6px;font-size:12px;font-weight:700;display:grid}.storage-fields input[data-v-4593780e]{border:1px solid color-mix(in srgb, var(--accent) 25%, white);width:100%;min-width:0;color:var(--ink);background:#ffffffb3;border-radius:15px;padding:11px 13px}.storage-policy .primary[data-v-4593780e]{margin-top:14px}.storage-actions[data-v-4593780e]{flex-wrap:wrap;gap:8px;margin:16px 0;display:flex}.storage-actions button[data-v-4593780e]{background:#ffffffa6;border-radius:999px;padding:8px 12px}.storage-scroll[data-v-4593780e]{gap:7px;max-height:520px;padding:2px;display:grid;overflow:auto}.storage-row[data-v-4593780e]{cursor:pointer;background:#ffffff7a;border:1px solid #ffffffbf;border-radius:16px;align-items:center;gap:12px;min-width:0;padding:10px 12px;display:flex}.storage-row.protected[data-v-4593780e]{opacity:.7;cursor:default}.storage-item[data-v-4593780e]{flex:1;gap:3px;min-width:0;display:grid}.storage-item strong[data-v-4593780e]{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.storage-item small[data-v-4593780e]{color:var(--ink-soft);font-size:11px}.storage-row>b[data-v-4593780e]{white-space:nowrap;color:var(--accent);font-size:12px}.storage-footer[data-v-4593780e]{color:var(--ink-soft);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding-top:18px;font-size:12px;display:flex}.storage-error[data-v-4593780e]{color:var(--danger);overflow-wrap:anywhere}@media (width<=900px){.storage-grid[data-v-4593780e]{grid-template-columns:minmax(0,1fr)}}@media (width<=560px){.storage-row[data-v-4593780e]{flex-wrap:wrap;align-items:flex-start}.storage-row>b[data-v-4593780e]{margin-left:26px}.storage-metrics>div[data-v-4593780e]{flex:1;min-width:130px}}.password-settings[data-v-36cd9f70]{margin-top:24px}form[data-v-36cd9f70]{gap:16px;max-width:520px;display:grid}label[data-v-36cd9f70]{gap:8px;display:grid}input[data-v-36cd9f70]{box-sizing:border-box;width:100%}.update-settings[data-v-07e94fd1]{gap:14px;display:grid}header[data-v-07e94fd1]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;display:flex}h2[data-v-07e94fd1]{margin-top:5px}.version-state[data-v-07e94fd1]{font-weight:700}.version-state.available[data-v-07e94fd1]{color:var(--accent)}.small-text[data-v-07e94fd1]{font-size:12px}.update-how[data-v-07e94fd1]{border:1px solid var(--line);background:var(--surface);border-radius:18px;padding:14px}code[data-v-07e94fd1]{white-space:pre-wrap;overflow-wrap:anywhere;margin-top:9px;display:block}.update-links[data-v-07e94fd1]{gap:18px;font-size:13px;display:flex}.system[data-v-a12a372e]{gap:var(--gap);display:grid}.system-intro[data-v-a12a372e]{background:radial-gradient(ellipse at 90% 7%, color-mix(in srgb, var(--glow-a) 48%, transparent), transparent 51%), radial-gradient(ellipse at 62% 115%, color-mix(in srgb, var(--glow-b) 38%, transparent), transparent 55%), linear-gradient(115deg, #fffc, #ffffff4d);min-height:190px;box-shadow:inset 0 2px 0 white, 0 25px 54px -35px color-mix(in srgb, var(--accent) 43%, transparent);-webkit-backdrop-filter:blur(28px)saturate(1.8);backdrop-filter:blur(28px)saturate(1.8);border:1px solid #ffffffd9;border-radius:36px;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:20px;padding:32px clamp(26px,5vw,60px);display:flex;position:relative;overflow:hidden}.system-intro[data-v-a12a372e]:before{content:"";width:350px;height:350px;box-shadow:0 0 0 29px #ffffff21, 0 0 0 58px color-mix(in srgb, var(--glow-b) 12%, transparent);pointer-events:none;border:1px solid #ffffffb8;border-radius:50%;animation:10s ease-in-out infinite alternate system-bob-a12a372e;position:absolute;top:-85%;right:13%}.system-intro h1[data-v-a12a372e]{letter-spacing:-.055em;margin:10px 0 7px;font-size:clamp(28px,3.25vw,42px)}.system-intro h1 em[data-v-a12a372e]{color:var(--accent);font-style:normal}.system-intro p[data-v-a12a372e]{max-width:560px;color:var(--ink-soft);font-size:13.5px;position:relative}.system-status[data-v-a12a372e]{z-index:1;box-shadow:inset 0 1px 0 white, 0 7px 19px -15px var(--accent);white-space:nowrap;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#ffffff87;border:1px solid #fff;border-radius:999px;align-items:center;gap:9px;padding:10px 16px;font-size:12.5px;font-weight:700;display:inline-flex}.system-status i[data-v-a12a372e]{background:var(--ok);width:9px;height:9px;box-shadow:0 0 0 4px color-mix(in srgb, var(--ok) 18%, transparent);border-radius:50%;animation:2.6s ease-in-out infinite pulse-soft}.system-status i.off[data-v-a12a372e]{background:var(--ink-faint);box-shadow:0 0 0 4px color-mix(in srgb, var(--ink-faint) 14%, transparent);animation:none}.system>.tabs[data-v-a12a372e]{box-shadow:inset 0 1px 0 white, 0 10px 30px -24px var(--accent);-webkit-backdrop-filter:blur(22px)saturate(1.7);backdrop-filter:blur(22px)saturate(1.7);border:1px solid #fffc;justify-self:start;padding:5px}.system[data-v-a12a372e]>.tabs button{transition:transform .35s var(--spring), background-color .2s, box-shadow .2s;border-radius:999px;padding:9px 18px}.system[data-v-a12a372e]>.tabs button:hover{transform:translateY(-2px)scale(1.03)}.system[data-v-a12a372e] .connect .step,.system[data-v-a12a372e] .connect .checks li{background:linear-gradient(145deg, #ffffffad, #ffffff47), var(--surface);box-shadow:inset 0 1px 0 white, 0 12px 24px -24px var(--accent);-webkit-backdrop-filter:blur(18px)saturate(1.55);backdrop-filter:blur(18px)saturate(1.55);transition:transform .35s var(--spring), box-shadow .25s;border:1px solid #ffffffd9;border-radius:22px}.system[data-v-a12a372e] .connect .step:hover,.system[data-v-a12a372e] .connect .checks li:hover{box-shadow:inset 0 1px 0 white, 0 16px 28px -21px var(--accent);transform:translateY(-3px)}.system[data-v-a12a372e] .connect .num{background:linear-gradient(145deg, white, color-mix(in srgb, var(--glow-a) 75%, white));box-shadow:inset 0 1px 0 white, 0 5px 14px -9px var(--accent);color:var(--accent);border:1px solid #fff}@keyframes system-bob-a12a372e{to{transform:translateY(22px)scale(1.08)}}@media (width<=760px){.system-intro[data-v-a12a372e]{min-height:0;padding:27px 23px}}
@@ -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-ddEfu0w8.js";import{_ as P,v as F}from"./mind-DYRfFMwh.js";import{a as re,b as ie,c as ae,n as oe,o as se}from"./index-oLIXWxsn.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};
@@ -0,0 +1,4 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatsPage-B83Evc79.js","assets/Empty-ddEfu0w8.js","assets/Empty-DmUB2-Bk.css","assets/mind-DYRfFMwh.js","assets/media-keE52cIX.js","assets/Field-mIhV5YBA.js","assets/ChatsPage-DfyPCS9N.css","assets/HeartPage-BGEn24rc.js","assets/HeartPage-Bft9wZp5.css","assets/PeoplePage-D12cvuy7.js","assets/knowledge-Dvtmpd45.js","assets/PeoplePage-DDDHESQp.css","assets/LifePage-BleqPj4O.js","assets/LifePage-BUi5euBF.css","assets/TimePage-Dzt8t8kL.js","assets/TimePage-BOms_n4I.css","assets/MemoryPage-BM3-0_lF.js","assets/MemoryPage-cZvXfkXb.css","assets/NaturePage-CxxMnQIc.js","assets/NaturePage-CHkpb5NK.css","assets/SystemPage-BWQKEQRU.js","assets/SystemPage-Be1a6UDP.css","assets/PluginsPage-DE_-Q3ra.js","assets/PluginsPage-CVVQwEBI.css"])))=>i.map(i=>d[i]);
2
+ import{$ as e,A as t,B as n,C as r,Ct as i,Et as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,St as ee,T as te,Tt as b,U as x,V as S,W as C,X as w,Y as T,Z as E,_ as ne,_t as D,a as O,at as re,bt as k,c as A,ct as j,d as ie,dt as M,et as N,ft as P,g as ae,gt as F,h as oe,ht as se,i as I,it as ce,j as L,k as le,l as ue,lt as de,m as fe,mt as pe,n as R,nt as z,ot as me,pt as he,q as B,r as ge,rt as _e,s as V,st as ve,t as ye,tt as be,u as xe,ut as H,v as U,vt as W,wt as G,x as Se,xt as K,y as q,yt as Ce}from"./Empty-ddEfu0w8.js";import{f as we,h as Te,i as Ee,n as De,p as Oe,t as ke,u as Ae,v as je}from"./mind-DYRfFMwh.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var J=g({calm:{key:`calm`,label:L(`平静`),feel:L(`像一杯温水`),particle:`mote`,tempo:1},sweet:{key:`sweet`,label:L(`甜甜`),feel:L(`心里软软的`),particle:`bubble`,tempo:1.05},bright:{key:`bright`,label:L(`雀跃`),feel:L(`想蹦起来`),particle:`sparkle`,tempo:1.45},blue:{key:`blue`,label:L(`低落`),feel:L(`有点灰灰的`),particle:`rain`,tempo:.7},stormy:{key:`stormy`,label:L(`烦躁`),feel:L(`心里起风了`),particle:`fluff`,tempo:1.25},drowsy:{key:`drowsy`,label:L(`困倦`),feel:L(`眼皮在打架`),particle:`dust`,tempo:.6},night:{key:`night`,label:L(`夜晚`),feel:L(`睡着了`),particle:`star`,tempo:.45}}),Me=Object.keys(J);function Ne(e){return typeof e==`string`&&e in J}function Pe(e){if(!e)return`calm`;let t=e.valence??0,n=e.arousal??.35;return e.phase===`asleep`?`night`:e.phase===`sleepy`||e.phase===`waking`||(e.energy??1)<.25?`drowsy`:t>.45?n>.5?`bright`:`sweet`:t>.22?`sweet`:t>-.12?`calm`:n>.5?`stormy`:`blue`}function Fe(e){if(!e)return .45;if(e.phase===`asleep`)return .6;let t=.25+Math.abs(e.valence??0)*.5+(e.arousal??.35)*.35;return Math.min(1,Math.max(.2,t))}var Ie=`luckyTheme`,Le=`luckyQuietMotion`;function Re(e){try{return localStorage.getItem(e)}catch{return null}}function ze(e,t){try{t===null?localStorage.removeItem(e):localStorage.setItem(e,t)}catch{}}var Be=typeof matchMedia==`function`?matchMedia(`(prefers-reduced-motion: reduce)`):null,Ve=Re(Ie),Y=k({affect:null,pinned:Ne(Ve)?Ve:null,quiet:Re(Le)===`true`,reduced:!!Be?.matches});Be?.addEventListener?.(`change`,e=>{Y.reduced=e.matches});var X=B(()=>Pe(Y.affect)),He=B(()=>Y.pinned??X.value),Z=B(()=>!Y.quiet&&!Y.reduced),Ue=B(()=>Y.pinned?.6:Fe(Y.affect));function We(e){Y.affect=e}function Ge(e){Y.pinned=e,ze(Ie,e)}function Ke(e){Y.quiet=e,ze(Le,String(e))}function qe(){D(()=>{let e=document.documentElement,t=He.value,n=Y.affect?.phase||`awake`,r=Z.value?`full`:`quiet`;e.dataset.mood!==t&&(e.dataset.mood=t),e.dataset.phase!==n&&(e.dataset.phase=n),e.dataset.motion!==r&&(e.dataset.motion=r);let i=String(J[t].tempo),a=Ue.value.toFixed(2);e.style.getPropertyValue(`--tempo`)!==i&&e.style.setProperty(`--tempo`,i),e.style.getPropertyValue(`--intensity`)!==a&&e.style.setProperty(`--intensity`,a)})}var Q=k({data:null,error:``}),Je=null,Ye=0;function Xe(){return Je??=fe(`/mind/presence`).then(e=>{Q.data=e,Q.error=``,We({...e.affect})}).catch(e=>{Q.error=e.message}).finally(()=>{Je=null}),Je}function Ze(){Xe(),clearInterval(Ye),Ye=window.setInterval(()=>{document.hidden||Xe()},3e4);let e=()=>{document.hidden||Xe()};return document.addEventListener(`visibilitychange`,e),()=>{clearInterval(Ye),document.removeEventListener(`visibilitychange`,e)}}async function Qe(e,t={}){let{session:n=``,signal:r,reconnectMs:i=3e3}=t,a=e=>new Promise(t=>{if(r?.aborted)return t();let n=setTimeout(i,e);function i(){clearTimeout(n),r?.removeEventListener(`abort`,i),t()}r?.addEventListener(`abort`,i,{once:!0})});for(;!r?.aborted;){try{await te();let t=new URL(`/api/core/stream`,location.origin);n&&t.searchParams.set(`session`,n);let i=await fetch(t,{credentials:`same-origin`,signal:r});if(i.status===401&&y(),!i.ok)throw Error(`stream unavailable`);let a=i.body.getReader(),o=new TextDecoder,s=``;for(;;){let{value:t,done:n}=await a.read();if(n)break;s+=o.decode(t,{stream:!0});let r;for(;(r=s.indexOf(`
3
+
4
+ `))>=0;){let t=s.slice(0,r);s=s.slice(r+2),t.startsWith(`data: `)&&await e(JSON.parse(t.slice(6)))}}}catch{}r?.aborted||await a(i)}}var $e=`/app/assets/luckytri-home-95QKeMtc.png`,et=`luckytri-wallpapers`,tt=`files`,nt=`luckytri-sky-opacity-v1`,rt=.22,it=.4,$=k({hero:$e,sky:``,skyOpacity:ot()}),at=null;function ot(){try{let e=Number(localStorage.getItem(nt));return Number.isFinite(e)?st(e):rt}catch{return rt}}function st(e){return Math.min(.82,Math.max(.08,e))}function ct(){return new Promise((e,t)=>{let n=indexedDB.open(et,1);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains(tt)||n.result.createObjectStore(tt)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}function lt(e){return ct().then(t=>new Promise((n,r)=>{let i=t.transaction(tt).objectStore(tt).get(e);i.onsuccess=()=>n(i.result||null),i.onerror=()=>r(i.error)}))}function ut(e,t){return ct().then(n=>new Promise((r,i)=>{let a=n.transaction(tt,`readwrite`).objectStore(tt),o=t?a.put(t,e):a.delete(e);o.onsuccess=()=>r(),o.onerror=()=>i(o.error)}))}function dt(e,t){let n=$[e];n.startsWith(`blob:`)&&URL.revokeObjectURL(n),$[e]=t?URL.createObjectURL(t):e===`hero`?$e:``}async function ft(e,t){if(!e.type.startsWith(`image/`))throw Error(l(`请选择一张图片`));if(e.size>20971520)throw Error(l(`图片太大了,请换一张 20MB 以内的`));try{let n=await createImageBitmap(e),r=Math.min(1,t/Math.max(n.width,n.height)),i=document.createElement(`canvas`);i.width=Math.max(1,Math.round(n.width*r)),i.height=Math.max(1,Math.round(n.height*r));let a=i.getContext(`2d`);if(!a)throw Error(l(`无法处理这张图片`));a.drawImage(n,0,0,i.width,i.height),n.close();let o=await new Promise(e=>i.toBlob(e,`image/jpeg`,.86));if(!o)throw Error(l(`无法处理这张图片`));return o}catch(t){if(t instanceof Error&&t.message!==l(`请选择一张图片`)&&e.size<=6291456)return e;throw t instanceof Error?t:Error(l(`无法处理这张图片`))}}function pt(){return at??=(async()=>{try{let[e,t]=await Promise.all([lt(`hero`),lt(`sky`)]);e&&dt(`hero`,e),t&&dt(`sky`,t)}catch{}})(),at}async function mt(e){let t=await ft(e,1600);await ut(`hero`,t),dt(`hero`,t)}async function ht(){await ut(`hero`,null),dt(`hero`,null)}async function gt(e){let t=await ft(e,1920);await ut(`sky`,t),dt(`sky`,t);let n=null;try{n=localStorage.getItem(nt)}catch{n=null}n||vt(it)}async function _t(){await ut(`sky`,null),dt(`sky`,null)}function vt(e){let t=st(e);$.skyOpacity=t;try{localStorage.setItem(nt,String(t))}catch{}}var yt=g({idle:L(`闲着`),speaking:L(`刚说完话`),thinking:L(`在想怎么回`),solitude:L(`在独处`),reading:L(`在读资料`),diary:L(`在写日记`),review:L(`在回顾这段日子`),night:L(`在夜里整理今天`),asleep:L(`睡着了`),busy:L(`在忙自己的事`)});function bt(e){if(!e)return``;if(e.phase===`asleep`)return l(`睡着了,呼吸很轻`);let t=[e.phaseLabel,e.energyLabel,e.mood].filter(Boolean).join(`,`);return e.cause?l(`{line},因为{cause}`,{line:t,cause:e.cause}):t}function xt(e){return e?.lately||``}function St(e){if(!e)return``;if(e.currentLife?.current)return e.currentLife.current.label+(e.currentLife.current.title?` · `+e.currentLife.current.title:``);let{kind:t,sessionName:n}=e.activity||{kind:`idle`},r=yt[t]||yt.idle;return(t===`speaking`||t===`thinking`)&&n?`${r} · ${n}`:r}var Ct={mote:16,sparkle:12,bubble:10,rain:28,fluff:8,dust:18,star:24},wt=36,Tt=class{canvas;ctx;parts=[];kind=`mote`;intensity=.5;colors={particle:`#ffffff`,accent:`#2c8465`,cheek:`#ff9db1`};w=0;h=0;raf=0;last=0;running=!1;shooting=null;nextShot=0;constructor(e){this.canvas=e;let t=e.getContext(`2d`,{alpha:!0,desynchronized:!0});if(!t)throw Error(`canvas unavailable`);this.ctx=t}configure(e,t){let n=e!==this.kind||Math.abs(t-this.intensity)>.15||!this.parts.length;this.kind=e,this.intensity=t,this.readColors(),n&&this.seed()}readColors(){let e=getComputedStyle(document.documentElement),t=(t,n)=>e.getPropertyValue(t).trim()||n;this.colors={particle:t(`--particle`,`#ffffff`),accent:t(`--accent`,`#2c8465`),cheek:t(`--cheek`,`#ff9db1`)}}resize(){let e=this.canvas.getBoundingClientRect();this.w=e.width,this.h=e.height,this.canvas.width=Math.round(e.width*1),this.canvas.height=Math.round(e.height*1),this.ctx.setTransform(1,0,0,1,0,0),this.seed()}start(){if(this.running)return;this.running=!0,this.last=performance.now();let e=t=>{if(!this.running)return;this.raf=requestAnimationFrame(e);let n=t-this.last;n<1e3/60-1||(this.last=t,this.step(Math.min(.05,n/1e3),t/1e3))};this.raf=requestAnimationFrame(e)}stop(){this.running=!1,cancelAnimationFrame(this.raf),this.ctx.clearRect(0,0,this.w,this.h)}count(){let e=Math.min(1.25,Math.max(.4,this.w*this.h/1296e3));return Math.min(wt,Math.round(Ct[this.kind]*e*(.55+this.intensity*.9)))}seed(){this.parts=Array.from({length:this.count()},()=>this.spawn(!0))}spawn(e){let t=Math.random,n={x:t()*this.w,y:t()*this.h,vx:0,vy:0,r:2,a:1,phase:t()*Math.PI*2,spin:(t()-.5)*.6,alt:!1};switch(this.kind){case`mote`:Object.assign(n,{r:2+t()*4,vx:(t()-.5)*8,vy:-4-t()*8,a:.25+t()*.45}),e||(n.y=this.h+10);break;case`sparkle`:Object.assign(n,{r:2.5+t()*4.5,vx:(t()-.5)*14,vy:-6-t()*14,a:.5+t()*.5,alt:t()<.35}),e||(n.y=this.h+10);break;case`bubble`:Object.assign(n,{r:3+t()*8,vx:(t()-.5)*10,vy:-10-t()*18,a:.35+t()*.4,alt:t()<.3}),e||(n.y=this.h+14);break;case`rain`:Object.assign(n,{x:t()*(this.w+120),r:10+t()*14,vx:-40,vy:380+t()*180,a:.12+t()*.2}),e||(n.y=-24);break;case`fluff`:Object.assign(n,{r:14+t()*26,vx:(t()-.5)*30,vy:(t()-.5)*18,a:.06+t()*.08});break;case`dust`:Object.assign(n,{r:.8+t()*1.8,vx:(t()-.5)*6,vy:(t()-.5)*6,a:.3+t()*.5});break;case`star`:Object.assign(n,{r:.6+t()*1.6,a:.4+t()*.6,y:t()*this.h*.8})}return n}step(e,t){let{ctx:n,w:r,h:i,colors:a}=this;n.clearRect(0,0,r,i);let o=.6+this.intensity*.8;for(let n=0;n<this.parts.length;n++){let s=this.parts[n];switch(s.phase+=e,s.x+=s.vx*e*o,s.y+=s.vy*e*o,this.kind){case`mote`:case`sparkle`:case`bubble`:s.x+=Math.sin(t*.6+s.phase)*.25,s.y<-24&&(this.parts[n]=this.spawn(!1));break;case`rain`:s.y>i+24&&(this.parts[n]=this.spawn(!1));break;default:this.kind===`fluff`&&(s.vx+=Math.sin(t*.7+s.phase*3)*12*e,s.vy+=Math.cos(t*.5+s.phase*2)*8*e,s.vx=Math.max(-24,Math.min(24,s.vx)),s.vy=Math.max(-16,Math.min(16,s.vy))),s.x<-40&&(s.x=r+40),s.x>r+40&&(s.x=-40),s.y<-40&&(s.y=i+40),s.y>i+40&&(s.y=-40)}this.draw(this.parts[n],t,a)}this.kind===`star`&&this.shoot(e,t),n.globalAlpha=1}draw(e,t,n){let r=this.ctx;switch(this.kind){case`mote`:{let t=e.a*(.7+.3*Math.sin(e.phase*1.3));r.fillStyle=n.particle,r.globalAlpha=t*.25,this.circle(e.x,e.y,e.r*2.4),r.globalAlpha=t,this.circle(e.x,e.y,e.r);break}case`sparkle`:r.fillStyle=e.alt?n.accent:n.particle,r.globalAlpha=e.a*(.35+.65*(.5+.5*Math.sin(e.phase*2.2))),this.star(e.x,e.y,e.r,t*e.spin);break;case`bubble`:r.globalAlpha=e.a,e.alt?(r.fillStyle=n.cheek,this.heart(e.x,e.y,e.r*.8)):(r.strokeStyle=n.particle,r.lineWidth=1.2,r.beginPath(),r.arc(e.x,e.y,e.r,0,Math.PI*2),r.stroke(),r.globalAlpha=e.a*.8,r.beginPath(),r.arc(e.x-e.r*.35,e.y-e.r*.35,e.r*.25,0,Math.PI*2),r.fillStyle=n.particle,r.fill());break;case`rain`:r.strokeStyle=n.particle,r.globalAlpha=e.a,r.lineWidth=1,r.beginPath(),r.moveTo(e.x,e.y),r.lineTo(e.x-e.r*.1,e.y+e.r),r.stroke();break;case`fluff`:{let t=r.createRadialGradient(e.x,e.y,0,e.x,e.y,e.r);t.addColorStop(0,n.particle),t.addColorStop(1,`transparent`),r.fillStyle=t,r.globalAlpha=e.a,this.circle(e.x,e.y,e.r);break}case`dust`:r.fillStyle=n.particle,r.globalAlpha=e.a*(.75+.25*Math.sin(e.phase*.9)),this.circle(e.x,e.y,e.r);break;case`star`:r.fillStyle=n.particle,r.globalAlpha=e.a*(.55+.45*Math.sin(t*(.6+e.spin)+e.phase)),this.circle(e.x,e.y,e.r),e.r>1.8&&(r.globalAlpha*=.35,this.star(e.x,e.y,e.r*3.2,0))}}shoot(e,t){!this.shooting&&t>this.nextShot&&(this.nextShot=t+9+Math.random()*10,this.shooting={x:this.w*(.3+Math.random()*.6),y:this.h*Math.random()*.3,life:0});let n=this.shooting;if(!n)return;n.life+=e;let r=n.life/1.4;if(r>=1){this.shooting=null;return}let i=n.x-r*220,a=n.y+r*110,o=this.ctx,s=o.createLinearGradient(i,a,i+60,a-30);s.addColorStop(0,this.colors.particle),s.addColorStop(1,`transparent`),o.strokeStyle=s,o.globalAlpha=Math.sin(r*Math.PI)*.7,o.lineWidth=1.4,o.beginPath(),o.moveTo(i,a),o.lineTo(i+60,a-30),o.stroke()}circle(e,t,n){this.ctx.beginPath(),this.ctx.arc(e,t,n,0,Math.PI*2),this.ctx.fill()}star(e,t,n,r){let i=this.ctx;i.save(),i.translate(e,t),i.rotate(r),i.beginPath(),i.moveTo(0,-n),i.quadraticCurveTo(0,0,n,0),i.quadraticCurveTo(0,0,0,n),i.quadraticCurveTo(0,0,-n,0),i.quadraticCurveTo(0,0,0,-n),i.fill(),i.restore()}heart(e,t,n){let r=this.ctx;r.beginPath(),r.moveTo(e,t+n*.9),r.bezierCurveTo(e-n*1.6,t-n*.2,e-n*.6,t-n*1.3,e,t-n*.45),r.bezierCurveTo(e+n*.6,t-n*1.3,e+n*1.6,t-n*.2,e,t+n*.9),r.fill()}},Et=[`data-particles`],Dt={key:0,class:`moon`},Ot=R(z({__name:`MoodSky`,setup(e){let t=K(),n=B(()=>$.sky?{backgroundImage:`url("${$.sky}")`,opacity:String($.skyOpacity)}:void 0),r=B(()=>Z.value?J[He.value].particle:`off`),a=null,o=0;function s(){a&&(a.configure(J[He.value].particle,Ue.value),clearTimeout(o),o=window.setTimeout(()=>a?.readColors(),1500),Z.value&&!document.hidden?a.start():a.stop())}function c(){a?.resize()}function l(){a&&(document.hidden?a.stop():Z.value&&a.start())}return j(()=>{if(t.value){try{a=new Tt(t.value)}catch{return}a.resize(),s(),window.addEventListener(`resize`,c,{passive:!0}),document.addEventListener(`visibilitychange`,l)}}),F([He,Ue,Z],s),me(()=>{a?.stop(),clearTimeout(o),window.removeEventListener(`resize`,c),document.removeEventListener(`visibilitychange`,l)}),(e,a)=>(H(),E(`div`,{class:`sky`,"aria-hidden":`true`,"data-particles":r.value},[a[0]||=u(`div`,{class:`sky-base`},null,-1),u(`div`,{class:G([`garden`,{custom:!!i($).sky}]),style:b(n.value)},null,6),a[1]||=_(`<div class="glow g1" data-v-d7604463></div><div class="glow g2" data-v-d7604463></div><div class="glow g3" data-v-d7604463></div><div class="glow g4" data-v-d7604463></div><div class="horizon" data-v-d7604463></div><div class="landscape" data-v-d7604463><i data-v-d7604463></i><i data-v-d7604463></i><i data-v-d7604463></i><i data-v-d7604463></i></div><div class="sheen" data-v-d7604463></div>`,7),i(He)===`night`?(H(),E(`div`,Dt)):w(``,!0),a[2]||=u(`div`,{class:`vignette`},null,-1),u(`canvas`,{ref_key:`canvas`,ref:t,class:G([`particles`,{off:!i(Z)}])},null,2)],8,Et))}}),[[`__scopeId`,`data-v-d7604463`]]),kt=g({calm:[L(`嗯?`),L(`我在这儿。`),L(`有什么事吗?`),L(`戳我做什么呀`)],sweet:[L(`在呢~`),L(`被你发现啦`),L(`嘿嘿,找我呀`),L(`今天心情不错哦`)],bright:[L(`哇!干嘛呀~`),L(`今天超开心的!`),L(`再戳我也还是好开心`),L(`嘿嘿嘿`)],blue:[L(`……嗯`),L(`我没事,就是有点低落`),L(`陪我待一会儿就好`),L(`唔……`)],stormy:[L(`别戳啦!`),L(`我现在有点烦……`),L(`让我静一静嘛`),L(`哼`)],drowsy:[L(`唔……好困`),L(`再让我眯一会儿`),L(`嗯……?`),L(`哈——欠`)],night:[L(`呼……呼……`),L(`(翻了个身)`),`zzz……`,L(`(嘟囔了一句梦话)`)]}),At=g({calm:[L(`……有点痒`),L(`嗯,这样挺好`),L(`谢谢你`)],sweet:[L(`嘿嘿,好舒服`),L(`再摸一下嘛`),L(`脸要红了……`)],bright:[L(`哈哈哈好痒!`),L(`最喜欢这样了!`),L(`嘿嘿,开心加倍`)],blue:[L(`……谢谢你`),L(`好像好一点了`),L(`嗯,别走开`)],stormy:[L(`……好吧,就一下`),L(`哼,勉强接受`),L(`嗯……好像没那么烦了`)],drowsy:[L(`呼……要睡着了`),L(`好温暖……`),L(`嗯……`)],night:[L(`(在梦里笑了一下)`),L(`(蹭了蹭)`),`zzz……`]}),jt=g({thinking:[L(`等等,我在想怎么回……`),L(`嘘,我在看大家聊什么`)],speaking:[L(`刚刚在说话来着`),L(`你看到我说的了吗`)],solitude:[L(`我在想事情,一会儿就好`),L(`让我安静一下下`)],reading:[L(`我在看书呢`),L(`这一页好有意思`)],diary:[L(`我在写日记,不许偷看`),L(`今天的事,写下来`)],review:[L(`在翻以前的日记呢`),L(`原来那时候我是这样想的`)],night:[L(`在整理今天的事……`),L(`嘘,快整理完了`)]}),Mt=0;function Nt(e,t,n=`idle`){let r=e===`poke`&&n!==`asleep`&&jt[n]?jt[n]:(e===`pet`?At:kt)[n===`asleep`?`night`:t]||kt.calm;return Mt+=1,r[Mt%r.length]}var Pt=[`role`,`tabindex`,`aria-label`,`data-mood`,`data-activity`,`onKeydown`],Ft=[`id`],It=[`id`],Lt=[`id`],Rt=[`fill`],zt={key:0,class:`halo`},Bt={class:`squish`},Vt=[`d`,`fill`],Ht=[`d`,`fill`],Ut=[`transform`],Wt={key:0,class:`brows`},Gt=[`d`],Kt=[`d`],qt=[`cx`,`cy`,`ry`],Jt=[`cx`,`cy`],Yt=[`d`],Xt=[`d`],Zt={key:3},Qt=[`d`],$t=[`d`],en={class:`mouth`},tn=[`d`],nn={key:1,class:`line`,d:`M94 125Q100 129.5 106 125`},rn={key:2},an={key:3,class:`line`,d:`M89 123Q94.5 129 100 123.5Q105.5 129 111 123`},on={key:4,class:`line`,d:`M91 130Q100 122.5 109 130`},sn={key:5,class:`line`,d:`M88 127q3 -3.4 6 0t6 0t6 0t6 0`},cn={key:6,class:`ink yawn`,cx:`100`,cy:`127`,rx:`4.6`,ry:`5.6`},ln={key:7,class:`ink`,cx:`100`,cy:`127`,rx:`2.6`,ry:`3`},un={key:8,class:`ink talk`,cx:`100`,cy:`126`,rx:`5`,ry:`4.5`},dn={key:9,class:`line`,d:`M91 127Q102 130 110 121`},fn={key:10,class:`line`,d:`M93 126L107 126`},pn={key:0,class:`held`},mn={key:1,class:`held`},hn={key:1,class:`fx`},gn=[`d`],_n={key:2,class:`fx`},vn=[`d`],yn={key:3,class:`fx rain`},bn={key:4,class:`fx storm`},xn={key:5,class:`fx`},Sn={key:6,class:`fx`},Cn={key:7,class:`fx`},wn={key:8,class:`fx`},Tn={key:9,class:`fx think`},En={key:10,class:`fx talkwaves`},Dn=R(z({__name:`TaOrb`,props:{mood:{default:`calm`},activity:{default:`idle`},size:{default:160},interactive:{type:Boolean,default:!1},speech:{default:``},traits:{default:null},bubbleSide:{default:`top`},label:{default:``}},emits:[`open-chat`,`react`],setup(e,{expose:t,emit:n}){let r=e,o=n,s={calm:{wobble:.6,speed:.8,bounce:0,droop:0,jitter:0,eyes:`open`,mouth:`small`,cheeks:.25},sweet:{wobble:.8,speed:1,bounce:1.6,droop:0,jitter:0,eyes:`happy`,mouth:`cat`,cheeks:.8},bright:{wobble:1,speed:1.5,bounce:7,droop:0,jitter:0,eyes:`happy`,mouth:`grin`,cheeks:.55},blue:{wobble:.35,speed:.5,bounce:0,droop:4,jitter:0,eyes:`sad`,mouth:`frown`,cheeks:.1},stormy:{wobble:1.1,speed:1.2,bounce:0,droop:0,jitter:.9,eyes:`cross`,mouth:`wavy`,cheeks:.15},drowsy:{wobble:.45,speed:.45,bounce:0,droop:2,jitter:0,eyes:`sleepy`,mouth:`yawn`,cheeks:.35},night:{wobble:.3,speed:.35,bounce:0,droop:3,jitter:0,eyes:`closed`,mouth:`sleep`,cheeks:.3}},d=new Set([`open`,`sad`,`cross`,`up`,`down`]),p=[{x:28,y:48,r:8,d:0},{x:176,y:36,r:6,d:.8},{x:184,y:128,r:7,d:1.5},{x:18,y:138,r:5,d:2.1}],m=[{x:164,y:70,s:7,d:0},{x:34,y:84,s:5.5,d:1.4},{x:178,y:118,s:4.5,d:2.6}],h=`orb`+Math.random().toString(36).slice(2,8),g={fill:h+`-fill`,aura:h+`-aura`,rim:h+`-rim`},v=`${(Math.random()*3).toFixed(2)}s`,y=K(),ee=K(),te=K(),S=K(),T=K(),ne=K({x:0,y:0}),D=K(``),O=K(``),k=B(()=>{let e={...s[r.mood]},t=r.traits;if(t){let n=t.warmth??65,r=t.activity??40;e.eyes=(t.humor??25)>60?`happy`:`open`,e.mouth=(t.sarcasm??5)>40?`smirk`:n>35?`smile`:`flat`,e.cheeks=Math.max(0,(n-30)/70)*.9,e.bounce=r/100*8,e.speed=.5+r/100*1.2,e.wobble=.4+r/100*.8,e.jitter=0,e.droop=0}switch(r.activity){case`asleep`:Object.assign(e,{eyes:`closed`,mouth:`sleep`,bounce:0,speed:.35,wobble:.3,jitter:0});break;case`solitude`:case`night`:case`review`:Object.assign(e,{eyes:`closed`,mouth:`small`,bounce:0,jitter:0});break;case`diary`:case`reading`:e.eyes=`down`,e.bounce=0,(e.mouth===`grin`||e.mouth===`wavy`)&&(e.mouth=`small`);break;case`thinking`:e.eyes=`up`,e.mouth===`grin`&&(e.mouth=`small`);break;case`speaking`:e.mouth=`talk`}return D.value===`pet`&&e.eyes!==`closed`?Object.assign(e,{eyes:`happy`,mouth:`cat`,cheeks:1}):D.value===`pet`&&(e.cheeks=1),D.value===`poke`&&e.eyes===`happy`&&(e.eyes=`open`),e}),A=B(()=>r.size<72),ie=B(()=>k.value.eyes===`up`?{x:2,y:-3}:k.value.eyes===`down`?{x:0,y:2.5}:{x:0,y:0}),P=B(()=>r.traits?.3+(r.traits.warmth??65)/100*1.1:1),ae=B(()=>(r.traits?.humor??0)>45),oe=B(()=>{let{eyes:e,mouth:t}=k.value;return e===`sad`?[`M70 95 Q78 92 87 90`,`M113 90 Q122 92 130 95`]:e===`cross`?[`M71 90 L87 95.5`,`M113 95.5 L129 90`]:t===`smirk`?[`M71 94 L87 93`,`M113 90 Q121 85.5 129 89`]:null}),se=B(()=>{let e=r.traits;if(!e)return;let t=((e.warmth??65)-50)/50,n=(e.initiative??25)/100;return{filter:`hue-rotate(${Math.round(-t*28)}deg) saturate(${(1+t*.18).toFixed(2)})`,transform:`scale(${(.92+n*.14).toFixed(3)}) rotate(${((n-.25)*8).toFixed(1)}deg)`}}),I=B(()=>O.value||r.speech),ce=B(()=>r.label||(r.interactive?l(`TA:轻触互动,按住摸摸头,双击和 TA 聊聊`):`TA`)),L=B(()=>A.value?``:r.activity===`asleep`?`night`:r.mood);function le(e,t,n,r){let i=[];for(let a=0;a<8;a++){let o=a/8*Math.PI*2-Math.PI/2,s=62*(1+(Math.sin(e*1.3+a*1.7)*.6+Math.sin(e*.7+a*2.9)*.4)*.055*t),c=Math.sin(o)>0?.92:1.02;i.push([100+Math.cos(o)*s*n,112+Math.sin(o)*s*r*c])}let a=`M${i[0][0].toFixed(2)},${i[0][1].toFixed(2)}`;for(let e=0;e<8;e++){let t=i[(e-1+8)%8],n=i[e],r=i[(e+1)%8],o=i[(e+2)%8];a+=`C${(n[0]+(r[0]-t[0])/6).toFixed(2)},${(n[1]+(r[1]-t[1])/6).toFixed(2)} ${(r[0]-(o[0]-n[0])/6).toFixed(2)},${(r[1]-(o[1]-n[1])/6).toFixed(2)} ${r[0].toFixed(2)},${r[1].toFixed(2)}`}return a+`Z`}let ue=le(0,0,1,1),de=performance.now()-Math.random()*1e4,fe=0,pe=0;function R(e,t=!1){let n=k.value,r=(e-de)/1e3,i=r*n.speed,a=t?0:Math.sin(i*1.7)*.022,o=t||!n.bounce?0:Math.max(0,Math.sin(i*2.6))**1.5*n.bounce,s=t||!n.jitter||Math.sin(r*.8)<.55?0:Math.sin(r*38)*n.jitter,c=t?ue:le(i,n.wobble,1+a-o*.004,1-a*.7+o*.006);ee.value?.setAttribute(`d`,c),te.value?.setAttribute(`d`,c),S.value?.setAttribute(`transform`,`translate(${s.toFixed(2)} ${(n.droop-o).toFixed(2)})`),T.value?.setAttribute(`rx`,(46*(1-o/30)).toFixed(2))}function z(e){fe=requestAnimationFrame(z),!(e-pe<1e3/60-1)&&(pe=e,R(e))}let he=!0,ge=!0,_e=null;function V(){cancelAnimationFrame(fe),fe=0,Z.value&&he&&ge&&!document.hidden?fe=requestAnimationFrame(z):R(performance.now(),!0)}let ye=0;function be(e){ye||=requestAnimationFrame(()=>{ye=0;let t=y.value;if(!t||k.value.eyes===`closed`){ne.value={x:0,y:0};return}let n=t.getBoundingClientRect(),r=e.clientX-(n.left+n.width/2),i=e.clientY-(n.top+n.height/2),a=Math.hypot(r,i)||1,o=Math.min(1,a/360);ne.value={x:Math.round(r/a*4*o*10)/10,y:Math.round(i/a*3*o*10)/10}})}function xe(e){window.removeEventListener(`pointermove`,be),e&&he&&ge&&!document.hidden&&r.size>=56?window.addEventListener(`pointermove`,be,{passive:!0}):ne.value={x:0,y:0}}let U=0,Se=0,q=0;function Ce(e){O.value=e,clearTimeout(U),U=window.setTimeout(()=>O.value=``,2800)}function we(e){D.value=e,clearTimeout(Se),Se=window.setTimeout(()=>D.value=``,e===`pet`?1500:650),Ce(Nt(e,r.mood,r.activity)),o(`react`,e)}function Te(){r.interactive&&we(`poke`)}function Ee(){r.interactive&&we(`pet`)}function De(e){!r.interactive||e.button>0||(D.value=`press`,clearTimeout(q),q=window.setTimeout(()=>{q=0,we(`pet`)},520))}function Oe(){r.interactive&&q&&(clearTimeout(q),q=0,we(`poke`))}function ke(){q&&clearTimeout(q),q=0,D.value===`press`&&(D.value=``)}function Ae(e,t,n){return`M${e} ${t-n}Q${e} ${t} ${e+n} ${t}Q${e} ${t} ${e} ${t+n}Q${e} ${t} ${e-n} ${t}Q${e} ${t} ${e} ${t-n}Z`}function je(e,t,n){return`M${e} ${t+n*.9}C${e-n*1.6} ${t-n*.2} ${e-n*.6} ${t-n*1.3} ${e} ${t-n*.45}C${e+n*.6} ${t-n*1.3} ${e+n*1.6} ${t-n*.2} ${e} ${t+n*.9}Z`}F([k,Z],V),F(Z,xe);function J(){V(),xe(Z.value)}return re(()=>{ge=!0,J()}),ve(()=>{ge=!1,J()}),j(()=>{V(),xe(Z.value),y.value&&`IntersectionObserver`in window&&(_e=new IntersectionObserver(e=>{he=e[0].isIntersecting,J()}),_e.observe(y.value)),document.addEventListener(`visibilitychange`,J)}),me(()=>{cancelAnimationFrame(fe),cancelAnimationFrame(ye),window.removeEventListener(`pointermove`,be),_e?.disconnect(),document.removeEventListener(`visibilitychange`,J),clearTimeout(U),clearTimeout(Se),clearTimeout(q)}),t({poke:Te,pet:Ee,cancel:ke}),(t,n)=>(H(),E(`div`,{ref_key:`root`,ref:y,class:G([`ta-orb`,[`mood-${e.mood}`,`act-${e.activity}`,D.value&&`is-${D.value}`,{interactive:e.interactive,small:A.value}]]),style:b({width:e.size+`px`,height:e.size+`px`,"--blink-delay":v}),role:e.interactive?`button`:`img`,tabindex:e.interactive?0:void 0,"aria-label":ce.value,"data-mood":e.mood,"data-activity":e.activity,onPointerdown:De,onPointerup:Oe,onPointerleave:ke,onPointercancel:ke,onDblclick:n[0]||=e=>o(`open-chat`),onKeydown:[c(x(Te,[`prevent`]),[`enter`]),c(x(Ee,[`prevent`]),[`space`])],onContextmenu:n[1]||=x(()=>{},[`prevent`])},[(H(),E(`svg`,{viewBox:`0 0 200 200`,style:b(se.value),"aria-hidden":`true`},[u(`defs`,null,[u(`radialGradient`,{id:g.fill,cx:`38%`,cy:`30%`,r:`78%`},[...n[2]||=[u(`stop`,{offset:`0%`,style:{"stop-color":`var(--orb-a)`}},null,-1),u(`stop`,{offset:`58%`,style:{"stop-color":`var(--orb-b)`}},null,-1),u(`stop`,{offset:`100%`,style:{"stop-color":`var(--orb-c)`}},null,-1)]],8,Ft),u(`radialGradient`,{id:g.aura},[...n[3]||=[u(`stop`,{offset:`45%`,style:{"stop-color":`var(--orb-b)`,"stop-opacity":`0.5`}},null,-1),u(`stop`,{offset:`100%`,style:{"stop-color":`var(--orb-b)`,"stop-opacity":`0`}},null,-1)]],8,It),u(`radialGradient`,{id:g.rim,cx:`50%`,cy:`50%`,r:`50%`},[...n[4]||=[u(`stop`,{offset:`72%`,style:{"stop-color":`#ffffff`,"stop-opacity":`0`}},null,-1),u(`stop`,{offset:`100%`,style:{"stop-color":`#ffffff`,"stop-opacity":`0.4`}},null,-1)]],8,Lt)]),u(`circle`,{class:`aura`,cx:`100`,cy:`112`,r:`94`,fill:`url(#${g.aura})`},null,8,Rt),e.activity===`solitude`?(H(),E(`g`,zt,[...n[5]||=[u(`circle`,{cx:`100`,cy:`112`,r:`86`},null,-1),u(`circle`,{class:`halo-soft`,cx:`100`,cy:`112`,r:`76`},null,-1)]])):w(``,!0),u(`ellipse`,{ref_key:`shadow`,ref:T,class:`shadow`,cx:`100`,cy:`186`,rx:`46`,ry:`6`},null,512),u(`g`,Bt,[u(`g`,{ref_key:`whole`,ref:S},[u(`path`,{ref_key:`body`,ref:ee,class:`body`,d:i(ue),fill:`url(#${g.fill})`},null,8,Vt),u(`path`,{ref_key:`rim`,ref:te,class:`rim`,d:i(ue),fill:`url(#${g.rim})`},null,8,Ht),n[10]||=u(`ellipse`,{class:`shine`,cx:`76`,cy:`80`,rx:`17`,ry:`10`,transform:`rotate(-28 76 80)`},null,-1),n[11]||=u(`ellipse`,{class:`shine dot`,cx:`98`,cy:`68`,rx:`4`,ry:`3`},null,-1),u(`g`,{class:`face`,transform:`translate(${ne.value.x} ${ne.value.y})`},[oe.value?(H(),E(`g`,Wt,[u(`path`,{class:`line thin`,d:oe.value[0]},null,8,Gt),u(`path`,{class:`line thin`,d:oe.value[1]},null,8,Kt)])):w(``,!0),u(`g`,{class:G([`eyes`,{blinks:i(d).has(k.value.eyes)}])},[(H(),E(C,null,M([80,120],(e,t)=>u(`g`,{key:t,class:G([`eye`,{wink:ae.value&&t===1&&i(d).has(k.value.eyes)}])},[i(d).has(k.value.eyes)?(H(),E(C,{key:0},[u(`ellipse`,{class:`ink`,cx:e+ie.value.x,cy:106+ie.value.y,rx:`5.4`,ry:k.value.eyes===`sad`?6:7.2},null,8,qt),u(`circle`,{class:`glint`,cx:e+ie.value.x+1.8,cy:106+ie.value.y-2.6,r:`1.9`},null,8,Jt)],64)):k.value.eyes===`happy`?(H(),E(`path`,{key:1,class:`line`,d:`M${e-7} 108Q${e} 98 ${e+7} 108`},null,8,Yt)):k.value.eyes===`closed`?(H(),E(`path`,{key:2,class:`line`,d:`M${e-7} 105Q${e} 111 ${e+7} 105`},null,8,Xt)):(H(),E(`g`,Zt,[u(`path`,{class:`ink`,d:`M${e-6} 106A6 5 0 0 0 ${e+6} 106Z`},null,8,Qt),u(`path`,{class:`line thin`,d:`M${e-7.5} 106L${e+7.5} 106`},null,8,$t)]))],2)),64))],2),u(`g`,{class:`cheeks`,style:b({opacity:k.value.cheeks})},[...n[6]||=[u(`ellipse`,{cx:`70`,cy:`119`,rx:`9`,ry:`5.2`},null,-1),u(`ellipse`,{cx:`130`,cy:`119`,rx:`9`,ry:`5.2`},null,-1)]],4),u(`g`,en,[k.value.mouth===`smile`?(H(),E(`path`,{key:0,class:`line`,d:`M89 124Q100 ${(124+9*P.value).toFixed(1)} 111 124`},null,8,tn)):k.value.mouth===`small`?(H(),E(`path`,nn)):k.value.mouth===`grin`?(H(),E(`g`,rn,[...n[7]||=[u(`path`,{class:`ink`,d:`M87 121Q100 140 113 121Z`},null,-1),u(`path`,{class:`tongue`,d:`M94 129.5Q100 135 106 129.5Q100 127.5 94 129.5Z`},null,-1)]])):k.value.mouth===`cat`?(H(),E(`path`,an)):k.value.mouth===`frown`?(H(),E(`path`,on)):k.value.mouth===`wavy`?(H(),E(`path`,sn)):k.value.mouth===`yawn`?(H(),E(`ellipse`,cn)):k.value.mouth===`sleep`?(H(),E(`ellipse`,ln)):k.value.mouth===`talk`?(H(),E(`ellipse`,un)):k.value.mouth===`smirk`?(H(),E(`path`,dn)):(H(),E(`path`,fn))])],8,Ut),e.activity===`reading`?(H(),E(`g`,pn,[...n[8]||=[u(`path`,{class:`page`,d:`M100 150L72 142L72 167L100 175Z`},null,-1),u(`path`,{class:`page`,d:`M100 150L128 142L128 167L100 175Z`},null,-1),u(`path`,{class:`line thin`,d:`M100 150L100 175`},null,-1)]])):e.activity===`diary`?(H(),E(`g`,mn,[...n[9]||=[_(`<rect class="page" x="118" y="150" width="50" height="34" rx="5" transform="rotate(-8 143 167)" data-v-3fb60aa5></rect><path class="line hair" d="M126 163L156 159M127 171L150 168" data-v-3fb60aa5></path><g class="pen" transform="rotate(38 152 146)" data-v-3fb60aa5><rect x="148" y="112" width="9" height="40" rx="3.5" data-v-3fb60aa5></rect><path d="M148 152L152.5 163L157 152Z" data-v-3fb60aa5></path></g>`,3)]])):w(``,!0)],512)]),L.value===`bright`?(H(),E(`g`,hn,[(H(),E(C,null,M(p,(e,t)=>u(`path`,{key:t,class:`sparkle`,d:Ae(e.x,e.y,e.r),style:b({animationDelay:e.d+`s`})},null,12,gn)),64))])):L.value===`sweet`?(H(),E(`g`,_n,[(H(),E(C,null,M(m,(e,t)=>u(`path`,{key:t,class:`heart`,d:je(e.x,e.y,e.s),style:b({animationDelay:e.d+`s`})},null,12,vn)),64))])):L.value===`blue`?(H(),E(`g`,yn,[...n[12]||=[_(`<g class="cloud" data-v-3fb60aa5><circle cx="30" cy="36" r="9" data-v-3fb60aa5></circle><circle cx="42" cy="30" r="11" data-v-3fb60aa5></circle><circle cx="54" cy="36" r="8" data-v-3fb60aa5></circle><rect x="22" y="35" width="40" height="10" rx="5" data-v-3fb60aa5></rect></g><path class="drop" d="M31 50l-1.5 6" data-v-3fb60aa5></path><path class="drop" d="M42 50l-1.5 6" style="animation-delay:0.45s;" data-v-3fb60aa5></path><path class="drop" d="M53 50l-1.5 6" style="animation-delay:0.9s;" data-v-3fb60aa5></path>`,4)]])):L.value===`stormy`?(H(),E(`g`,bn,[...n[13]||=[_(`<g class="cloud" data-v-3fb60aa5><circle cx="156" cy="34" r="9" data-v-3fb60aa5></circle><circle cx="168" cy="28" r="11" data-v-3fb60aa5></circle><circle cx="180" cy="34" r="8" data-v-3fb60aa5></circle><rect x="148" y="33" width="40" height="10" rx="5" data-v-3fb60aa5></rect></g><path class="scribble" d="M154 54q4 -5 8 0t8 0t8 0" data-v-3fb60aa5></path>`,2)]])):L.value===`drowsy`&&e.activity===`idle`?(H(),E(`g`,xn,[...n[14]||=[u(`text`,{class:`zz`,x:`158`,y:`58`},`z`,-1)]])):w(``,!0),L.value===`night`||e.activity===`review`||e.activity===`night`?(H(),E(`g`,Sn,[...n[15]||=[u(`path`,{class:`moon`,d:`M40 20a18 18 0 1 0 16 28a14 14 0 1 1 -16 -28Z`},null,-1)]])):w(``,!0),e.activity===`asleep`||e.mood===`night`&&e.activity===`idle`?(H(),E(`g`,Cn,[...n[16]||=[u(`text`,{class:`zz`,x:`150`,y:`64`},`z`,-1),u(`text`,{class:`zz`,x:`162`,y:`48`,style:{"animation-delay":`1s`,"font-size":`16px`}},` z `,-1),u(`text`,{class:`zz`,x:`174`,y:`30`,style:{"animation-delay":`2s`,"font-size":`20px`}},` Z `,-1)]])):w(``,!0),e.activity===`review`||e.activity===`night`?(H(),E(`g`,wn,[...n[17]||=[u(`g`,{class:`floating-page`},[u(`rect`,{class:`page`,x:`156`,y:`92`,width:`30`,height:`38`,rx:`4`}),u(`path`,{class:`line hair`,d:`M162 103h18M162 111h18M162 119h11`})],-1)]])):w(``,!0),e.activity===`thinking`?(H(),E(`g`,Tn,[...n[18]||=[_(`<circle class="puff" cx="146" cy="58" r="3.5" data-v-3fb60aa5></circle><circle class="puff" cx="156" cy="45" r="5" data-v-3fb60aa5></circle><ellipse class="puff" cx="176" cy="24" rx="21" ry="14" data-v-3fb60aa5></ellipse><circle class="dot" cx="167" cy="24" r="2.6" data-v-3fb60aa5></circle><circle class="dot" cx="176" cy="24" r="2.6" style="animation-delay:0.18s;" data-v-3fb60aa5></circle><circle class="dot" cx="185" cy="24" r="2.6" style="animation-delay:0.36s;" data-v-3fb60aa5></circle>`,6)]])):w(``,!0),e.activity===`speaking`&&!A.value?(H(),E(`g`,En,[...n[19]||=[u(`path`,{class:`line thin`,d:`M170 94q8 9 0 18`},null,-1),u(`path`,{class:`line thin`,d:`M180 88q13 15 0 30`,style:{"animation-delay":`0.3s`}},null,-1)]])):w(``,!0)],4)),N(f,{name:`orb-say`},{default:W(()=>[I.value?(H(),E(`p`,{key:I.value,class:G([`orb-say`,`say-`+e.bubbleSide]),role:`status`},a(I.value),3)):w(``,!0)]),_:1})],46,Pt))}}),[[`__scopeId`,`data-v-3fb60aa5`]]);function On(e,t=`Asia/Shanghai`){return e?je(p(),{timeZone:t,hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`}).format(e):``}function kn(e){let[,t,n]=e.split(`-`).map(Number);return t&&n?l(`{month} 月 {date} 日`,{month:t,date:n}):e}function An(e){let t=new Date(e+`T12:00:00`);return Number.isNaN(t.getTime())?``:je(p(),{weekday:`short`}).format(t)}function jn(e,t=Date.now()){if(!e)return``;let n=Math.round((t-e)/6e4);if(n<1)return l(`刚刚`);if(n<60)return l(`{minutes} 分钟前`,{minutes:n});let r=Math.round(n/60);if(r<24)return l(`{hours} 小时前`,{hours:r});let i=Math.round(r/24);if(i<30)return l(`{days} 天前`,{days:i});let a=Math.round(i/30);return a<12?l(`{months} 个月前`,{months:a}):l(`{v} 年前`,{v:Math.round(a/12)})}function Mn(e){return Number(e||0).toLocaleString(p())}var Nn=/^\d{4,20}$/;function Pn(e){let t=String(e||``).split(`:`);return t[t.length-1]||``}function Fn(e){let t=Pn(e.id||``),n=String(e.name||``).trim(),r=n.replace(/^(群聊|私聊)\s+/,``),i=e.kind||(String(e.id||``).startsWith(`private:`)?`private`:`group`);return!n||r===t||Nn.test(r)?l(i===`private`?`未命名的人`:`未命名的群`):n}function In(e,t=``){let n=e.map(e=>({value:e.id,label:Fn(e)}));return t?[{value:``,label:t,disabled:!0},...n]:n}function Ln(e){let t=String(e||`?`).trim();return/^[\x00-\x7f]/.test(t)?t.slice(0,2).toUpperCase():t.slice(-2)}function Rn(e){let t=0;for(let n of String(e))t=(t*31+n.codePointAt(0))%360;return t}var zn=[`id`,`aria-controls`,`aria-activedescendant`,`aria-label`,`aria-expanded`,`disabled`],Bn=[`id`,`aria-labelledby`],Vn=[`id`,`tabindex`,`aria-selected`,`onClick`],Hn={key:0,class:`empty`},Un=[`id`,`name`,`value`,`disabled`],Wn=[`value`,`disabled`],Gn=R(z({__name:`Select`,props:{modelValue:{default:``},options:{},id:{default:``},name:{default:``},ariaLabel:{default:``},disabled:{type:Boolean,default:!1}},emits:[`update:modelValue`,`change`],setup(e,{emit:t}){let n=e,r=t,o=K(!1),s=K(),c=K(),f=K(),p=K(),m=pe(),h=K(0),g=K({top:0,bottom:0,left:0,width:220,maxHeight:280,upward:!1}),_=B(()=>n.options.filter(e=>!e.disabled)),v=B(()=>n.options.find(e=>String(e.value)===String(n.modelValue))?.label||_.value[0]?.label||l(`请选择`));function y(){let e=c.value?.getBoundingClientRect();if(!e)return;let t=n.options.reduce((e,t)=>Math.max(e,String(t.label||``).length),0),r=Math.min(window.innerWidth-16,Math.max(e.width,Math.min(t*15+32,420),220)),i=Math.max(8,Math.min(e.left,window.innerWidth-r-8)),a=window.innerHeight-e.bottom-6-8,o=e.top-6-8,s=a<220&&o>a;g.value={top:e.bottom+6,bottom:window.innerHeight-e.top+6,left:i,width:r,maxHeight:Math.max(96,Math.min(320,s?o:a)),upward:s}}function ee(){n.disabled||(o.value=!o.value,o.value&&y())}function te(){let e=p.value?.querySelectorAll(`[role="option"]`)[h.value];e?.focus({preventScroll:!0}),e?.scrollIntoView({block:`nearest`})}function S(e){if(e.key===`Tab`){o.value=!1;return}if([`Escape`,`ArrowDown`,`ArrowUp`,`Home`,`End`,`Enter`,` `].includes(e.key)){if(e.preventDefault(),e.stopPropagation(),e.key===`Escape`){o.value=!1,c.value?.focus();return}if(_.value.length){if(e.key===`Enter`||e.key===` `){D(_.value[h.value].value);return}h.value=e.key===`Home`?0:e.key===`End`?_.value.length-1:(h.value+(e.key===`ArrowUp`?-1:1)+_.value.length)%_.value.length,te()}}}function ne(e){[`ArrowDown`,`ArrowUp`].includes(e.key)&&!o.value&&(e.preventDefault(),ee())}function D(e){let t=String(e);if(o.value=!1,!f.value){r(`update:modelValue`,t);return}f.value.value=t;let n=new Event(`change`,{bubbles:!0});f.value.dispatchEvent(n),c.value?.focus()}function O(e){s.value&&!s.value.contains(e.target)&&(o.value=!1)}function re(){o.value&&y()}function k(){document.removeEventListener(`pointerdown`,O),window.removeEventListener(`scroll`,re,!0),window.removeEventListener(`resize`,re),document.removeEventListener(`keydown`,S,!0)}return F(o,async e=>{k(),e&&(h.value=Math.max(0,_.value.findIndex(e=>String(e.value)===String(n.modelValue))),document.addEventListener(`pointerdown`,O),window.addEventListener(`scroll`,re,!0),window.addEventListener(`resize`,re),document.addEventListener(`keydown`,S,!0),await ce(),o.value&&te())}),F(()=>n.disabled,e=>{e&&(o.value=!1)}),ve(()=>{o.value=!1,k()}),me(k),(t,n)=>(H(),E(`div`,{ref_key:`root`,ref:s,class:G([`menu-select`,{open:o.value,disabled:e.disabled}])},[u(`button`,{ref_key:`face`,ref:c,type:`button`,class:`menu-face`,id:i(m)+`-face`,role:`combobox`,"aria-haspopup":`listbox`,"aria-controls":i(m),"aria-activedescendant":o.value&&_.value.length?i(m)+`-`+h.value:void 0,"aria-label":e.ariaLabel||void 0,"aria-expanded":o.value,disabled:e.disabled,onClick:ee,onKeydown:ne},[u(`span`,null,a(v.value),1),n[2]||=u(`i`,{"aria-hidden":`true`},null,-1)],40,zn),(H(),T(d,{to:`body`},[o.value?(H(),E(`ul`,{key:0,ref_key:`menu`,ref:p,id:i(m),class:G([`menu-list`,{up:g.value.upward}]),role:`listbox`,"aria-labelledby":i(m)+`-face`,onPointerdown:n[0]||=x(()=>{},[`stop`]),style:b({top:g.value.upward?`auto`:g.value.top+`px`,bottom:g.value.upward?g.value.bottom+`px`:`auto`,left:g.value.left+`px`,width:g.value.width+`px`,maxHeight:g.value.maxHeight+`px`})},[(H(!0),E(C,null,M(_.value,(t,n)=>(H(),E(`li`,{key:String(t.value)},[u(`button`,{type:`button`,role:`option`,id:i(m)+`-`+n,tabindex:n===h.value?0:-1,"aria-selected":String(t.value)===String(e.modelValue),onClick:e=>D(t.value)},a(t.label),9,Vn)]))),128)),_.value.length?w(``,!0):(H(),E(`li`,Hn,a(i(l)(`没有可选项`)),1))],46,Bn)):w(``,!0)])),u(`select`,{ref_key:`native`,ref:f,class:`native`,id:e.id||void 0,name:e.name||void 0,value:e.modelValue,disabled:e.disabled,tabindex:`-1`,"aria-hidden":`true`,onChange:n[1]||=e=>{o.value=!1,r(`update:modelValue`,e.target.value),r(`change`,e)}},[(H(!0),E(C,null,M(e.options,e=>(H(),E(`option`,{key:`n-`+String(e.value),value:e.value,disabled:e.disabled},a(e.label),9,Wn))),128))],40,Un)],2))}}),[[`__scopeId`,`data-v-41eb8776`]]),Kn=[`id`],qn={class:`preview-meta`,role:`status`},Jn=[`id`],Yn={key:1},Xn={key:2,class:`why`},Zn=[`aria-label`],Qn=[`id`],$n={class:`ta-chat-options`},er={class:`where`},tr=[`disabled`],nr={class:`composer`},rr=[`placeholder`],ir=[`disabled`],ar=R(z({__name:`TaChat`,props:{sessions:{default:()=>[]},nature:{default:null},anchored:{type:Boolean,default:!1},starter:{default:``}},setup(e){let t=e,n=K([]),r=K(t.starter),o=K(``),s=K(!1),c=K(``),d=K();async function f(){await ce(),d.value?.scrollTo({top:d.value.scrollHeight})}async function p(){let e=r.value.trim();if(!s.value&&e){s.value=!0,n.value.push({role:`user`,text:e}),r.value=``,f();try{let r=await Te.preview({text:e,history:n.value.slice(0,-1).slice(-12).map(({role:e,text:t})=>({role:e,text:t})),...t.nature?{nature:t.nature}:{},viewSession:o.value});r.reply?n.value.push({role:`assistant`,text:r.reply,bubbles:r.bubbles?.length?r.bubbles:[r.reply],note:[Ee[r.choice]||r.choice,r.appraisal].filter(Boolean).join(` · `),why:r.reason}):n.value.push({role:`assistant`,text:l(`(TA 没有出声)`),note:Ee[r.choice]||l(`没出声`),why:r.reason}),c.value=l(`{v} · 心情{v2} · {latency} ms`,{v:r.mode===`model`?l(`真实模型`):l(`本地样例(没有模型档案)`),v2:r.mood||l(`平静`),latency:r.latency})}catch(t){n.value.pop(),r.value=e,c.value=t.message}finally{s.value=!1,f()}}}function m(){n.value=[]}return(t,f)=>(H(),E(`div`,{class:`ta-chat`,id:e.anchored?`ta-preview`:void 0},[u(`p`,qn,a(c.value||i(l)(`试聊走真实链路:读取 TA 此刻的心智和记忆,但不写入,也不发 QQ。配置了模型时会消耗 Token。`)),1),u(`div`,{id:e.anchored?`previewMessages`:void 0,ref_key:`log`,ref:d,class:`ta-chat-log scroll-pane`},[!n.value.length&&!s.value?(H(),T(ye,{key:0,title:i(l)(`TA 会先理解,再决定说不说`),text:i(l)(`回应会显示 TA 的选择和当时的想法。`)},null,8,[`title`,`text`])):w(``,!0),(H(!0),E(C,null,M(n.value,(e,t)=>(H(),E(`article`,{key:t,class:G([`preview-bubble`,e.role===`assistant`?`bot`:`me`])},[e.bubbles?(H(!0),E(C,{key:0},M(e.bubbles,(e,t)=>(H(),E(`p`,{key:t},a(e),1))),128)):(H(),E(`p`,Yn,a(e.text),1)),e.note||e.why?(H(),E(`details`,Xn,[u(`summary`,null,a(e.note||i(l)(`为什么`)),1),u(`p`,null,a(e.why||i(l)(`没有留下理由。`)),1)])):w(``,!0)],2))),128)),s.value?(H(),E(`div`,{key:1,class:`typing`,"aria-label":i(l)(`TA 在想`)},[...f[2]||=[u(`i`,null,null,-1),u(`i`,null,null,-1),u(`i`,null,null,-1)]],8,Zn)):w(``,!0)],8,Jn),u(`form`,{id:e.anchored?`previewForm`:void 0,class:`ta-chat-form`,onSubmit:x(p,[`prevent`])},[u(`div`,$n,[u(`label`,er,[u(`span`,null,a(i(l)(`想象在这里`)),1),N(Gn,{modelValue:o.value,"onUpdate:modelValue":f[0]||=e=>o.value=e,name:`viewSession`,"aria-label":i(l)(`想象在这里`),options:[{value:``,label:i(l)(`一段新的私聊`)},...i(In)(e.sessions)]},null,8,[`modelValue`,`aria-label`,`options`])]),P(t.$slots,`options`,{},void 0,!0),u(`button`,{type:`button`,class:`text-button`,disabled:!n.value.length,onClick:m},a(i(l)(`清空`)),9,tr)]),u(`div`,nr,[Ce(u(`input`,{"onUpdate:modelValue":f[1]||=e=>r.value=e,name:`text`,placeholder:i(l)(`说一句试试…`),required:``,maxlength:`1000`,autocomplete:`off`},null,8,rr),[[S,r.value]]),u(`button`,{class:`primary`,disabled:s.value},a(s.value?i(l)(`TA 在想…`):i(l)(`说`)),9,ir)])],40,Qn)],8,Kn))}}),[[`__scopeId`,`data-v-235059b5`]]),or={class:`companion`},sr=[`aria-label`],cr=[`aria-label`],lr={class:`drawer-head`},ur={class:`drawer-title`},dr={class:`chip`,"data-tone":`quiet`},fr=[`aria-label`],pr={key:0,class:`companion-dock`},mr=[`aria-expanded`],hr=R(z({__name:`TaCompanion`,props:{hideOrb:{type:Boolean}},setup(e){let t=K(),n=B(()=>Q.data?.activity?.kind||`idle`),r=B(()=>Q.data?.name||`TA`);return F(()=>V.chatOpen,async e=>{e&&(await ce(),t.value?.querySelector(`input[name=text]`)?.focus())}),(o,s)=>(H(),E(`div`,or,[N(f,{name:`scrim`},{default:W(()=>[i(V).chatOpen?(H(),E(`button`,{key:0,class:`scrim`,type:`button`,"aria-label":i(l)(`收起聊天`),onClick:s[0]||=e=>i(V).chatOpen=!1},null,8,sr)):w(``,!0)]),_:1}),N(f,{name:`drawer`},{default:W(()=>[i(V).chatOpen?(H(),E(`section`,{key:0,ref_key:`drawer`,ref:t,class:`ta-drawer`,role:`dialog`,"aria-modal":`true`,"aria-label":i(l)(`和 {name} 聊聊(试聊)`,{name:r.value}),onKeydown:s[2]||=c(e=>i(V).chatOpen=!1,[`esc`])},[u(`header`,lr,[N(Dn,{mood:i(X),activity:n.value,size:42},null,8,[`mood`,`activity`]),u(`div`,ur,[u(`h2`,null,a(i(l)(`和 {name} 聊聊`,{name:r.value})),1),u(`span`,dr,a(i(l)(`试聊 · 什么都不写入`)),1)]),u(`button`,{class:`icon-button ghost`,"aria-label":i(l)(`收起聊天`),onClick:s[1]||=e=>i(V).chatOpen=!1},` ✕ `,8,fr)]),N(ar,{sessions:i(V).core?.sessions||[]},null,8,[`sessions`])],40,cr)):w(``,!0)]),_:1}),!e.hideOrb&&!i(V).chatOpen?(H(),E(`div`,pr,[u(`button`,{class:`companion-talk`,"aria-expanded":i(V).chatOpen,onClick:s[3]||=e=>i(V).chatOpen=!i(V).chatOpen},a(i(V).chatOpen?i(l)(`收起`):i(l)(`聊聊`)),9,mr),N(Dn,{mood:i(X),activity:n.value,size:44,interactive:``,"bubble-side":`left`,onOpenChat:s[4]||=e=>i(V).chatOpen=!0},null,8,[`mood`,`activity`])])):w(``,!0)]))}}),[[`__scopeId`,`data-v-038fa72e`]]),gr=[`aria-label`],_r=[`lang`,`aria-pressed`,`aria-label`,`title`,`data-locale`,`onClick`],vr=R(z({__name:`LocaleSwitch`,setup(e){return(e,n)=>(H(),E(`div`,{id:`locale`,class:`seg locale-switch`,role:`group`,"aria-label":i(l)(`语言`)},[(H(!0),E(C,null,M(i(t),e=>(H(),E(`button`,{key:e.code,type:`button`,lang:e.code===`zh`?`zh-CN`:`en`,class:G({active:i(m)===e.code}),"aria-pressed":i(m)===e.code,"aria-label":e.label,title:e.label,"data-locale":e.code,onClick:t=>i(o)(e.code)},a(e.short),11,_r))),128))],8,gr))}}),[[`__scopeId`,`data-v-bc942b38`]]),yr=[`aria-expanded`,`title`],br=[`data-mood`],xr={class:`rail-label`},Sr=[`aria-label`],Cr=[`aria-checked`],wr=[`data-mood`],Tr=[`data-theme-choice`,`aria-checked`,`onClick`],Er=[`data-mood`],Dr=R(z({__name:`ThemePicker`,props:{inline:{type:Boolean,default:!1}},setup(e){let t=K(!1),n=K();function r(e){Ge(e),t.value=!1}function o(e){t.value&&n.value&&!n.value.contains(e.target)&&!e.target.closest(`.theme-menu`)&&(t.value=!1)}return j(()=>document.addEventListener(`pointerdown`,o)),me(()=>document.removeEventListener(`pointerdown`,o)),(o,s)=>(H(),E(`div`,{ref_key:`root`,ref:n,class:G([`theme-picker`,{inline:e.inline}]),onKeydown:s[2]||=c(e=>t.value=!1,[`esc`])},[e.inline?w(``,!0):(H(),E(`button`,{key:0,class:`theme-toggle`,type:`button`,"aria-expanded":t.value,"aria-haspopup":`true`,title:i(Y).pinned?i(l)(`主题固定为「{v}」`,{v:i(J)[i(Y).pinned].label}):i(l)(`主题跟随 TA 的心情`),onClick:s[0]||=e=>t.value=!t.value},[u(`span`,{class:`swatch`,"data-mood":i(Y).pinned??i(X),"aria-hidden":`true`},null,8,br),u(`span`,xr,a(i(Y).pinned?i(l)(`固定:{v}`,{v:i(J)[i(Y).pinned].label}):i(l)(`跟随 TA · {v}`,{v:i(J)[i(X)].label})),1)],8,yr)),(H(),T(d,{to:`body`,disabled:e.inline},[N(f,{name:`pop`},{default:W(()=>[t.value||e.inline?(H(),E(`div`,{key:0,class:G([`theme-menu`,{"inline-menu":e.inline}]),role:`radiogroup`,"aria-label":i(l)(`界面主题`)},[u(`button`,{type:`button`,role:`radio`,"data-theme-choice":`auto`,"aria-checked":!i(Y).pinned,onClick:s[1]||=e=>r(null)},[u(`span`,{class:`swatch auto`,"data-mood":i(X),"aria-hidden":`true`},null,8,wr),u(`span`,null,[u(`b`,null,a(i(l)(`跟随 TA 的心情`)),1),u(`small`,null,a(i(l)(`现在是「{v}」`,{v:i(J)[i(X)].label})),1)])],8,Cr),(H(!0),E(C,null,M(i(Me),e=>(H(),E(`button`,{key:e,type:`button`,role:`radio`,"data-theme-choice":e,"aria-checked":i(Y).pinned===e,onClick:t=>r(e)},[u(`span`,{class:`swatch`,"data-mood":e,"aria-hidden":`true`},null,8,Er),u(`span`,null,[u(`b`,null,a(i(J)[e].label),1),u(`small`,null,a(i(J)[e].feel),1)])],8,Tr))),128))],10,Sr)):w(``,!0)]),_:1})],8,[`disabled`]))],34))}}),[[`__scopeId`,`data-v-4e5670d2`]]),Or=[`aria-label`],kr={class:`presence-detail`},Ar={class:`eyebrow`},jr={class:`mood-word`},Mr={class:`lede`},Nr={class:`row chips`},Pr=[`data-activity`],Fr={key:0,class:`chip`,"data-tone":`quiet`},Ir={key:1,class:`chip`,"data-tone":`quiet`},Lr={key:2,class:`chip`,"data-tone":`quiet`},Rr={class:`row actions`},zr=[`disabled`],Br=[`disabled`],Vr={class:`faint`},Hr={key:0,class:`aside-bit`},Ur={class:`eyebrow`},Wr={key:1,class:`aside-bit`},Gr={class:`eyebrow`},Kr={key:0},qr={key:2,class:`aside-bit`},Jr={class:`eyebrow`},Yr={key:0},Xr=R(z({__name:`NowStatusDock`,setup(t){let n=B(()=>Q.data),r=K(!1),o=B(()=>Q.data),s=B(()=>o.value?.affect||n.value?.affect||{}),c=B(()=>o.value?.activity?.kind||`idle`),d=B(()=>o.value?.expecting?.[0]||null),f=B(()=>r.value||!!n.value?.busy||[`solitude`,`diary`,`review`,`night`].includes(c.value));async function p(e){r.value=!0;try{let t=await Te[e]();U(t.reason||l(`完成了`),t.status===`error`)}catch(e){U(e.message,!0)}finally{r.value=!1,await Xe()}}return(t,r)=>(H(),E(`aside`,{class:`presence-dock`,"aria-label":i(l)(`TA 的此刻状态`)},[u(`div`,kr,[u(`span`,Ar,[e(a(i(l)(`第 {v} 天`,{v:o.value?.dayOfLife??n.value?.dayOfLife??1}))+` `,1),o.value?.clock?(H(),E(C,{key:0},[e(` · `+a(o.value.clock.period)+` `+a(o.value.clock.local.slice(11)),1)],64)):w(``,!0)]),u(`h2`,jr,a(s.value.mood||i(l)(`平静`)),1),u(`p`,Mr,a(i(bt)(s.value)||i(l)(`没有特别牵动 TA 的事,心情慢慢回到平常。`)),1),u(`div`,Nr,[u(`span`,{class:`chip activity-chip`,"data-activity":c.value},a(i(St)(o.value)),9,Pr),i(xt)(s.value)?(H(),E(`span`,Fr,a(i(l)(`这阵子 · {v}`,{v:i(xt)(s.value)})),1)):w(``,!0),s.value.energyLabel?(H(),E(`span`,Ir,a(i(l)(`精力 · {energyLabel}`,{energyLabel:s.value.energyLabel})),1)):w(``,!0),n.value?.nature?.rhythm?.enabled?(H(),E(`span`,Lr,a(i(l)(`{wake} 醒 / {sleep} 睡`,{wake:n.value.nature.rhythm.wake,sleep:n.value.nature.rhythm.sleep})),1)):w(``,!0)]),u(`div`,Rr,[o.value?.currentLife?.current?(H(),E(`button`,{key:0,class:`text-button`,onClick:r[0]||=e=>i(I)(`time`)},a(i(l)(`看看进度`)),1)):w(``,!0),u(`button`,{class:`primary`,onClick:r[1]||=e=>i(V).chatOpen=!0},a(i(l)(`和 TA 聊聊`)),1),u(`button`,{disabled:f.value,onClick:r[2]||=e=>p(`reflect`)},a(f.value?i(l)(`TA 正在想…`):i(l)(`让 TA 独处一会儿`)),9,zr),u(`button`,{disabled:f.value,onClick:r[3]||=e=>p(`review`)},a(i(l)(`写下今天的日记`)),9,Br)]),u(`small`,Vr,a(n.value?.reason||i(l)(`安静下来时,TA 会自己独处。`)),1),o.value?.lastWords?(H(),E(`div`,Hr,[u(`span`,Ur,a(i(l)(`最近说`)),1),u(`p`,null,`“`+a(o.value.lastWords.text)+`”`,1),u(`small`,null,a(i(Fn)({name:o.value.lastWords.sessionName,id:o.value.lastWords.session}))+` · `+a(i(jn)(o.value.lastWords.time,o.value.now)),1)])):w(``,!0),o.value?.thought?(H(),E(`div`,Wr,[u(`span`,Gr,a(i(l)(`放在心上`)),1),u(`p`,null,a(o.value.thought.content),1),o.value.thought.when?(H(),E(`small`,Kr,a(o.value.thought.when),1)):w(``,!0)])):w(``,!0),d.value?(H(),E(`div`,qr,[u(`span`,Jr,a(i(l)(`在等`)),1),u(`p`,null,a(d.value.name?`${d.value.name}:`:``)+a(d.value.content),1),d.value.when?(H(),E(`small`,Yr,a(d.value.when),1)):w(``,!0)])):w(``,!0)])],8,Or))}}),[[`__scopeId`,`data-v-4625711b`]]),Zr=[`onKeydown`],Qr=[`aria-label`],$r={key:0},ei=[`type`,`placeholder`,`autocomplete`],ti={class:`row end`},ni=R(z({__name:`Confirm`,setup(e){let t=B(()=>h.queue[0]||null),r=K(``),i=K(),o=K(),s=null;F(t,async(e,t)=>{if(e&&!t&&(s=document.activeElement),!e){s?.focus?.(),s=null;return}r.value=e.value,await ce(),e.kind===`prompt`?i.value?.focus():o.value?.focus()});function l(){t.value&&le(t.value.kind===`prompt`?r.value.trim():`ok`)}function p(){le(null)}return(e,s)=>(H(),T(d,{to:`body`},[N(f,{name:`dialog`},{default:W(()=>[t.value?(H(),E(`div`,{key:0,class:`dialog-layer`,onKeydown:c(x(p,[`prevent`]),[`esc`])},[u(`form`,{class:`dialog`,role:`alertdialog`,"aria-modal":`true`,"aria-label":t.value.title,onSubmit:x(l,[`prevent`])},[s[1]||=u(`span`,{class:`dialog-orb`,"aria-hidden":`true`},null,-1),u(`h2`,null,a(t.value.title),1),t.value.message?(H(),E(`p`,$r,a(t.value.message),1)):w(``,!0),t.value.kind===`prompt`?Ce((H(),E(`input`,{key:1,ref_key:`input`,ref:i,"onUpdate:modelValue":s[0]||=e=>r.value=e,type:t.value.secret?`password`:`text`,placeholder:t.value.placeholder,autocomplete:t.value.secret?`current-password`:`off`},null,8,ei)),[[n,r.value]]):w(``,!0),u(`div`,ti,[u(`button`,{type:`button`,class:`dialog-cancel ghost`,onClick:p},a(t.value.cancelText),1),u(`button`,{ref_key:`confirmButton`,ref:o,type:`submit`,class:G([`dialog-confirm`,t.value.danger?`danger`:`primary`])},a(t.value.confirmText),3)])],40,Qr)],40,Zr)):w(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-2339e49c`]]),ri={class:`icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`},ii={key:6,d:`M4.5 19.5h15M6 19.5V6.5h3v13M10.5 19.5V4.5h3v15M15.2 19.2l-.6-11.8 2.9-.4 1.2 11.8`},ai={key:14,d:`M12 5.5v13M5.5 12h13`},oi={key:15,d:`M14.5 6 8.5 12l6 6`},si={key:19,cx:`12`,cy:`12`,r:`7`},ci=R(z({__name:`Icon`,props:{name:{}},setup(e){return(t,n)=>(H(),E(`svg`,ri,[e.name===`now`?(H(),E(C,{key:0},[n[0]||=u(`path`,{d:`M12 4.5c4.2 0 7 2.9 7 7.2 0 4.6-3 7.8-7 7.8s-7-3.2-7-7.8c0-4.3 2.8-7.2 7-7.2Z`},null,-1),n[1]||=u(`path`,{d:`M9.4 11.4v.6M14.6 11.4v.6M10 15c1.2.9 2.8.9 4 0`},null,-1)],64)):e.name===`time`?(H(),E(C,{key:1},[n[2]||=u(`circle`,{cx:`12`,cy:`12`,r:`8`},null,-1),n[3]||=u(`path`,{d:`M12 7v5l3 2`},null,-1)],64)):e.name===`chats`?(H(),E(C,{key:2},[n[4]||=u(`path`,{d:`M4.5 6.5a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H11l-4 3.5v-3.5h-.5a2 2 0 0 1-2-2v-7Z`},null,-1),n[5]||=u(`path`,{d:`M8.5 10h.01M12 10h.01M15.5 10h.01`},null,-1)],64)):e.name===`heart`?(H(),E(C,{key:3},[n[6]||=u(`path`,{d:`M12 3.5l1.6 4.4 4.6.2-3.6 2.9 1.3 4.5L12 12.9l-3.9 2.6 1.3-4.5-3.6-2.9 4.6-.2L12 3.5Z`},null,-1),n[7]||=u(`path`,{d:`M5 19.5h.01M19 18.5h.01M18.5 4.5h.01`},null,-1)],64)):e.name===`people`?(H(),E(C,{key:4},[n[8]||=_(`<circle cx="12" cy="12" r="2.6" data-v-69e2db74></circle><circle cx="5.2" cy="7.2" r="1.7" data-v-69e2db74></circle><circle cx="18.6" cy="8.4" r="1.4" data-v-69e2db74></circle><circle cx="16.8" cy="18" r="1.9" data-v-69e2db74></circle><path d="M6.6 8.4l3.3 2.1M17.3 9.1l-3 1.7M15.6 16.4l-1.7-2.3" data-v-69e2db74></path>`,5)],64)):e.name===`life`?(H(),E(C,{key:5},[n[9]||=u(`path`,{d:`M12 6.5c-2-1.4-4.6-1.8-7.5-1.5v12.6c2.9-.3 5.5.1 7.5 1.5 2-1.4 4.6-1.8 7.5-1.5V5c-2.9-.3-5.5.1-7.5 1.5Z`},null,-1),n[10]||=u(`path`,{d:`M12 6.5v12.6`},null,-1)],64)):e.name===`memory`?(H(),E(`path`,ii)):e.name===`nature`?(H(),E(C,{key:7},[n[11]||=u(`path`,{d:`M12 20v-7.5`},null,-1),n[12]||=u(`path`,{d:`M12 12.5c0-4 2.6-6.8 6.8-7-.1 4.2-2.8 7-6.8 7Z`},null,-1),n[13]||=u(`path`,{d:`M12 14.5c0-3-2-5.1-5.3-5.2.1 3.1 2.2 5.2 5.3 5.2Z`},null,-1)],64)):e.name===`system`?(H(),E(C,{key:8},[n[14]||=u(`circle`,{cx:`12`,cy:`12`,r:`3`},null,-1),n[15]||=u(`path`,{d:`M12 3.5v2.3M12 18.2v2.3M20.5 12h-2.3M5.8 12H3.5M18 6l-1.6 1.6M7.6 16.4 6 18M18 18l-1.6-1.6M7.6 7.6 6 6`},null,-1)],64)):e.name===`more`?(H(),E(C,{key:9},[n[16]||=u(`circle`,{cx:`6`,cy:`12`,r:`1.3`},null,-1),n[17]||=u(`circle`,{cx:`12`,cy:`12`,r:`1.3`},null,-1),n[18]||=u(`circle`,{cx:`18`,cy:`12`,r:`1.3`},null,-1)],64)):e.name===`refresh`?(H(),E(C,{key:10},[n[19]||=u(`path`,{d:`M19 12a7 7 0 1 1-2.1-5`},null,-1),n[20]||=u(`path`,{d:`M19 4.5V9h-4.5`},null,-1)],64)):e.name===`send`?(H(),E(C,{key:11},[n[21]||=u(`path`,{d:`M4.5 11.8 19.5 5l-4.8 14.5-3.2-6.2-7-1.5Z`},null,-1),n[22]||=u(`path`,{d:`m11.5 13.3 3.4-3.6`},null,-1)],64)):e.name===`palette`?(H(),E(C,{key:12},[n[23]||=u(`path`,{d:`M12 4a8 8 0 1 0 0 16c1.2 0 1.8-.8 1.8-1.6 0-1.3-1.3-1.6-1.3-2.7 0-.9.7-1.5 1.7-1.5H16a4 4 0 0 0 4-4C20 6.9 16.4 4 12 4Z`},null,-1),n[24]||=u(`path`,{d:`M8 11h.01M10 7.8h.01M14 7.8h.01M16.2 11h.01`},null,-1)],64)):e.name===`search`?(H(),E(C,{key:13},[n[25]||=u(`circle`,{cx:`11`,cy:`11`,r:`6`},null,-1),n[26]||=u(`path`,{d:`m20 20-4.5-4.5`},null,-1)],64)):e.name===`plus`?(H(),E(`path`,ai)):e.name===`back`?(H(),E(`path`,oi)):e.name===`motion`?(H(),E(C,{key:16},[n[27]||=u(`path`,{d:`M4 14c2.5-4 5.5-4 8 0s5.5 4 8 0`},null,-1),n[28]||=u(`path`,{d:`M4 9c2.5-4 5.5-4 8 0s5.5 4 8 0`},null,-1)],64)):e.name===`plugins`?(H(),E(C,{key:17},[n[29]||=u(`path`,{d:`M8 7h8v4H8zM6 11h12v6H6z`},null,-1),n[30]||=u(`path`,{d:`M9 11V7M15 11V7M12 14v3`},null,-1)],64)):e.name===`guide`?(H(),E(C,{key:18},[n[31]||=u(`circle`,{cx:`12`,cy:`12`,r:`8`},null,-1),n[32]||=u(`path`,{d:`M9.8 9.6a2.3 2.3 0 1 1 3.3 2.1c-.7.3-1.1.9-1.1 1.6v.3M12 16.5h.01`},null,-1)],64)):(H(),E(`circle`,si))]))}}),[[`__scopeId`,`data-v-69e2db74`]]),li=[`aria-label`],ui={class:`sheet-head`},di={key:0,class:`eyebrow`},fi=[`aria-label`],pi={class:`sheet-body`},mi=R(z({__name:`Sheet`,props:{open:{type:Boolean},title:{},eyebrow:{default:``},width:{default:`520px`}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,o=K(),s=K(!0),c=B(()=>n.open&&s.value);re(()=>{s.value=!0}),ve(()=>{s.value=!1});let p=null;function m(e){e.key===`Escape`&&r(`close`)}return F(c,async e=>{e?(p=document.activeElement,document.addEventListener(`keydown`,m),await ce(),o.value?.focus()):(document.removeEventListener(`keydown`,m),p?.focus?.())},{immediate:!0}),me(()=>document.removeEventListener(`keydown`,m)),(t,n)=>(H(),T(d,{to:`body`},[N(f,{name:`sheet`},{default:W(()=>[c.value?(H(),E(`div`,{key:0,class:`sheet-layer`,onClick:n[1]||=x(e=>r(`close`),[`self`])},[u(`aside`,{ref_key:`panel`,ref:o,class:`sheet`,role:`dialog`,"aria-modal":`true`,"aria-label":e.title,tabindex:`-1`,style:b({"--sheet-w":e.width})},[u(`header`,ui,[u(`div`,null,[e.eyebrow?(H(),E(`span`,di,a(e.eyebrow),1)):w(``,!0),u(`h2`,null,a(e.title),1)]),u(`button`,{class:`icon-button ghost sheet-close`,"aria-label":i(l)(`关闭`),onClick:n[0]||=e=>r(`close`)},` ✕ `,8,fi)]),u(`div`,pi,[P(t.$slots,`default`,{},void 0,!0)])],12,li)])):w(``,!0)]),_:3})]))}}),[[`__scopeId`,`data-v-2c804a0d`]]);function hi(e,t){let n=!1,r=!1,i=!1,a=B(()=>V.page===e),o=()=>{if(a.value){if(r){i=!0;return}r=!0,t().catch(e=>U(e.message,!0)).finally(()=>{r=!1,i&&(i=!1,o())})}};return j(o),re(()=>{n&&o(),n=!0}),F(()=>[V.tick,V.pulse],o),a}var gi={class:`card`},_i={key:0,class:`card-head`},vi={key:0,class:`eyebrow`},yi={key:1},bi={key:2},xi={key:0,class:`row`},Si=R(z({__name:`Card`,props:{title:{},eyebrow:{},sub:{}},setup(e){return(t,n)=>(H(),E(`section`,gi,[e.title||e.eyebrow||t.$slots.actions?(H(),E(`header`,_i,[u(`div`,null,[e.eyebrow?(H(),E(`span`,vi,a(e.eyebrow),1)):w(``,!0),e.title?(H(),E(`h2`,yi,a(e.title),1)):w(``,!0),e.sub?(H(),E(`p`,bi,a(e.sub),1)):w(``,!0)]),t.$slots.actions?(H(),E(`div`,xi,[P(t.$slots,`actions`,{},void 0,!0)])):w(``,!0)])):w(``,!0),P(t.$slots,`default`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-2c88637b`]]),Ci={class:`meter-row`},wi={class:`meter-label`},Ti=[`aria-label`,`aria-valuenow`],Ei={class:`meter-value`},Di=R(z({__name:`Meter`,props:{label:{},value:{},text:{},warn:{type:Boolean}},setup(e){let t=e,n=B(()=>Math.round(Math.max(0,Math.min(1,Number(t.value)||0))*100));return(t,r)=>(H(),E(`div`,Ci,[u(`span`,wi,a(e.label),1),u(`div`,{class:G([`meter`,{warn:e.warn}]),role:`meter`,"aria-label":e.label,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuenow":n.value},[u(`i`,{style:b({width:n.value+`%`})},null,4)],10,Ti),u(`b`,Ei,a(e.text??n.value+`%`),1)]))}}),[[`__scopeId`,`data-v-4f51518c`]]),Oi=[`aria-label`],ki=[`data-tab`,`aria-selected`,`tabindex`,`onClick`],Ai={key:0,class:`count`},ji=R(z({__name:`Tabs`,props:_e({items:{},label:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(t){let n=se(t,`modelValue`);function r(e,t){let r=t.findIndex(e=>e.key===n.value),i=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:0;if(!i)return;e.preventDefault();let a=t[(r+i+t.length)%t.length];n.value=a.key;let o=e.currentTarget.closest(`[role="tablist"]`);requestAnimationFrame(()=>o?.querySelector(`[data-tab="${a.key}"]`)?.focus())}return(i,o)=>(H(),E(`div`,{class:`seg tabs`,role:`tablist`,"aria-label":t.label},[(H(!0),E(C,null,M(t.items,i=>(H(),E(`button`,{key:i.key,type:`button`,role:`tab`,"data-tab":i.key,"aria-selected":n.value===i.key,tabindex:n.value===i.key?0:-1,onClick:e=>n.value=i.key,onKeydown:o[0]||=e=>r(e,t.items)},[e(a(i.label),1),i.count!==void 0&&i.count!==``?(H(),E(`small`,Ai,a(i.count),1)):w(``,!0)],40,ki))),128))],8,Oi))}}),[[`__scopeId`,`data-v-e8e03a3b`]]),Mi=[`aria-label`],Ni=[`data-tone`],Pi={class:`entry`},Fi=R(z({__name:`Timeline`,props:{items:{},label:{}},setup(e){return(t,n)=>(H(),E(`ol`,{class:`timeline`,"aria-label":e.label},[(H(!0),E(C,null,M(e.items,(e,r)=>(H(),E(`li`,{key:e.id??r,"data-tone":e.tone||void 0},[n[0]||=u(`span`,{class:`stem`,"aria-hidden":`true`},[u(`i`)],-1),u(`div`,Pi,[P(t.$slots,`default`,{item:e,index:r},void 0,!0)])],8,Ni))),128))],8,Mi))}}),[[`__scopeId`,`data-v-e79d18a9`]]),Ii=[`aria-label`],Li={class:`choice`},Ri={class:`row`},zi=[`disabled`],Bi=[`disabled`],Vi={class:`choice`},Hi={class:`row`},Ui=[`disabled`],Wi=[`disabled`],Gi={key:0,class:`opacity`},Ki=[`value`,`aria-label`],qi=R(z({__name:`WallpaperPicker`,props:{open:{type:Boolean}},emits:[`close`],setup(e,{emit:t}){let n=t,r=K(),o=K(),s=K(``);async function c(e,t){let n=t.target,r=n.files?.[0];if(n.value=``,r){s.value=e;try{e===`hero`?await mt(r):await gt(r),U(l(e===`hero`?`中间这张已换上`:`后面的壁纸已换上`))}catch(e){U(e.message,!0)}finally{s.value=``}}}async function d(e){s.value=e;try{e===`hero`?await ht():await _t(),U(l(`已恢复原来的壁纸`))}catch(e){U(e.message,!0)}finally{s.value=``}}return(t,f)=>e.open?(H(),E(`section`,{key:0,class:`wallpaper-picker`,"aria-label":i(l)(`换壁纸`)},[u(`header`,null,[u(`b`,null,a(i(l)(`换壁纸`)),1),u(`button`,{type:`button`,class:`text-button`,onClick:f[0]||=e=>n(`close`)},a(i(l)(`收起`)),1)]),u(`div`,Li,[u(`span`,null,a(i(l)(`中间这张`)),1),u(`div`,Ri,[u(`button`,{type:`button`,disabled:!!s.value,onClick:f[1]||=e=>r.value?.click()},a(s.value===`hero`?i(l)(`处理中…`):i(l)(`选择图片`)),9,zi),u(`button`,{type:`button`,disabled:!!s.value,onClick:f[2]||=e=>d(`hero`)},a(i(l)(`恢复默认`)),9,Bi)])]),u(`div`,Vi,[u(`span`,null,a(i(l)(`后面的大壁纸`)),1),u(`div`,Hi,[u(`button`,{type:`button`,disabled:!!s.value,onClick:f[3]||=e=>o.value?.click()},a(s.value===`sky`?i(l)(`处理中…`):i(l)(`选择图片`)),9,Ui),u(`button`,{type:`button`,disabled:!!s.value,onClick:f[4]||=e=>d(`sky`)},a(i(l)(`恢复默认`)),9,Wi)]),i($).sky?(H(),E(`label`,Gi,[u(`span`,null,a(i(l)(`透明度 {v}%`,{v:Math.round(i($).skyOpacity*100)})),1),u(`input`,{type:`range`,min:`0.08`,max:`0.82`,step:`0.02`,value:i($).skyOpacity,"aria-label":i(l)(`后面壁纸的透明度`),onInput:f[5]||=e=>i(vt)(Number(e.target.value))},null,40,Ki),u(`small`,null,a(i(l)(`越透明,心情的颜色越清楚。`)),1)])):w(``,!0)]),u(`input`,{ref_key:`heroInput`,ref:r,"data-wallpaper":`hero`,type:`file`,accept:`image/*`,hidden:``,onChange:f[6]||=e=>c(`hero`,e)},null,544),u(`input`,{ref_key:`skyInput`,ref:o,"data-wallpaper":`sky`,type:`file`,accept:`image/*`,hidden:``,onChange:f[7]||=e=>c(`sky`,e)},null,544)],8,Ii)):w(``,!0)}}),[[`__scopeId`,`data-v-01d9dcb6`]]),Ji=`luckytri-home-wallpaper-position-v3`;function Yi(e,t){try{let n=JSON.parse(localStorage.getItem(e)||`null`);return!n||!Number.isFinite(n.x)||!Number.isFinite(n.y)?null:{x:Math.min(t.x[1],Math.max(t.x[0],n.x)),y:Math.min(t.y[1],Math.max(t.y[0],n.y))}}catch{return null}}function Xi(e,t,n){try{return localStorage.setItem(e,JSON.stringify(t)),!0}catch{return U(n,!0),!1}}function Zi(){let e=K(!1),t=K(null),n=K(null),r=K(Yi(Ji,{x:[0,100],y:[0,100]})||{x:50,y:50}),i=B(()=>({objectPosition:`${r.value.x}% ${r.value.y}%`})),a=K(null);function o(e){let t=e.currentTarget,i=n.value;if(!i?.naturalWidth||!i.naturalHeight)return;let o=t.getBoundingClientRect(),s=Math.max(o.width/i.naturalWidth,o.height/i.naturalHeight);a.value={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,startPositionX:r.value.x,startPositionY:r.value.y,overflowX:Math.max(0,i.naturalWidth*s-o.width),overflowY:Math.max(0,i.naturalHeight*s-o.height)},t.setPointerCapture(e.pointerId)}function s(e){let t=a.value;t&&t.pointerId===e.pointerId&&(t.overflowX>0&&(r.value.x=Math.min(100,Math.max(0,t.startPositionX-(e.clientX-t.startX)/t.overflowX*100))),t.overflowY>0&&(r.value.y=Math.min(100,Math.max(0,t.startPositionY-(e.clientY-t.startY)/t.overflowY*100))))}function c(e){a.value?.pointerId===e.pointerId&&(a.value=null)}function u(){r.value={x:50,y:50}}function d(){Xi(Ji,r.value,l(`浏览器没有保存这次构图`))&&(e.value=!1,a.value=null,U(l(`首页壁纸构图已记住`)))}return{adjusting:e,heroRef:t,imageRef:n,pictureStyle:i,beginPictureDrag:o,movePicture:s,endPictureDrag:c,resetPicture:u,finishPicture:d}}var Qi={class:`page now`},$i={class:`now-presentation`},ea={class:`wallpaper-layer`,"aria-hidden":`true`},ta=[`src`],na=[`aria-label`],ra={class:`wallpaper-tip`},ia={class:`wallpaper-controls`},aa={class:`wallpaper-tip-inline`},oa={class:`notes`},sa={class:`note words`},ca={class:`eyebrow`},la={key:0,class:`recent-list`},ua={class:`quote`},da={key:1,class:`muted`},fa={class:`note thought`},pa={class:`eyebrow`},ma={key:1,class:`muted`},ha={key:2,class:`will-line`},ga={key:3},_a={key:4,class:`muted`},va={key:5},ya={class:`note ahead`},ba={class:`eyebrow`},xa={key:0,class:`list`},Sa={key:1,class:`muted`},Ca={class:`now-grid`},wa={class:`today-scroll scroll-pane`},Ta={class:`entry-head`},Ea={key:0},Da={key:1},Oa={key:2},ka={key:3},Aa={key:4},ja={key:5,class:`chip`,"data-tone":`quiet`},Ma={key:6,class:`chip`,"data-tone":`quiet`},Na={key:0},Pa={key:0},Fa={key:1,class:`muted`},Ia={key:2},La={key:3,class:`muted`},Ra={key:4},za={key:0},Ba={class:`stack side`},Va={class:`stack tight`},Ha={class:`faint ledger-note`},Ua={key:0,class:`list`},Wa={class:`grow`},Ga=[`data-tone`],Ka={key:1,class:`muted small-text`},qa={class:`counts`},Ja=R(z({__name:`NowPage`,setup(t){let n=ee(ne(`/mind`)||null),r=ee(ne(`/mind/today`)||null),o=K(`all`),s=K(!1),{adjusting:c,heroRef:d,imageRef:f,pictureStyle:p,beginPictureDrag:m,movePicture:h,endPictureDrag:_,resetPicture:v,finishPicture:y}=Zi(),te=g([{id:`conversation`,label:L(`对话`)},{id:`inner`,label:L(`独处与日记`)},{id:`upkeep`,label:L(`整理记忆`)}]),S=B(()=>Q.data),D=B(()=>{let e=S.value?.recentWords?.filter(e=>e.text?.trim())||[];return e.length?e.slice(0,3):S.value?.lastWords?[S.value.lastWords]:[]}),O=B(()=>S.value?.clock?.timeZone||n.value?.clock?.timeZone||`Asia/Shanghai`),re=B(()=>{let e=r.value?.items||[],t=[];for(let[n,r]of e.entries()){let e=r.type===`choice`||r.type===`glance`?`talk`:r.type===`feeling`?`feel`:`inner`;if(o.value!==`all`&&o.value!==e)continue;let i=t[t.length-1];if(r.type===`glance`&&i?.type===`glance`){i.count+=1;let e=Fn({name:r.sessionName,id:r.session});i.places.includes(e)||i.places.push(e);continue}t.push({...r,id:`${r.type}-${r.time}-${n}`,tone:r.type===`glance`||r.type===`choice`&&r.choice===`silent`?`quiet`:r.type===`feeling`?r.valence>=0?`warm`:`night`:r.type===`run`?`night`:`glow`,count:1,places:r.type===`glance`?[Fn({name:r.sessionName,id:r.session})]:[]})}return t}),k=B(()=>{let e=r.value?.items||[];return{all:e.length,talk:e.filter(e=>e.type===`choice`||e.type===`glance`).length,feel:e.filter(e=>e.type===`feeling`).length,inner:e.filter(e=>e.type===`run`||e.type===`ahead`).length}}),A=B(()=>n.value?.budget?.usage||{}),j=B(()=>n.value?.budget?.limits||{}),ie=B(()=>(S.value?.expecting||[]).filter(e=>e.content?.trim()).slice(0,5));function P(e){let t=j.value[e];return t?(A.value[e]||0)/t:A.value.total?(A.value[e]||0)/A.value.total:0}let ae=0;async function F(){let e=++ae,[t,i]=await Promise.all([Te.overview(),Te.today()]);e===ae&&(n.value=t,r.value=i)}return hi(`now`,F),(t,g)=>(H(),E(`div`,Qi,[u(`div`,$i,[u(`section`,{ref_key:`heroRef`,ref:d,class:G([`now-hero`,{"wallpaper-adjusting":i(c)}])},[u(`div`,ea,[u(`img`,{ref_key:`imageRef`,ref:f,src:i($).hero,style:b(i(p)),alt:``,draggable:`false`},null,12,ta)]),i(c)?(H(),E(`div`,{key:0,class:`wallpaper-drag-layer`,role:`application`,"aria-label":i(l)(`拖动调整首页壁纸构图`),onPointerdown:g[0]||=x((...e)=>i(m)&&i(m)(...e),[`prevent`]),onPointermove:g[1]||=x((...e)=>i(h)&&i(h)(...e),[`prevent`]),onPointerup:g[2]||=(...e)=>i(_)&&i(_)(...e),onPointercancel:g[3]||=(...e)=>i(_)&&i(_)(...e),onLostpointercapture:g[4]||=(...e)=>i(_)&&i(_)(...e)},[u(`span`,ra,a(i(l)(`按住并拖动图片,调整人物位置`)),1)],40,na)):w(``,!0),u(`div`,ia,[i(c)?(H(),E(C,{key:0},[u(`span`,aa,a(i(l)(`拖动背景调整构图`)),1),u(`button`,{type:`button`,onClick:g[5]||=(...e)=>i(v)&&i(v)(...e)},a(i(l)(`恢复默认`)),1),u(`button`,{type:`button`,class:`primary`,onClick:g[6]||=(...e)=>i(y)&&i(y)(...e)},a(i(l)(`完成`)),1)],64)):(H(),E(`button`,{key:1,type:`button`,onClick:g[7]||=e=>c.value=!0},a(i(l)(`调整构图`)),1)),i(c)?w(``,!0):(H(),E(`button`,{key:2,type:`button`,onClick:g[8]||=e=>s.value=!s.value},a(i(l)(`换壁纸`)),1))]),N(qi,{open:s.value&&!i(c),onClose:g[9]||=e=>s.value=!1},null,8,[`open`])],2)]),u(`section`,oa,[u(`article`,sa,[u(`span`,ca,a(i(l)(`TA 最近说`)),1),D.value.length?(H(),E(`ul`,la,[(H(!0),E(C,null,M(D.value,(e,t)=>(H(),E(`li`,{key:`${e.time}-${t}`},[u(`p`,ua,`“`+a(e.text)+`”`,1),u(`small`,null,a(i(Fn)({name:e.sessionName,id:e.session}))+` · `+a(i(jn)(e.time,S.value?.now)),1)]))),128))])):(H(),E(`p`,da,a(i(l)(`TA 还没在哪里开过口。`)),1))]),u(`article`,fa,[u(`span`,pa,a(i(l)(`放在心上`)),1),S.value?.thought?(H(),E(C,{key:0},[u(`p`,null,a(S.value.thought.content),1),u(`small`,null,a(S.value.thought.when),1)],64)):(H(),E(`p`,ma,a(i(l)(`心里暂时没有挂着的事。`)),1)),S.value?.will?(H(),E(`p`,ha,a(i(l)(`正在为自己而活:{content}`,{content:S.value.will.content})),1)):w(``,!0),S.value?.will?.touched?(H(),E(`small`,ga,a(i(l)(`被别人的话碰到过 {touched} 次,上次{v}`,{touched:S.value.will.touched,v:S.value.will.lastSpoke?i(l)(`出了声`):i(l)(`没出声`)})),1)):w(``,!0),S.value?.meaning?(H(),E(`p`,_a,[e(a(i(l)(`上次相遇:{text}`,{text:S.value.meaning.text})),1),S.value.meaning.spoke?w(``,!0):(H(),E(C,{key:0},[e(a(i(l)(`(没出声)`)),1)],64))])):w(``,!0),S.value?.meaning?.when&&!S.value.meaning.recent?(H(),E(`small`,va,a(S.value.meaning.when),1)):w(``,!0),u(`button`,{class:`text-button`,onClick:g[10]||=e=>i(I)(`heart`,`notes`)},a(i(l)(`看看 TA 的便签`)),1)]),u(`article`,ya,[u(`span`,ba,a(i(l)(`在等的事`)),1),ie.value.length?(H(),E(`ul`,xa,[(H(!0),E(C,null,M(ie.value,e=>(H(),E(`li`,{key:e.id},[u(`b`,null,a(e.when),1),u(`span`,null,a(e.name?`${e.name}:`:``)+a(e.content),1),u(`small`,null,a(i(ke)[e.kind]||e.kind),1)]))),128))])):(H(),E(`p`,Sa,a(i(l)(`这几天没有 TA 特别在等的事。`)),1)),u(`button`,{class:`text-button`,onClick:g[11]||=e=>i(I)(`life`,`ahead`)},a(i(l)(`约定与期待`)),1)])]),u(`section`,Ca,[N(Si,{class:`today`,title:i(l)(`今天的 TA`),sub:r.value?i(l)(`{v},按时间排在一起`,{v:i(kn)(r.value.day)}):``},{actions:W(()=>[N(ji,{modelValue:o.value,"onUpdate:modelValue":g[12]||=e=>o.value=e,label:i(l)(`筛选今天的事`),items:[{key:`all`,label:i(l)(`全部`),count:k.value.all},{key:`talk`,label:i(l)(`开口与沉默`),count:k.value.talk},{key:`feel`,label:i(l)(`心情`),count:k.value.feel},{key:`inner`,label:i(l)(`独处与日记`),count:k.value.inner}]},null,8,[`modelValue`,`label`,`items`])]),default:W(()=>[u(`div`,wa,[re.value.length?(H(),T(Fi,{key:0,items:re.value,label:i(l)(`今天的 TA`)},{default:W(({item:t})=>[u(`div`,Ta,[u(`time`,null,a(i(On)(t.time,O.value)),1),t.type===`choice`?(H(),E(`b`,Ea,a(i(Ee)[t.choice]||t.choice),1)):t.type===`glance`?(H(),E(`b`,Da,a(t.count>1?i(l)(`扫了 {count} 眼`,{count:t.count}):i(l)(`扫了一眼`)),1)):t.type===`feeling`?(H(),E(`b`,Oa,a(i(l)(`心情 · {feeling}`,{feeling:t.feeling})),1)):t.type===`run`?(H(),E(`b`,ka,a(i(we)[t.kind]||t.kind)+` · `+a(i(Oe)[t.status]||t.status),1)):(H(),E(`b`,Aa,a(i(l)(`约定 · {v}`,{v:i(De)[t.status]||t.status})),1)),t.type===`choice`?(H(),E(`span`,ja,a(i(Fn)({name:t.sessionName})),1)):t.type===`glance`?(H(),E(`span`,Ma,a(t.places.join(`、`)),1)):w(``,!0)]),t.type===`choice`?(H(),E(`p`,Na,[e(a(t.reason),1),t.appraisal?(H(),E(`small`,Pa,` · `+a(t.appraisal),1)):w(``,!0)])):t.type===`glance`?(H(),E(`p`,Fa,a(t.reason||i(l)(`没什么需要 TA 细看的`)),1)):t.type===`feeling`?(H(),E(`p`,Ia,[e(a(t.cause||i(l)(`说不清为什么`))+` `,1),u(`small`,null,`· `+a(i(Ae)[t.origin]||t.origin),1)])):t.type===`run`?(H(),E(`p`,La,a(t.reason),1)):(H(),E(`p`,Ra,[e(a(t.content),1),t.note?(H(),E(`small`,za,` · `+a(t.note),1)):w(``,!0)]))]),_:1},8,[`items`,`label`])):(H(),T(ye,{key:1,title:i(l)(`今天还很安静`),text:i(l)(`TA 扫一眼、开口、没出声、心情变化、独处、写日记,都会按时间排在这里。`)},null,8,[`title`,`text`]))])]),_:1},8,[`title`,`sub`]),u(`div`,Ba,[N(Si,{title:i(l)(`今天的注意力`),eyebrow:i(l)(`这一天`)},{default:W(()=>[u(`div`,Va,[(H(!0),E(C,null,M(i(te),e=>(H(),T(Di,{key:e.id,label:e.label,value:P(e.id),warn:!!j.value[e.id]&&P(e.id)>=.8,text:i(Mn)(A.value[e.id])},null,8,[`label`,`value`,`warn`,`text`]))),128))]),u(`p`,Ha,a(i(l)(`共 {v} 次调用、{v2} Token,缓存命中 {v3}。 {v4}`,{v:i(Mn)(A.value.calls),v2:i(Mn)(A.value.total),v3:i(Mn)(A.value.cached),v4:j.value.total?i(l)(`每日上限 {v}。`,{v:i(Mn)(j.value.total)}):i(l)(`没有设置每日上限。`)})),1)]),_:1},8,[`title`,`eyebrow`]),N(Si,{title:i(l)(`还没细看的消息`),eyebrow:i(l)(`留意`)},{default:W(()=>[n.value?.attention?.length?(H(),E(`ul`,Ua,[(H(!0),E(C,null,M(n.value.attention,e=>(H(),E(`li`,{key:e.session,class:`list-row`},[u(`span`,Wa,a(e.name),1),u(`span`,{class:`chip`,"data-tone":e.unread?void 0:`quiet`},a(i(l)(`{unread} 条未读`,{unread:e.unread})),9,Ga)]))),128))])):(H(),E(`p`,Ka,a(i(l)(`被叫到、聊到 TA 在意的事、熟人说话或攒了不少消息时,TA 才会细看。`)),1))]),_:1},8,[`title`,`eyebrow`]),N(Si,{title:i(l)(`TA 的这一生`),eyebrow:i(l)(`到现在`)},{default:W(()=>[u(`div`,qa,[u(`button`,{onClick:g[13]||=e=>i(I)(`heart`)},[u(`b`,null,a(n.value?.counts?.self??0),1),u(`span`,null,a(i(l)(`自我线索`)),1)]),u(`button`,{onClick:g[14]||=e=>i(I)(`people`)},[u(`b`,null,a(n.value?.counts?.people??0),1),u(`span`,null,a(i(l)(`认识的人`)),1)]),u(`button`,{onClick:g[15]||=e=>i(I)(`life`)},[u(`b`,null,a(n.value?.counts?.diaries??0),1),u(`span`,null,a(i(l)(`天日记`)),1)]),u(`button`,{onClick:g[16]||=e=>i(I)(`life`,`ahead`)},[u(`b`,null,a(n.value?.counts?.anticipations??0),1),u(`span`,null,a(i(l)(`件在等的事`)),1)])])]),_:1},8,[`title`,`eyebrow`])])])]))}}),[[`__scopeId`,`data-v-663ff302`]]),Ya=`modulepreload`,Xa=function(e){return`/app/`+e},Za={},Qa=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Xa(t,n),t=s(t),t in Za)return;Za[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Ya,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},$a={chats:()=>Qa(()=>import(`./ChatsPage-B83Evc79.js`),__vite__mapDeps([0,1,2,3,4,5,6])),heart:()=>Qa(()=>import(`./HeartPage-BGEn24rc.js`),__vite__mapDeps([7,1,2,3,4,8])),people:()=>Qa(()=>import(`./PeoplePage-D12cvuy7.js`),__vite__mapDeps([9,1,2,3,10,11])),life:()=>Qa(()=>import(`./LifePage-BleqPj4O.js`),__vite__mapDeps([12,1,2,3,13])),time:()=>Qa(()=>import(`./TimePage-Dzt8t8kL.js`),__vite__mapDeps([14,1,2,3,15])),memory:()=>Qa(()=>import(`./MemoryPage-BM3-0_lF.js`),__vite__mapDeps([16,1,2,3,10,17])),nature:()=>Qa(()=>import(`./NaturePage-CxxMnQIc.js`),__vite__mapDeps([18,1,2,3,19])),system:()=>Qa(()=>import(`./SystemPage-BWQKEQRU.js`),__vite__mapDeps([20,1,2,3,21])),plugins:()=>Qa(()=>import(`./PluginsPage-DE_-Q3ra.js`),__vite__mapDeps([22,1,2,5,23]))},eo=new Map;function to(e){let t=$a[e];return t?(eo.has(e)||eo.set(e,t().catch(t=>{throw eo.delete(e),t})),eo.get(e)):Promise.resolve()}var no=Object.fromEntries([[`now`,Ja],...Object.keys($a).map(e=>[e,be(()=>to(e))])]);function ro(){navigator.connection?.saveData||document.hidden||Promise.all(Object.keys($a).map(e=>to(e).catch(()=>{})))}var io={key:1,class:`access-gate`},ao={class:`access-language`},oo={class:`access-card`},so={key:0},co=[`autocomplete`],lo={key:0},uo={key:1},fo={key:2,class:`access-error`,role:`alert`},po=[`disabled`],mo={class:`access-error`,role:`alert`},ho=R(z({__name:`AccessGate`,setup(t){let n=B(()=>q.phase===`setup`),o=K(``),s=K(``),c=K(``),d=K(!1);async function f(){c.value=``;try{await Se()}catch{c.value=l(`暂时无法连接,请重试`)}}j(f);async function p(){if(!d.value){if(c.value=``,n.value&&o.value!==s.value){c.value=l(`两次输入的密码不一致`);return}d.value=!0;try{await r(o.value),o.value=``,s.value=``}catch(e){c.value=e.message}finally{d.value=!1}}}return(t,r)=>i(q).phase===`ready`?P(t.$slots,`default`,{},void 0,!0,0):(H(),E(`main`,io,[u(`div`,ao,[N(vr)]),u(`section`,oo,[r[2]||=u(`div`,{class:`access-orb`,"aria-hidden":`true`},`✦`,-1),r[3]||=u(`p`,{class:`eyebrow`},`LuckyTri`,-1),u(`h1`,null,a(n.value?i(l)(`为这个小世界设置密码`):i(l)(`欢迎回来`)),1),i(q).phase===`checking`?(H(),E(`p`,so,a(i(l)(`正在连接小世界…`)),1)):(H(),E(C,{key:1},[u(`p`,null,a(n.value?i(l)(`只需设置一个管理密码,以后用它登录。`):i(l)(`输入管理密码,继续陪伴 TA。`)),1),u(`form`,{class:`access-form`,onSubmit:x(p,[`prevent`])},[u(`label`,null,[e(a(i(l)(`管理密码`))+` `,1),Ce(u(`input`,{"onUpdate:modelValue":r[0]||=e=>o.value=e,name:`managementPassword`,type:`password`,autocomplete:n.value?`new-password`:`current-password`,minlength:`8`,maxlength:`256`,required:``,autofocus:``},null,8,co),[[S,o.value]])]),n.value?(H(),E(`label`,lo,[e(a(i(l)(`确认密码`))+` `,1),Ce(u(`input`,{"onUpdate:modelValue":r[1]||=e=>s.value=e,name:`confirmPassword`,type:`password`,autocomplete:`new-password`,minlength:`8`,maxlength:`256`,required:``},null,512),[[S,s.value]])])):w(``,!0),n.value?(H(),E(`small`,uo,a(i(l)(`至少 8 个字符。密码只保存在本机的加密校验记录中。`)),1)):w(``,!0),c.value?(H(),E(`p`,fo,a(c.value),1)):w(``,!0),u(`button`,{class:`primary`,disabled:d.value},a(d.value?i(l)(`请稍候…`):n.value?i(l)(`设置密码并进入`):i(l)(`登录`)),9,po)],32)],64)),c.value&&i(q).phase===`checking`?(H(),E(C,{key:2},[u(`p`,mo,a(c.value),1),u(`button`,{class:`primary`,onClick:f},a(i(l)(`重试`)),1)],64)):w(``,!0)])]))}}),[[`__scopeId`,`data-v-299ced1e`]]),go={key:0,class:`startup`},_o={class:`eyebrow`},vo=[`aria-label`],yo=[`aria-current`,`aria-label`],bo={class:`dock-ta-text rail-label`},xo={class:`dock-groups`},So={class:`rail-label`},Co=[`data-page`,`aria-current`,`title`,`onClick`,`onPointerenter`,`onFocus`],wo={class:`rail-label`},To={class:`dock-foot`},Eo=[`aria-pressed`,`title`],Do={class:`rail-label`},Oo=[`href`,`title`],ko={class:`rail-label`},Ao={class:`workspace`},jo={id:`main`,tabindex:`-1`},Mo={class:`topbar`},No={class:`topbar-title`},Po={key:0,class:`eyebrow`},Fo={class:`topbar-actions`},Io=[`title`],Lo=[`aria-label`,`title`,`disabled`],Ro={key:0,class:`draft-banner`,role:`status`},zo=[`aria-label`],Bo=[`data-page`,`aria-current`,`onClick`],Vo=[`aria-expanded`],Ho={class:`more-grid`},Uo=[`data-page`,`onClick`],Wo={class:`more-title`},Go={class:`row more-tools`},Ko=[`aria-pressed`],qo=[`href`],Jo={key:2,class:`startup`,role:`status`},Yo=v(R(z({__name:`App`,setup(t){qe();let n=B(()=>A[V.page]),r=B(()=>!!V.health?.connection?.online),o=B(()=>Q.data?.name||V.core?.nature?.name||`TA`),c=B(()=>Q.data?.activity?.kind||`idle`),d=B(()=>ue.includes(V.page)),f=B(()=>m.value===`en`?`/guide.en.html`:`/guide.html`),p=0,h=!1,g=new AbortController,_=()=>{},v=K(!1);function y(e){!h&&(h=!0,e?.revision===V.core?.revision)||(p||=(ae(),window.setTimeout(()=>{p=0,!document.hidden&&(ae(),Xe(),!V.dirty&&V.page!==`chats`&&O().catch(()=>{}),V.pulse+=1)},2e3)))}async function ee(){if(!v.value){if(V.dirty){U(l(`请先保存草稿`));return}v.value=!0;try{oe(),await Promise.all([O(),Xe()]),V.tick+=1}finally{v.value=!1}}}F(m,async()=>{if(oe(),V.core&&!V.dirty)try{await Promise.all([O(),Xe()]),V.tick+=1}catch{}});function te(){document.getElementById(`main`)?.focus()}function b(){window.location.reload()}function S(){document.documentElement.dataset.visibility=document.hidden?`hidden`:`visible`,document.hidden||(ae(),!V.dirty&&V.page!==`chats`&&O().catch(()=>{}),V.pulse++)}return j(async()=>{pt(),ge(),window.addEventListener(`hashchange`,ge),window.addEventListener(`popstate`,ge),to(V.page).catch(()=>{}),ro();try{await O()}catch(e){V.error=e.message;return}_=Ze(),document.addEventListener(`visibilitychange`,S),Qe(y,{signal:g.signal})}),de(()=>{window.removeEventListener(`hashchange`,ge),window.removeEventListener(`popstate`,ge),g.abort(),clearTimeout(p),_(),document.removeEventListener(`visibilitychange`,S)}),(t,p)=>(H(),T(ho,null,{default:W(()=>[N(Ot),i(V).error?(H(),E(`div`,go,[N(Dn,{mood:`blue`,size:128}),u(`span`,_o,a(i(l)(`暂未连接`)),1),u(`h1`,null,a(i(l)(`TA 在等你回来`)),1),u(`p`,null,a(i(V).error),1),u(`button`,{class:`primary`,onClick:b},a(i(l)(`重新连接`)),1)])):i(V).core&&i(V).health?(H(),E(`div`,{key:1,class:G([`shell`,`at-`+i(V).page])},[u(`a`,{class:`skip-link`,href:`#main`,onClick:x(te,[`prevent`])},a(i(l)(`跳到主要内容`)),1),u(`nav`,{class:`dock primary-nav`,"aria-label":i(l)(`主要功能`)},[u(`button`,{class:G([`dock-ta`,{active:i(V).page===`now`}]),"data-page":`now`,"aria-current":i(V).page===`now`?`page`:void 0,"aria-label":i(l)(`{name}:回到此刻`,{name:o.value}),onClick:p[0]||=e=>i(I)(`now`)},[N(Dn,{mood:i(X),activity:c.value,size:50},null,8,[`mood`,`activity`]),u(`span`,bo,[p[6]||=u(`b`,null,`LuckyTri`,-1),u(`small`,null,a(o.value===`LuckyTri`?``:o.value+` · `)+a(i(J)[i(X)].label)+` · `+a(i(yt)[c.value]||i(l)(`闲着`)),1)])],10,yo),u(`div`,xo,[(H(!0),E(C,null,M(i(ie),e=>(H(),E(`section`,{key:e.label,class:`dock-group`},[u(`h2`,So,a(e.label),1),(H(!0),E(C,null,M(e.pages,e=>(H(),E(`button`,{key:e,class:G([`dock-link`,{active:i(V).page===e}]),"data-page":e,"aria-current":i(V).page===e?`page`:void 0,title:i(A)[e].label,onClick:t=>i(I)(e),onPointerenter:t=>i(to)(e).catch(()=>{}),onFocus:t=>i(to)(e).catch(()=>{})},[N(ci,{name:e},null,8,[`name`]),u(`span`,wo,a(i(A)[e].label),1)],42,Co))),128))]))),128))]),u(`div`,To,[N(Dr),u(`button`,{class:`dock-tool`,"aria-pressed":i(Y).quiet,title:i(Y).quiet?i(l)(`开启灵动效果`):i(l)(`减少动画`),onClick:p[1]||=e=>i(Ke)(!i(Y).quiet)},[N(ci,{name:`motion`}),u(`span`,Do,a(i(Y).quiet?i(l)(`开启灵动效果`):i(l)(`减少动画`)),1)],8,Eo),u(`a`,{class:`dock-tool`,href:f.value,target:`_blank`,rel:`noopener`,title:i(l)(`使用教程`)},[N(ci,{name:`guide`}),u(`span`,ko,a(i(l)(`使用教程 ↗`)),1)],8,Oo)])],8,vo),u(`div`,Ao,[N(Xr),u(`main`,jo,[u(`header`,Mo,[u(`div`,No,[i(m)===`zh`?(H(),E(`span`,Po,a(n.value.en),1)):w(``,!0),u(`h1`,null,a(n.value.label),1),u(`p`,null,a(n.value.tagline),1)]),u(`div`,Fo,[N(vr),u(`button`,{id:`connection`,class:G([`pill`,{offline:!r.value}]),title:r.value?i(l)(`QQ 已连接`):i(l)(`去连接 QQ`),onClick:p[2]||=e=>r.value||i(I)(`system`,`connect`)},[u(`span`,{class:G([`dot`,{off:!r.value}])},null,2),e(a(r.value?i(l)(`QQ 已连接`):i(l)(`QQ 未连接`)),1)],10,Io),u(`button`,{id:`refresh`,class:G([`icon-button`,{spinning:v.value}]),"aria-label":i(l)(`刷新当前数据`),title:i(l)(`刷新`),disabled:v.value,onClick:ee},[N(ci,{name:`refresh`})],10,Lo)])]),i(V).dirty?(H(),E(`div`,Ro,[p[7]||=u(`span`,{class:`dot warn`},null,-1),e(a(i(l)(`草稿还没保存,保存后才会生效`)),1)])):w(``,!0),u(`div`,{class:G([`view`,`page-`+i(V).page])},[(H(),T(s,{max:5,include:[`NowPage`,`HeartPage`,`PeoplePage`,`LifePage`,`TimePage`]},[(H(),T(he(i(no)[i(V).page]),{key:i(V).page,class:`route-page`}))],1024))],2)])]),u(`nav`,{class:`tabbar`,"aria-label":i(l)(`主要功能`)},[(H(!0),E(C,null,M(i(xe),e=>(H(),E(`button`,{key:e,"data-page":e,class:G({active:i(V).page===e}),"aria-current":i(V).page===e?`page`:void 0,onClick:t=>i(I)(e)},[N(ci,{name:e},null,8,[`name`]),u(`span`,null,a(i(A)[e].label),1)],10,Bo))),128)),u(`button`,{class:G([`tabbar-more`,{active:d.value}]),"aria-expanded":i(V).moreOpen,onClick:p[3]||=e=>i(V).moreOpen=!i(V).moreOpen},[N(ci,{name:`more`}),u(`span`,null,a(i(l)(`更多`)),1)],10,Vo)],8,zo),N(mi,{open:i(V).moreOpen,title:i(l)(`更多`),eyebrow:i(l)(`更多`),width:`420px`,onClose:p[5]||=e=>i(V).moreOpen=!1},{default:W(()=>[u(`div`,Ho,[(H(!0),E(C,null,M(i(ue),e=>(H(),E(`button`,{key:e,"data-page":e,class:G({active:i(V).page===e}),onClick:t=>i(I)(e)},[N(ci,{name:e},null,8,[`name`]),u(`b`,null,a(i(A)[e].label),1),u(`small`,null,a(i(A)[e].tagline),1)],10,Uo))),128))]),u(`h3`,Wo,a(i(l)(`界面主题`)),1),N(Dr,{inline:``}),u(`div`,Go,[u(`button`,{"aria-pressed":i(Y).quiet,onClick:p[4]||=e=>i(Ke)(!i(Y).quiet)},a(i(Y).quiet?i(l)(`开启灵动效果`):i(l)(`减少动画`)),9,Ko),u(`a`,{href:f.value,target:`_blank`,rel:`noopener`},a(i(l)(`使用教程 ↗`)),9,qo)])]),_:1},8,[`open`,`title`,`eyebrow`]),N(hr,{"hide-orb":i(V).page===`now`},null,8,[`hide-orb`])],2)):(H(),E(`div`,Jo,[N(Dn,{mood:i(X),activity:`idle`,size:128},null,8,[`mood`]),u(`h1`,null,a(i(l)(`正在进入 TA 的小世界`)),1),u(`p`,null,a(i(l)(`连接会话与记忆…`)),1)])),N(ni)]),_:1}))}}),[[`__scopeId`,`data-v-0e622eac`]]));Yo.config.errorHandler=e=>{U(e instanceof Error?e.message:l(`操作失败,请重试`),!0)},Yo.mount(`#app`);export{An as _,hi as a,Q as b,Gn as c,kn as d,Rn as f,In as g,Fn as h,Si as i,jn as l,Mn as m,ji as n,mi as o,Ln as p,Di as r,ar as s,Fi as t,On as u,Dn as v,X as x,Qe as y};
@@ -1 +1 @@
1
- import{m as e}from"./Empty-SkA8PyMo.js";async function t(t){return e(`/core/memories?session=`+encodeURIComponent(t))}async function n(t){return e(`/core/memories`,`POST`,t)}async function r(t,n){return e(`/core/memories/`+t,`PATCH`,n)}async function i(t){return e(`/core/memories/batch-delete`,`POST`,t)}async function a(t){return e(`/core/memory-summary?session=`+encodeURIComponent(t))}async function o(t){return e(`/core/memory/consolidate`,`POST`,{session:t})}async function s(t){return e(`/core/knowledge/collections?session=`+encodeURIComponent(t))}async function c(t){return e(`/core/knowledge/documents?collection=`+encodeURIComponent(t))}async function l(t){return e(`/core/knowledge/documents`,`POST`,t)}async function u(t,n){return e(`/core/knowledge/search`,`POST`,{session:t,text:n})}export{s as a,a as c,l as i,r as l,o as n,c as o,i as r,t as s,n as t,u};
1
+ import{m as e}from"./Empty-ddEfu0w8.js";async function t(t){return e(`/core/memories?session=`+encodeURIComponent(t))}async function n(t){return e(`/core/memories`,`POST`,t)}async function r(t,n){return e(`/core/memories/`+t,`PATCH`,n)}async function i(t){return e(`/core/memories/batch-delete`,`POST`,t)}async function a(t){return e(`/core/memory-summary?session=`+encodeURIComponent(t))}async function o(t){return e(`/core/memory/consolidate`,`POST`,{session:t})}async function s(t){return e(`/core/knowledge/collections?session=`+encodeURIComponent(t))}async function c(t){return e(`/core/knowledge/documents?collection=`+encodeURIComponent(t))}async function l(t){return e(`/core/knowledge/documents`,`POST`,t)}async function u(t,n){return e(`/core/knowledge/search`,`POST`,{session:t,text:n})}export{s as a,a as c,l as i,r as l,o as n,c as o,i as r,t as s,n as t,u};
@@ -1 +1 @@
1
- import{ot as e,xt as t}from"./Empty-SkA8PyMo.js";function n(n){let r=matchMedia(n),i=t(r.matches),a=e=>i.value=e.matches;return r.addEventListener(`change`,a),e(()=>r.removeEventListener(`change`,a)),i}export{n as t};
1
+ import{ot as e,xt as t}from"./Empty-ddEfu0w8.js";function n(n){let r=matchMedia(n),i=t(r.matches),a=e=>i.value=e.matches;return r.addEventListener(`change`,a),e(()=>r.removeEventListener(`change`,a)),i}export{n as t};
@@ -0,0 +1 @@
1
+ import{I as e,M as t,P as n,j as r,m as i}from"./Empty-ddEfu0w8.js";var a=new Map;function o(e,t){let n=JSON.stringify([e,t]),r=a.get(n);return r||(r=new Intl.DateTimeFormat(e,t),a.set(n,r),a.size>64&&a.delete(a.keys().next().value)),r}var s={overview:()=>i(`/mind`),mood:()=>i(`/mind/mood`),notes:(e=``)=>i(`/mind/thoughts?q=`+encodeURIComponent(e)),presence:()=>i(`/mind/presence`),today:()=>i(`/mind/today`),person:e=>i(`/mind/people/`+encodeURIComponent(e)),self:()=>i(`/mind/self`),thread:e=>i(`/mind/self/`+encodeURIComponent(e)),bonds:()=>i(`/mind/bonds`),bondChanges:(e,t)=>i(`/mind/bonds/${e}/`+encodeURIComponent(t)),faces:e=>i(`/mind/faces/`+encodeURIComponent(e)),life:(e=``,t)=>i(`/mind/life?q=`+encodeURIComponent(e)+(t?`&before=`+t:``)),day:e=>i(`/mind/day/`+e),chapter:e=>i(`/mind/chapters/`+e),story:()=>i(`/mind/story`),nature:()=>i(`/mind/nature`),saveNature:e=>i(`/mind/nature`,`PUT`,e),saveSettings:e=>i(`/mind/settings`,`PUT`,e),reflect:()=>i(`/mind/reflect`,`POST`,{}),review:()=>i(`/mind/review`,`POST`,{}),revoke:(e,t,n=``)=>i(`/mind/revoke`,`POST`,{kind:e,id:t,reason:n}),thought:(e,t)=>i(`/mind/thoughts/`+encodeURIComponent(e),`PATCH`,t),removeThought:e=>i(`/mind/thoughts/`+encodeURIComponent(e),`DELETE`,{}),preview:e=>i(`/mind/preview`,`POST`,e),savePrompts:e=>i(`/core/prompts`,`PUT`,e)},c=n({promise:r(`答应的事`),plan:r(`想做的事`),event:r(`别人的安排`),date:r(`每年的日子`)}),l=n({pending:r(`还在等`),lapsed:r(`悄悄错过了`),done:r(`做到了`),missed:r(`错过了`),let_go:r(`不再惦记`),revoked:r(`已撤销`)}),u=n({turn:r(`聊天时`),direct:r(`聊天时`),group:r(`聊天时`),solitude:r(`独处时`),daily:r(`写日记时`),weekly:r(`回顾时`),memory:r(`从 TA 说过的话里`),migration:r(`旧版本`)}),d=n({activity:r(`做自己的事`),solitude:r(`独处`),expression:r(`自己的念头`),daily:r(`写日记`),weekly:r(`回顾这段日子`),night:r(`夜里整理`)}),f=n({running:r(`进行中`),written:r(`留下了东西`),state:r(`心情变了`),empty:r(`没什么新的`),error:r(`出了点问题`),skipped:r(`跳过了`),cancelled:r(`作废了`),interrupted:r(`重启中断`)}),p=n({active:r(`已经是 TA 的一部分`),emerging:r(`刚开始有这种感觉`),closed:r(`已经放下`)}),m={interest:`#ffc15f`,view:`#7fc8ff`,trait:`#ff9a8b`,habit:`#b9a4ff`,intention:`#6fe0b8`,care:`#ff8fbf`,curiosity:`#9ef0ff`},h=n({warmer:r(`更亲近了一点`),closer:r(`走近了`),trust_up:r(`更信任了`),trust_down:r(`有点失望`),friction:r(`有了别扭`),repair:r(`和好了`),distance:r(`疏远了一点`),impression:r(`印象`)}),g=new Set([`friction`,`trust_down`,`distance`]),_=n([[`familiarity`,r(`熟悉`)],[`closeness`,r(`亲近`)],[`trust`,r(`信任`)],[`tension`,r(`别扭`)]]),v=n({open:r(`公开`),private:r(`私下知道`),secret:r(`要 TA 保密`)}),y=n({confirmed:r(`TA 这样认为`),superseded:r(`已被新的取代`),candidate:r(`旧版待确认`),disputed:r(`有争议`),expired:r(`已过期`),deleted:r(`已撤销`)}),b=n({planned:r(`等合适的时候`),sending:r(`正在发`),sent:r(`说出口了`),declined:r(`TA 后来决定不说`),skipped:r(`时机不合适`),cancelled:r(`没有发`),uncertain:r(`投递未确认`)}),x=n({speak:r(`开口`),react:r(`简短反应`),decline:r(`说不想聊`),silent:r(`没出声`)});function S(n,r=`Asia/Shanghai`){return n?o(t(),{timeZone:r,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`}).format(n):e(`还没有`)}function C(e){return`${Math.round(Math.max(0,Math.min(1,Number(e)||0))*100)}%`}export{S as _,g as a,m as c,b as d,d as f,C as g,s as h,x as i,y as l,p as m,l as n,_ as o,f as p,h as r,v as s,c as t,u,o as v};
@@ -14,9 +14,9 @@
14
14
  if (pinned) document.documentElement.dataset.mood = pinned;
15
15
  } catch (e) {}
16
16
  </script>
17
- <script type="module" crossorigin src="/app/assets/index-BIAdfObg.js"></script>
18
- <link rel="modulepreload" crossorigin href="/app/assets/Empty-SkA8PyMo.js">
19
- <link rel="modulepreload" crossorigin href="/app/assets/formatters-ZmW_xFHw.js">
17
+ <script type="module" crossorigin src="/app/assets/index-oLIXWxsn.js"></script>
18
+ <link rel="modulepreload" crossorigin href="/app/assets/Empty-ddEfu0w8.js">
19
+ <link rel="modulepreload" crossorigin href="/app/assets/mind-DYRfFMwh.js">
20
20
  <link rel="stylesheet" crossorigin href="/app/assets/Empty-DmUB2-Bk.css">
21
21
  <link rel="stylesheet" crossorigin href="/app/assets/index-DY4e15Kh.css">
22
22
  </head>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1" />
6
- <title>LuckyTri v1.0.1 · Getting Started</title>
6
+ <title>LuckyTri v1.0.3 · Getting Started</title>
7
7
  <style>
8
8
  * {
9
9
  box-sizing: border-box;
@@ -269,7 +269,7 @@
269
269
  <body>
270
270
  <header>
271
271
  <div>
272
- <b>LuckyTri · Handbook</b><small>TIME · MEMORY · CHOICE / v1.0.1</small>
272
+ <b>LuckyTri · Handbook</b><small>TIME · MEMORY · CHOICE / v1.0.3</small>
273
273
  </div>
274
274
  <nav>
275
275
  <a href="/#setup">Back to the studio</a
@@ -859,6 +859,46 @@ npm start
859
859
  and restores it into a brand new file; see
860
860
  <code>docs/en/recovery.md</code>.
861
861
  </p>
862
+ <h3>Import and export from the studio</h3>
863
+ <p>
864
+ &quot;System → Data and backups&quot; provides &quot;Export data
865
+ package&quot; and &quot;Choose import file&quot;. A
866
+ <code>.luckytri</code> package contains chats, memories,
867
+ relationships, personal state, diaries, tasks, work versions,
868
+ knowledge text and settings stored in the database, including saved
869
+ credentials. Management passwords and login sessions are not migrated.
870
+ Plugin programs, original knowledge files and the local
871
+ <code>.env</code> are outside the package. Export uses a consistent
872
+ snapshot while the instance continues running and streams large
873
+ downloads.
874
+ </p>
875
+ <p>
876
+ Imports accept <code>.luckytri</code> packages and existing
877
+ <code>.db</code> / SQLite backups. The default upload limit is 10 GiB;
878
+ adjust <code>DATA_TRANSFER_MAX_GB</code> (1–100) in <code>.env</code>.
879
+ Uploads are checked for package SHA-256, database integrity,
880
+ references and supported structures. Older versions are upgraded only
881
+ in staging. The preview shows the name, version and record counts
882
+ before current data changes, so it can be cancelled.
883
+ </p>
884
+ <p>
885
+ Confirming &quot;Import and restart&quot; stops the instance, retains
886
+ a complete <code>luckytri-before-import-*.db</code> snapshot, replaces
887
+ the data and restarts automatically. The local management password,
888
+ current logins, QQ connection settings and backup cleanup rules are
889
+ preserved. Automatic replies are turned off and plugin execution
890
+ grants reset. Review connections, models and tasks before enabling
891
+ replies; reinstall plugins or review their permissions. Import
892
+ replaces the whole database rather than merging records. Pre-import
893
+ snapshots can be managed manually and are excluded from scheduled
894
+ full-backup cleanup.
895
+ </p>
896
+ <p>
897
+ The server removes the export copy after download. Cancelled, expired
898
+ and interrupted staging files are reclaimed; unused previews expire
899
+ after one hour. Failed imports retain or restore the original database
900
+ rather than starting with a partial file.
901
+ </p>
862
902
  <h2 id="step-9">9. Troubleshooting</h2>
863
903
  <table>
864
904
  <thead>
@@ -976,11 +1016,25 @@ npm start
976
1016
  Never post API keys, <code>.env</code> or private chat text anywhere
977
1017
  public.
978
1018
  </p>
1019
+ <h3>Thoughts about places and update checks</h3>
1020
+ <p>
1021
+ People → Thoughts about this place keeps her own impressions, wishes
1022
+ and questions, selectively updated from real encounters. Details show
1023
+ reasons, sources and history; copied group personas remain history
1024
+ only.
1025
+ </p>
1026
+ <p>
1027
+ System → Runtime → Version and updates checks the latest npm version
1028
+ manually and links release notes, without installing or restarting.
1029
+ The Nature page uses the server&#39;s remaining edit allowance;
1030
+ locally granted extra opportunities are recorded without clearing
1031
+ version history.
1032
+ </p>
979
1033
  </article>
980
1034
  </div>
981
1035
  <footer>
982
1036
  LuckyTri · so that experience and choice stay coherent. This guide matches
983
- the v1.0.1 interface.
1037
+ the v1.0.3 interface.
984
1038
  </footer>
985
1039
  </body>
986
1040
  </html>
package/public/guide.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1" />
6
- <title>LuckyTri v1.0.1 · 使用教程</title>
6
+ <title>LuckyTri v1.0.3 · 使用教程</title>
7
7
  <style>
8
8
  * {
9
9
  box-sizing: border-box;
@@ -269,7 +269,7 @@
269
269
  <body>
270
270
  <header>
271
271
  <div>
272
- <b>LuckyTri · 上手手册</b><small>TIME · MEMORY · CHOICE / v1.0.1</small>
272
+ <b>LuckyTri · 上手手册</b><small>TIME · MEMORY · CHOICE / v1.0.3</small>
273
273
  </div>
274
274
  <nav>
275
275
  <a href="/#setup">返回管理台</a
@@ -626,7 +626,7 @@ luckytri
626
626
  <p>
627
627
  其余的都从经历里长出来:TA 的自我是「内心」星图里的一颗颗星,TA
628
628
  对每个人的感觉在「人际」,TA
629
- 在各群的样子在「人际」下方的群像里。点开可以看到每次变化的来源,觉得不对可以撤销;撤销过的内容之后不会被写回来。很久没被触及的线索会慢慢淡出,退到星图的「远方」;它们没有被删除,被聊到时会重新想起。TA
629
+ 对各处的独特想法在「人际」下方的「在这里的想法」里。点开可以看到每次变化的来源,觉得不对可以撤销;撤销过的内容之后不会被写回来。很久没被触及的线索会慢慢淡出,退到星图的「远方」;它们没有被删除,被聊到时会重新想起。TA
630
630
  独处、写日记、夜里整理、回顾和改写自传的记录,以及 TA
631
631
  在等的事(别人说的安排、TA 答应的事,可以撤销),都在「一生」。每日
632
632
  Token 上限、后台份额、夜里整理和回顾间隔在「天性 → TA 的日子」里设置。
@@ -731,6 +731,29 @@ npm start
731
731
  <code>npm run recovery</code> 校验并恢复到一个全新的文件,见
732
732
  <code>docs/zh/recovery.md</code>。
733
733
  </p>
734
+ <h3>从管理台导入与导出</h3>
735
+ <p>
736
+ 「系统 → 数据与备份」提供「导出数据包」和「选择导入文件」。导出的
737
+ <code>.luckytri</code>
738
+ 文件包含数据库内的聊天、记忆、关系、个人状态、日记、待办、作品版本、知识文本和设置,也包含保存在设置中的密钥。管理密码和登录会话不随数据包迁移;插件程序、知识库原始文件及本机
739
+ <code>.env</code>
740
+ 不在其中。导出读取一致快照,实例可以继续运行,大文件通过流式传输下载。
741
+ </p>
742
+ <p>
743
+ 导入支持 <code>.luckytri</code> 数据包及已有 <code>.db</code> / SQLite
744
+ 备份。默认单个文件最多 10 GiB,可用 <code>.env</code> 中的
745
+ <code>DATA_TRANSFER_MAX_GB</code>(1–100)调整。上传后先校验数据包
746
+ SHA-256、数据库完整性、引用和结构,旧版本只在暂存副本上升级,界面会显示姓名、版本和记录数量。此时尚未改变当前数据,可以取消。
747
+ </p>
748
+ <p>
749
+ 确认「导入并重启」后,程序停止实例,保留一份完整的
750
+ <code>luckytri-before-import-*.db</code>
751
+ 快照,再替换数据并自动重启。本机管理密码、当前登录、QQ
752
+ 连接配置和备份整理规则保留。导入后的自动回复关闭,插件执行权限重置;检查连接、模型和待办后可重新开启,插件需重新安装或确认权限。导入是替换整份数据,不与当前记录合并;原有快照可在备份列表手动管理,定时清理完整备份不会删除它。
753
+ </p>
754
+ <p>
755
+ 下载完成后删除服务器导出副本;取消、失效或中断的暂存文件会回收,未使用的预览默认一小时失效。导入失败时保留或恢复原数据,不会把不完整的文件交给实例运行。
756
+ </p>
734
757
  <h2 id="step-9">9. 常见问题</h2>
735
758
  <table>
736
759
  <thead>
@@ -821,8 +844,17 @@ npm start
821
844
  </tbody>
822
845
  </table>
823
846
  <p>不要把 API 密钥、<code>.env</code> 或私聊原文发到公开位置。</p>
847
+ <h3>群里的独特想法与检查更新</h3>
848
+ <p>
849
+ 「人际 →
850
+ 在这里的想法」保存她在各处自己想留下的印象、愿望或疑问。由她根据实际相处选择更新,详情显示理由、来源和历史;旧群人格只留在历史里。
851
+ </p>
852
+ <p>
853
+ 「系统 → 运行开关 → 版本与更新」可手动检查 npm
854
+ 最新版本并查看发布说明,不自动安装或重启。天性页的剩余修改次数以服务端额度为准;本地维护额外授予的机会有独立记录,不清空原版本。
855
+ </p>
824
856
  </article>
825
857
  </div>
826
- <footer>LuckyTri · 让经历和选择彼此连贯。教程与 v1.0.1 界面同步。</footer>
858
+ <footer>LuckyTri · 让经历和选择彼此连贯。教程与 v1.0.3 界面同步。</footer>
827
859
  </body>
828
860
  </html>