clay-server 3.8.1 → 4.0.0-beta.2

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 (189) hide show
  1. package/lib/ask-user-mcp-server.js +5 -119
  2. package/lib/builtin-mates.js +6 -6
  3. package/lib/claude-hook-installer.js +15 -0
  4. package/lib/clay-history-mcp-server.js +62 -297
  5. package/lib/daemon.js +1 -1
  6. package/lib/debate-model-selection.js +119 -0
  7. package/lib/home-debate-tool-policy.js +164 -0
  8. package/lib/home-response-notifications.js +26 -0
  9. package/lib/mate-creation-mcp-server.js +55 -0
  10. package/lib/mate-ready-creation.js +95 -0
  11. package/lib/mates.js +2 -0
  12. package/lib/notes.js +2 -1
  13. package/lib/project-ask-user.js +64 -0
  14. package/lib/project-capsule-catalog.js +101 -0
  15. package/lib/project-connection.js +4 -0
  16. package/lib/project-debate-proposal.js +133 -17
  17. package/lib/project-debate.js +214 -110
  18. package/lib/project-delegated-follow-up.js +84 -0
  19. package/lib/project-delegated-session.js +53 -0
  20. package/lib/project-filesystem.js +7 -9
  21. package/lib/project-knowledge.js +1 -0
  22. package/lib/project-mate-creation-proposal.js +120 -0
  23. package/lib/project-memory.js +14 -7
  24. package/lib/project-models.js +157 -32
  25. package/lib/project-session-notes.js +2 -2
  26. package/lib/project-session-pair.js +8 -8
  27. package/lib/project-sessions.js +66 -51
  28. package/lib/project-vendor-login.js +397 -0
  29. package/lib/project-worker-proposal.js +25 -25
  30. package/lib/project-workspace-query.js +144 -0
  31. package/lib/project.js +349 -102
  32. package/lib/public/app.js +85 -42
  33. package/lib/public/css/avatar-imprints.css +0 -1
  34. package/lib/public/css/base.css +4 -0
  35. package/lib/public/css/capsule-ui.css +389 -0
  36. package/lib/public/css/command-palette.css +306 -6
  37. package/lib/public/css/home-capsule-library.css +243 -0
  38. package/lib/public/css/home-capsule-source.css +192 -0
  39. package/lib/public/css/home-debate-live.css +146 -0
  40. package/lib/public/css/home-debate-planning.css +125 -0
  41. package/lib/public/css/home-debates-archive.css +281 -0
  42. package/lib/public/css/home-hub.css +896 -405
  43. package/lib/public/css/home-mate-creation.css +34 -0
  44. package/lib/public/css/home-mate-model-picker.css +131 -0
  45. package/lib/public/css/home-mate-settings.css +344 -0
  46. package/lib/public/css/home-session-actions.css +265 -0
  47. package/lib/public/css/home-sidebar.css +667 -0
  48. package/lib/public/css/icon-strip.css +1 -2
  49. package/lib/public/css/mates.css +7 -34
  50. package/lib/public/css/pane.css +1 -1
  51. package/lib/public/css/playbook.css +0 -80
  52. package/lib/public/css/sticky-notes.css +53 -117
  53. package/lib/public/css/tui-attention.css +0 -44
  54. package/lib/public/css/workspace-assignment.css +45 -0
  55. package/lib/public/fonts/source-serif-4/LICENSE.md +93 -0
  56. package/lib/public/fonts/source-serif-4/SourceSerif4Caption-Semibold.ttf.woff2 +0 -0
  57. package/lib/public/index.html +93 -74
  58. package/lib/public/modules/app-connection.js +10 -1
  59. package/lib/public/modules/app-dm.js +43 -160
  60. package/lib/public/modules/app-home-hub.js +328 -585
  61. package/lib/public/modules/app-message-cards.js +242 -0
  62. package/lib/public/modules/app-message-router.js +84 -0
  63. package/lib/public/modules/app-messages.js +102 -37
  64. package/lib/public/modules/app-notifications.js +8 -119
  65. package/lib/public/modules/app-projects.js +9 -1
  66. package/lib/public/modules/app-rendering.js +21 -602
  67. package/lib/public/modules/avatar-imprint.js +11 -8
  68. package/lib/public/modules/chat-bubble-renderer.js +152 -0
  69. package/lib/public/modules/chat-render-runtime.js +198 -0
  70. package/lib/public/modules/command-palette.js +225 -436
  71. package/lib/public/modules/dm-render.js +82 -0
  72. package/lib/public/modules/home-capsule-creation-intent.js +31 -0
  73. package/lib/public/modules/home-capsule-library.js +146 -0
  74. package/lib/public/modules/home-capsule-source.js +383 -0
  75. package/lib/public/modules/home-chat-identity.js +35 -0
  76. package/lib/public/modules/home-chat-scroll.js +77 -0
  77. package/lib/public/modules/home-chat-stream-state.js +34 -0
  78. package/lib/public/modules/home-composer-focus.js +25 -0
  79. package/lib/public/modules/home-conversations-sheet.js +179 -0
  80. package/lib/public/modules/home-debate-activity.js +48 -0
  81. package/lib/public/modules/home-debate-controls.js +295 -0
  82. package/lib/public/modules/home-debate-launch.js +41 -0
  83. package/lib/public/modules/home-debate-live.js +284 -0
  84. package/lib/public/modules/home-debate-models.js +73 -0
  85. package/lib/public/modules/home-debate-planning.js +335 -0
  86. package/lib/public/modules/home-debates-archive.js +279 -0
  87. package/lib/public/modules/home-dock-resize.js +74 -0
  88. package/lib/public/modules/home-dock.js +446 -0
  89. package/lib/public/modules/home-mate-chat.js +496 -0
  90. package/lib/public/modules/home-mate-creation.js +109 -0
  91. package/lib/public/modules/home-mate-model-picker.js +281 -0
  92. package/lib/public/modules/home-mate-selection.js +38 -0
  93. package/lib/public/modules/home-mate-settings-menu.js +131 -0
  94. package/lib/public/modules/home-mate-settings.js +383 -0
  95. package/lib/public/modules/home-session-actions.js +373 -0
  96. package/lib/public/modules/home-session-model-confirmation.js +13 -0
  97. package/lib/public/modules/home-shell.js +9 -0
  98. package/lib/public/modules/home-sidebar-chat-list.js +63 -0
  99. package/lib/public/modules/home-sidebar.js +158 -0
  100. package/lib/public/modules/home-sub-surface.js +19 -0
  101. package/lib/public/modules/home-surface-boot.js +68 -0
  102. package/lib/public/modules/home-surface.js +141 -0
  103. package/lib/public/modules/home-tools.js +271 -0
  104. package/lib/public/modules/markdown.js +50 -2
  105. package/lib/public/modules/mate-management.js +86 -0
  106. package/lib/public/modules/mate-wizard.js +0 -7
  107. package/lib/public/modules/mention.js +17 -19
  108. package/lib/public/modules/pane-bridge.js +9 -0
  109. package/lib/public/modules/profile.js +4 -5
  110. package/lib/public/modules/project-settings.js +34 -28
  111. package/lib/public/modules/project-switcher.js +11 -5
  112. package/lib/public/modules/project-workspace-assignment.js +23 -0
  113. package/lib/public/modules/search-clay-chat.js +402 -0
  114. package/lib/public/modules/server-settings.js +14 -12
  115. package/lib/public/modules/session-actions.js +1 -1
  116. package/lib/public/modules/sidebar-mates.js +56 -552
  117. package/lib/public/modules/sidebar-mobile.js +7 -64
  118. package/lib/public/modules/sidebar-presence.js +37 -0
  119. package/lib/public/modules/split-pair-ui.js +13 -13
  120. package/lib/public/modules/split-view.js +7 -0
  121. package/lib/public/modules/sticky-notes.js +7 -6
  122. package/lib/public/modules/tool-input-composition.js +48 -0
  123. package/lib/public/modules/tool-llm-status.js +167 -0
  124. package/lib/public/modules/tool-renderer-advanced.js +285 -0
  125. package/lib/public/modules/tool-renderer-chart.js +158 -0
  126. package/lib/public/modules/tool-renderer-semantics.js +35 -0
  127. package/lib/public/modules/tool-renderer.js +464 -0
  128. package/lib/public/modules/tool-runtime.js +309 -0
  129. package/lib/public/modules/tool-ui-evaluator.js +97 -0
  130. package/lib/public/modules/tool-ui-tree.js +21 -0
  131. package/lib/public/modules/tui-attention.js +10 -0
  132. package/lib/public/modules/user-settings.js +16 -23
  133. package/lib/public/modules/vendor-login.js +287 -0
  134. package/lib/public/modules/worker-proposal.js +2 -2
  135. package/lib/public/modules/workspace-assignment-card.js +149 -0
  136. package/lib/public/modules/workspace-assignment-routing.js +4 -0
  137. package/lib/public/style.css +13 -2
  138. package/lib/runtime-env.js +65 -0
  139. package/lib/sdk-bridge.js +120 -32
  140. package/lib/sdk-message-processor.js +10 -6
  141. package/lib/server-home-capsule-creation.js +36 -0
  142. package/lib/server-home-chat-events.js +287 -0
  143. package/lib/server-home-chat.js +518 -0
  144. package/lib/server-home-clay-entry.js +65 -0
  145. package/lib/server-home-clay-session-links.js +26 -0
  146. package/lib/server-home-debate-planning.js +214 -0
  147. package/lib/server-home-debates.js +137 -0
  148. package/lib/server-home-mate-creation.js +261 -0
  149. package/lib/server-home-models.js +241 -0
  150. package/lib/server-home-preferences.js +61 -0
  151. package/lib/server-mates.js +37 -0
  152. package/lib/server-tools.js +377 -0
  153. package/lib/server.js +111 -59
  154. package/lib/session-pair-mcp-server.js +6 -6
  155. package/lib/sessions.js +18 -3
  156. package/lib/tool-capsule-source.js +142 -0
  157. package/lib/tool-control-mcp-server.js +126 -0
  158. package/lib/tool-llm.js +48 -0
  159. package/lib/tool-storage.js +77 -0
  160. package/lib/tool-ui-spec-advanced.js +82 -0
  161. package/lib/tool-ui-spec.js +261 -0
  162. package/lib/tools-registry.js +286 -0
  163. package/lib/users-home-dock-preferences.js +77 -0
  164. package/lib/users-home-surface-preferences.js +99 -0
  165. package/lib/users-preferences.js +4 -7
  166. package/lib/users.js +12 -0
  167. package/lib/whats-new-content.js +3 -3
  168. package/lib/workspace-assignment-service.js +420 -0
  169. package/lib/workspace-query-mcp-server.js +154 -0
  170. package/lib/workspace-query-service.js +492 -0
  171. package/lib/ws-schema.js +93 -12
  172. package/lib/yoke/adapters/acp.js +2 -1
  173. package/lib/yoke/adapters/antigravity.js +2 -1
  174. package/lib/yoke/adapters/claude-worker.js +11 -4
  175. package/lib/yoke/adapters/claude.js +73 -43
  176. package/lib/yoke/adapters/codex.js +40 -10
  177. package/lib/yoke/adapters/kiro.js +2 -1
  178. package/lib/yoke/claude-user-input.js +38 -0
  179. package/lib/yoke/codex-app-server.js +20 -2
  180. package/lib/yoke/codex-user-input.js +64 -0
  181. package/lib/yoke/complete-once.js +164 -0
  182. package/lib/yoke/index.js +5 -1
  183. package/lib/yoke/interface.js +19 -0
  184. package/lib/yoke/mcp-bridge-server.js +2 -6
  185. package/lib/yoke/user-input.js +254 -0
  186. package/package.json +3 -2
  187. package/lib/public/css/home-chat.css +0 -380
  188. package/lib/public/modules/home-chat.js +0 -438
  189. package/lib/server-clay-home.js +0 -245
@@ -2,8 +2,7 @@
2
2
  .mate-sidebar-avatar,
3
3
  .mate-collapsed-avatar,
4
4
  .dm-bubble-avatar,
5
- .dm-bubble-avatar-me,
6
- .home-hub-mate-avatar {
5
+ .dm-bubble-avatar-me {
7
6
  image-rendering: -webkit-optimize-contrast;
8
7
  image-rendering: smooth;
9
8
  -webkit-backface-visibility: hidden;
@@ -502,17 +501,11 @@
502
501
  background: var(--border, #333);
503
502
  }
504
503
 
505
- /* === Mate avatar in user strip: squircle + desaturate === */
504
+ /* Mate colors are muted in the generated source; custom images stay intact. */
506
505
  .icon-strip-mate .icon-strip-user-avatar {
507
506
  border-radius: 8px;
508
- filter: saturate(0.65);
509
- }
510
- .icon-strip-mate:hover .icon-strip-user-avatar,
511
- .icon-strip-mate.mention-active .icon-strip-user-avatar {
512
- filter: saturate(1);
513
507
  }
514
508
  .icon-strip-mate.active .icon-strip-user-avatar {
515
- filter: saturate(1);
516
509
  box-shadow: 0 0 0 2px var(--accent);
517
510
  border-radius: 8px;
518
511
  }
@@ -2916,31 +2909,11 @@ body.mate-dm-active .activity-inline:not(.mention-activity-bar):not(.mate-pre-ac
2916
2909
  }
2917
2910
  }
2918
2911
 
2919
- /* === Mates UI gate === */
2920
- /* body.mates-disabled is set when the user flips the Mates toggle off in
2921
- User Settings Mates. body.is-multi-user is set when the deploy hosts
2922
- more than one user. Single-user collapses the whole Mates surface;
2923
- multi-user keeps Mates-adjacent containers visible (they still host
2924
- other users) but greys out and disables the Mates-specific bits. */
2925
-
2926
- /* Always hide pure-Mates UI: rotating switch hint, individual mate
2927
- avatars in the icon strip, the home-hub mates strip, and the
2928
- "Ask Mate" button in the chat input. These never contain anything
2929
- but mates, so they collapse in both modes. */
2930
- body.mates-disabled .icon-strip-mate,
2931
- body.mates-disabled #icon-strip-hint-mate,
2932
- body.mates-disabled #home-hub-mates,
2933
- body.mates-disabled #ask-mate-btn {
2934
- display: none !important;
2935
- }
2936
-
2937
- /* Single-user only: collapse the whole icon-strip mate wrapper since it
2938
- shares space with the user-strip but has no other users to display in
2939
- single-user mode. The DM picker stays visible in both modes so the
2940
- user always has a way to discover the toggle (single-user can't reach
2941
- the picker today since the + button lives inside the wrapper, but if
2942
- that ever changes the same disabled UX applies). */
2943
- body.mates-disabled:not(.is-multi-user) #icon-strip-mate-section {
2912
+ /* === Project Mate DM gate === */
2913
+ /* This preference hides only legacy/project-local Mate DM shortcuts.
2914
+ Home, Mate mentions, creation, debates, and memory remain available. */
2915
+ body.project-mate-dms-disabled .icon-strip-mate,
2916
+ body.project-mate-dms-disabled #icon-strip-hint-mate {
2944
2917
  display: none !important;
2945
2918
  }
2946
2919
 
@@ -135,7 +135,7 @@ body.pane-mode #input-area {
135
135
  }
136
136
 
137
137
  .split-pair-role-driver { color: var(--accent); background: color-mix(in srgb, var(--accent) 13%, transparent); }
138
- .split-pair-role-worker { color: var(--text-secondary); background: var(--bg-alt); }
138
+ .split-pair-role-split-worker { color: var(--text-secondary); background: var(--bg-alt); }
139
139
 
140
140
  /* Pair roles are status labels. Control remains with the Driver through MCP. */
141
141
 
@@ -175,90 +175,10 @@
175
175
  color: var(--text);
176
176
  }
177
177
 
178
- /* --- Hub playbook cards --- */
179
- .hub-playbooks {
180
- animation: hubCardIn 0.4s ease 0.20s both;
181
- }
182
- .hub-playbooks-grid {
183
- display: flex;
184
- gap: 8px;
185
- flex-wrap: wrap;
186
- }
187
- .hub-playbook-card {
188
- display: flex;
189
- align-items: center;
190
- gap: 10px;
191
- padding: 10px 14px;
192
- background: rgba(var(--overlay-rgb), 0.03);
193
- border: 1px solid var(--border-subtle);
194
- border-radius: 10px;
195
- cursor: pointer;
196
- transition: background 0.15s, border-color 0.15s;
197
- flex: 1;
198
- min-width: 180px;
199
- }
200
- .hub-playbook-card:hover {
201
- background: rgba(var(--overlay-rgb), 0.07);
202
- border-color: var(--accent);
203
- }
204
- .hub-playbook-card.completed {
205
- background: rgba(76, 175, 80, 0.08);
206
- border-color: rgba(76, 175, 80, 0.25);
207
- }
208
- .hub-playbook-card.completed:hover {
209
- background: rgba(76, 175, 80, 0.14);
210
- border-color: rgba(76, 175, 80, 0.4);
211
- }
212
- .hub-playbook-card-icon {
213
- font-size: 18px;
214
- flex-shrink: 0;
215
- }
216
- .hub-playbook-card-body {
217
- flex: 1;
218
- min-width: 0;
219
- }
220
- .hub-playbook-card-title {
221
- font-size: 13px;
222
- font-weight: 600;
223
- color: var(--text);
224
- }
225
- .hub-playbook-card-desc {
226
- font-size: 11px;
227
- color: var(--text-dimmer);
228
- overflow: hidden;
229
- text-overflow: ellipsis;
230
- white-space: nowrap;
231
- }
232
- .hub-playbook-card-check {
233
- color: var(--success);
234
- font-size: 14px;
235
- flex-shrink: 0;
236
- }
237
-
238
- /* --- Tip "Try it" button (inline after text) --- */
239
- .hub-tip-try {
240
- display: inline;
241
- padding: 0;
242
- border: none;
243
- background: none;
244
- color: var(--accent);
245
- font-size: inherit;
246
- font-weight: 600;
247
- cursor: pointer;
248
- margin-left: 6px;
249
- font-family: inherit;
250
- }
251
- .hub-tip-try:hover {
252
- background: var(--accent-12);
253
- }
254
-
255
178
  /* --- Mobile --- */
256
179
  @media (max-width: 768px) {
257
180
  .playbook-modal {
258
181
  width: 95vw;
259
182
  border-radius: 12px;
260
183
  }
261
- .hub-playbook-card {
262
- min-width: 140px;
263
- }
264
184
  }
@@ -52,6 +52,25 @@
52
52
 
53
53
  .sticky-notes-count.hidden { display: none; }
54
54
 
55
+ /* --- Clay brand stationery palette, independent of the selected editor skin --- */
56
+ :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot) {
57
+ --note-surface: color-mix(in oklch, var(--note-tone) 40%, var(--brand-paper));
58
+ --note-border: color-mix(in oklch, var(--note-tone) 62%, #c7c7c1);
59
+ --note-ink: color-mix(in oklch, var(--note-tone) 20%, var(--brand-ink));
60
+ --note-swatch: color-mix(in srgb, var(--note-surface) 58%, transparent);
61
+ }
62
+ .dark-theme :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot) {
63
+ --note-surface: color-mix(in oklch, var(--note-tone) 40%, var(--brand-ink));
64
+ --note-border: color-mix(in oklch, var(--note-tone) 60%, #393934);
65
+ --note-ink: color-mix(in oklch, var(--note-tone) 18%, var(--brand-paper));
66
+ }
67
+ :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot)[data-color="purple"] { --note-tone: var(--brand-indigo); }
68
+ :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot)[data-color="green"] { --note-tone: var(--brand-green); }
69
+ :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot)[data-color="yellow"] { --note-tone: var(--brand-gold); }
70
+ :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot)[data-color="blue"] { --note-tone: var(--brand-blue); }
71
+ :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot)[data-color="pink"] { --note-tone: var(--brand-coral); }
72
+ :is(.sticky-note, .notes-archive-card, .sticky-note-color-dot)[data-color="orange"] { --note-tone: var(--brand-clay); }
73
+
55
74
  /* --- Individual note --- */
56
75
  .sticky-note.hidden { display: none; }
57
76
 
@@ -64,6 +83,11 @@
64
83
  flex-direction: column;
65
84
  min-width: 160px;
66
85
  min-height: 80px;
86
+ border: 1px solid color-mix(in srgb, var(--note-border) calc(var(--note-opacity, 0.64) * 100%), transparent);
87
+ background: color-mix(in srgb, var(--note-surface) calc(var(--note-opacity, 0.64) * 100%), transparent);
88
+ -webkit-backdrop-filter: blur(7px) saturate(0.92) contrast(1.02);
89
+ backdrop-filter: blur(7px) saturate(0.92) contrast(1.02);
90
+ color: var(--note-ink);
67
91
  transition: box-shadow 0.15s;
68
92
  overflow: hidden;
69
93
  }
@@ -88,22 +112,6 @@
88
112
  transition: none;
89
113
  }
90
114
 
91
- /* --- Note color themes (light) --- */
92
- .sticky-note[data-color="yellow"] { background: color-mix(in srgb, #FFF9C4 calc(var(--note-opacity, 1) * 100%), transparent); border: 1px solid color-mix(in srgb, #EFD74E calc(var(--note-opacity, 1) * 100%), transparent); }
93
- .sticky-note[data-color="blue"] { background: color-mix(in srgb, #BBDEFB calc(var(--note-opacity, 1) * 100%), transparent); border: 1px solid color-mix(in srgb, #64B5F6 calc(var(--note-opacity, 1) * 100%), transparent); }
94
- .sticky-note[data-color="green"] { background: color-mix(in srgb, #C8E6C9 calc(var(--note-opacity, 1) * 100%), transparent); border: 1px solid color-mix(in srgb, #66BB6A calc(var(--note-opacity, 1) * 100%), transparent); }
95
- .sticky-note[data-color="pink"] { background: color-mix(in srgb, #F8BBD0 calc(var(--note-opacity, 1) * 100%), transparent); border: 1px solid color-mix(in srgb, #F06292 calc(var(--note-opacity, 1) * 100%), transparent); }
96
- .sticky-note[data-color="orange"] { background: color-mix(in srgb, #FFE0B2 calc(var(--note-opacity, 1) * 100%), transparent); border: 1px solid color-mix(in srgb, #FFA726 calc(var(--note-opacity, 1) * 100%), transparent); }
97
- .sticky-note[data-color="purple"] { background: color-mix(in srgb, #E1BEE7 calc(var(--note-opacity, 1) * 100%), transparent); border: 1px solid color-mix(in srgb, #AB47BC calc(var(--note-opacity, 1) * 100%), transparent); }
98
-
99
- /* --- Note color themes (dark) --- */
100
- .dark-theme .sticky-note[data-color="yellow"] { background: color-mix(in srgb, #3D3A1E calc(var(--note-opacity, 1) * 100%), transparent); border-color: color-mix(in srgb, #8B7E2A calc(var(--note-opacity, 1) * 100%), transparent); }
101
- .dark-theme .sticky-note[data-color="blue"] { background: color-mix(in srgb, #1A2A3D calc(var(--note-opacity, 1) * 100%), transparent); border-color: color-mix(in srgb, #3A7BD5 calc(var(--note-opacity, 1) * 100%), transparent); }
102
- .dark-theme .sticky-note[data-color="green"] { background: color-mix(in srgb, #1A2D1A calc(var(--note-opacity, 1) * 100%), transparent); border-color: color-mix(in srgb, #4A8F4A calc(var(--note-opacity, 1) * 100%), transparent); }
103
- .dark-theme .sticky-note[data-color="pink"] { background: color-mix(in srgb, #3D1A2A calc(var(--note-opacity, 1) * 100%), transparent); border-color: color-mix(in srgb, #C44A72 calc(var(--note-opacity, 1) * 100%), transparent); }
104
- .dark-theme .sticky-note[data-color="orange"] { background: color-mix(in srgb, #3D2A1A calc(var(--note-opacity, 1) * 100%), transparent); border-color: color-mix(in srgb, #C47A3A calc(var(--note-opacity, 1) * 100%), transparent); }
105
- .dark-theme .sticky-note[data-color="purple"] { background: color-mix(in srgb, #2A1A3D calc(var(--note-opacity, 1) * 100%), transparent); border-color: color-mix(in srgb, #8A4AAA calc(var(--note-opacity, 1) * 100%), transparent); }
106
-
107
115
  /* --- Header (drag bar) --- */
108
116
  .sticky-note-header {
109
117
  display: flex;
@@ -113,8 +121,8 @@
113
121
  user-select: none;
114
122
  flex-shrink: 0;
115
123
  }
116
- /* Apply note opacity to body content, not the whole element */
117
- .sticky-note .sticky-note-body { opacity: var(--note-opacity, 1); }
124
+ /* Keep writing legible while the stationery surface becomes translucent. */
125
+ .sticky-note .sticky-note-body { opacity: max(0.78, var(--note-opacity, 0.64)); }
118
126
  /* On hover, header stays fully visible */
119
127
  .sticky-note:hover .sticky-note-header { opacity: 1; }
120
128
 
@@ -159,7 +167,7 @@
159
167
  }
160
168
 
161
169
  .sticky-note:hover .sticky-note-header button { opacity: 0.5; }
162
- .sticky-note .sticky-note-header button:hover { opacity: 0.9; background: rgba(0,0,0,0.06); }
170
+ .sticky-note .sticky-note-header button:hover { opacity: 0.9; background: color-mix(in srgb, var(--note-ink) 8%, transparent); }
163
171
 
164
172
  /* Opacity slider */
165
173
  .sticky-note-opacity {
@@ -178,7 +186,7 @@
178
186
  appearance: none;
179
187
  width: 32px;
180
188
  height: 2px;
181
- background: rgba(0,0,0,0.15);
189
+ background: color-mix(in srgb, var(--note-ink) 18%, transparent);
182
190
  border-radius: 1px;
183
191
  cursor: pointer;
184
192
  margin: 0;
@@ -189,7 +197,7 @@
189
197
  width: 8px;
190
198
  height: 8px;
191
199
  border-radius: 50%;
192
- background: rgba(0,0,0,0.35);
200
+ background: color-mix(in srgb, var(--note-ink) 42%, transparent);
193
201
  border: none;
194
202
  cursor: pointer;
195
203
  }
@@ -197,32 +205,15 @@
197
205
  width: 8px;
198
206
  height: 8px;
199
207
  border-radius: 50%;
200
- background: rgba(0,0,0,0.35);
208
+ background: color-mix(in srgb, var(--note-ink) 42%, transparent);
201
209
  border: none;
202
210
  cursor: pointer;
203
211
  }
204
- .dark-theme .sticky-note-opacity-slider { background: rgba(255,255,255,0.15); }
205
- .dark-theme .sticky-note-opacity-slider::-webkit-slider-thumb { background: rgba(255,255,255,0.4); }
206
- .dark-theme .sticky-note-opacity-slider::-moz-range-thumb { background: rgba(255,255,255,0.4); }
207
- .dark-theme .sticky-note-opacity-slider { accent-color: rgba(255,255,255,0.4); }
212
+ .sticky-note-opacity-slider { accent-color: var(--note-ink); }
208
213
 
209
214
  .sticky-note-header button .lucide { width: 13px; height: 13px; }
210
215
 
211
- /* Text colors per note color (light) */
212
- .sticky-note[data-color="yellow"] .sticky-note-header button { color: #6D5E00; }
213
- .sticky-note[data-color="blue"] .sticky-note-header button { color: #0D47A1; }
214
- .sticky-note[data-color="green"] .sticky-note-header button { color: #1B5E20; }
215
- .sticky-note[data-color="pink"] .sticky-note-header button { color: #880E4F; }
216
- .sticky-note[data-color="orange"] .sticky-note-header button { color: #E65100; }
217
- .sticky-note[data-color="purple"] .sticky-note-header button { color: #4A148C; }
218
-
219
- /* Text colors per note color (dark) */
220
- .dark-theme .sticky-note[data-color="yellow"] .sticky-note-header button { color: #E8E0A8; }
221
- .dark-theme .sticky-note[data-color="blue"] .sticky-note-header button { color: #B0D4F1; }
222
- .dark-theme .sticky-note[data-color="green"] .sticky-note-header button { color: #B0D8B0; }
223
- .dark-theme .sticky-note[data-color="pink"] .sticky-note-header button { color: #F0B8CC; }
224
- .dark-theme .sticky-note[data-color="orange"] .sticky-note-header button { color: #F0D0A8; }
225
- .dark-theme .sticky-note[data-color="purple"] .sticky-note-header button { color: #D8B8F0; }
216
+ .sticky-note .sticky-note-header button { color: var(--note-ink); }
226
217
 
227
218
  /* --- Placeholder for empty contenteditable --- */
228
219
  .sticky-note-rendered.is-empty::before {
@@ -263,21 +254,7 @@
263
254
  color: inherit;
264
255
  }
265
256
 
266
- /* Body text colors (light) */
267
- .sticky-note[data-color="yellow"] .sticky-note-body { color: #5D4E00; }
268
- .sticky-note[data-color="blue"] .sticky-note-body { color: #0D47A1; }
269
- .sticky-note[data-color="green"] .sticky-note-body { color: #1B5E20; }
270
- .sticky-note[data-color="pink"] .sticky-note-body { color: #880E4F; }
271
- .sticky-note[data-color="orange"] .sticky-note-body { color: #E65100; }
272
- .sticky-note[data-color="purple"] .sticky-note-body { color: #4A148C; }
273
-
274
- /* Body text colors (dark) */
275
- .dark-theme .sticky-note[data-color="yellow"] .sticky-note-body { color: #E8E0A8; }
276
- .dark-theme .sticky-note[data-color="blue"] .sticky-note-body { color: #B0D4F1; }
277
- .dark-theme .sticky-note[data-color="green"] .sticky-note-body { color: #B0D8B0; }
278
- .dark-theme .sticky-note[data-color="pink"] .sticky-note-body { color: #F0B8CC; }
279
- .dark-theme .sticky-note[data-color="orange"] .sticky-note-body { color: #F0D0A8; }
280
- .dark-theme .sticky-note[data-color="purple"] .sticky-note-body { color: #D8B8F0; }
257
+ .sticky-note .sticky-note-body { color: var(--note-ink); }
281
258
 
282
259
  .sticky-note-text::placeholder {
283
260
  opacity: 0.35;
@@ -451,17 +428,13 @@
451
428
  transition: transform 0.1s, border-color 0.15s;
452
429
  padding: 0;
453
430
  background: none;
431
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--note-border) 68%, transparent);
454
432
  }
455
433
 
456
434
  .sticky-note-color-dot:hover { transform: scale(1.2); }
457
435
  .sticky-note-color-dot.active { border-color: var(--text); }
458
436
 
459
- .sticky-note-color-dot[data-color="yellow"] { background: #F9E04B; }
460
- .sticky-note-color-dot[data-color="blue"] { background: #64B5F6; }
461
- .sticky-note-color-dot[data-color="green"] { background: #66BB6A; }
462
- .sticky-note-color-dot[data-color="pink"] { background: #F06292; }
463
- .sticky-note-color-dot[data-color="orange"] { background: #FFA726; }
464
- .sticky-note-color-dot[data-color="purple"] { background: #AB47BC; }
437
+ .sticky-note-color-dot { background: var(--note-swatch); }
465
438
 
466
439
  /* --- Format toolbar (WYSIWYG selection popup) --- */
467
440
  .sn-format-toolbar {
@@ -526,12 +499,9 @@
526
499
  }
527
500
  .sticky-note-md-btn.active {
528
501
  opacity: 1 !important;
529
- background: rgba(0, 0, 0, 0.12) !important;
502
+ background: color-mix(in srgb, var(--note-ink) 12%, transparent) !important;
530
503
  border-radius: 4px;
531
504
  }
532
- .dark-theme .sticky-note-md-btn.active {
533
- background: rgba(255, 255, 255, 0.15) !important;
534
- }
535
505
 
536
506
  .sn-fmt-bold { font-weight: 800; }
537
507
  .sn-fmt-italic { font-style: italic; }
@@ -697,6 +667,9 @@
697
667
  flex-direction: column;
698
668
  min-height: 80px;
699
669
  max-height: 200px;
670
+ border: 1px solid var(--note-border);
671
+ background: var(--note-surface);
672
+ color: var(--note-ink);
700
673
  transition: transform 0.15s, box-shadow 0.15s;
701
674
  box-shadow: 0 1px 4px rgba(var(--shadow-rgb), 0.1);
702
675
  }
@@ -706,22 +679,6 @@
706
679
  box-shadow: 0 4px 16px rgba(var(--shadow-rgb), 0.18);
707
680
  }
708
681
 
709
- /* Card colors (light) */
710
- .notes-archive-card[data-color="yellow"] { background: #FFF9C4; border: 1px solid #EFD74E; }
711
- .notes-archive-card[data-color="blue"] { background: #BBDEFB; border: 1px solid #64B5F6; }
712
- .notes-archive-card[data-color="green"] { background: #C8E6C9; border: 1px solid #66BB6A; }
713
- .notes-archive-card[data-color="pink"] { background: #F8BBD0; border: 1px solid #F06292; }
714
- .notes-archive-card[data-color="orange"] { background: #FFE0B2; border: 1px solid #FFA726; }
715
- .notes-archive-card[data-color="purple"] { background: #E1BEE7; border: 1px solid #AB47BC; }
716
-
717
- /* Card colors (dark) */
718
- .dark-theme .notes-archive-card[data-color="yellow"] { background: #3D3A1E; border-color: #8B7E2A; }
719
- .dark-theme .notes-archive-card[data-color="blue"] { background: #1A2A3D; border-color: #3A7BD5; }
720
- .dark-theme .notes-archive-card[data-color="green"] { background: #1A2D1A; border-color: #4A8F4A; }
721
- .dark-theme .notes-archive-card[data-color="pink"] { background: #3D1A2A; border-color: #C44A72; }
722
- .dark-theme .notes-archive-card[data-color="orange"] { background: #3D2A1A; border-color: #C47A3A; }
723
- .dark-theme .notes-archive-card[data-color="purple"] { background: #2A1A3D; border-color: #8A4AAA; }
724
-
725
682
  /* Archived (hidden from canvas) cards — dimmed with indicator */
726
683
  .notes-archive-card.archived {
727
684
  opacity: 0.55;
@@ -750,21 +707,7 @@
750
707
  min-width: 0;
751
708
  }
752
709
 
753
- /* Title text colors (light) */
754
- .notes-archive-card[data-color="yellow"] .notes-archive-card-title { color: #6D5E00; }
755
- .notes-archive-card[data-color="blue"] .notes-archive-card-title { color: #0D47A1; }
756
- .notes-archive-card[data-color="green"] .notes-archive-card-title { color: #1B5E20; }
757
- .notes-archive-card[data-color="pink"] .notes-archive-card-title { color: #880E4F; }
758
- .notes-archive-card[data-color="orange"] .notes-archive-card-title { color: #E65100; }
759
- .notes-archive-card[data-color="purple"] .notes-archive-card-title { color: #4A148C; }
760
-
761
- /* Title text colors (dark) */
762
- .dark-theme .notes-archive-card[data-color="yellow"] .notes-archive-card-title { color: #E8E0A8; }
763
- .dark-theme .notes-archive-card[data-color="blue"] .notes-archive-card-title { color: #B0D4F1; }
764
- .dark-theme .notes-archive-card[data-color="green"] .notes-archive-card-title { color: #B0D8B0; }
765
- .dark-theme .notes-archive-card[data-color="pink"] .notes-archive-card-title { color: #F0B8CC; }
766
- .dark-theme .notes-archive-card[data-color="orange"] .notes-archive-card-title { color: #F0D0A8; }
767
- .dark-theme .notes-archive-card[data-color="purple"] .notes-archive-card-title { color: #D8B8F0; }
710
+ .notes-archive-card-title { color: var(--note-ink); }
768
711
 
769
712
  /* --- Delete button --- */
770
713
  .notes-archive-card-delete {
@@ -785,7 +728,7 @@
785
728
 
786
729
  .notes-archive-card-delete .lucide { width: 14px; height: 14px; }
787
730
  .notes-archive-card:hover .notes-archive-card-delete { opacity: 0.5; }
788
- .notes-archive-card-delete:hover { opacity: 1 !important; background: rgba(0,0,0,0.08); }
731
+ .notes-archive-card-delete:hover { opacity: 1 !important; background: color-mix(in srgb, var(--note-ink) 9%, transparent); }
789
732
 
790
733
  /* --- Restore button (archived cards) --- */
791
734
  .notes-archive-card-restore {
@@ -794,7 +737,7 @@
794
737
  gap: 4px;
795
738
  height: 24px;
796
739
  border: none;
797
- background: rgba(0, 0, 0, 0.06);
740
+ background: color-mix(in srgb, var(--note-ink) 7%, transparent);
798
741
  border-radius: 6px;
799
742
  cursor: pointer;
800
743
  flex-shrink: 0;
@@ -807,9 +750,7 @@
807
750
  transition: opacity 0.15s, background 0.15s;
808
751
  }
809
752
  .notes-archive-card-restore .lucide { width: 12px; height: 12px; }
810
- .notes-archive-card-restore:hover { opacity: 1; background: rgba(0, 0, 0, 0.1); }
811
- .dark-theme .notes-archive-card-restore { background: rgba(255, 255, 255, 0.08); }
812
- .dark-theme .notes-archive-card-restore:hover { background: rgba(255, 255, 255, 0.14); }
753
+ .notes-archive-card-restore:hover { opacity: 1; background: color-mix(in srgb, var(--note-ink) 12%, transparent); }
813
754
 
814
755
  /* Confirm-delete state: red trash */
815
756
  .notes-archive-card.confirm-delete .notes-archive-card-delete {
@@ -837,21 +778,7 @@
837
778
  word-break: break-word;
838
779
  }
839
780
 
840
- /* Body text colors (light) */
841
- .notes-archive-card[data-color="yellow"] .notes-archive-card-body { color: #5D4E00; }
842
- .notes-archive-card[data-color="blue"] .notes-archive-card-body { color: #0D47A1; }
843
- .notes-archive-card[data-color="green"] .notes-archive-card-body { color: #1B5E20; }
844
- .notes-archive-card[data-color="pink"] .notes-archive-card-body { color: #880E4F; }
845
- .notes-archive-card[data-color="orange"] .notes-archive-card-body { color: #E65100; }
846
- .notes-archive-card[data-color="purple"] .notes-archive-card-body { color: #4A148C; }
847
-
848
- /* Body text colors (dark) */
849
- .dark-theme .notes-archive-card[data-color="yellow"] .notes-archive-card-body { color: #E8E0A8; }
850
- .dark-theme .notes-archive-card[data-color="blue"] .notes-archive-card-body { color: #B0D4F1; }
851
- .dark-theme .notes-archive-card[data-color="green"] .notes-archive-card-body { color: #B0D8B0; }
852
- .dark-theme .notes-archive-card[data-color="pink"] .notes-archive-card-body { color: #F0B8CC; }
853
- .dark-theme .notes-archive-card[data-color="orange"] .notes-archive-card-body { color: #F0D0A8; }
854
- .dark-theme .notes-archive-card[data-color="purple"] .notes-archive-card-body { color: #D8B8F0; }
781
+ .notes-archive-card-body { color: var(--note-ink); }
855
782
 
856
783
  .notes-archive-card-body code {
857
784
  font-family: "Roboto Mono", monospace;
@@ -864,6 +791,15 @@
864
791
  background: rgba(255,255,255,0.08);
865
792
  }
866
793
 
794
+ @media (prefers-reduced-transparency: reduce) {
795
+ .sticky-note {
796
+ -webkit-backdrop-filter: none;
797
+ backdrop-filter: none;
798
+ border-color: var(--note-border);
799
+ background: var(--note-surface);
800
+ }
801
+ }
802
+
867
803
  /* --- Sidebar button active state --- */
868
804
  #sticky-notes-sidebar-btn.active {
869
805
  background: var(--sidebar-active);
@@ -534,50 +534,6 @@ body.tui-suspended #tui-resume-bar {
534
534
  transform: scale(1.2);
535
535
  }
536
536
 
537
- /* ============================================================
538
- Home page "What's New" index (title-only list, blog-style)
539
- ============================================================ */
540
- .hub-whats-new {
541
- display: flex;
542
- flex-direction: column;
543
- }
544
- .hub-whats-new-item {
545
- display: flex;
546
- align-items: baseline;
547
- gap: 12px;
548
- padding: 10px 4px;
549
- border: none;
550
- background: transparent;
551
- text-align: left;
552
- cursor: pointer;
553
- color: var(--text);
554
- border-bottom: 1px solid var(--border);
555
- transition: background 120ms ease;
556
- width: 100%;
557
- }
558
- .hub-whats-new-item:last-child {
559
- border-bottom: none;
560
- }
561
- .hub-whats-new-item:hover {
562
- background: rgba(var(--overlay-rgb), 0.04);
563
- }
564
- .hub-whats-new-item-date {
565
- font-size: 11px;
566
- color: var(--text-dimmer);
567
- flex-shrink: 0;
568
- width: 84px;
569
- font-variant-numeric: tabular-nums;
570
- }
571
- .hub-whats-new-item-title {
572
- margin: 0;
573
- font-size: 14px;
574
- font-weight: 500;
575
- line-height: 1.4;
576
- color: var(--text);
577
- flex: 1 1 auto;
578
- min-width: 0;
579
- }
580
-
581
537
  /* ============================================================
582
538
  Whats New article (blog-style reading view)
583
539
  ============================================================
@@ -0,0 +1,45 @@
1
+ .workspace-assignment-card {
2
+ width: min(620px, calc(100% - 32px));
3
+ margin: 14px auto;
4
+ padding: 15px 16px;
5
+ border: 1px solid var(--border);
6
+ border-radius: 12px;
7
+ background: var(--bg-alt);
8
+ color: var(--text);
9
+ box-shadow: 0 8px 24px rgba(var(--overlay-rgb), 0.08);
10
+ }
11
+
12
+ .workspace-assignment-header { display: grid; grid-template-columns: 30px minmax(0, 1fr) auto; align-items: center; gap: 10px; }
13
+ .workspace-assignment-mark { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; color: var(--accent); background: var(--accent-bg); }
14
+ .workspace-assignment-mark .lucide { width: 15px; height: 15px; stroke-width: 1.8; }
15
+ .workspace-assignment-heading { min-width: 0; }
16
+ .workspace-assignment-kicker { display: block; color: var(--text-dimmer); font-size: 9px; font-weight: 700; letter-spacing: 0.08em; }
17
+ .workspace-assignment-title { margin: 2px 0 0; overflow: hidden; color: var(--text); font: inherit; font-size: 14px; font-weight: 650; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; }
18
+ .workspace-assignment-status { padding: 4px 7px; border-radius: 999px; color: var(--text-muted); background: var(--code-bg); font-size: 10px; white-space: nowrap; }
19
+ .workspace-assignment-target { margin: 13px 0 5px; color: var(--accent); font-size: 11px; font-weight: 600; }
20
+ .workspace-assignment-task { margin: 0; color: var(--text-muted); font-size: 12px; line-height: 1.55; white-space: pre-wrap; }
21
+ .workspace-assignment-error, .workspace-assignment-result { margin: 11px 0 0; padding: 8px 10px; border-radius: 8px; font-size: 11px; line-height: 1.45; white-space: pre-wrap; }
22
+ .workspace-assignment-error { color: var(--error); background: var(--error-8); }
23
+ .workspace-assignment-result { color: var(--text-muted); background: var(--code-bg); }
24
+ .workspace-assignment-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; margin-top: 13px; }
25
+ .workspace-assignment-action { min-height: 34px; padding: 0 13px; border-radius: 8px; font: inherit; font-size: 11px; font-weight: 650; cursor: pointer; }
26
+ .workspace-assignment-action.secondary { border: 1px solid var(--border); background: transparent; color: var(--text-muted); }
27
+ .workspace-assignment-action.primary { border: 1px solid var(--accent); background: var(--accent); color: var(--accent-text, #fff); }
28
+ .workspace-assignment-action:not(:disabled):hover { filter: brightness(1.06); }
29
+ .workspace-assignment-action:disabled { cursor: default; opacity: 0.58; }
30
+ .workspace-assignment-action:focus-visible, .workspace-assignment-resolved:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
31
+ .workspace-assignment-resolved { color: var(--text-muted); font-size: 11px; }
32
+ .workspace-assignment-card[data-status="running"] .workspace-assignment-status,
33
+ .workspace-assignment-card[data-status="starting"] .workspace-assignment-status { color: var(--accent); background: var(--accent-bg); }
34
+ .workspace-assignment-card[data-status="completed"] { border-color: color-mix(in srgb, var(--success) 38%, var(--border)); }
35
+ .workspace-assignment-card[data-status="completed"] .workspace-assignment-status { color: var(--success); }
36
+ .workspace-assignment-card[data-status="failed"] .workspace-assignment-status,
37
+ .workspace-assignment-card[data-status="interrupted"] .workspace-assignment-status { color: var(--error); }
38
+
39
+ @media (max-width: 600px) {
40
+ .workspace-assignment-card { width: calc(100% - 24px); padding: 14px; }
41
+ .workspace-assignment-header { grid-template-columns: 28px minmax(0, 1fr); }
42
+ .workspace-assignment-status { grid-column: 2; justify-self: start; }
43
+ .workspace-assignment-actions { align-items: stretch; }
44
+ .workspace-assignment-action { flex: 1; }
45
+ }
@@ -0,0 +1,93 @@
1
+ Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+
5
+ This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.