dsh-claude-style 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +74 -59
- package/README.en.md +3 -2
- package/README.md +12 -4
- package/docs/STYLE.md +8 -5
- package/lib/client.js +1012 -119
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* GENERATED FILE — do not edit. Source lives in src/ (JS zones as fragments,
|
|
5
5
|
* stylesheets as plain CSS); `node scripts/build.mjs` assembles this bundle.
|
|
6
6
|
* - src/constants.js Zone 1: Constants & Tokens
|
|
7
|
+
* - src/assets/*.svg Brand marks (inlined as CSS url() data URIs at build time)
|
|
7
8
|
* - src/styles/*.css Zone 2: Stylesheets (tokens, typography, chrome,
|
|
8
9
|
* composer, sidebar, components)
|
|
9
10
|
* - src/context.js Zone 3: DSH Context & Helpers
|
|
@@ -29,6 +30,24 @@ window.__ModuleLoader__.load({
|
|
|
29
30
|
|
|
30
31
|
var COMPOSER_HINT = 'How can I help you today?'
|
|
31
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Model-picker copy. The host's model catalog only carries English
|
|
35
|
+
* descriptions for its two builtin DeepSeek models, so the skin mirrors
|
|
36
|
+
* the host dictionary's zh strings for them (raw descriptions otherwise).
|
|
37
|
+
* `deepseek-official` is the provider group id of DeepSeek's own service.
|
|
38
|
+
*/
|
|
39
|
+
var MODEL_OFFICIAL_GROUP = 'deepseek-official'
|
|
40
|
+
var MODEL_FALLBACK_LABEL = '选择模型'
|
|
41
|
+
var MODEL_LOADING_LABEL = '正在加载模型…'
|
|
42
|
+
var MODEL_EMPTY_LABEL = '没有可用的模型。'
|
|
43
|
+
var MODEL_EFFORT_LABEL = '推理等级'
|
|
44
|
+
var MODEL_EFFORT_DEFAULT = 'Default'
|
|
45
|
+
var MODEL_MORE_LABEL = 'More models'
|
|
46
|
+
var MODEL_DESCRIPTIONS = {
|
|
47
|
+
'deepseek-official/deepseek-v4-flash': '快速、高效且经济;适合目标明确、常规或并行任务。',
|
|
48
|
+
'deepseek-official/deepseek-v4-pro': '更强的自主编码、知识与复杂推理能力;适合复杂或质量优先的任务,但成本更高。',
|
|
49
|
+
}
|
|
50
|
+
|
|
32
51
|
/** English weekday names, indexed by Date#getDay() (0 = Sunday). */
|
|
33
52
|
var WEEKDAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
|
|
34
53
|
|
|
@@ -98,9 +117,6 @@ window.__ModuleLoader__.load({
|
|
|
98
117
|
'Spinning', 'Twisting', 'Unfurling', 'Unravelling', 'Vibing', 'Whirring'
|
|
99
118
|
]
|
|
100
119
|
|
|
101
|
-
/** Anthropic's starburst mark as an inline data URI, keeping the skin a single-file bundle with no asset request. */
|
|
102
|
-
var ANTHROPIC_MARK = "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z' fill='%23D97757'/%3E%3C/svg%3E\")"
|
|
103
|
-
|
|
104
120
|
/** Segment label and the shipped /permission preset it selects. */
|
|
105
121
|
var PERMISSION_SEGMENTS = [
|
|
106
122
|
{ label: 'Read', preset: 'read-only' },
|
|
@@ -147,75 +163,8 @@ window.__ModuleLoader__.load({
|
|
|
147
163
|
/** The document attribute the stylesheet switches on. */
|
|
148
164
|
var BRAND_ATTR = 'data-dsh-claude-brand'
|
|
149
165
|
|
|
150
|
-
/**
|
|
151
|
-
* Claude's own brand lockup, taken from the official artwork (claude.ai via
|
|
152
|
-
* Wikimedia Commons, public domain as a simple geometric/text logo). The mark
|
|
153
|
-
* and the wordmark ship as two separate alpha masks so each can be sized
|
|
154
|
-
* independently: the sidebar pairs the starburst with the wordmark, while the
|
|
155
|
-
* new-conversation hero uses the starburst alone with the clay fill baked in.
|
|
156
|
-
*
|
|
157
|
-
* Two details are load-bearing:
|
|
158
|
-
* - The source paths live in the artwork's own coordinate space and are
|
|
159
|
-
* wrapped in a group transform, so every mask has to carry that same
|
|
160
|
-
* `translate` or the tight viewBox crops the geometry away entirely.
|
|
161
|
-
* - `#` and `'` stay percent-encoded inside the data URI. A literal `#`
|
|
162
|
-
* starts a fragment and truncates the URI at that point.
|
|
163
|
-
*/
|
|
164
|
-
var CLAUDE_TRANSFORM = "translate(-75.96,-223.53)"
|
|
165
|
-
/** Tight viewBox of the starburst alone (148.09 x 148.18 user units). */
|
|
166
|
-
var CLAUDE_MARK_VIEWBOX = '0 0 148.09 148.18'
|
|
167
|
-
/** Tight viewBox of the wordmark alone, excluding the starburst. */
|
|
168
|
-
var CLAUDE_WORD_VIEWBOX = '177.76 14.09 512.22 121.54'
|
|
169
|
-
/** Aspect ratio of the wordmark, so callers can size it from the height. */
|
|
166
|
+
/** Wordmark aspect ratio; scripts/build.mjs sizes the sidebar word height from it (geometry lives in src/assets/claude-word.svg). */
|
|
170
167
|
var CLAUDE_WORD_ASPECT = 512.22 / 121.54
|
|
171
|
-
/** Aspect ratio of the full mark+wordmark lockup. */
|
|
172
|
-
var CLAUDE_LOCKUP_ASPECT = 689.98 / 148.18
|
|
173
|
-
|
|
174
|
-
/** Starburst path, in the artwork's own (pre-transform) coordinates. */
|
|
175
|
-
var CLAUDE_MARK_PATH = 'm 105.01,322.07 29.14,-16.35 0.49,-1.42 -0.49,-0.79 h -1.42 l -4.87,-0.3 -16.65,-0.45 -14.44,-0.6 -13.99,-0.75 -3.52,-0.75 -3.3,-4.35 0.34,-2.17 2.96,-1.99 4.24,0.37 9.37,0.64 14.06,0.97 10.2,0.6 15.11,1.57 h 2.4 l 0.34,-0.97 -0.82,-0.6 -0.64,-0.6 -14.55,-9.86 -15.75,-10.42 -8.25,-6 -4.46,-3.04 -2.25,-2.85 -0.97,-6.22 4.05,-4.46 5.44,0.37 1.39,0.37 5.51,4.24 11.77,9.11 15.37,11.32 2.25,1.87 0.9,-0.64 0.11,-0.45 -1.01,-1.69 -8.36,-15.11 -8.92,-15.37 -3.97,-6.37 -1.05,-3.82 c -0.37,-1.57 -0.64,-2.89 -0.64,-4.5 l 4.61,-6.26 2.55,-0.82 6.15,0.82 2.59,2.25 3.82,8.74 6.19,13.76 9.6,18.71 2.81,5.55 1.5,5.14 0.56,1.57 h 0.97 v -0.9 l 0.79,-10.54 1.46,-12.94 1.42,-16.65 0.49,-4.69 2.32,-5.62 4.61,-3.04 3.6,1.72 2.96,4.24 -0.41,2.74 -1.76,11.44 -3.45,17.92 -2.25,12 h 1.31 l 1.5,-1.5 6.07,-8.06 10.2,-12.75 4.5,-5.06 5.25,-5.59 3.37,-2.66 h 6.37 l 4.69,6.97 -2.1,7.2 -6.56,8.32 -5.44,7.05 -7.8,10.5 -4.87,8.4 0.45,0.67 1.16,-0.11 17.62,-3.75 9.52,-1.72 11.36,-1.95 5.14,2.4 0.56,2.44 -2.02,4.99 -12.15,3 -14.25,2.85 -21.22,5.02 -0.26,0.19 0.3,0.37 9.56,0.9 4.09,0.22 h 10.01 l 18.64,1.39 4.87,3.22 2.92,3.94 -0.49,3 -7.5,3.82 -10.12,-2.4 -23.62,-5.62 -8.1,-2.02 h -1.12 v 0.67 l 6.75,6.6 12.37,11.17 15.49,14.4 0.79,3.56 -1.99,2.81 -2.1,-0.3 -13.61,-10.24 -5.25,-4.61 -11.89,-10.01 h -0.79 v 1.05 l 2.74,4.01 14.47,21.75 0.75,6.67 -1.05,2.17 -3.75,1.31 -4.12,-0.75 -8.47,-11.89 -8.74,-13.39 -7.05,-12 -0.86,0.49 -4.16,44.81 -1.95,2.29 -4.5,1.72 -3.75,-2.85 -1.99,-4.61 1.99,-9.11 2.4,-11.89 1.95,-9.45 1.76,-11.74 1.05,-3.9 -0.07,-0.26 -0.86,0.11 -8.85,12.15 -13.46,18.19 -10.65,11.4 -2.55,1.01 -4.42,-2.29 0.41,-4.09 2.47,-3.64 14.74,-18.75 8.89,-11.62 5.74,-6.71 -0.04,-0.97 h -0.34 l -39.15,25.42 -6.97,0.9 -3,-2.81 0.37,-4.61 1.42,-1.5 11.77,-8.1 -0.04,0.04 z'
|
|
176
|
-
|
|
177
|
-
/** Wordmark path, in the artwork's own (pre-transform) coordinates. */
|
|
178
|
-
var CLAUDE_WORD_PATH = 'm 317.73,349.33 c -18.82,0 -31.69,-10.5 -37.76,-26.66 -3.17,-8.42 -4.74,-17.36 -4.61,-26.36 0,-27.11 12.15,-45.94 39,-45.94 18.04,0 29.17,7.87 35.51,26.66 h 7.72 l -1.05,-25.91 c -10.8,-6.97 -24.3,-10.5 -40.72,-10.5 -23.14,0 -42.82,10.35 -53.77,29.02 -5.66,9.86 -8.53,21.07 -8.32,32.44 0,20.74 9.79,39.11 28.16,49.31 10.06,5.37 21.34,8.04 32.74,7.72 17.92,0 32.14,-3.41 44.74,-9.37 l 3.26,-28.57 h -7.87 c -4.72,13.05 -10.35,20.89 -19.69,25.05 -4.57,2.06 -10.35,3.11 -17.32,3.11 z m 81.18,-98.96 0.75,-12.75 h -5.32 l -23.7,7.12 v 3.86 l 10.5,4.87 v 89.17 c 0,6.07 -3.11,7.42 -11.25,8.44 v 6.52 h 40.31 v -6.52 c -8.17,-1.01 -11.25,-2.36 -11.25,-8.44 V 250.4 l -0.04,-0.04 z m 160.31,108.75 h 3.11 l 27.26,-5.17 v -6.67 l -3.82,-0.3 c -6.37,-0.6 -8.02,-1.91 -8.02,-7.12 v -47.55 l 0.75,-15.26 h -4.31 l -25.76,3.71 v 6.52 l 2.51,0.45 c 6.97,1.01 9.04,2.96 9.04,7.84 v 42.37 c -6.67,5.17 -13.05,8.44 -20.62,8.44 -8.4,0 -13.61,-4.27 -13.61,-14.25 v -39.79 l 0.75,-15.26 h -4.42 l -25.8,3.71 v 6.52 l 2.66,0.45 c 6.97,1.01 9.04,2.96 9.04,7.84 v 39.11 c 0,16.57 9.37,24.45 24.3,24.45 11.4,0 20.74,-6.07 27.75,-14.51 l -0.75,14.51 -0.04,-0.04 z M 484.3,306.36 c 0,-21.19 -11.25,-29.32 -31.57,-29.32 -17.92,0 -30.94,7.42 -30.94,19.72 0,3.67 1.31,6.49 3.97,8.44 l 13.65,-1.8 c -0.6,-4.12 -0.9,-6.64 -0.9,-7.69 0,-6.97 3.71,-10.5 11.25,-10.5 11.14,0 16.76,7.84 16.76,20.44 v 4.12 l -28.12,8.44 c -9.37,2.55 -14.7,4.76 -18.26,9.94 -1.89,3.17 -2.8,6.82 -2.62,10.5 0,12 8.25,20.47 22.35,20.47 10.2,0 19.24,-4.61 27.11,-13.35 2.81,8.74 7.12,13.35 14.81,13.35 6.22,0 11.85,-2.51 16.87,-7.42 l -1.5,-5.17 c -2.17,0.6 -4.27,0.9 -6.49,0.9 -4.31,0 -6.37,-3.41 -6.37,-10.09 v -30.97 z m -36,40.76 c -7.69,0 -12.45,-4.46 -12.45,-12.3 0,-5.32 2.51,-8.44 7.87,-10.24 l 22.8,-7.24 v 21.9 c -7.27,5.51 -11.55,7.87 -18.22,7.87 z m 237.36,6.82 v -6.67 l -3.86,-0.3 c -6.37,-0.6 -7.99,-1.91 -7.99,-7.12 v -89.47 l 0.75,-12.75 h -5.36 l -23.7,7.12 v 3.86 l 10.5,4.87 v 29.32 c -5.91,-4.05 -12.98,-6.08 -20.14,-5.77 -23.55,0 -41.92,17.92 -41.92,44.74 0,22.09 13.2,37.35 34.95,37.35 11.25,0 21.04,-5.47 27.11,-13.95 l -0.75,13.95 h 3.15 l 27.26,-5.17 v 0 z m -49.35,-68.02 c 11.25,0 19.69,6.52 19.69,18.52 v 33.75 c -5.18,5.16 -12.23,8 -19.54,7.87 -16.12,0 -24.3,-12.75 -24.3,-29.77 0,-19.12 9.34,-30.37 24.15,-30.37 z M 743.3,302.8 c -2.1,-9.9 -8.17,-15.52 -16.61,-15.52 -12.6,0 -21.34,9.49 -21.34,23.1 0,20.14 10.65,33.19 27.86,33.19 11.48,-0.12 22.04,-6.33 27.71,-16.31 l 5.02,1.35 c -2.25,17.47 -18.07,30.52 -37.5,30.52 -22.8,0 -38.51,-16.87 -38.51,-40.87 0,-24 17.06,-41.21 39.86,-41.21 17.02,0 29.02,10.24 32.89,28.01 l -59.4,18.22 v -8.02 l 40.01,-12.41 v -0.04 z'
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Build a CSS `url()` for one Claude mask.
|
|
182
|
-
*
|
|
183
|
-
* `encodeURIComponent` does the escaping, which is why the paths above are kept
|
|
184
|
-
* as raw literals rather than pre-baked data URIs: every `#`, `'` and `<` gets
|
|
185
|
-
* escaped exactly once, so no fill colour can accidentally terminate the URI.
|
|
186
|
-
* `fill` defaults to `currentColor`, letting the mask follow the theme.
|
|
187
|
-
*
|
|
188
|
-
* @param viewBox - tight viewBox of the geometry being drawn.
|
|
189
|
-
* @param paths - one or more path `d` strings to include.
|
|
190
|
-
* @param fill - optional paint; omit for a currentColor alpha mask.
|
|
191
|
-
* @returns a quoted CSS url() value.
|
|
192
|
-
*/
|
|
193
|
-
function claudeMask(viewBox, paths, fill) {
|
|
194
|
-
var body = ''
|
|
195
|
-
for (var i = 0; i < paths.length; i++) {
|
|
196
|
-
body += "<path" + (fill ? " fill='" + fill + "'" : '') + " d='" + paths[i] + "'/>"
|
|
197
|
-
}
|
|
198
|
-
var svg =
|
|
199
|
-
"<svg xmlns='http://www.w3.org/2000/svg' viewBox='" + viewBox + "'>" +
|
|
200
|
-
"<g transform='" + CLAUDE_TRANSFORM + "'>" + body + '</g></svg>'
|
|
201
|
-
return 'url("data:image/svg+xml,' + encodeURIComponent(svg) + '")'
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/** The starburst alone, as a currentColor alpha mask. */
|
|
205
|
-
var CLAUDE_MARK = claudeMask(CLAUDE_MARK_VIEWBOX, [CLAUDE_MARK_PATH])
|
|
206
|
-
/** The wordmark alone, as a currentColor alpha mask. */
|
|
207
|
-
var CLAUDE_WORD = claudeMask(CLAUDE_WORD_VIEWBOX, [CLAUDE_WORD_PATH])
|
|
208
|
-
/** The full lockup (starburst + wordmark) as one currentColor alpha mask. */
|
|
209
|
-
var CLAUDE_LOCKUP = claudeMask('0 0 689.98 148.18', [CLAUDE_MARK_PATH, CLAUDE_WORD_PATH])
|
|
210
|
-
/** The starburst with the clay accent baked in, for the new-conversation hero. */
|
|
211
|
-
var CLAUDE_MARK_CLAY = claudeMask(CLAUDE_MARK_VIEWBOX, [CLAUDE_MARK_PATH], '#D97757')
|
|
212
|
-
|
|
213
|
-
/** Anthropic's A\ lockup mark (the alternate sidebar brand), as an alpha mask. */
|
|
214
|
-
var ANTHROPIC_BRAND_MARK = "url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 46 32%27%3E%3Cpath d=%27M32.73 0H25.7846L38.4499 32H45.3953L32.73 0Z%27/%3E%3Cpath d=%27M12.6653 0L0 32H7.08167L9.67193 25.28H22.9219L25.5122 32H32.5939L19.9286 0H12.6653ZM11.9626 19.3371L16.2969 8.09143L20.6313 19.3371H11.9626Z%27/%3E%3C/svg%3E\")"
|
|
215
|
-
|
|
216
|
-
/** The ANTHROPIC wordmark (the alternate sidebar brand), as an alpha mask. */
|
|
217
|
-
var ANTHROPIC_BRAND_WORD = "url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 143 16%27%3E%3Cpath transform=%27translate(18.299999237060547,0.27000001072883606)%27 d=%27 M10.716191291809082,10.829001426696777 C10.716191291809082,10.829001426696777 3.756195545196533,0 3.756195545196533,0 C3.756195545196533,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.2038140296936035,15.470022201538086 3.2038140296936035,15.470022201538086 C3.2038140296936035,15.470022201538086 3.2038140296936035,4.6410064697265625 3.2038140296936035,4.6410064697265625 C3.2038140296936035,4.6410064697265625 10.163809776306152,15.470022201538086 10.163809776306152,15.470022201538086 C10.163809776306152,15.470022201538086 13.919991493225098,15.470022201538086 13.919991493225098,15.470022201538086 C13.919991493225098,15.470022201538086 13.919991493225098,0 13.919991493225098,0 C13.919991493225098,0 10.716191291809082,0 10.716191291809082,0 C10.716191291809082,0 10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777 C10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777z%27/%3E%3Cpath transform=%27translate(34.869998931884766,0.27000001072883606)%27 d=%27 M0,2.983504056930542 C0,2.983504056930542 5.19273567199707,2.983504056930542 5.19273567199707,2.983504056930542 C5.19273567199707,2.983504056930542 5.19273567199707,15.470022201538086 5.19273567199707,15.470022201538086 C5.19273567199707,15.470022201538086 8.507256507873535,15.470022201538086 8.507256507873535,15.470022201538086 C8.507256507873535,15.470022201538086 8.507256507873535,2.983504056930542 8.507256507873535,2.983504056930542 C8.507256507873535,2.983504056930542 13.700006484985352,2.983504056930542 13.700006484985352,2.983504056930542 C13.700006484985352,2.983504056930542 13.700006484985352,0 13.700006484985352,0 C13.700006484985352,0 0,0 0,0 C0,0 0,2.983504056930542 0,2.983504056930542 C0,2.983504056930542 0,2.983504056930542 0,2.983504056930542z%27/%3E%3Cpath transform=%27translate(51.22999954223633,0.27000001072883606)%27 d=%27 M10.605714797973633,6.165900230407715 C10.605714797973633,6.165900230407715 3.3142902851104736,6.165900230407715 3.3142902851104736,6.165900230407715 C3.3142902851104736,6.165900230407715 3.3142902851104736,0 3.3142902851104736,0 C3.3142902851104736,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3142902851104736,15.470022201538086 3.3142902851104736,15.470022201538086 C3.3142902851104736,15.470022201538086 3.3142902851104736,9.149404525756836 3.3142902851104736,9.149404525756836 C3.3142902851104736,9.149404525756836 10.605714797973633,9.149404525756836 10.605714797973633,9.149404525756836 C10.605714797973633,9.149404525756836 10.605714797973633,15.470022201538086 10.605714797973633,15.470022201538086 C10.605714797973633,15.470022201538086 13.919991493225098,15.470022201538086 13.919991493225098,15.470022201538086 C13.919991493225098,15.470022201538086 13.919991493225098,0 13.919991493225098,0 C13.919991493225098,0 10.605714797973633,0 10.605714797973633,0 C10.605714797973633,0 10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715 C10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715z%27/%3E%3Cpath transform=%27translate(69.23999786376953,0.27000001072883606)%27 d=%27 M3.3151700496673584,2.983504056930542 C3.3151700496673584,2.983504056930542 7.403865814208984,2.983504056930542 7.403865814208984,2.983504056930542 C9.03934097290039,2.983504056930542 9.901290893554688,3.5801939964294434 9.901290893554688,4.707304000854492 C9.901290893554688,5.834399700164795 9.03934097290039,6.431103706359863 7.403865814208984,6.431103706359863 C7.403865814208984,6.431103706359863 3.3151700496673584,6.431103706359863 3.3151700496673584,6.431103706359863 C3.3151700496673584,6.431103706359863 3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542 C3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542z M13.216461181640625,4.707304000854492 C13.216461181640625,1.7900969982147217 11.072648048400879,0 7.558576583862305,0 C7.558576583862305,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3151700496673584,15.470022201538086 3.3151700496673584,15.470022201538086 C3.3151700496673584,15.470022201538086 3.3151700496673584,9.414593696594238 3.3151700496673584,9.414593696594238 C3.3151700496673584,9.414593696594238 7.005825519561768,9.414593696594238 7.005825519561768,9.414593696594238 C7.005825519561768,9.414593696594238 10.321218490600586,15.470022201538086 10.321218490600586,15.470022201538086 C10.321218490600586,15.470022201538086 13.990056991577148,15.470022201538086 13.990056991577148,15.470022201538086 C13.990056991577148,15.470022201538086 10.319005966186523,8.953378677368164 10.319005966186523,8.953378677368164 C12.161579132080078,8.245061874389648 13.216461181640625,6.753532409667969 13.216461181640625,4.707304000854492 C13.216461181640625,4.707304000854492 13.216461181640625,4.707304000854492 13.216461181640625,4.707304000854492z%27/%3E%3Cpath transform=%27translate(84.98999786376953,0)%27 d=%27 M7.622087478637695,12.906073570251465 C5.015110492706299,12.906073570251465 3.4244225025177,11.049725532531738 3.4244225025177,8.022093772888184 C3.4244225025177,4.95027494430542 5.015110492706299,3.0939269065856934 7.622087478637695,3.0939269065856934 C10.206976890563965,3.0939269065856934 11.775577545166016,4.95027494430542 11.775577545166016,8.022093772888184 C11.775577545166016,11.049725532531738 10.206976890563965,12.906073570251465 7.622087478637695,12.906073570251465 C7.622087478637695,12.906073570251465 7.622087478637695,12.906073570251465 7.622087478637695,12.906073570251465z M7.622087478637695,0 C3.1593029499053955,0 0,3.3149218559265137 0,8.022093772888184 C0,12.685078620910645 3.1593029499053955,16 7.622087478637695,16 C12.062784194946289,16 15.200028419494629,12.685078620910645 15.200028419494629,8.022093772888184 C15.200028419494629,3.3149218559265137 12.062784194946289,0 7.622087478637695,0 C7.622087478637695,0 7.622087478637695,0 7.622087478637695,0z%27/%3E%3Cpath transform=%27translate(103.29000091552734,0.27000001072883606)%27 d=%27 M7.405848026275635,6.873104095458984 C7.405848026275635,6.873104095458984 3.3160574436187744,6.873104095458984 3.3160574436187744,6.873104095458984 C3.3160574436187744,6.873104095458984 3.3160574436187744,2.983504056930542 3.3160574436187744,2.983504056930542 C3.3160574436187744,2.983504056930542 7.405848026275635,2.983504056930542 7.405848026275635,2.983504056930542 C9.04176139831543,2.983504056930542 9.90394115447998,3.646505117416382 9.90394115447998,4.928304195404053 C9.90394115447998,6.2101030349731445 9.04176139831543,6.873104095458984 7.405848026275635,6.873104095458984 C7.405848026275635,6.873104095458984 7.405848026275635,6.873104095458984 7.405848026275635,6.873104095458984z M7.5605998039245605,0 C7.5605998039245605,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3160574436187744,15.470022201538086 3.3160574436187744,15.470022201538086 C3.3160574436187744,15.470022201538086 3.3160574436187744,9.85659408569336 3.3160574436187744,9.85659408569336 C3.3160574436187744,9.85659408569336 7.5605998039245605,9.85659408569336 7.5605998039245605,9.85659408569336 C11.07561206817627,9.85659408569336 13.219999313354492,8.000200271606445 13.219999313354492,4.928304195404053 C13.219999313354492,1.8563942909240723 11.07561206817627,0 7.5605998039245605,0 C7.5605998039245605,0 7.5605998039245605,0 7.5605998039245605,0z%27/%3E%3Cpath transform=%27translate(128.0399932861328,0)%27 d=%27 M10.914844512939453,10.5414400100708 C10.340370178222656,12.044201850891113 9.191434860229492,12.906073570251465 7.622706890106201,12.906073570251465 C5.0155181884765625,12.906073570251465 3.4246866703033447,11.049725532531738 3.4246866703033447,8.022093772888184 C3.4246866703033447,4.95027494430542 5.0155181884765625,3.0939269065856934 7.622706890106201,3.0939269065856934 C9.191434860229492,3.0939269065856934 10.340370178222656,3.9557981491088867 10.914844512939453,5.458559989929199 C10.914844512939453,5.458559989929199 14.427860260009766,5.458559989929199 14.427860260009766,5.458559989929199 C13.566211700439453,2.1436522006988525 10.981111526489258,0 7.622706890106201,0 C3.1595458984375,0 0,3.3149218559265137 0,8.022093772888184 C0,12.685078620910645 3.1595458984375,16 7.622706890106201,16 C11.003214836120605,16 13.588300704956055,13.834254264831543 14.449976921081543,10.5414400100708 C14.449976921081543,10.5414400100708 10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708 C10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708z%27/%3E%3Cpath transform=%27translate(117.83000183105469,0.27000001072883606)%27 d=%27 M0,0 C0,0 6.1677093505859375,15.470022201538086 6.1677093505859375,15.470022201538086 C6.1677093505859375,15.470022201538086 9.550004005432129,15.470022201538086 9.550004005432129,15.470022201538086 C9.550004005432129,15.470022201538086 3.382294178009033,0 3.382294178009033,0 C3.382294178009033,0 0,0 0,0 C0,0 0,0 0,0z%27/%3E%3Cpath transform=%27translate(0,0.27000001072883606)%27 d=%27 M5.824605464935303,9.348296165466309 C5.824605464935303,9.348296165466309 7.93500280380249,3.911694288253784 7.93500280380249,3.911694288253784 C7.93500280380249,3.911694288253784 10.045400619506836,9.348296165466309 10.045400619506836,9.348296165466309 C10.045400619506836,9.348296165466309 5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309 C5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309z M6.166755199432373,0 C6.166755199432373,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.4480772018432617,15.470022201538086 3.4480772018432617,15.470022201538086 C3.4480772018432617,15.470022201538086 4.709278583526611,12.22130012512207 4.709278583526611,12.22130012512207 C4.709278583526611,12.22130012512207 11.16093635559082,12.22130012512207 11.16093635559082,12.22130012512207 C11.16093635559082,12.22130012512207 12.421928405761719,15.470022201538086 12.421928405761719,15.470022201538086 C12.421928405761719,15.470022201538086 15.87000560760498,15.470022201538086 15.87000560760498,15.470022201538086 C15.87000560760498,15.470022201538086 9.703250885009766,0 9.703250885009766,0 C9.703250885009766,0 6.166755199432373,0 6.166755199432373,0 C6.166755199432373,0 6.166755199432373,0 6.166755199432373,0z%27/%3E%3C/svg%3E\")"
|
|
218
|
-
|
|
219
168
|
|
|
220
169
|
var SANS = "'Anthropic Sans Web Text','Noto Sans SC','Source Han Sans SC',-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Hiragino Sans GB','Microsoft YaHei','Helvetica Neue',Helvetica,Arial,sans-serif"
|
|
221
170
|
var SERIF = "'Anthropic Serif Web Text',Georgia,'Times New Roman','Noto Serif SC','Source Han Serif SC','Songti SC','SimSun',serif"
|
|
@@ -226,18 +175,35 @@ window.__ModuleLoader__.load({
|
|
|
226
175
|
// ============================================================================
|
|
227
176
|
var CSS = [
|
|
228
177
|
"/* --- 2.1 Design Tokens (Dark Base & Light Overrides) --- */",
|
|
229
|
-
"/* ----------
|
|
178
|
+
"/* ---------- typography tokens: theme-independent ---------- */",
|
|
230
179
|
"body[data-dsh-claude-style] {",
|
|
231
180
|
" --dsw-font-family: 'Anthropic Sans Web Text','Noto Sans SC','Source Han Sans SC',-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Hiragino Sans GB','Microsoft YaHei','Helvetica Neue',Helvetica,Arial,sans-serif;",
|
|
232
181
|
" --dsw-font-serif: 'Anthropic Serif Web Text',Georgia,'Times New Roman','Noto Serif SC','Source Han Serif SC','Songti SC','SimSun',serif;",
|
|
233
182
|
" --dsw-font-code: 'Anthropic Mono Variable',ui-monospace,'SF Mono','JetBrains Mono','Fira Code',Consolas,'Liberation Mono',Menlo,Courier,monospace;",
|
|
234
|
-
"
|
|
235
|
-
"
|
|
236
|
-
"
|
|
237
|
-
"
|
|
183
|
+
" /* Markdown document headings keep the UI sans at 700 — the face the host",
|
|
184
|
+
" ships and the one Claude uses. The host's markdown heading rule is a",
|
|
185
|
+
" `font:` shorthand (`--dsw-font-markdown-hN`) that names --dsw-font-family",
|
|
186
|
+
" directly, so overriding the four `-font-family` sub-tokens never reached",
|
|
187
|
+
" the page; these re-declare the shorthand itself. The ladder is steepened",
|
|
188
|
+
" from the host's 21/19/18 toward Claude's measured ≈21/17/15; h1 and h4",
|
|
189
|
+
" keep the host's values. */",
|
|
190
|
+
" --dsw-font-markdown-h2: 700 calc(18px + var(--dsh-content-font-delta)) / calc(26px + var(--dsh-content-font-delta)) var(--dsw-font-family);",
|
|
191
|
+
" --dsw-font-markdown-h3: 700 calc(16px + var(--dsh-content-font-delta)) / calc(24px + var(--dsh-content-font-delta)) var(--dsw-font-family);",
|
|
238
192
|
" --dsw-font-markdown-base-font-family: var(--dsw-font-family);",
|
|
239
193
|
" --dsw-font-markdown-small-font-family: var(--dsw-font-family);",
|
|
240
194
|
" --dsw-font-markdown-table-font-family: var(--dsw-font-family);",
|
|
195
|
+
"}",
|
|
196
|
+
"",
|
|
197
|
+
"/* ---------- design tokens: warm-black (dark) palette ---------- */",
|
|
198
|
+
"/* The dark palette is scoped to [data-ds-dark-theme] on purpose. The host",
|
|
199
|
+
" ships its own dark palette on body[data-ds-dark-theme] — the same (0,1,1)",
|
|
200
|
+
" weight as a bare body[data-dsh-claude-style] — so the two only tie, and",
|
|
201
|
+
" whichever stylesheet the loader appends last wins. When the host's lands",
|
|
202
|
+
" after this one its blue accents (--dsw-alias-state-business-primary,",
|
|
203
|
+
" --dsw-alias-button-info-fill, --dsw-alias-link and the brand \"new color\")",
|
|
204
|
+
" replace the warm palette. Naming the attribute keeps this block at (0,2,1)",
|
|
205
|
+
" and makes it order-independent. */",
|
|
206
|
+
"body[data-dsh-claude-style][data-ds-dark-theme] {",
|
|
241
207
|
" --dsw-alias-bg-base: #141413;",
|
|
242
208
|
" --dsw-alias-bg-layer-1: #1c1b1a;",
|
|
243
209
|
" --dsw-alias-bg-layer-2: #242320;",
|
|
@@ -264,10 +230,14 @@ window.__ModuleLoader__.load({
|
|
|
264
230
|
" --dsw-alias-label-caption: #6b6a65;",
|
|
265
231
|
" --dsw-alias-state-business-primary: #d97757;",
|
|
266
232
|
" --dsw-alias-state-business-tertiary: #3a2a22;",
|
|
233
|
+
" --dsw-alias-link: #e08a6d;",
|
|
267
234
|
" --dsw-shadow-lv2: 0 4px 16px rgba(0, 0, 0, 0.30), 0 1px 3px rgba(0, 0, 0, 0.14);",
|
|
268
235
|
" --dsw-specific-input-major: #0f0e0d;",
|
|
269
236
|
" --dsw-specific-selector: #2e2c29;",
|
|
270
237
|
" --dsw-specific-sidebar-fill: #141413;",
|
|
238
|
+
" /* The host's \"new color\" brand accent (shipped under this doubled suffix)",
|
|
239
|
+
" resolves to a deepseek blue in both palettes; the skin has one accent. */",
|
|
240
|
+
" --dsw-alias-brand-primary-new-colorprimary-new-color: #d97757;",
|
|
271
241
|
"}",
|
|
272
242
|
"",
|
|
273
243
|
"/* ================= light variant: ivory editorial ================= */",
|
|
@@ -292,6 +262,7 @@ window.__ModuleLoader__.load({
|
|
|
292
262
|
" --dsw-alias-label-caption: #a6a094;",
|
|
293
263
|
" --dsw-alias-state-business-primary: #d97757;",
|
|
294
264
|
" --dsw-alias-state-business-tertiary: #e9dfd2;",
|
|
265
|
+
" --dsw-alias-link: #c6613f;",
|
|
295
266
|
" --dsw-specific-input-major: #ffffff;",
|
|
296
267
|
" --dsw-specific-menu: #ffffff;",
|
|
297
268
|
" --dsw-specific-selector: #f0eee6;",
|
|
@@ -299,6 +270,16 @@ window.__ModuleLoader__.load({
|
|
|
299
270
|
" --dsh-claude-hover-bg: rgba(0, 0, 0, 0.08);",
|
|
300
271
|
" --dsw-alias-interactive-bg-hover: var(--dsh-claude-hover-bg);",
|
|
301
272
|
" --dsw-shadow-lv2: 0 4px 18px rgba(20, 20, 19, 0.10), 0 1px 3px rgba(20, 20, 19, 0.05);",
|
|
273
|
+
" --dsw-alias-brand-primary-new-colorprimary-new-color: #d97757;",
|
|
274
|
+
" /* Carried over from the dark base block so the light palette stays complete",
|
|
275
|
+
" now that the dark palette is dark-scoped. */",
|
|
276
|
+
" --dsw-alias-brand-text: #faf9f5;",
|
|
277
|
+
" --dsw-alias-button-elevated-fill: #242320;",
|
|
278
|
+
" --dsw-alias-interactive-bg-active: rgba(217, 119, 87, 0.30);",
|
|
279
|
+
" --dsw-alias-interactive-bg-hover-solid: #2e2c29;",
|
|
280
|
+
" /* User message bubbles: the host's light bubble token is deepseek-50 (blue);",
|
|
281
|
+
" use the skin's button-hover gray instead. */",
|
|
282
|
+
" --dsw-specific-bubble: var(--dsh-claude-hover-bg);",
|
|
302
283
|
"}",
|
|
303
284
|
"",
|
|
304
285
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) {",
|
|
@@ -344,8 +325,8 @@ window.__ModuleLoader__.load({
|
|
|
344
325
|
"",
|
|
345
326
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) blockquote {",
|
|
346
327
|
" color: #6e6a60;",
|
|
347
|
-
" border-left-color:
|
|
348
|
-
" background: rgba(
|
|
328
|
+
" border-left-color: var(--dsw-alias-label-caption);",
|
|
329
|
+
" background: rgba(20, 20, 19, 0.04);",
|
|
349
330
|
"}",
|
|
350
331
|
"",
|
|
351
332
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) pre {",
|
|
@@ -399,6 +380,35 @@ window.__ModuleLoader__.load({
|
|
|
399
380
|
" letter-spacing: -0.015em;",
|
|
400
381
|
"}",
|
|
401
382
|
"",
|
|
383
|
+
"/* ---------- markdown document headings ---------- */",
|
|
384
|
+
"/* The serif display face above is for UI headlines. Document headings are body",
|
|
385
|
+
" text: re-assert the host's own markdown heading shorthand (sans, 700) at a",
|
|
386
|
+
" weight that beats that rule, so the host's size ladder and line-heights",
|
|
387
|
+
" apply untouched. */",
|
|
388
|
+
"body[data-dsh-claude-style] [class*=\"markdown\"] h1 { font: var(--dsw-font-markdown-h1); }",
|
|
389
|
+
"body[data-dsh-claude-style] [class*=\"markdown\"] h2 { font: var(--dsw-font-markdown-h2); }",
|
|
390
|
+
"body[data-dsh-claude-style] [class*=\"markdown\"] h3 { font: var(--dsw-font-markdown-h3); }",
|
|
391
|
+
"body[data-dsh-claude-style] [class*=\"markdown\"] h4 { font: var(--dsw-font-markdown-h4); }",
|
|
392
|
+
"",
|
|
393
|
+
"/* Heading rhythm. The host gives every heading a 32px top margin, which stacks",
|
|
394
|
+
" on the previous heading's 16px bottom margin: two consecutive headings open",
|
|
395
|
+
" ~36px of air where Claude keeps ~12px, and in the sample document that alone",
|
|
396
|
+
" pushed the last list past the viewport. A heading that directly follows",
|
|
397
|
+
" another tightens further, so a run of headings reads as one block. */",
|
|
398
|
+
"body[data-dsh-claude-style] [class*=\"markdown\"] :is(h1, h2, h3) {",
|
|
399
|
+
" margin-top: 24px;",
|
|
400
|
+
" margin-bottom: 12px;",
|
|
401
|
+
"}",
|
|
402
|
+
"",
|
|
403
|
+
"body[data-dsh-claude-style] [class*=\"markdown\"] :is(h1, h2, h3) + :is(h1, h2, h3) {",
|
|
404
|
+
" margin-top: 8px;",
|
|
405
|
+
"}",
|
|
406
|
+
"",
|
|
407
|
+
"body[data-dsh-claude-style] [class*=\"markdown\"] :is(h4, h5, h6) {",
|
|
408
|
+
" margin-top: 16px;",
|
|
409
|
+
" margin-bottom: 8px;",
|
|
410
|
+
"}",
|
|
411
|
+
"",
|
|
402
412
|
"body[data-dsh-claude-style] :is(pre, code, kbd, samp, [class*=\"mono\"], [class*=\"codeBlock\"], [class*=\"CodeBlock\"]) {",
|
|
403
413
|
" font-family: var(--dsw-font-code);",
|
|
404
414
|
"}",
|
|
@@ -410,12 +420,14 @@ window.__ModuleLoader__.load({
|
|
|
410
420
|
"}",
|
|
411
421
|
"",
|
|
412
422
|
"/* ---------- editorial markdown ---------- */",
|
|
423
|
+
"/* Claude's quote keeps the serif face but stands upright on a neutral bar and",
|
|
424
|
+
" wash; the warm accent stays reserved for links and controls. */",
|
|
413
425
|
"body[data-dsh-claude-style] blockquote {",
|
|
414
426
|
" font-family: var(--dsw-font-serif);",
|
|
415
|
-
" font-style:
|
|
427
|
+
" font-style: normal;",
|
|
416
428
|
" color: #b0aea5;",
|
|
417
|
-
" border-left: 2px solid
|
|
418
|
-
" background: rgba(
|
|
429
|
+
" border-left: 2px solid var(--dsw-alias-label-caption);",
|
|
430
|
+
" background: rgba(250, 249, 245, 0.06);",
|
|
419
431
|
" border-radius: 0 8px 8px 0;",
|
|
420
432
|
" padding: 0.6em 1em;",
|
|
421
433
|
"}",
|
|
@@ -579,14 +591,15 @@ window.__ModuleLoader__.load({
|
|
|
579
591
|
"}",
|
|
580
592
|
"",
|
|
581
593
|
"/* Keyboard focus ring: neutral, in the input box's own shadow colour",
|
|
582
|
-
" (espresso #141413 in light
|
|
594
|
+
" (espresso #141413 in light); dark inverts to bright ivory — a near-black",
|
|
595
|
+
" canvas gets a light ring, never a darker one. */",
|
|
583
596
|
"body[data-dsh-claude-style] :is(button, input, textarea, select, [role=\"button\"], [role=\"tab\"], [role=\"treeitem\"]):focus-visible {",
|
|
584
597
|
" outline: 2px solid rgba(20, 20, 19, 0.45);",
|
|
585
598
|
" outline-offset: 1px;",
|
|
586
599
|
"}",
|
|
587
600
|
"",
|
|
588
601
|
"body[data-dsh-claude-style][data-ds-dark-theme] :is(button, input, textarea, select, [role=\"button\"], [role=\"tab\"], [role=\"treeitem\"]):focus-visible {",
|
|
589
|
-
" outline-color: rgba(
|
|
602
|
+
" outline-color: rgba(250, 249, 245, 0.60);",
|
|
590
603
|
"}",
|
|
591
604
|
"",
|
|
592
605
|
"/* ---------- Claude Code layout: hero brand mark ---------- */",
|
|
@@ -618,7 +631,7 @@ window.__ModuleLoader__.load({
|
|
|
618
631
|
"}",
|
|
619
632
|
"",
|
|
620
633
|
"body[data-dsh-claude-style][data-dsh-claude-brand=\"anthropic\"] [class*=\"fishHitbox\"]::before {",
|
|
621
|
-
" background-image: url(\"data:image/svg+xml,%3Csvg
|
|
634
|
+
" background-image: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%3E%3Cpath%20d%3D'M4.709%2015.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0%2011.784l.055-.352.48-.321.686.06%201.52.103%202.278.158%201.652.097%202.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686%201.908%201.476%202.491%201.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97%202.97%200%2001-.104-.729L6.283.134%206.696%200l.996.134.42.364.62%201.414%201.002%202.229%201.555%203.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286%201.851-.559%202.903-.364%201.942h.212l.243-.242.985-1.306%201.652-2.064.73-.82.85-.904.547-.431h1.033l.76%201.129-.34%201.166-1.064%201.347-.881%201.142-1.264%201.7-.79%201.36.073.11.188-.02%202.856-.606%201.543-.28%201.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061%201.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093%201.068%202.006%201.81%202.509%202.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649%202.345%203.521.122%201.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674%207.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434%201.967-2.18%202.945-1.726%201.845-.414.164-.717-.37.067-.662.401-.589%202.388-3.036%201.44-1.882.93-1.086-.006-.158h-.055L4.132%2018.56l-1.13.146-.487-.456.061-.746.231-.243%201.908-1.312-.006.006z'%20fill%3D'%23D97757'%2F%3E%3C%2Fsvg%3E\");",
|
|
622
635
|
"}",
|
|
623
636
|
"",
|
|
624
637
|
"/* The preview badge has no Claude Code counterpart. */",
|
|
@@ -682,18 +695,20 @@ window.__ModuleLoader__.load({
|
|
|
682
695
|
"",
|
|
683
696
|
"/* Focus: the shipped field has no focus face at all — only the caret moves —",
|
|
684
697
|
" so this adds one, in the input box's own shadow colour rather than the",
|
|
685
|
-
" accent: the hairline takes the drop-shadow tint (espresso in light,
|
|
686
|
-
"
|
|
687
|
-
"
|
|
688
|
-
"
|
|
698
|
+
" accent: the hairline takes the drop-shadow tint (espresso in light), a 1px",
|
|
699
|
+
" halo in the same tone hugs the edge, and the drop shadow deepens. Dark sits",
|
|
700
|
+
" on a near-black canvas, where black-on-black carries no cue at all — there",
|
|
701
|
+
" the focus face inverts to a BRIGHT ivory rim and halo, so the field visibly",
|
|
702
|
+
" lights up instead of deepening. The tray below continues the same hairline,",
|
|
703
|
+
" so its three edges follow whenever the card above it holds focus. */",
|
|
689
704
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) [data-composer-card]:focus-within {",
|
|
690
705
|
" border-color: rgba(20, 20, 19, 0.36);",
|
|
691
706
|
" box-shadow: 0 0 0 1px rgba(20, 20, 19, 0.13), 0 6px 18px rgba(20, 20, 19, 0.06), 0 2px 6px rgba(20, 20, 19, 0.03);",
|
|
692
707
|
"}",
|
|
693
708
|
"",
|
|
694
709
|
"body[data-dsh-claude-style][data-ds-dark-theme] [data-composer-card]:focus-within {",
|
|
695
|
-
" border-color: rgba(
|
|
696
|
-
" box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.
|
|
710
|
+
" border-color: rgba(250, 249, 245, 0.45);",
|
|
711
|
+
" box-shadow: 0 0 0 1px rgba(250, 249, 245, 0.18), 0 6px 24px rgba(0, 0, 0, 0.45), 0 2px 8px rgba(0, 0, 0, 0.22);",
|
|
697
712
|
"}",
|
|
698
713
|
"",
|
|
699
714
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) [class*=\"composerStack\"]:has([data-composer-card]:focus-within) > [class*=\"heroWorkspaceRow\"] {",
|
|
@@ -701,7 +716,7 @@ window.__ModuleLoader__.load({
|
|
|
701
716
|
"}",
|
|
702
717
|
"",
|
|
703
718
|
"body[data-dsh-claude-style][data-ds-dark-theme] [class*=\"composerStack\"]:has([data-composer-card]:focus-within) > [class*=\"heroWorkspaceRow\"] {",
|
|
704
|
-
" border-color: rgba(
|
|
719
|
+
" border-color: rgba(250, 249, 245, 0.45);",
|
|
705
720
|
"}",
|
|
706
721
|
"",
|
|
707
722
|
"/* The workspace-trigger variant paints its dashed ring through a masked svg",
|
|
@@ -859,6 +874,14 @@ window.__ModuleLoader__.load({
|
|
|
859
874
|
" height: auto !important;",
|
|
860
875
|
" max-height: none !important;",
|
|
861
876
|
"}",
|
|
877
|
+
"/* The composer is a chat-view affordance. The host keeps the seat mounted on",
|
|
878
|
+
" every conversation tab (轨迹 / 上下文 even reserve room for it), but it",
|
|
879
|
+
" should only show on the chat tab — drop the whole bottom area otherwise.",
|
|
880
|
+
" Hiding the seat also zeroes the host's --dsh-composer-height, so the",
|
|
881
|
+
" trajectory ledger's bottom clearance collapses with it. */",
|
|
882
|
+
"body[data-dsh-claude-style][data-dsh-claude-composer-hidden] [data-composer-seat] {",
|
|
883
|
+
" display: none !important;",
|
|
884
|
+
"}",
|
|
862
885
|
"body[data-dsh-claude-style] [data-composer-card][data-composer-variant=\"inline\"]:not([data-has-attachments=\"true\"]) [class*=\"rail\"]:not([class*=\"trailing\"]),",
|
|
863
886
|
"body[data-dsh-claude-style] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card]:not([data-has-attachments=\"true\"]) [class*=\"rail\"]:not([class*=\"trailing\"]) {",
|
|
864
887
|
" display: none !important;",
|
|
@@ -889,8 +912,8 @@ window.__ModuleLoader__.load({
|
|
|
889
912
|
"}",
|
|
890
913
|
"body[data-dsh-claude-style][data-ds-dark-theme] [data-composer-card][data-composer-variant=\"inline\"]:focus-within [class*=\"rail\"]:not([class*=\"trailing\"]),",
|
|
891
914
|
"body[data-dsh-claude-style][data-ds-dark-theme] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card]:focus-within [class*=\"rail\"]:not([class*=\"trailing\"]) {",
|
|
892
|
-
" border-color: rgba(
|
|
893
|
-
" box-shadow: 0 0 0 1px rgba(
|
|
915
|
+
" border-color: rgba(250, 249, 245, 0.45) !important;",
|
|
916
|
+
" box-shadow: 0 0 0 1px rgba(250, 249, 245, 0.18), 0 4px 16px rgba(0, 0, 0, 0.40) !important;",
|
|
894
917
|
"}",
|
|
895
918
|
"/* The attachment rail nests two levels: ComposerAttachments' outer rail wraps",
|
|
896
919
|
" AttachmentRail's scrolling inner rail, and BOTH substring-match",
|
|
@@ -930,8 +953,14 @@ window.__ModuleLoader__.load({
|
|
|
930
953
|
"body[data-dsh-claude-style] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card][data-has-attachments=\"true\"] [data-input-scroll] {",
|
|
931
954
|
" border-top: none !important;",
|
|
932
955
|
" border-radius: 0 0 14px 14px !important;",
|
|
956
|
+
" /* The card is a flex column with an 8px gap; with attachments that gap",
|
|
957
|
+
" shows the canvas as a seam line between the thumbnails and the text.",
|
|
958
|
+
" Close it (negative margin pulls the input up onto the rail) and move the",
|
|
959
|
+
" 8px into the top padding, so the text keeps its distance from the",
|
|
960
|
+
" thumbnails and the card's total height is unchanged. */",
|
|
961
|
+
" margin-top: -8px !important;",
|
|
933
962
|
" min-height: 32px !important;",
|
|
934
|
-
" padding:
|
|
963
|
+
" padding: 10px 36px 6px 14px !important;",
|
|
935
964
|
"}",
|
|
936
965
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) [data-composer-card][data-composer-variant=\"inline\"] [data-input-scroll],",
|
|
937
966
|
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card] [data-input-scroll] {",
|
|
@@ -946,8 +975,19 @@ window.__ModuleLoader__.load({
|
|
|
946
975
|
"}",
|
|
947
976
|
"body[data-dsh-claude-style][data-ds-dark-theme] [data-composer-card][data-composer-variant=\"inline\"]:focus-within [data-input-scroll],",
|
|
948
977
|
"body[data-dsh-claude-style][data-ds-dark-theme] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card]:focus-within [data-input-scroll] {",
|
|
949
|
-
" border-color: rgba(
|
|
950
|
-
" box-shadow: 0 0 0 1px rgba(
|
|
978
|
+
" border-color: rgba(250, 249, 245, 0.45) !important;",
|
|
979
|
+
" box-shadow: 0 0 0 1px rgba(250, 249, 245, 0.18), 0 4px 16px rgba(0, 0, 0, 0.40) !important;",
|
|
980
|
+
"}",
|
|
981
|
+
"/* With attachments the rail already carries the card's focus ring, so the",
|
|
982
|
+
" input keeps only the deepened drop — its own 1px ring would paint a second",
|
|
983
|
+
" line across the seam between the thumbnails and the text. */",
|
|
984
|
+
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) [data-composer-card][data-composer-variant=\"inline\"][data-has-attachments=\"true\"]:focus-within [data-input-scroll],",
|
|
985
|
+
"body[data-dsh-claude-style]:not([data-ds-dark-theme]) [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card][data-has-attachments=\"true\"]:focus-within [data-input-scroll] {",
|
|
986
|
+
" box-shadow: 0 4px 12px rgba(20, 20, 19, 0.05) !important;",
|
|
987
|
+
"}",
|
|
988
|
+
"body[data-dsh-claude-style][data-ds-dark-theme] [data-composer-card][data-composer-variant=\"inline\"][data-has-attachments=\"true\"]:focus-within [data-input-scroll],",
|
|
989
|
+
"body[data-dsh-claude-style][data-ds-dark-theme] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card][data-has-attachments=\"true\"]:focus-within [data-input-scroll] {",
|
|
990
|
+
" box-shadow: 0 4px 16px rgba(0, 0, 0, 0.40) !important;",
|
|
951
991
|
"}",
|
|
952
992
|
"body[data-dsh-claude-style] [data-composer-card][data-composer-variant=\"inline\"] [data-input-scroll] [class*=\"grow\"],",
|
|
953
993
|
"body[data-dsh-claude-style] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card] [data-input-scroll] [class*=\"grow\"] {",
|
|
@@ -1186,7 +1226,60 @@ window.__ModuleLoader__.load({
|
|
|
1186
1226
|
" background: var(--dsh-claude-hover-bg, rgba(0, 0, 0, 0.06)) !important;",
|
|
1187
1227
|
" color: var(--dsw-alias-label-primary) !important;",
|
|
1188
1228
|
"}",
|
|
1189
|
-
"/*
|
|
1229
|
+
"/* The skin's own model trigger replaces the host's model seat (the host's",
|
|
1230
|
+
" root is marked and hidden by syncModelControl). One button, one hover",
|
|
1231
|
+
" background — the shipped seat stacks an icon + label + effort + chevron,",
|
|
1232
|
+
" each with its own surface. */",
|
|
1233
|
+
"body[data-dsh-claude-style] [data-dsh-claude-model-host] {",
|
|
1234
|
+
" display: none !important;",
|
|
1235
|
+
"}",
|
|
1236
|
+
"body[data-dsh-claude-style] [class*=\"trailing\"] .dsh-claude-model-btn {",
|
|
1237
|
+
" display: inline-flex !important;",
|
|
1238
|
+
" align-items: center !important;",
|
|
1239
|
+
" gap: 2px !important;",
|
|
1240
|
+
" height: 28px !important;",
|
|
1241
|
+
" max-width: 280px !important;",
|
|
1242
|
+
" padding: 0 6px 0 8px !important;",
|
|
1243
|
+
" border: none !important;",
|
|
1244
|
+
" border-radius: 7px !important;",
|
|
1245
|
+
" background: transparent !important;",
|
|
1246
|
+
" color: var(--dsw-alias-label-secondary) !important;",
|
|
1247
|
+
" font-size: 13px !important;",
|
|
1248
|
+
" font-weight: 500 !important;",
|
|
1249
|
+
" line-height: 20px !important;",
|
|
1250
|
+
" cursor: pointer !important;",
|
|
1251
|
+
" box-sizing: border-box !important;",
|
|
1252
|
+
" min-width: 0 !important;",
|
|
1253
|
+
"}",
|
|
1254
|
+
"body[data-dsh-claude-style] [class*=\"trailing\"] .dsh-claude-model-btn-label.dsh-claude-model-btn-loading {",
|
|
1255
|
+
" color: var(--dsw-alias-label-caption, #a6a094) !important;",
|
|
1256
|
+
"}",
|
|
1257
|
+
"body[data-dsh-claude-style] [class*=\"trailing\"] .dsh-claude-model-btn:hover {",
|
|
1258
|
+
" background: var(--dsh-claude-hover-bg, rgba(0, 0, 0, 0.08)) !important;",
|
|
1259
|
+
" color: var(--dsw-alias-label-primary) !important;",
|
|
1260
|
+
"}",
|
|
1261
|
+
"body[data-dsh-claude-style] [class*=\"trailing\"] .dsh-claude-model-btn-label {",
|
|
1262
|
+
" text-overflow: ellipsis !important;",
|
|
1263
|
+
" white-space: nowrap !important;",
|
|
1264
|
+
" min-width: 0 !important;",
|
|
1265
|
+
" overflow: hidden !important;",
|
|
1266
|
+
"}",
|
|
1267
|
+
"body[data-dsh-claude-style] [class*=\"trailing\"] .dsh-claude-model-btn-effort {",
|
|
1268
|
+
" flex: none !important;",
|
|
1269
|
+
" color: var(--dsw-alias-label-caption, #a6a094) !important;",
|
|
1270
|
+
" font-weight: 400 !important;",
|
|
1271
|
+
"}",
|
|
1272
|
+
"body[data-dsh-claude-style] [class*=\"trailing\"] .dsh-claude-model-btn-chevron {",
|
|
1273
|
+
" flex: none !important;",
|
|
1274
|
+
" display: inline-flex !important;",
|
|
1275
|
+
" align-items: center !important;",
|
|
1276
|
+
" color: var(--dsw-alias-label-caption, #a6a094) !important;",
|
|
1277
|
+
"}",
|
|
1278
|
+
"/* Token stats pills — merged into the toolbar row (one line with the",
|
|
1279
|
+
" controls). The base rule below is the fallback for the host's own",
|
|
1280
|
+
" position (a full-width line under the card); once mergeStatsIntoRow()",
|
|
1281
|
+
" has moved the pills into the row, the override after it resets every",
|
|
1282
|
+
" geometry property the host's full-width line depends on. */",
|
|
1190
1283
|
"body[data-dsh-claude-style] [data-composer-card][data-composer-variant=\"inline\"] ~ [data-composer-stats],",
|
|
1191
1284
|
"body[data-dsh-claude-style] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-stats] {",
|
|
1192
1285
|
" display: flex !important;",
|
|
@@ -1206,6 +1299,37 @@ window.__ModuleLoader__.load({
|
|
|
1206
1299
|
" white-space: nowrap !important;",
|
|
1207
1300
|
" text-overflow: ellipsis !important;",
|
|
1208
1301
|
"}",
|
|
1302
|
+
"/* In-row: the pills become an inline, shrinkable flex item between the left",
|
|
1303
|
+
" tool cluster and the trailing model/status group (the row's space-between",
|
|
1304
|
+
" centers them). Width, padding and margin come from the host's full-width",
|
|
1305
|
+
" line, so all of them are reset; the pills keep their own hover/click. */",
|
|
1306
|
+
"body[data-dsh-claude-style] [data-composer-card][data-composer-variant=\"inline\"] [class*=\"_row\"] [data-composer-stats],",
|
|
1307
|
+
"body[data-dsh-claude-style] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-card] [class*=\"_row\"] [data-composer-stats] {",
|
|
1308
|
+
" width: auto !important;",
|
|
1309
|
+
" max-width: none !important;",
|
|
1310
|
+
" margin: 0 8px !important;",
|
|
1311
|
+
" padding: 0 !important;",
|
|
1312
|
+
" height: auto !important;",
|
|
1313
|
+
" line-height: 20px !important;",
|
|
1314
|
+
" justify-content: flex-start !important;",
|
|
1315
|
+
" flex: 0 1 auto !important;",
|
|
1316
|
+
" min-width: 0 !important;",
|
|
1317
|
+
"}",
|
|
1318
|
+
"/* The stats pills are on-demand: hidden unless the chat window (the composer)",
|
|
1319
|
+
" is hovered, so the toolbar stays clean. Space is preserved — no reflow when",
|
|
1320
|
+
" they fade in — and because the pills live inside the card, hovering them",
|
|
1321
|
+
" keeps them visible long enough to click. */",
|
|
1322
|
+
"body[data-dsh-claude-style] [data-composer-card] [class*=\"_row\"] [data-composer-stats] {",
|
|
1323
|
+
" opacity: 0 !important;",
|
|
1324
|
+
" visibility: hidden !important;",
|
|
1325
|
+
" pointer-events: none !important;",
|
|
1326
|
+
" transition: opacity 0.15s ease, visibility 0.15s ease !important;",
|
|
1327
|
+
"}",
|
|
1328
|
+
"body[data-dsh-claude-style] [data-composer-card]:hover [class*=\"_row\"] [data-composer-stats] {",
|
|
1329
|
+
" opacity: 1 !important;",
|
|
1330
|
+
" visibility: visible !important;",
|
|
1331
|
+
" pointer-events: auto !important;",
|
|
1332
|
+
"}",
|
|
1209
1333
|
"@media (max-width: 820px) {",
|
|
1210
1334
|
" body[data-dsh-claude-style] [data-composer-card][data-composer-variant=\"inline\"] ~ [data-composer-stats],",
|
|
1211
1335
|
" body[data-dsh-claude-style] [class*=\"composerStack\"]:not(:has([class*=\"heroWorkspaceRow\"])) [data-composer-stats] {",
|
|
@@ -1272,16 +1396,16 @@ window.__ModuleLoader__.load({
|
|
|
1272
1396
|
"body[data-dsh-claude-style][data-dsh-claude-brand=\"anthropic\"] :is([class*=\"brandMark\"], [class*=\"railMark\"])::before {",
|
|
1273
1397
|
" width: 25.9px;",
|
|
1274
1398
|
" height: 18px;",
|
|
1275
|
-
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg
|
|
1276
|
-
" mask: url(\"data:image/svg+xml,%3Csvg
|
|
1399
|
+
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2046%2032'%3E%3Cpath%20d%3D'M32.73%200H25.7846L38.4499%2032H45.3953L32.73%200Z'%2F%3E%3Cpath%20d%3D'M12.6653%200L0%2032H7.08167L9.67193%2025.28H22.9219L25.5122%2032H32.5939L19.9286%200H12.6653ZM11.9626%2019.3371L16.2969%208.09143L20.6313%2019.3371H11.9626Z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
1400
|
+
" mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2046%2032'%3E%3Cpath%20d%3D'M32.73%200H25.7846L38.4499%2032H45.3953L32.73%200Z'%2F%3E%3Cpath%20d%3D'M12.6653%200L0%2032H7.08167L9.67193%2025.28H22.9219L25.5122%2032H32.5939L19.9286%200H12.6653ZM11.9626%2019.3371L16.2969%208.09143L20.6313%2019.3371H11.9626Z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
1277
1401
|
"}",
|
|
1278
1402
|
"",
|
|
1279
1403
|
"body[data-dsh-claude-style][data-dsh-claude-brand=\"anthropic\"] [class*=\"brandIdentity\"] > [class*=\"brandName\"]::before {",
|
|
1280
1404
|
" width: 160.9px;",
|
|
1281
1405
|
" max-width: 100%;",
|
|
1282
1406
|
" height: 18px;",
|
|
1283
|
-
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 143 16%27%3E%3Cpath transform=%27translate(18.299999237060547,0.27000001072883606)%27 d=%27 M10.716191291809082,10.829001426696777 C10.716191291809082,10.829001426696777 3.756195545196533,0 3.756195545196533,0 C3.756195545196533,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.2038140296936035,15.470022201538086 3.2038140296936035,15.470022201538086 C3.2038140296936035,15.470022201538086 3.2038140296936035,4.6410064697265625 3.2038140296936035,4.6410064697265625 C3.2038140296936035,4.6410064697265625 10.163809776306152,15.470022201538086 10.163809776306152,15.470022201538086 C10.163809776306152,15.470022201538086 13.919991493225098,15.470022201538086 13.919991493225098,15.470022201538086 C13.919991493225098,15.470022201538086 13.919991493225098,0 13.919991493225098,0 C13.919991493225098,0 10.716191291809082,0 10.716191291809082,0 C10.716191291809082,0 10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777 C10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777z%27/%3E%3Cpath transform=%27translate(34.869998931884766,0.27000001072883606)%27 d=%27 M0,2.983504056930542 C0,2.983504056930542 5.19273567199707,2.983504056930542 5.19273567199707,2.983504056930542 C5.19273567199707,2.983504056930542 5.19273567199707,15.470022201538086 5.19273567199707,15.470022201538086 C5.19273567199707,15.470022201538086 8.507256507873535,15.470022201538086 8.507256507873535,15.470022201538086 C8.507256507873535,15.470022201538086 8.507256507873535,2.983504056930542 8.507256507873535,2.983504056930542 C8.507256507873535,2.983504056930542 13.700006484985352,2.983504056930542 13.700006484985352,2.983504056930542 C13.700006484985352,2.983504056930542 13.700006484985352,0 13.700006484985352,0 C13.700006484985352,0 0,0 0,0 C0,0 0,2.983504056930542 0,2.983504056930542 C0,2.983504056930542 0,2.983504056930542 0,2.983504056930542z%27/%3E%3Cpath transform=%27translate(51.22999954223633,0.27000001072883606)%27 d=%27 M10.605714797973633,6.165900230407715 C10.605714797973633,6.165900230407715 3.3142902851104736,6.165900230407715 3.3142902851104736,6.165900230407715 C3.3142902851104736,6.165900230407715 3.3142902851104736,0 3.3142902851104736,0 C3.3142902851104736,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3142902851104736,15.470022201538086 3.3142902851104736,15.470022201538086 C3.3142902851104736,15.470022201538086 3.3142902851104736,9.149404525756836 3.3142902851104736,9.149404525756836 C3.3142902851104736,9.149404525756836 10.605714797973633,9.149404525756836 10.605714797973633,9.149404525756836 C10.605714797973633,9.149404525756836 10.605714797973633,15.470022201538086 10.605714797973633,15.470022201538086 C10.605714797973633,15.470022201538086 13.919991493225098,15.470022201538086 13.919991493225098,15.470022201538086 C13.919991493225098,15.470022201538086 13.919991493225098,0 13.919991493225098,0 C13.919991493225098,0 10.605714797973633,0 10.605714797973633,0 C10.605714797973633,0 10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715 C10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715z%27/%3E%3Cpath transform=%27translate(69.23999786376953,0.27000001072883606)%27 d=%27 M3.3151700496673584,2.983504056930542 C3.3151700496673584,2.983504056930542 7.403865814208984,2.983504056930542 7.403865814208984,2.983504056930542 C9.03934097290039,2.983504056930542 9.901290893554688,3.5801939964294434 9.901290893554688,4.707304000854492 C9.901290893554688,5.834399700164795 9.03934097290039,6.431103706359863 7.403865814208984,6.431103706359863 C7.403865814208984,6.431103706359863 3.3151700496673584,6.431103706359863 3.3151700496673584,6.431103706359863 C3.3151700496673584,6.431103706359863 3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542 C3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542z M13.216461181640625,4.707304000854492 C13.216461181640625,1.7900969982147217 11.072648048400879,0 7.558576583862305,0 C7.558576583862305,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3151700496673584,15.470022201538086 3.3151700496673584,15.470022201538086 C3.3151700496673584,15.470022201538086 3.3151700496673584,9.414593696594238 3.3151700496673584,9.414593696594238 C3.3151700496673584,9.414593696594238 7.005825519561768,9.414593696594238 7.005825519561768,9.414593696594238 C7.005825519561768,9.414593696594238 10.321218490600586,15.470022201538086 10.321218490600586,15.470022201538086 C10.321218490600586,15.470022201538086 13.990056991577148,15.470022201538086 13.990056991577148,15.470022201538086 C13.990056991577148,15.470022201538086 10.319005966186523,8.953378677368164 10.319005966186523,8.953378677368164 C12.161579132080078,8.245061874389648 13.216461181640625,6.753532409667969 13.216461181640625,4.707304000854492 C13.216461181640625,4.707304000854492 13.216461181640625,4.707304000854492 13.216461181640625,4.707304000854492z%27/%3E%3Cpath transform=%27translate(84.98999786376953,0)%27 d=%27 M7.622087478637695,12.906073570251465 C5.015110492706299,12.906073570251465 3.4244225025177,11.049725532531738 3.4244225025177,8.022093772888184 C3.4244225025177,4.95027494430542 5.015110492706299,3.0939269065856934 7.622087478637695,3.0939269065856934 C10.206976890563965,3.0939269065856934 11.775577545166016,4.95027494430542 11.775577545166016,8.022093772888184 C11.775577545166016,11.049725532531738 10.206976890563965,12.906073570251465 7.622087478637695,12.906073570251465 C7.622087478637695,12.906073570251465 7.622087478637695,12.906073570251465 7.622087478637695,12.906073570251465z M7.622087478637695,0 C3.1593029499053955,0 0,3.3149218559265137 0,8.022093772888184 C0,12.685078620910645 3.1593029499053955,16 7.622087478637695,16 C12.062784194946289,16 15.200028419494629,12.685078620910645 15.200028419494629,8.022093772888184 C15.200028419494629,3.3149218559265137 12.062784194946289,0 7.622087478637695,0 C7.622087478637695,0 7.622087478637695,0 7.622087478637695,0z%27/%3E%3Cpath transform=%27translate(103.29000091552734,0.27000001072883606)%27 d=%27 M7.405848026275635,6.873104095458984 C7.405848026275635,6.873104095458984 3.3160574436187744,6.873104095458984 3.3160574436187744,6.873104095458984 C3.3160574436187744,6.873104095458984 3.3160574436187744,2.983504056930542 3.3160574436187744,2.983504056930542 C3.3160574436187744,2.983504056930542 7.405848026275635,2.983504056930542 7.405848026275635,2.983504056930542 C9.04176139831543,2.983504056930542 9.90394115447998,3.646505117416382 9.90394115447998,4.928304195404053 C9.90394115447998,6.2101030349731445 9.04176139831543,6.873104095458984 7.405848026275635,6.873104095458984 C7.405848026275635,6.873104095458984 7.405848026275635,6.873104095458984 7.405848026275635,6.873104095458984z M7.5605998039245605,0 C7.5605998039245605,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3160574436187744,15.470022201538086 3.3160574436187744,15.470022201538086 C3.3160574436187744,15.470022201538086 3.3160574436187744,9.85659408569336 3.3160574436187744,9.85659408569336 C3.3160574436187744,9.85659408569336 7.5605998039245605,9.85659408569336 7.5605998039245605,9.85659408569336 C11.07561206817627,9.85659408569336 13.219999313354492,8.000200271606445 13.219999313354492,4.928304195404053 C13.219999313354492,1.8563942909240723 11.07561206817627,0 7.5605998039245605,0 C7.5605998039245605,0 7.5605998039245605,0 7.5605998039245605,0z%27/%3E%3Cpath transform=%27translate(128.0399932861328,0)%27 d=%27 M10.914844512939453,10.5414400100708 C10.340370178222656,12.044201850891113 9.191434860229492,12.906073570251465 7.622706890106201,12.906073570251465 C5.0155181884765625,12.906073570251465 3.4246866703033447,11.049725532531738 3.4246866703033447,8.022093772888184 C3.4246866703033447,4.95027494430542 5.0155181884765625,3.0939269065856934 7.622706890106201,3.0939269065856934 C9.191434860229492,3.0939269065856934 10.340370178222656,3.9557981491088867 10.914844512939453,5.458559989929199 C10.914844512939453,5.458559989929199 14.427860260009766,5.458559989929199 14.427860260009766,5.458559989929199 C13.566211700439453,2.1436522006988525 10.981111526489258,0 7.622706890106201,0 C3.1595458984375,0 0,3.3149218559265137 0,8.022093772888184 C0,12.685078620910645 3.1595458984375,16 7.622706890106201,16 C11.003214836120605,16 13.588300704956055,13.834254264831543 14.449976921081543,10.5414400100708 C14.449976921081543,10.5414400100708 10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708 C10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708z%27/%3E%3Cpath transform=%27translate(117.83000183105469,0.27000001072883606)%27 d=%27 M0,0 C0,0 6.1677093505859375,15.470022201538086 6.1677093505859375,15.470022201538086 C6.1677093505859375,15.470022201538086 9.550004005432129,15.470022201538086 9.550004005432129,15.470022201538086 C9.550004005432129,15.470022201538086 3.382294178009033,0 3.382294178009033,0 C3.382294178009033,0 0,0 0,0 C0,0 0,0 0,0z%27/%3E%3Cpath transform=%27translate(0,0.27000001072883606)%27 d=%27 M5.824605464935303,9.348296165466309 C5.824605464935303,9.348296165466309 7.93500280380249,3.911694288253784 7.93500280380249,3.911694288253784 C7.93500280380249,3.911694288253784 10.045400619506836,9.348296165466309 10.045400619506836,9.348296165466309 C10.045400619506836,9.348296165466309 5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309 C5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309z M6.166755199432373,0 C6.166755199432373,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.4480772018432617,15.470022201538086 3.4480772018432617,15.470022201538086 C3.4480772018432617,15.470022201538086 4.709278583526611,12.22130012512207 4.709278583526611,12.22130012512207 C4.709278583526611,12.22130012512207 11.16093635559082,12.22130012512207 11.16093635559082,12.22130012512207 C11.16093635559082,12.22130012512207 12.421928405761719,15.470022201538086 12.421928405761719,15.470022201538086 C12.421928405761719,15.470022201538086 15.87000560760498,15.470022201538086 15.87000560760498,15.470022201538086 C15.87000560760498,15.470022201538086 9.703250885009766,0 9.703250885009766,0 C9.703250885009766,0 6.166755199432373,0 6.166755199432373,0 C6.166755199432373,0 6.166755199432373,0 6.166755199432373,0z%27/%3E%3C/svg%3E\") center / contain no-repeat;",
|
|
1284
|
-
" mask: url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 143 16%27%3E%3Cpath transform=%27translate(18.299999237060547,0.27000001072883606)%27 d=%27 M10.716191291809082,10.829001426696777 C10.716191291809082,10.829001426696777 3.756195545196533,0 3.756195545196533,0 C3.756195545196533,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.2038140296936035,15.470022201538086 3.2038140296936035,15.470022201538086 C3.2038140296936035,15.470022201538086 3.2038140296936035,4.6410064697265625 3.2038140296936035,4.6410064697265625 C3.2038140296936035,4.6410064697265625 10.163809776306152,15.470022201538086 10.163809776306152,15.470022201538086 C10.163809776306152,15.470022201538086 13.919991493225098,15.470022201538086 13.919991493225098,15.470022201538086 C13.919991493225098,15.470022201538086 13.919991493225098,0 13.919991493225098,0 C13.919991493225098,0 10.716191291809082,0 10.716191291809082,0 C10.716191291809082,0 10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777 C10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777 10.716191291809082,10.829001426696777z%27/%3E%3Cpath transform=%27translate(34.869998931884766,0.27000001072883606)%27 d=%27 M0,2.983504056930542 C0,2.983504056930542 5.19273567199707,2.983504056930542 5.19273567199707,2.983504056930542 C5.19273567199707,2.983504056930542 5.19273567199707,15.470022201538086 5.19273567199707,15.470022201538086 C5.19273567199707,15.470022201538086 8.507256507873535,15.470022201538086 8.507256507873535,15.470022201538086 C8.507256507873535,15.470022201538086 8.507256507873535,2.983504056930542 8.507256507873535,2.983504056930542 C8.507256507873535,2.983504056930542 13.700006484985352,2.983504056930542 13.700006484985352,2.983504056930542 C13.700006484985352,2.983504056930542 13.700006484985352,0 13.700006484985352,0 C13.700006484985352,0 0,0 0,0 C0,0 0,2.983504056930542 0,2.983504056930542 C0,2.983504056930542 0,2.983504056930542 0,2.983504056930542z%27/%3E%3Cpath transform=%27translate(51.22999954223633,0.27000001072883606)%27 d=%27 M10.605714797973633,6.165900230407715 C10.605714797973633,6.165900230407715 3.3142902851104736,6.165900230407715 3.3142902851104736,6.165900230407715 C3.3142902851104736,6.165900230407715 3.3142902851104736,0 3.3142902851104736,0 C3.3142902851104736,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3142902851104736,15.470022201538086 3.3142902851104736,15.470022201538086 C3.3142902851104736,15.470022201538086 3.3142902851104736,9.149404525756836 3.3142902851104736,9.149404525756836 C3.3142902851104736,9.149404525756836 10.605714797973633,9.149404525756836 10.605714797973633,9.149404525756836 C10.605714797973633,9.149404525756836 10.605714797973633,15.470022201538086 10.605714797973633,15.470022201538086 C10.605714797973633,15.470022201538086 13.919991493225098,15.470022201538086 13.919991493225098,15.470022201538086 C13.919991493225098,15.470022201538086 13.919991493225098,0 13.919991493225098,0 C13.919991493225098,0 10.605714797973633,0 10.605714797973633,0 C10.605714797973633,0 10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715 C10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715 10.605714797973633,6.165900230407715z%27/%3E%3Cpath transform=%27translate(69.23999786376953,0.27000001072883606)%27 d=%27 M3.3151700496673584,2.983504056930542 C3.3151700496673584,2.983504056930542 7.403865814208984,2.983504056930542 7.403865814208984,2.983504056930542 C9.03934097290039,2.983504056930542 9.901290893554688,3.5801939964294434 9.901290893554688,4.707304000854492 C9.901290893554688,5.834399700164795 9.03934097290039,6.431103706359863 7.403865814208984,6.431103706359863 C7.403865814208984,6.431103706359863 3.3151700496673584,6.431103706359863 3.3151700496673584,6.431103706359863 C3.3151700496673584,6.431103706359863 3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542 C3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542 3.3151700496673584,2.983504056930542z M13.216461181640625,4.707304000854492 C13.216461181640625,1.7900969982147217 11.072648048400879,0 7.558576583862305,0 C7.558576583862305,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3151700496673584,15.470022201538086 3.3151700496673584,15.470022201538086 C3.3151700496673584,15.470022201538086 3.3151700496673584,9.414593696594238 3.3151700496673584,9.414593696594238 C3.3151700496673584,9.414593696594238 7.005825519561768,9.414593696594238 7.005825519561768,9.414593696594238 C7.005825519561768,9.414593696594238 10.321218490600586,15.470022201538086 10.321218490600586,15.470022201538086 C10.321218490600586,15.470022201538086 13.990056991577148,15.470022201538086 13.990056991577148,15.470022201538086 C13.990056991577148,15.470022201538086 10.319005966186523,8.953378677368164 10.319005966186523,8.953378677368164 C12.161579132080078,8.245061874389648 13.216461181640625,6.753532409667969 13.216461181640625,4.707304000854492 C13.216461181640625,4.707304000854492 13.216461181640625,4.707304000854492 13.216461181640625,4.707304000854492z%27/%3E%3Cpath transform=%27translate(84.98999786376953,0)%27 d=%27 M7.622087478637695,12.906073570251465 C5.015110492706299,12.906073570251465 3.4244225025177,11.049725532531738 3.4244225025177,8.022093772888184 C3.4244225025177,4.95027494430542 5.015110492706299,3.0939269065856934 7.622087478637695,3.0939269065856934 C10.206976890563965,3.0939269065856934 11.775577545166016,4.95027494430542 11.775577545166016,8.022093772888184 C11.775577545166016,11.049725532531738 10.206976890563965,12.906073570251465 7.622087478637695,12.906073570251465 C7.622087478637695,12.906073570251465 7.622087478637695,12.906073570251465 7.622087478637695,12.906073570251465z M7.622087478637695,0 C3.1593029499053955,0 0,3.3149218559265137 0,8.022093772888184 C0,12.685078620910645 3.1593029499053955,16 7.622087478637695,16 C12.062784194946289,16 15.200028419494629,12.685078620910645 15.200028419494629,8.022093772888184 C15.200028419494629,3.3149218559265137 12.062784194946289,0 7.622087478637695,0 C7.622087478637695,0 7.622087478637695,0 7.622087478637695,0z%27/%3E%3Cpath transform=%27translate(103.29000091552734,0.27000001072883606)%27 d=%27 M7.405848026275635,6.873104095458984 C7.405848026275635,6.873104095458984 3.3160574436187744,6.873104095458984 3.3160574436187744,6.873104095458984 C3.3160574436187744,6.873104095458984 3.3160574436187744,2.983504056930542 3.3160574436187744,2.983504056930542 C3.3160574436187744,2.983504056930542 7.405848026275635,2.983504056930542 7.405848026275635,2.983504056930542 C9.04176139831543,2.983504056930542 9.90394115447998,3.646505117416382 9.90394115447998,4.928304195404053 C9.90394115447998,6.2101030349731445 9.04176139831543,6.873104095458984 7.405848026275635,6.873104095458984 C7.405848026275635,6.873104095458984 7.405848026275635,6.873104095458984 7.405848026275635,6.873104095458984z M7.5605998039245605,0 C7.5605998039245605,0 0,0 0,0 C0,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.3160574436187744,15.470022201538086 3.3160574436187744,15.470022201538086 C3.3160574436187744,15.470022201538086 3.3160574436187744,9.85659408569336 3.3160574436187744,9.85659408569336 C3.3160574436187744,9.85659408569336 7.5605998039245605,9.85659408569336 7.5605998039245605,9.85659408569336 C11.07561206817627,9.85659408569336 13.219999313354492,8.000200271606445 13.219999313354492,4.928304195404053 C13.219999313354492,1.8563942909240723 11.07561206817627,0 7.5605998039245605,0 C7.5605998039245605,0 7.5605998039245605,0 7.5605998039245605,0z%27/%3E%3Cpath transform=%27translate(128.0399932861328,0)%27 d=%27 M10.914844512939453,10.5414400100708 C10.340370178222656,12.044201850891113 9.191434860229492,12.906073570251465 7.622706890106201,12.906073570251465 C5.0155181884765625,12.906073570251465 3.4246866703033447,11.049725532531738 3.4246866703033447,8.022093772888184 C3.4246866703033447,4.95027494430542 5.0155181884765625,3.0939269065856934 7.622706890106201,3.0939269065856934 C9.191434860229492,3.0939269065856934 10.340370178222656,3.9557981491088867 10.914844512939453,5.458559989929199 C10.914844512939453,5.458559989929199 14.427860260009766,5.458559989929199 14.427860260009766,5.458559989929199 C13.566211700439453,2.1436522006988525 10.981111526489258,0 7.622706890106201,0 C3.1595458984375,0 0,3.3149218559265137 0,8.022093772888184 C0,12.685078620910645 3.1595458984375,16 7.622706890106201,16 C11.003214836120605,16 13.588300704956055,13.834254264831543 14.449976921081543,10.5414400100708 C14.449976921081543,10.5414400100708 10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708 C10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708 10.914844512939453,10.5414400100708z%27/%3E%3Cpath transform=%27translate(117.83000183105469,0.27000001072883606)%27 d=%27 M0,0 C0,0 6.1677093505859375,15.470022201538086 6.1677093505859375,15.470022201538086 C6.1677093505859375,15.470022201538086 9.550004005432129,15.470022201538086 9.550004005432129,15.470022201538086 C9.550004005432129,15.470022201538086 3.382294178009033,0 3.382294178009033,0 C3.382294178009033,0 0,0 0,0 C0,0 0,0 0,0z%27/%3E%3Cpath transform=%27translate(0,0.27000001072883606)%27 d=%27 M5.824605464935303,9.348296165466309 C5.824605464935303,9.348296165466309 7.93500280380249,3.911694288253784 7.93500280380249,3.911694288253784 C7.93500280380249,3.911694288253784 10.045400619506836,9.348296165466309 10.045400619506836,9.348296165466309 C10.045400619506836,9.348296165466309 5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309 C5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309 5.824605464935303,9.348296165466309z M6.166755199432373,0 C6.166755199432373,0 0,15.470022201538086 0,15.470022201538086 C0,15.470022201538086 3.4480772018432617,15.470022201538086 3.4480772018432617,15.470022201538086 C3.4480772018432617,15.470022201538086 4.709278583526611,12.22130012512207 4.709278583526611,12.22130012512207 C4.709278583526611,12.22130012512207 11.16093635559082,12.22130012512207 11.16093635559082,12.22130012512207 C11.16093635559082,12.22130012512207 12.421928405761719,15.470022201538086 12.421928405761719,15.470022201538086 C12.421928405761719,15.470022201538086 15.87000560760498,15.470022201538086 15.87000560760498,15.470022201538086 C15.87000560760498,15.470022201538086 9.703250885009766,0 9.703250885009766,0 C9.703250885009766,0 6.166755199432373,0 6.166755199432373,0 C6.166755199432373,0 6.166755199432373,0 6.166755199432373,0z%27/%3E%3C/svg%3E\") center / contain no-repeat;",
|
|
1407
|
+
" -webkit-mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20143%2016'%3E%3Cpath%20transform%3D'translate(18.299999237060547%2C0.27000001072883606)'%20d%3D'%20M10.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%203.756195545196533%2C0%203.756195545196533%2C0%20C3.756195545196533%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%20C3.2038140296936035%2C15.470022201538086%203.2038140296936035%2C4.6410064697265625%203.2038140296936035%2C4.6410064697265625%20C3.2038140296936035%2C4.6410064697265625%2010.163809776306152%2C15.470022201538086%2010.163809776306152%2C15.470022201538086%20C10.163809776306152%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.716191291809082%2C0%2010.716191291809082%2C0%20C10.716191291809082%2C0%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777z'%2F%3E%3Cpath%20transform%3D'translate(34.869998931884766%2C0.27000001072883606)'%20d%3D'%20M0%2C2.983504056930542%20C0%2C2.983504056930542%205.19273567199707%2C2.983504056930542%205.19273567199707%2C2.983504056930542%20C5.19273567199707%2C2.983504056930542%205.19273567199707%2C15.470022201538086%205.19273567199707%2C15.470022201538086%20C5.19273567199707%2C15.470022201538086%208.507256507873535%2C15.470022201538086%208.507256507873535%2C15.470022201538086%20C8.507256507873535%2C15.470022201538086%208.507256507873535%2C2.983504056930542%208.507256507873535%2C2.983504056930542%20C8.507256507873535%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%20C13.700006484985352%2C2.983504056930542%2013.700006484985352%2C0%2013.700006484985352%2C0%20C13.700006484985352%2C0%200%2C0%200%2C0%20C0%2C0%200%2C2.983504056930542%200%2C2.983504056930542%20C0%2C2.983504056930542%200%2C2.983504056930542%200%2C2.983504056930542z'%2F%3E%3Cpath%20transform%3D'translate(51.22999954223633%2C0.27000001072883606)'%20d%3D'%20M10.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%20C3.3142902851104736%2C6.165900230407715%203.3142902851104736%2C0%203.3142902851104736%2C0%20C3.3142902851104736%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%20C3.3142902851104736%2C15.470022201538086%203.3142902851104736%2C9.149404525756836%203.3142902851104736%2C9.149404525756836%20C3.3142902851104736%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%20C10.605714797973633%2C9.149404525756836%2010.605714797973633%2C15.470022201538086%2010.605714797973633%2C15.470022201538086%20C10.605714797973633%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.605714797973633%2C0%2010.605714797973633%2C0%20C10.605714797973633%2C0%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715z'%2F%3E%3Cpath%20transform%3D'translate(69.23999786376953%2C0.27000001072883606)'%20d%3D'%20M3.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%207.403865814208984%2C2.983504056930542%207.403865814208984%2C2.983504056930542%20C9.03934097290039%2C2.983504056930542%209.901290893554688%2C3.5801939964294434%209.901290893554688%2C4.707304000854492%20C9.901290893554688%2C5.834399700164795%209.03934097290039%2C6.431103706359863%207.403865814208984%2C6.431103706359863%20C7.403865814208984%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%20C3.3151700496673584%2C6.431103706359863%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542z%20M13.216461181640625%2C4.707304000854492%20C13.216461181640625%2C1.7900969982147217%2011.072648048400879%2C0%207.558576583862305%2C0%20C7.558576583862305%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%20C3.3151700496673584%2C15.470022201538086%203.3151700496673584%2C9.414593696594238%203.3151700496673584%2C9.414593696594238%20C3.3151700496673584%2C9.414593696594238%207.005825519561768%2C9.414593696594238%207.005825519561768%2C9.414593696594238%20C7.005825519561768%2C9.414593696594238%2010.321218490600586%2C15.470022201538086%2010.321218490600586%2C15.470022201538086%20C10.321218490600586%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%20C13.990056991577148%2C15.470022201538086%2010.319005966186523%2C8.953378677368164%2010.319005966186523%2C8.953378677368164%20C12.161579132080078%2C8.245061874389648%2013.216461181640625%2C6.753532409667969%2013.216461181640625%2C4.707304000854492%20C13.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492z'%2F%3E%3Cpath%20transform%3D'translate(84.98999786376953%2C0)'%20d%3D'%20M7.622087478637695%2C12.906073570251465%20C5.015110492706299%2C12.906073570251465%203.4244225025177%2C11.049725532531738%203.4244225025177%2C8.022093772888184%20C3.4244225025177%2C4.95027494430542%205.015110492706299%2C3.0939269065856934%207.622087478637695%2C3.0939269065856934%20C10.206976890563965%2C3.0939269065856934%2011.775577545166016%2C4.95027494430542%2011.775577545166016%2C8.022093772888184%20C11.775577545166016%2C11.049725532531738%2010.206976890563965%2C12.906073570251465%207.622087478637695%2C12.906073570251465%20C7.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465z%20M7.622087478637695%2C0%20C3.1593029499053955%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1593029499053955%2C16%207.622087478637695%2C16%20C12.062784194946289%2C16%2015.200028419494629%2C12.685078620910645%2015.200028419494629%2C8.022093772888184%20C15.200028419494629%2C3.3149218559265137%2012.062784194946289%2C0%207.622087478637695%2C0%20C7.622087478637695%2C0%207.622087478637695%2C0%207.622087478637695%2C0z'%2F%3E%3Cpath%20transform%3D'translate(103.29000091552734%2C0.27000001072883606)'%20d%3D'%20M7.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%20C3.3160574436187744%2C6.873104095458984%203.3160574436187744%2C2.983504056930542%203.3160574436187744%2C2.983504056930542%20C3.3160574436187744%2C2.983504056930542%207.405848026275635%2C2.983504056930542%207.405848026275635%2C2.983504056930542%20C9.04176139831543%2C2.983504056930542%209.90394115447998%2C3.646505117416382%209.90394115447998%2C4.928304195404053%20C9.90394115447998%2C6.2101030349731445%209.04176139831543%2C6.873104095458984%207.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984z%20M7.5605998039245605%2C0%20C7.5605998039245605%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%20C3.3160574436187744%2C15.470022201538086%203.3160574436187744%2C9.85659408569336%203.3160574436187744%2C9.85659408569336%20C3.3160574436187744%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%20C11.07561206817627%2C9.85659408569336%2013.219999313354492%2C8.000200271606445%2013.219999313354492%2C4.928304195404053%20C13.219999313354492%2C1.8563942909240723%2011.07561206817627%2C0%207.5605998039245605%2C0%20C7.5605998039245605%2C0%207.5605998039245605%2C0%207.5605998039245605%2C0z'%2F%3E%3Cpath%20transform%3D'translate(128.0399932861328%2C0)'%20d%3D'%20M10.914844512939453%2C10.5414400100708%20C10.340370178222656%2C12.044201850891113%209.191434860229492%2C12.906073570251465%207.622706890106201%2C12.906073570251465%20C5.0155181884765625%2C12.906073570251465%203.4246866703033447%2C11.049725532531738%203.4246866703033447%2C8.022093772888184%20C3.4246866703033447%2C4.95027494430542%205.0155181884765625%2C3.0939269065856934%207.622706890106201%2C3.0939269065856934%20C9.191434860229492%2C3.0939269065856934%2010.340370178222656%2C3.9557981491088867%2010.914844512939453%2C5.458559989929199%20C10.914844512939453%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%20C13.566211700439453%2C2.1436522006988525%2010.981111526489258%2C0%207.622706890106201%2C0%20C3.1595458984375%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1595458984375%2C16%207.622706890106201%2C16%20C11.003214836120605%2C16%2013.588300704956055%2C13.834254264831543%2014.449976921081543%2C10.5414400100708%20C14.449976921081543%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%20C10.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708z'%2F%3E%3Cpath%20transform%3D'translate(117.83000183105469%2C0.27000001072883606)'%20d%3D'%20M0%2C0%20C0%2C0%206.1677093505859375%2C15.470022201538086%206.1677093505859375%2C15.470022201538086%20C6.1677093505859375%2C15.470022201538086%209.550004005432129%2C15.470022201538086%209.550004005432129%2C15.470022201538086%20C9.550004005432129%2C15.470022201538086%203.382294178009033%2C0%203.382294178009033%2C0%20C3.382294178009033%2C0%200%2C0%200%2C0%20C0%2C0%200%2C0%200%2C0z'%2F%3E%3Cpath%20transform%3D'translate(0%2C0.27000001072883606)'%20d%3D'%20M5.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%207.93500280380249%2C3.911694288253784%207.93500280380249%2C3.911694288253784%20C7.93500280380249%2C3.911694288253784%2010.045400619506836%2C9.348296165466309%2010.045400619506836%2C9.348296165466309%20C10.045400619506836%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309z%20M6.166755199432373%2C0%20C6.166755199432373%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%20C3.4480772018432617%2C15.470022201538086%204.709278583526611%2C12.22130012512207%204.709278583526611%2C12.22130012512207%20C4.709278583526611%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%20C11.16093635559082%2C12.22130012512207%2012.421928405761719%2C15.470022201538086%2012.421928405761719%2C15.470022201538086%20C12.421928405761719%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%20C15.87000560760498%2C15.470022201538086%209.703250885009766%2C0%209.703250885009766%2C0%20C9.703250885009766%2C0%206.166755199432373%2C0%206.166755199432373%2C0%20C6.166755199432373%2C0%206.166755199432373%2C0%206.166755199432373%2C0z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
1408
|
+
" mask: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%20143%2016'%3E%3Cpath%20transform%3D'translate(18.299999237060547%2C0.27000001072883606)'%20d%3D'%20M10.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%203.756195545196533%2C0%203.756195545196533%2C0%20C3.756195545196533%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%203.2038140296936035%2C15.470022201538086%20C3.2038140296936035%2C15.470022201538086%203.2038140296936035%2C4.6410064697265625%203.2038140296936035%2C4.6410064697265625%20C3.2038140296936035%2C4.6410064697265625%2010.163809776306152%2C15.470022201538086%2010.163809776306152%2C15.470022201538086%20C10.163809776306152%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.716191291809082%2C0%2010.716191291809082%2C0%20C10.716191291809082%2C0%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%20C10.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777%2010.716191291809082%2C10.829001426696777z'%2F%3E%3Cpath%20transform%3D'translate(34.869998931884766%2C0.27000001072883606)'%20d%3D'%20M0%2C2.983504056930542%20C0%2C2.983504056930542%205.19273567199707%2C2.983504056930542%205.19273567199707%2C2.983504056930542%20C5.19273567199707%2C2.983504056930542%205.19273567199707%2C15.470022201538086%205.19273567199707%2C15.470022201538086%20C5.19273567199707%2C15.470022201538086%208.507256507873535%2C15.470022201538086%208.507256507873535%2C15.470022201538086%20C8.507256507873535%2C15.470022201538086%208.507256507873535%2C2.983504056930542%208.507256507873535%2C2.983504056930542%20C8.507256507873535%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%2013.700006484985352%2C2.983504056930542%20C13.700006484985352%2C2.983504056930542%2013.700006484985352%2C0%2013.700006484985352%2C0%20C13.700006484985352%2C0%200%2C0%200%2C0%20C0%2C0%200%2C2.983504056930542%200%2C2.983504056930542%20C0%2C2.983504056930542%200%2C2.983504056930542%200%2C2.983504056930542z'%2F%3E%3Cpath%20transform%3D'translate(51.22999954223633%2C0.27000001072883606)'%20d%3D'%20M10.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%203.3142902851104736%2C6.165900230407715%20C3.3142902851104736%2C6.165900230407715%203.3142902851104736%2C0%203.3142902851104736%2C0%20C3.3142902851104736%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%203.3142902851104736%2C15.470022201538086%20C3.3142902851104736%2C15.470022201538086%203.3142902851104736%2C9.149404525756836%203.3142902851104736%2C9.149404525756836%20C3.3142902851104736%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%2010.605714797973633%2C9.149404525756836%20C10.605714797973633%2C9.149404525756836%2010.605714797973633%2C15.470022201538086%2010.605714797973633%2C15.470022201538086%20C10.605714797973633%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%2013.919991493225098%2C15.470022201538086%20C13.919991493225098%2C15.470022201538086%2013.919991493225098%2C0%2013.919991493225098%2C0%20C13.919991493225098%2C0%2010.605714797973633%2C0%2010.605714797973633%2C0%20C10.605714797973633%2C0%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%20C10.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715%2010.605714797973633%2C6.165900230407715z'%2F%3E%3Cpath%20transform%3D'translate(69.23999786376953%2C0.27000001072883606)'%20d%3D'%20M3.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%207.403865814208984%2C2.983504056930542%207.403865814208984%2C2.983504056930542%20C9.03934097290039%2C2.983504056930542%209.901290893554688%2C3.5801939964294434%209.901290893554688%2C4.707304000854492%20C9.901290893554688%2C5.834399700164795%209.03934097290039%2C6.431103706359863%207.403865814208984%2C6.431103706359863%20C7.403865814208984%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%203.3151700496673584%2C6.431103706359863%20C3.3151700496673584%2C6.431103706359863%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%20C3.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542%203.3151700496673584%2C2.983504056930542z%20M13.216461181640625%2C4.707304000854492%20C13.216461181640625%2C1.7900969982147217%2011.072648048400879%2C0%207.558576583862305%2C0%20C7.558576583862305%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%203.3151700496673584%2C15.470022201538086%20C3.3151700496673584%2C15.470022201538086%203.3151700496673584%2C9.414593696594238%203.3151700496673584%2C9.414593696594238%20C3.3151700496673584%2C9.414593696594238%207.005825519561768%2C9.414593696594238%207.005825519561768%2C9.414593696594238%20C7.005825519561768%2C9.414593696594238%2010.321218490600586%2C15.470022201538086%2010.321218490600586%2C15.470022201538086%20C10.321218490600586%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%2013.990056991577148%2C15.470022201538086%20C13.990056991577148%2C15.470022201538086%2010.319005966186523%2C8.953378677368164%2010.319005966186523%2C8.953378677368164%20C12.161579132080078%2C8.245061874389648%2013.216461181640625%2C6.753532409667969%2013.216461181640625%2C4.707304000854492%20C13.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492%2013.216461181640625%2C4.707304000854492z'%2F%3E%3Cpath%20transform%3D'translate(84.98999786376953%2C0)'%20d%3D'%20M7.622087478637695%2C12.906073570251465%20C5.015110492706299%2C12.906073570251465%203.4244225025177%2C11.049725532531738%203.4244225025177%2C8.022093772888184%20C3.4244225025177%2C4.95027494430542%205.015110492706299%2C3.0939269065856934%207.622087478637695%2C3.0939269065856934%20C10.206976890563965%2C3.0939269065856934%2011.775577545166016%2C4.95027494430542%2011.775577545166016%2C8.022093772888184%20C11.775577545166016%2C11.049725532531738%2010.206976890563965%2C12.906073570251465%207.622087478637695%2C12.906073570251465%20C7.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465%207.622087478637695%2C12.906073570251465z%20M7.622087478637695%2C0%20C3.1593029499053955%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1593029499053955%2C16%207.622087478637695%2C16%20C12.062784194946289%2C16%2015.200028419494629%2C12.685078620910645%2015.200028419494629%2C8.022093772888184%20C15.200028419494629%2C3.3149218559265137%2012.062784194946289%2C0%207.622087478637695%2C0%20C7.622087478637695%2C0%207.622087478637695%2C0%207.622087478637695%2C0z'%2F%3E%3Cpath%20transform%3D'translate(103.29000091552734%2C0.27000001072883606)'%20d%3D'%20M7.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%203.3160574436187744%2C6.873104095458984%20C3.3160574436187744%2C6.873104095458984%203.3160574436187744%2C2.983504056930542%203.3160574436187744%2C2.983504056930542%20C3.3160574436187744%2C2.983504056930542%207.405848026275635%2C2.983504056930542%207.405848026275635%2C2.983504056930542%20C9.04176139831543%2C2.983504056930542%209.90394115447998%2C3.646505117416382%209.90394115447998%2C4.928304195404053%20C9.90394115447998%2C6.2101030349731445%209.04176139831543%2C6.873104095458984%207.405848026275635%2C6.873104095458984%20C7.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984%207.405848026275635%2C6.873104095458984z%20M7.5605998039245605%2C0%20C7.5605998039245605%2C0%200%2C0%200%2C0%20C0%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%203.3160574436187744%2C15.470022201538086%20C3.3160574436187744%2C15.470022201538086%203.3160574436187744%2C9.85659408569336%203.3160574436187744%2C9.85659408569336%20C3.3160574436187744%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%207.5605998039245605%2C9.85659408569336%20C11.07561206817627%2C9.85659408569336%2013.219999313354492%2C8.000200271606445%2013.219999313354492%2C4.928304195404053%20C13.219999313354492%2C1.8563942909240723%2011.07561206817627%2C0%207.5605998039245605%2C0%20C7.5605998039245605%2C0%207.5605998039245605%2C0%207.5605998039245605%2C0z'%2F%3E%3Cpath%20transform%3D'translate(128.0399932861328%2C0)'%20d%3D'%20M10.914844512939453%2C10.5414400100708%20C10.340370178222656%2C12.044201850891113%209.191434860229492%2C12.906073570251465%207.622706890106201%2C12.906073570251465%20C5.0155181884765625%2C12.906073570251465%203.4246866703033447%2C11.049725532531738%203.4246866703033447%2C8.022093772888184%20C3.4246866703033447%2C4.95027494430542%205.0155181884765625%2C3.0939269065856934%207.622706890106201%2C3.0939269065856934%20C9.191434860229492%2C3.0939269065856934%2010.340370178222656%2C3.9557981491088867%2010.914844512939453%2C5.458559989929199%20C10.914844512939453%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%2014.427860260009766%2C5.458559989929199%20C13.566211700439453%2C2.1436522006988525%2010.981111526489258%2C0%207.622706890106201%2C0%20C3.1595458984375%2C0%200%2C3.3149218559265137%200%2C8.022093772888184%20C0%2C12.685078620910645%203.1595458984375%2C16%207.622706890106201%2C16%20C11.003214836120605%2C16%2013.588300704956055%2C13.834254264831543%2014.449976921081543%2C10.5414400100708%20C14.449976921081543%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%20C10.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708%2010.914844512939453%2C10.5414400100708z'%2F%3E%3Cpath%20transform%3D'translate(117.83000183105469%2C0.27000001072883606)'%20d%3D'%20M0%2C0%20C0%2C0%206.1677093505859375%2C15.470022201538086%206.1677093505859375%2C15.470022201538086%20C6.1677093505859375%2C15.470022201538086%209.550004005432129%2C15.470022201538086%209.550004005432129%2C15.470022201538086%20C9.550004005432129%2C15.470022201538086%203.382294178009033%2C0%203.382294178009033%2C0%20C3.382294178009033%2C0%200%2C0%200%2C0%20C0%2C0%200%2C0%200%2C0z'%2F%3E%3Cpath%20transform%3D'translate(0%2C0.27000001072883606)'%20d%3D'%20M5.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%207.93500280380249%2C3.911694288253784%207.93500280380249%2C3.911694288253784%20C7.93500280380249%2C3.911694288253784%2010.045400619506836%2C9.348296165466309%2010.045400619506836%2C9.348296165466309%20C10.045400619506836%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%20C5.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309%205.824605464935303%2C9.348296165466309z%20M6.166755199432373%2C0%20C6.166755199432373%2C0%200%2C15.470022201538086%200%2C15.470022201538086%20C0%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%203.4480772018432617%2C15.470022201538086%20C3.4480772018432617%2C15.470022201538086%204.709278583526611%2C12.22130012512207%204.709278583526611%2C12.22130012512207%20C4.709278583526611%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%2011.16093635559082%2C12.22130012512207%20C11.16093635559082%2C12.22130012512207%2012.421928405761719%2C15.470022201538086%2012.421928405761719%2C15.470022201538086%20C12.421928405761719%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%2015.87000560760498%2C15.470022201538086%20C15.87000560760498%2C15.470022201538086%209.703250885009766%2C0%209.703250885009766%2C0%20C9.703250885009766%2C0%206.166755199432373%2C0%206.166755199432373%2C0%20C6.166755199432373%2C0%206.166755199432373%2C0%206.166755199432373%2C0z'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
1285
1409
|
"}",
|
|
1286
1410
|
"",
|
|
1287
1411
|
"/* ---------- Claude Code layout: new session button ---------- */",
|
|
@@ -1669,7 +1793,9 @@ window.__ModuleLoader__.load({
|
|
|
1669
1793
|
" z-index: 99999 !important;",
|
|
1670
1794
|
" display: flex !important;",
|
|
1671
1795
|
" flex-direction: column !important;",
|
|
1672
|
-
"
|
|
1796
|
+
" /* Two-line preset rows (label + description) need air between them: the",
|
|
1797
|
+
" 2px gap read as one solid block, so each row is separated by 6px. */",
|
|
1798
|
+
" gap: 6px !important;",
|
|
1673
1799
|
" opacity: 0 !important;",
|
|
1674
1800
|
" pointer-events: none !important;",
|
|
1675
1801
|
" transform: translateY(4px) scale(0.98) !important;",
|
|
@@ -1724,7 +1850,7 @@ window.__ModuleLoader__.load({
|
|
|
1724
1850
|
"body[data-dsh-claude-style] .dsh-claude-account-avatar {",
|
|
1725
1851
|
" width: 18px;",
|
|
1726
1852
|
" height: 18px;",
|
|
1727
|
-
" background: url(\"data:image/svg+xml,%3Csvg
|
|
1853
|
+
" background: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%3E%3Cpath%20d%3D'M4.709%2015.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0%2011.784l.055-.352.48-.321.686.06%201.52.103%202.278.158%201.652.097%202.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686%201.908%201.476%202.491%201.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97%202.97%200%2001-.104-.729L6.283.134%206.696%200l.996.134.42.364.62%201.414%201.002%202.229%201.555%203.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286%201.851-.559%202.903-.364%201.942h.212l.243-.242.985-1.306%201.652-2.064.73-.82.85-.904.547-.431h1.033l.76%201.129-.34%201.166-1.064%201.347-.881%201.142-1.264%201.7-.79%201.36.073.11.188-.02%202.856-.606%201.543-.28%201.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061%201.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093%201.068%202.006%201.81%202.509%202.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649%202.345%203.521.122%201.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674%207.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434%201.967-2.18%202.945-1.726%201.845-.414.164-.717-.37.067-.662.401-.589%202.388-3.036%201.44-1.882.93-1.086-.006-.158h-.055L4.132%2018.56l-1.13.146-.487-.456.061-.746.231-.243%201.908-1.312-.006.006z'%20fill%3D'%23D97757'%2F%3E%3C%2Fsvg%3E\") center / contain no-repeat;",
|
|
1728
1854
|
" flex: none;",
|
|
1729
1855
|
" margin-right: 8px;",
|
|
1730
1856
|
"}",
|
|
@@ -1812,6 +1938,146 @@ window.__ModuleLoader__.load({
|
|
|
1812
1938
|
" background: transparent;",
|
|
1813
1939
|
"}",
|
|
1814
1940
|
"",
|
|
1941
|
+
"/* ---------- Claude Code layout: model picker ---------- */",
|
|
1942
|
+
"/* Replaces the host's two-pane model menu: level 1 carries the current",
|
|
1943
|
+
" provider's models, a divider, the effort row and a More models row; both",
|
|
1944
|
+
" rows open their level 2 beside this popover. Container metrics mirror the",
|
|
1945
|
+
" permission popover so the two read as one design. */",
|
|
1946
|
+
"body[data-dsh-claude-style] .dsh-claude-model-popover {",
|
|
1947
|
+
" position: fixed !important;",
|
|
1948
|
+
" min-width: 248px !important;",
|
|
1949
|
+
" max-width: min(360px, calc(100vw - 16px)) !important;",
|
|
1950
|
+
" max-height: min(440px, calc(100vh - 96px)) !important;",
|
|
1951
|
+
" overflow-y: auto !important;",
|
|
1952
|
+
" background: var(--dsw-alias-bg-overlay, #ffffff) !important;",
|
|
1953
|
+
" border: 1px solid var(--dsw-alias-border-l1, #e8e6dc) !important;",
|
|
1954
|
+
" border-radius: 12px !important;",
|
|
1955
|
+
" box-shadow: 0 8px 30px rgba(20, 20, 19, 0.12), 0 2px 8px rgba(20, 20, 19, 0.06) !important;",
|
|
1956
|
+
" padding: 6px !important;",
|
|
1957
|
+
" box-sizing: border-box !important;",
|
|
1958
|
+
" z-index: 99999 !important;",
|
|
1959
|
+
" display: flex !important;",
|
|
1960
|
+
" flex-direction: column !important;",
|
|
1961
|
+
" gap: 6px !important;",
|
|
1962
|
+
" opacity: 0 !important;",
|
|
1963
|
+
" pointer-events: none !important;",
|
|
1964
|
+
" transform: translateY(4px) scale(0.98) !important;",
|
|
1965
|
+
" transform-origin: bottom right !important;",
|
|
1966
|
+
" transition: opacity 0.15s ease, transform 0.15s ease !important;",
|
|
1967
|
+
"}",
|
|
1968
|
+
"body[data-dsh-claude-style] .dsh-claude-model-popover[data-open=\"true\"] {",
|
|
1969
|
+
" opacity: 1 !important;",
|
|
1970
|
+
" pointer-events: auto !important;",
|
|
1971
|
+
" transform: translateY(0) scale(1) !important;",
|
|
1972
|
+
"}",
|
|
1973
|
+
"body[data-dsh-claude-style][data-ds-dark-theme] .dsh-claude-model-popover {",
|
|
1974
|
+
" background: #1e1e1d !important;",
|
|
1975
|
+
" border-color: #2e2c29 !important;",
|
|
1976
|
+
" box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3) !important;",
|
|
1977
|
+
"}",
|
|
1978
|
+
"body[data-dsh-claude-style] .dsh-claude-model-popover-body {",
|
|
1979
|
+
" display: flex !important;",
|
|
1980
|
+
" flex-direction: column !important;",
|
|
1981
|
+
" gap: 6px !important;",
|
|
1982
|
+
" min-width: 0 !important;",
|
|
1983
|
+
"}",
|
|
1984
|
+
"body[data-dsh-claude-style] .dsh-claude-model-status {",
|
|
1985
|
+
" color: var(--dsw-alias-label-tertiary, #8f8d84) !important;",
|
|
1986
|
+
" font-size: 12px !important;",
|
|
1987
|
+
" line-height: 20px !important;",
|
|
1988
|
+
" padding: 4px 8px !important;",
|
|
1989
|
+
"}",
|
|
1990
|
+
"body[data-dsh-claude-style] .dsh-claude-model-group {",
|
|
1991
|
+
" color: var(--dsw-alias-label-tertiary, #8f8d84) !important;",
|
|
1992
|
+
" font-size: 11px !important;",
|
|
1993
|
+
" line-height: 16px !important;",
|
|
1994
|
+
" padding: 2px 8px 0 8px !important;",
|
|
1995
|
+
"}",
|
|
1996
|
+
"/* Model / effort option: same row metrics and hover as the drawer items. */",
|
|
1997
|
+
"body[data-dsh-claude-style] .dsh-claude-model-option {",
|
|
1998
|
+
" display: flex !important;",
|
|
1999
|
+
" align-items: center !important;",
|
|
2000
|
+
" gap: 8px !important;",
|
|
2001
|
+
" width: 100% !important;",
|
|
2002
|
+
" min-height: 32px !important;",
|
|
2003
|
+
" padding: 4px 8px !important;",
|
|
2004
|
+
" border: none !important;",
|
|
2005
|
+
" border-radius: 6px !important;",
|
|
2006
|
+
" background: transparent !important;",
|
|
2007
|
+
" color: var(--dsw-alias-label-primary, #141413) !important;",
|
|
2008
|
+
" font-size: 13px !important;",
|
|
2009
|
+
" text-align: left !important;",
|
|
2010
|
+
" cursor: pointer !important;",
|
|
2011
|
+
" box-sizing: border-box !important;",
|
|
2012
|
+
"}",
|
|
2013
|
+
"body[data-dsh-claude-style] .dsh-claude-model-option:hover {",
|
|
2014
|
+
" background: var(--dsh-claude-hover-bg, rgba(0, 0, 0, 0.08)) !important;",
|
|
2015
|
+
"}",
|
|
2016
|
+
"body[data-dsh-claude-style] .dsh-claude-model-copy {",
|
|
2017
|
+
" display: flex !important;",
|
|
2018
|
+
" flex-direction: column !important;",
|
|
2019
|
+
" gap: 2px !important;",
|
|
2020
|
+
" flex: 1 !important;",
|
|
2021
|
+
" min-width: 0 !important;",
|
|
2022
|
+
"}",
|
|
2023
|
+
"body[data-dsh-claude-style] .dsh-claude-model-name {",
|
|
2024
|
+
" font-size: 13px !important;",
|
|
2025
|
+
" font-weight: 500 !important;",
|
|
2026
|
+
" line-height: 16px !important;",
|
|
2027
|
+
"}",
|
|
2028
|
+
"body[data-dsh-claude-style] .dsh-claude-model-desc {",
|
|
2029
|
+
" font-size: 11px !important;",
|
|
2030
|
+
" line-height: 14px !important;",
|
|
2031
|
+
" color: var(--dsw-alias-label-tertiary, #8f8d84) !important;",
|
|
2032
|
+
"}",
|
|
2033
|
+
"body[data-dsh-claude-style] .dsh-claude-model-check {",
|
|
2034
|
+
" flex: none !important;",
|
|
2035
|
+
" display: inline-flex !important;",
|
|
2036
|
+
" align-items: center !important;",
|
|
2037
|
+
" color: var(--dsw-alias-brand-primary, #d97757) !important;",
|
|
2038
|
+
"}",
|
|
2039
|
+
"body[data-dsh-claude-style] .dsh-claude-model-divider {",
|
|
2040
|
+
" height: 1px !important;",
|
|
2041
|
+
" background: var(--dsw-alias-border-l1, #e8e6dc) !important;",
|
|
2042
|
+
" margin: 2px 4px !important;",
|
|
2043
|
+
" flex: none !important;",
|
|
2044
|
+
"}",
|
|
2045
|
+
"/* Level-2 row: label + current value + chevron; hover opens its own level. */",
|
|
2046
|
+
"body[data-dsh-claude-style] .dsh-claude-model-cell {",
|
|
2047
|
+
" display: flex !important;",
|
|
2048
|
+
" align-items: center !important;",
|
|
2049
|
+
" gap: 8px !important;",
|
|
2050
|
+
" width: 100% !important;",
|
|
2051
|
+
" min-height: 32px !important;",
|
|
2052
|
+
" padding: 4px 8px !important;",
|
|
2053
|
+
" border: none !important;",
|
|
2054
|
+
" border-radius: 6px !important;",
|
|
2055
|
+
" background: transparent !important;",
|
|
2056
|
+
" color: var(--dsw-alias-label-primary, #141413) !important;",
|
|
2057
|
+
" font-size: 13px !important;",
|
|
2058
|
+
" text-align: left !important;",
|
|
2059
|
+
" cursor: pointer !important;",
|
|
2060
|
+
" box-sizing: border-box !important;",
|
|
2061
|
+
"}",
|
|
2062
|
+
"body[data-dsh-claude-style] .dsh-claude-model-cell:hover {",
|
|
2063
|
+
" background: var(--dsh-claude-hover-bg, rgba(0, 0, 0, 0.08)) !important;",
|
|
2064
|
+
"}",
|
|
2065
|
+
"body[data-dsh-claude-style] .dsh-claude-model-cell-label {",
|
|
2066
|
+
" flex: 1 !important;",
|
|
2067
|
+
" min-width: 0 !important;",
|
|
2068
|
+
"}",
|
|
2069
|
+
"body[data-dsh-claude-style] .dsh-claude-model-cell-value {",
|
|
2070
|
+
" flex: none !important;",
|
|
2071
|
+
" color: var(--dsw-alias-label-tertiary, #8f8d84) !important;",
|
|
2072
|
+
" font-size: 12px !important;",
|
|
2073
|
+
"}",
|
|
2074
|
+
"body[data-dsh-claude-style] .dsh-claude-model-cell-chevron {",
|
|
2075
|
+
" flex: none !important;",
|
|
2076
|
+
" display: inline-flex !important;",
|
|
2077
|
+
" align-items: center !important;",
|
|
2078
|
+
" color: var(--dsw-alias-label-caption, #a6a094) !important;",
|
|
2079
|
+
"}",
|
|
2080
|
+
"",
|
|
1815
2081
|
"/* Popover Header */",
|
|
1816
2082
|
"body[data-dsh-claude-style] .dsh-claude-account-popover-header {",
|
|
1817
2083
|
" padding: 6px 8px 6px 8px !important;",
|
|
@@ -2138,11 +2404,29 @@ window.__ModuleLoader__.load({
|
|
|
2138
2404
|
return null
|
|
2139
2405
|
}
|
|
2140
2406
|
|
|
2407
|
+
/**
|
|
2408
|
+
* The current-session selection left the Session Controller in dsh 0.2:
|
|
2409
|
+
* the list snapshot no longer carries `current`, and the main-view
|
|
2410
|
+
* selection is projected by the `uiSession` service as a binding source
|
|
2411
|
+
* whose `value.key` is the selected session id (`undefined` when no
|
|
2412
|
+
* session is materialized). Read the new source first and fall back to
|
|
2413
|
+
* the legacy `list.current` so older hosts keep working.
|
|
2414
|
+
*/
|
|
2415
|
+
function currentSessionId(ctx, sessions) {
|
|
2416
|
+
try {
|
|
2417
|
+
var uiSession = ctx.get('uiSession')
|
|
2418
|
+
var current = uiSession === void 0 || uiSession === null ? null : uiSession.current
|
|
2419
|
+
var value = current === void 0 || current === null ? null : current.value
|
|
2420
|
+
if (value !== void 0 && value !== null && typeof value.key === 'string') return value.key
|
|
2421
|
+
} catch (error) { /* fall through to the legacy snapshot field */ }
|
|
2422
|
+
return sessions.list.getSnapshot().current
|
|
2423
|
+
}
|
|
2424
|
+
|
|
2141
2425
|
function currentSession(ctx) {
|
|
2142
2426
|
var sessions = ctx.get('sessions')
|
|
2143
2427
|
if (sessions === void 0 || sessions === null) return null
|
|
2144
|
-
var id = sessions
|
|
2145
|
-
if (id === void 0) return null
|
|
2428
|
+
var id = currentSessionId(ctx, sessions)
|
|
2429
|
+
if (id === void 0 || id === null) return null
|
|
2146
2430
|
var binding = sessions.binding(id)
|
|
2147
2431
|
if (binding === void 0 || binding === null) return null
|
|
2148
2432
|
return binding.session === void 0 ? null : binding.session
|
|
@@ -2151,7 +2435,11 @@ window.__ModuleLoader__.load({
|
|
|
2151
2435
|
function currentPreset(session) {
|
|
2152
2436
|
try {
|
|
2153
2437
|
var snapshot = session.projections.faceOf('permissions').getSnapshot()
|
|
2154
|
-
|
|
2438
|
+
if (snapshot === void 0 || snapshot === null) return null
|
|
2439
|
+
// dsh 0.2+ projection faces hand back the bare value (e.g. the preset
|
|
2440
|
+
// id string); older hosts wrapped it as `{ currentValue }`.
|
|
2441
|
+
if (typeof snapshot === 'object' && 'currentValue' in snapshot) return snapshot.currentValue
|
|
2442
|
+
return snapshot
|
|
2155
2443
|
} catch (error) {
|
|
2156
2444
|
return null
|
|
2157
2445
|
}
|
|
@@ -2575,16 +2863,43 @@ window.__ModuleLoader__.load({
|
|
|
2575
2863
|
}
|
|
2576
2864
|
}
|
|
2577
2865
|
|
|
2578
|
-
|
|
2866
|
+
/**
|
|
2867
|
+
* Merge the session-stats pills into the composer toolbar row so the
|
|
2868
|
+
* controls and the stats share ONE line. The host renders the pills
|
|
2869
|
+
* (the `conversation.composer.dock` slot) as the card's sibling — a
|
|
2870
|
+
* full-width line of their own below the input box; the skin moves
|
|
2871
|
+
* them into the row, right before the trailing model/status group.
|
|
2872
|
+
* A host re-render can put them back, so the move is re-applied on
|
|
2873
|
+
* every pass and is a no-op once they are in place.
|
|
2874
|
+
*/
|
|
2875
|
+
function mergeStatsIntoRow() {
|
|
2579
2876
|
var stats = document.querySelector('[data-composer-stats]')
|
|
2877
|
+
if (!stats) return
|
|
2580
2878
|
// `[class*="_row"]`, not `[class*="row"]`: the bare substring also
|
|
2581
2879
|
// matches the input growth wrapper (`grow` contains `row`).
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2880
|
+
var row = null
|
|
2881
|
+
if (stats.parentElement && stats.parentElement.matches && stats.parentElement.matches('[class*="_row"]')) {
|
|
2882
|
+
row = stats.parentElement
|
|
2883
|
+
} else {
|
|
2884
|
+
// Host default: the pills sit in a slot anchor beside the card.
|
|
2885
|
+
// Walk up to the nearest ancestor that also holds a composer card.
|
|
2886
|
+
var node = stats.parentElement
|
|
2887
|
+
while (node && node !== document.body && row === null) {
|
|
2888
|
+
var card = node.querySelector('[data-composer-card]')
|
|
2889
|
+
if (card) {
|
|
2890
|
+
var r = card.querySelector('[class*="_row"]')
|
|
2891
|
+
if (r) row = r
|
|
2892
|
+
}
|
|
2893
|
+
node = node.parentElement
|
|
2586
2894
|
}
|
|
2587
2895
|
}
|
|
2896
|
+
if (row === null) return
|
|
2897
|
+
var trailing = row.querySelector('[class*="trailing"]')
|
|
2898
|
+
var inPlace = stats.parentElement === row &&
|
|
2899
|
+
(trailing !== null ? stats.nextElementSibling === trailing : row.lastElementChild === stats)
|
|
2900
|
+
if (inPlace) return
|
|
2901
|
+
if (trailing !== null) row.insertBefore(stats, trailing)
|
|
2902
|
+
else row.appendChild(stats)
|
|
2588
2903
|
}
|
|
2589
2904
|
|
|
2590
2905
|
// Re-insert when a re-render swapped the host row, then mirror the running preset.
|
|
@@ -2668,6 +2983,512 @@ window.__ModuleLoader__.load({
|
|
|
2668
2983
|
}
|
|
2669
2984
|
}
|
|
2670
2985
|
|
|
2986
|
+
/**
|
|
2987
|
+
* The composer is chat-view-only. The host mounts the seat inside the
|
|
2988
|
+
* conversation root on every tab (轨迹 / 上下文 even reserve room for
|
|
2989
|
+
* it), so the skin reflects the active view on <body> and CSS drops the
|
|
2990
|
+
* whole bottom area unless the chat tab is selected.
|
|
2991
|
+
*
|
|
2992
|
+
* Scope: the conversation tablist lives in the panel header, which is
|
|
2993
|
+
* the root's first child — any other tablist (the trajectory detail
|
|
2994
|
+
* panel, say) renders later inside the ledger. The chat view registers
|
|
2995
|
+
* at order 0, so it is always the tablist's FIRST tab; reading that
|
|
2996
|
+
* tab's aria-selected is locale-independent. No tab bar at all (hero /
|
|
2997
|
+
* single view) means the chat surface is all there is.
|
|
2998
|
+
*/
|
|
2999
|
+
function syncChatTabComposer() {
|
|
3000
|
+
var chatActive = true
|
|
3001
|
+
var seat = document.querySelector('[data-composer-seat]')
|
|
3002
|
+
var root = seat && seat.closest ? seat.closest('[data-phase]') : null
|
|
3003
|
+
if (root) {
|
|
3004
|
+
var list = root.querySelector('[role="tablist"]')
|
|
3005
|
+
if (list) {
|
|
3006
|
+
var first = list.querySelector('[role="tab"]')
|
|
3007
|
+
if (first) chatActive = first.getAttribute('aria-selected') === 'true'
|
|
3008
|
+
}
|
|
3009
|
+
}
|
|
3010
|
+
if (chatActive) document.body.removeAttribute('data-dsh-claude-composer-hidden')
|
|
3011
|
+
else document.body.setAttribute('data-dsh-claude-composer-hidden', '')
|
|
3012
|
+
}
|
|
3013
|
+
|
|
3014
|
+
// --- 4.4 Model picker: replaces the host's model seat ---
|
|
3015
|
+
/**
|
|
3016
|
+
* The host's model seat is a click-triggered two-pane menu (Model /
|
|
3017
|
+
* Effort rows drilling into their own lists). The skin replaces it with
|
|
3018
|
+
* a Claude-style picker: hovering the trigger opens the first level —
|
|
3019
|
+
* the DeepSeek official provider's models, a divider, then the
|
|
3020
|
+
* reasoning-effort row (when the current model offers one) and a More
|
|
3021
|
+
* models row; both open their second level BESIDE the first level.
|
|
3022
|
+
*
|
|
3023
|
+
* Data and submission ride the host's own per-session ModelDirectory
|
|
3024
|
+
* (`ctx.modelDirectories`), the same store the host's menu and the
|
|
3025
|
+
* /model command read — so the current selection, catalog and errors
|
|
3026
|
+
* stay in sync without scraping the DOM. The host's seat is hidden and
|
|
3027
|
+
* marked; a React swap re-marks it on the next pass.
|
|
3028
|
+
*/
|
|
3029
|
+
var modelBtn = null
|
|
3030
|
+
var modelPop = null
|
|
3031
|
+
var modelSubPop = null
|
|
3032
|
+
var modelBody = null
|
|
3033
|
+
var modelSubBody = null
|
|
3034
|
+
var modelCloseTimer = null
|
|
3035
|
+
var modelDir = null
|
|
3036
|
+
var modelSub = null
|
|
3037
|
+
var modelSessionId = null
|
|
3038
|
+
var modelSubKind = null
|
|
3039
|
+
var modelBodySig = ''
|
|
3040
|
+
var modelSubSig = ''
|
|
3041
|
+
|
|
3042
|
+
function cancelCloseModel() {
|
|
3043
|
+
if (modelCloseTimer) {
|
|
3044
|
+
clearTimeout(modelCloseTimer)
|
|
3045
|
+
modelCloseTimer = null
|
|
3046
|
+
}
|
|
3047
|
+
}
|
|
3048
|
+
|
|
3049
|
+
function scheduleCloseModel() {
|
|
3050
|
+
cancelCloseModel()
|
|
3051
|
+
modelCloseTimer = setTimeout(function () {
|
|
3052
|
+
closeModelPopovers()
|
|
3053
|
+
}, 180)
|
|
3054
|
+
}
|
|
3055
|
+
|
|
3056
|
+
function closeModelPopovers() {
|
|
3057
|
+
cancelCloseModel()
|
|
3058
|
+
if (modelPop) modelPop.setAttribute('data-open', 'false')
|
|
3059
|
+
if (modelSubPop) modelSubPop.setAttribute('data-open', 'false')
|
|
3060
|
+
modelSubKind = null
|
|
3061
|
+
}
|
|
3062
|
+
|
|
3063
|
+
function openModelPopover() {
|
|
3064
|
+
cancelCloseModel()
|
|
3065
|
+
modelDirectory()
|
|
3066
|
+
// load() is async — the host itself guards with .catch(() => {}); a bare
|
|
3067
|
+
// try/catch cannot see its rejection.
|
|
3068
|
+
if (modelDir && typeof modelDir.load === 'function') {
|
|
3069
|
+
try {
|
|
3070
|
+
var pending = modelDir.load()
|
|
3071
|
+
if (pending && typeof pending.catch === 'function') {
|
|
3072
|
+
pending.catch(function () { /* the store's error surface covers a failure */ })
|
|
3073
|
+
}
|
|
3074
|
+
} catch (error) { /* synchronous failure — the store's error surface covers it */ }
|
|
3075
|
+
}
|
|
3076
|
+
modelSubKind = null
|
|
3077
|
+
if (modelSubPop) modelSubPop.setAttribute('data-open', 'false')
|
|
3078
|
+
positionModelPopovers()
|
|
3079
|
+
if (modelPop) modelPop.setAttribute('data-open', 'true')
|
|
3080
|
+
}
|
|
3081
|
+
|
|
3082
|
+
function openModelSub(kind) {
|
|
3083
|
+
cancelCloseModel()
|
|
3084
|
+
modelSubKind = kind
|
|
3085
|
+
positionModelPopovers()
|
|
3086
|
+
if (modelSubPop) modelSubPop.setAttribute('data-open', 'true')
|
|
3087
|
+
}
|
|
3088
|
+
|
|
3089
|
+
/**
|
|
3090
|
+
* The current session id. The Session Controller dropped
|
|
3091
|
+
* `list.current` in dsh 0.2 (the main-view selection now comes from the
|
|
3092
|
+
* `uiSession` projection), so this MUST go through the shared
|
|
3093
|
+
* currentSessionId() in context.js — reading the legacy field directly
|
|
3094
|
+
* resolves to null on current hosts and the picker never loads.
|
|
3095
|
+
*/
|
|
3096
|
+
function currentModelSessionId() {
|
|
3097
|
+
try {
|
|
3098
|
+
var sessions = ctx.get('sessions')
|
|
3099
|
+
if (sessions === void 0 || sessions === null) return null
|
|
3100
|
+
var id = currentSessionId(ctx, sessions)
|
|
3101
|
+
return id === void 0 || id === null ? null : id
|
|
3102
|
+
} catch (error) {
|
|
3103
|
+
return null
|
|
3104
|
+
}
|
|
3105
|
+
}
|
|
3106
|
+
|
|
3107
|
+
function dropModelSubscription() {
|
|
3108
|
+
if (modelSub) {
|
|
3109
|
+
try { modelSub() } catch (error) { /* already disposed */ }
|
|
3110
|
+
}
|
|
3111
|
+
modelSub = null
|
|
3112
|
+
}
|
|
3113
|
+
|
|
3114
|
+
/** Resolve the session's directory (and observe it) once per session. */
|
|
3115
|
+
function modelDirectory() {
|
|
3116
|
+
var id = currentModelSessionId()
|
|
3117
|
+
if (id === null) {
|
|
3118
|
+
dropModelSubscription()
|
|
3119
|
+
modelDir = null
|
|
3120
|
+
modelSessionId = null
|
|
3121
|
+
return null
|
|
3122
|
+
}
|
|
3123
|
+
if (modelSessionId === id && modelDir !== null) return modelDir
|
|
3124
|
+
dropModelSubscription()
|
|
3125
|
+
modelDir = null
|
|
3126
|
+
modelSessionId = null
|
|
3127
|
+
try {
|
|
3128
|
+
var dirs = ctx.get('modelDirectories')
|
|
3129
|
+
if (dirs && typeof dirs.directoryFor === 'function') {
|
|
3130
|
+
modelDir = dirs.directoryFor(id)
|
|
3131
|
+
}
|
|
3132
|
+
} catch (error) {
|
|
3133
|
+
modelDir = null
|
|
3134
|
+
}
|
|
3135
|
+
modelSessionId = id
|
|
3136
|
+
// The directory INSTANCE only carries load/select — its reactive state
|
|
3137
|
+
// hangs off the `.store` snapshot store (the host hands that same store
|
|
3138
|
+
// to its own menu as `directory`). Subscribe to the store, never to the
|
|
3139
|
+
// instance, and never let a subscribe failure discard the directory.
|
|
3140
|
+
if (modelDir !== null) {
|
|
3141
|
+
var store = modelDir.store
|
|
3142
|
+
if (store && typeof store.subscribe === 'function') {
|
|
3143
|
+
try {
|
|
3144
|
+
modelSub = store.subscribe(function () { schedule() })
|
|
3145
|
+
} catch (error) {
|
|
3146
|
+
modelSub = null
|
|
3147
|
+
}
|
|
3148
|
+
}
|
|
3149
|
+
}
|
|
3150
|
+
return modelDir
|
|
3151
|
+
}
|
|
3152
|
+
|
|
3153
|
+
function modelSnapshot() {
|
|
3154
|
+
if (modelDir === null || !modelDir.store) return null
|
|
3155
|
+
try { return modelDir.store.getSnapshot() } catch (error) { return null }
|
|
3156
|
+
}
|
|
3157
|
+
|
|
3158
|
+
/** The current selection resolved to its group + model entries. */
|
|
3159
|
+
function modelCurrent(snap) {
|
|
3160
|
+
if (!snap || snap.current === null) return null
|
|
3161
|
+
for (var g = 0; g < snap.groups.length; g++) {
|
|
3162
|
+
var group = snap.groups[g]
|
|
3163
|
+
if (group.id !== snap.current.provider) continue
|
|
3164
|
+
for (var m = 0; m < group.models.length; m++) {
|
|
3165
|
+
if (group.models[m].id === snap.current.model) return { group: group, model: group.models[m] }
|
|
3166
|
+
}
|
|
3167
|
+
}
|
|
3168
|
+
return null
|
|
3169
|
+
}
|
|
3170
|
+
|
|
3171
|
+
/** Reasoning metadata + the effective effort for the current model. */
|
|
3172
|
+
function modelEffort(snap) {
|
|
3173
|
+
var current = modelCurrent(snap)
|
|
3174
|
+
if (current === null || !current.model.reasoning) return null
|
|
3175
|
+
var reasoning = current.model.reasoning
|
|
3176
|
+
var effective = snap.current.reasoningEffort !== void 0 ? snap.current.reasoningEffort : reasoning.defaultEffort
|
|
3177
|
+
var label = MODEL_EFFORT_DEFAULT
|
|
3178
|
+
if (effective !== void 0) {
|
|
3179
|
+
label = effective
|
|
3180
|
+
for (var i = 0; i < reasoning.efforts.length; i++) {
|
|
3181
|
+
if (reasoning.efforts[i].id === effective) {
|
|
3182
|
+
label = reasoning.efforts[i].name
|
|
3183
|
+
break
|
|
3184
|
+
}
|
|
3185
|
+
}
|
|
3186
|
+
}
|
|
3187
|
+
return { reasoning: reasoning, effective: effective, label: label }
|
|
3188
|
+
}
|
|
3189
|
+
|
|
3190
|
+
function modelDescription(groupId, model) {
|
|
3191
|
+
var key = groupId + '/' + model.id
|
|
3192
|
+
if (MODEL_DESCRIPTIONS[key]) return MODEL_DESCRIPTIONS[key]
|
|
3193
|
+
return model.description || ''
|
|
3194
|
+
}
|
|
3195
|
+
|
|
3196
|
+
function modelEl(tag, cls, text) {
|
|
3197
|
+
var el = document.createElement(tag)
|
|
3198
|
+
if (cls) el.className = cls
|
|
3199
|
+
if (text !== void 0 && text !== null) el.textContent = text
|
|
3200
|
+
return el
|
|
3201
|
+
}
|
|
3202
|
+
|
|
3203
|
+
var MODEL_CHECK_SVG = '<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M3 8.5l3.2 3.2L13 5"/></svg>'
|
|
3204
|
+
var MODEL_CHEVRON_SVG = '<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6 4l4 4-4 4"/></svg>'
|
|
3205
|
+
var MODEL_CHEVRON_DOWN_SVG = '<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6l4 4 4-4"/></svg>'
|
|
3206
|
+
|
|
3207
|
+
/** One selectable model row: name (+ description) and a check when current. */
|
|
3208
|
+
function buildModelOption(group, model, selected) {
|
|
3209
|
+
var item = modelEl('button', 'dsh-claude-model-option')
|
|
3210
|
+
item.type = 'button'
|
|
3211
|
+
item.setAttribute('role', 'menuitemradio')
|
|
3212
|
+
item.setAttribute('aria-checked', selected ? 'true' : 'false')
|
|
3213
|
+
var copy = modelEl('span', 'dsh-claude-model-copy')
|
|
3214
|
+
copy.appendChild(modelEl('span', 'dsh-claude-model-name', model.name))
|
|
3215
|
+
var desc = modelDescription(group.id, model)
|
|
3216
|
+
if (desc) copy.appendChild(modelEl('span', 'dsh-claude-model-desc', desc))
|
|
3217
|
+
item.appendChild(copy)
|
|
3218
|
+
var check = modelEl('span', 'dsh-claude-model-check')
|
|
3219
|
+
check.innerHTML = selected ? MODEL_CHECK_SVG : ''
|
|
3220
|
+
item.appendChild(check)
|
|
3221
|
+
item.addEventListener('click', (function (g, m) {
|
|
3222
|
+
return function (e) {
|
|
3223
|
+
e.stopPropagation()
|
|
3224
|
+
pickModel(g, m)
|
|
3225
|
+
}
|
|
3226
|
+
})(group.id, model.id))
|
|
3227
|
+
return item
|
|
3228
|
+
}
|
|
3229
|
+
|
|
3230
|
+
/** One level-2 row: label + current value + chevron, hover opens its level. */
|
|
3231
|
+
function buildModelCell(label, value, kind) {
|
|
3232
|
+
var cell = modelEl('button', 'dsh-claude-model-cell')
|
|
3233
|
+
cell.type = 'button'
|
|
3234
|
+
cell.setAttribute('role', 'menuitem')
|
|
3235
|
+
cell.appendChild(modelEl('span', 'dsh-claude-model-cell-label', label))
|
|
3236
|
+
if (value) cell.appendChild(modelEl('span', 'dsh-claude-model-cell-value', value))
|
|
3237
|
+
var chevron = modelEl('span', 'dsh-claude-model-cell-chevron')
|
|
3238
|
+
chevron.innerHTML = MODEL_CHEVRON_SVG
|
|
3239
|
+
cell.appendChild(chevron)
|
|
3240
|
+
cell.addEventListener('mouseenter', (function (k) {
|
|
3241
|
+
return function () { openModelSub(k) }
|
|
3242
|
+
})(kind))
|
|
3243
|
+
cell.addEventListener('click', (function (k) {
|
|
3244
|
+
return function (e) {
|
|
3245
|
+
e.stopPropagation()
|
|
3246
|
+
if (modelSubKind === k) closeModelPopovers()
|
|
3247
|
+
else openModelSub(k)
|
|
3248
|
+
}
|
|
3249
|
+
})(kind))
|
|
3250
|
+
return cell
|
|
3251
|
+
}
|
|
3252
|
+
|
|
3253
|
+
function pickModel(provider, modelId) {
|
|
3254
|
+
var dir = modelDirectory()
|
|
3255
|
+
if (dir === null) return
|
|
3256
|
+
try {
|
|
3257
|
+
// select() is async and rejects on a failed selection; swallow the
|
|
3258
|
+
// rejection the way the host's own seat wrapper does.
|
|
3259
|
+
var pending = dir.select({ provider: provider, model: modelId })
|
|
3260
|
+
if (pending && typeof pending.catch === 'function') pending.catch(function () {})
|
|
3261
|
+
} catch (error) { /* rejected selections surface on the host's toast */ }
|
|
3262
|
+
closeModelPopovers()
|
|
3263
|
+
}
|
|
3264
|
+
|
|
3265
|
+
function pickEffort(effort) {
|
|
3266
|
+
var dir = modelDirectory()
|
|
3267
|
+
var snap = modelSnapshot()
|
|
3268
|
+
if (dir === null || !snap || snap.current === null) return
|
|
3269
|
+
var selection = { provider: snap.current.provider, model: snap.current.model }
|
|
3270
|
+
if (effort !== void 0) selection.reasoningEffort = effort
|
|
3271
|
+
try {
|
|
3272
|
+
var pending = dir.select(selection)
|
|
3273
|
+
if (pending && typeof pending.catch === 'function') pending.catch(function () {})
|
|
3274
|
+
} catch (error) { /* rejected selections surface on the host's toast */ }
|
|
3275
|
+
closeModelPopovers()
|
|
3276
|
+
}
|
|
3277
|
+
|
|
3278
|
+
/** Level 1: the official provider's models, divider, effort + more rows. */
|
|
3279
|
+
function renderModelBody() {
|
|
3280
|
+
if (!modelBody) return
|
|
3281
|
+
var snap = modelSnapshot()
|
|
3282
|
+
var status = snap ? snap.status : 'idle'
|
|
3283
|
+
var groups = (snap && snap.groups) || []
|
|
3284
|
+
var current = modelCurrent(snap)
|
|
3285
|
+
var effort = modelEffort(snap)
|
|
3286
|
+
var sig = [status, current ? current.group.id + '/' + current.model.id : '', effort ? String(effort.effective) : ''].join('|')
|
|
3287
|
+
for (var g = 0; g < groups.length; g++) sig += ';' + groups[g].id + ':' + groups[g].models.length
|
|
3288
|
+
if (sig === modelBodySig) return
|
|
3289
|
+
modelBodySig = sig
|
|
3290
|
+
while (modelBody.firstChild) modelBody.removeChild(modelBody.firstChild)
|
|
3291
|
+
|
|
3292
|
+
if (status === 'idle' || status === 'loading' || status === 'selecting') {
|
|
3293
|
+
modelBody.appendChild(modelEl('div', 'dsh-claude-model-status', MODEL_LOADING_LABEL))
|
|
3294
|
+
} else {
|
|
3295
|
+
var official = null
|
|
3296
|
+
for (var g2 = 0; g2 < groups.length; g2++) {
|
|
3297
|
+
if (groups[g2].id === MODEL_OFFICIAL_GROUP) { official = groups[g2]; break }
|
|
3298
|
+
}
|
|
3299
|
+
var rows = []
|
|
3300
|
+
if (official) {
|
|
3301
|
+
for (var m = 0; m < official.models.length; m++) rows.push({ group: official, model: official.models[m] })
|
|
3302
|
+
} else {
|
|
3303
|
+
for (var g3 = 0; g3 < groups.length; g3++) {
|
|
3304
|
+
for (var m2 = 0; m2 < groups[g3].models.length; m2++) rows.push({ group: groups[g3], model: groups[g3].models[m2] })
|
|
3305
|
+
}
|
|
3306
|
+
}
|
|
3307
|
+
if (rows.length === 0) {
|
|
3308
|
+
modelBody.appendChild(modelEl('div', 'dsh-claude-model-status', MODEL_EMPTY_LABEL))
|
|
3309
|
+
} else {
|
|
3310
|
+
for (var r = 0; r < rows.length; r++) {
|
|
3311
|
+
var selected = current !== null && current.group.id === rows[r].group.id && current.model.id === rows[r].model.id
|
|
3312
|
+
modelBody.appendChild(buildModelOption(rows[r].group, rows[r].model, selected))
|
|
3313
|
+
}
|
|
3314
|
+
}
|
|
3315
|
+
modelBody.appendChild(modelEl('div', 'dsh-claude-model-divider'))
|
|
3316
|
+
if (effort) modelBody.appendChild(buildModelCell(MODEL_EFFORT_LABEL, effort.label, 'effort'))
|
|
3317
|
+
modelBody.appendChild(buildModelCell(MODEL_MORE_LABEL, '', 'more'))
|
|
3318
|
+
}
|
|
3319
|
+
}
|
|
3320
|
+
|
|
3321
|
+
/** Level 2: the effort ladder, or every provider group's models. */
|
|
3322
|
+
function renderModelSub() {
|
|
3323
|
+
if (!modelSubBody) return
|
|
3324
|
+
var snap = modelSnapshot()
|
|
3325
|
+
if (modelSubKind === 'effort') {
|
|
3326
|
+
var effort = modelEffort(snap)
|
|
3327
|
+
var sig = 'effort:' + (effort ? String(effort.effective) : 'none')
|
|
3328
|
+
if (sig === modelSubSig) return
|
|
3329
|
+
modelSubSig = sig
|
|
3330
|
+
while (modelSubBody.firstChild) modelSubBody.removeChild(modelSubBody.firstChild)
|
|
3331
|
+
if (effort === null) {
|
|
3332
|
+
modelSubBody.appendChild(modelEl('div', 'dsh-claude-model-status', '当前模型未提供推理等级。'))
|
|
3333
|
+
return
|
|
3334
|
+
}
|
|
3335
|
+
var levels = []
|
|
3336
|
+
if (effort.reasoning.defaultEffort === void 0) levels.push({ effort: void 0, label: MODEL_EFFORT_DEFAULT })
|
|
3337
|
+
for (var i = 0; i < effort.reasoning.efforts.length; i++) {
|
|
3338
|
+
levels.push({ effort: effort.reasoning.efforts[i].id, label: effort.reasoning.efforts[i].name })
|
|
3339
|
+
}
|
|
3340
|
+
for (var l = 0; l < levels.length; l++) {
|
|
3341
|
+
(function (level, active) {
|
|
3342
|
+
var item = modelEl('button', 'dsh-claude-model-option')
|
|
3343
|
+
item.type = 'button'
|
|
3344
|
+
item.setAttribute('role', 'menuitemradio')
|
|
3345
|
+
item.setAttribute('aria-checked', active ? 'true' : 'false')
|
|
3346
|
+
item.appendChild(modelEl('span', 'dsh-claude-model-copy', level.label))
|
|
3347
|
+
var check = modelEl('span', 'dsh-claude-model-check')
|
|
3348
|
+
check.innerHTML = active ? MODEL_CHECK_SVG : ''
|
|
3349
|
+
item.appendChild(check)
|
|
3350
|
+
item.addEventListener('click', function (e) {
|
|
3351
|
+
e.stopPropagation()
|
|
3352
|
+
pickEffort(level.effort)
|
|
3353
|
+
})
|
|
3354
|
+
modelSubBody.appendChild(item)
|
|
3355
|
+
})(levels[l], effort.effective === levels[l].effort)
|
|
3356
|
+
}
|
|
3357
|
+
return
|
|
3358
|
+
}
|
|
3359
|
+
// 'more': every provider group, headed by its name.
|
|
3360
|
+
var groups = (snap && snap.groups) || []
|
|
3361
|
+
var current = modelCurrent(snap)
|
|
3362
|
+
var sig2 = 'more'
|
|
3363
|
+
for (var g = 0; g < groups.length; g++) sig2 += ';' + groups[g].id + ':' + groups[g].models.length
|
|
3364
|
+
if (current) sig2 += '#' + current.group.id + '/' + current.model.id
|
|
3365
|
+
if (sig2 === modelSubSig) return
|
|
3366
|
+
modelSubSig = sig2
|
|
3367
|
+
while (modelSubBody.firstChild) modelSubBody.removeChild(modelSubBody.firstChild)
|
|
3368
|
+
for (var g2 = 0; g2 < groups.length; g2++) {
|
|
3369
|
+
var group = groups[g2]
|
|
3370
|
+
if (group.models.length === 0) continue
|
|
3371
|
+
modelSubBody.appendChild(modelEl('div', 'dsh-claude-model-group', group.name))
|
|
3372
|
+
for (var m = 0; m < group.models.length; m++) {
|
|
3373
|
+
var selected = current !== null && current.group.id === group.id && current.model.id === group.models[m].id
|
|
3374
|
+
modelSubBody.appendChild(buildModelOption(group, group.models[m], selected))
|
|
3375
|
+
}
|
|
3376
|
+
}
|
|
3377
|
+
if (modelSubBody.firstChild === null) {
|
|
3378
|
+
modelSubBody.appendChild(modelEl('div', 'dsh-claude-model-status', MODEL_EMPTY_LABEL))
|
|
3379
|
+
}
|
|
3380
|
+
}
|
|
3381
|
+
|
|
3382
|
+
function positionModelPopovers() {
|
|
3383
|
+
if (!modelBtn || !modelPop) return
|
|
3384
|
+
var rect = modelBtn.getBoundingClientRect()
|
|
3385
|
+
var MARGIN = 8
|
|
3386
|
+
var w = modelPop.offsetWidth
|
|
3387
|
+
var h = modelPop.offsetHeight
|
|
3388
|
+
var x = Math.max(MARGIN, Math.min(rect.right - w, window.innerWidth - w - MARGIN))
|
|
3389
|
+
var y = rect.top - 6 - h
|
|
3390
|
+
if (y < MARGIN) y = Math.min(rect.bottom + 6, Math.max(MARGIN, window.innerHeight - h - MARGIN))
|
|
3391
|
+
modelPop.style.left = x + 'px'
|
|
3392
|
+
modelPop.style.top = y + 'px'
|
|
3393
|
+
if (modelSubPop && modelSubPop.getAttribute('data-open') === 'true') {
|
|
3394
|
+
var w2 = modelSubPop.offsetWidth
|
|
3395
|
+
var h2 = modelSubPop.offsetHeight
|
|
3396
|
+
// Beside the first level; flip to its left when the viewport is tight.
|
|
3397
|
+
var x2 = x + w + 4
|
|
3398
|
+
if (x2 + w2 > window.innerWidth - MARGIN) x2 = Math.max(MARGIN, x - 4 - w2)
|
|
3399
|
+
var y2 = Math.max(MARGIN, Math.min(y, window.innerHeight - h2 - MARGIN))
|
|
3400
|
+
modelSubPop.style.left = x2 + 'px'
|
|
3401
|
+
modelSubPop.style.top = y2 + 'px'
|
|
3402
|
+
}
|
|
3403
|
+
}
|
|
3404
|
+
|
|
3405
|
+
function ensureModelChrome() {
|
|
3406
|
+
if (modelPop === null) {
|
|
3407
|
+
modelPop = document.createElement('div')
|
|
3408
|
+
modelPop.className = 'dsh-claude-model-popover'
|
|
3409
|
+
modelPop.setAttribute('role', 'menu')
|
|
3410
|
+
modelPop.setAttribute('data-open', 'false')
|
|
3411
|
+
modelBody = document.createElement('div')
|
|
3412
|
+
modelBody.className = 'dsh-claude-model-popover-body'
|
|
3413
|
+
modelPop.appendChild(modelBody)
|
|
3414
|
+
modelPop.addEventListener('mouseenter', cancelCloseModel)
|
|
3415
|
+
modelPop.addEventListener('mouseleave', scheduleCloseModel)
|
|
3416
|
+
document.body.appendChild(modelPop)
|
|
3417
|
+
}
|
|
3418
|
+
if (modelSubPop === null) {
|
|
3419
|
+
modelSubPop = document.createElement('div')
|
|
3420
|
+
modelSubPop.className = 'dsh-claude-model-popover dsh-claude-model-popover-sub'
|
|
3421
|
+
modelSubPop.setAttribute('role', 'menu')
|
|
3422
|
+
modelSubPop.setAttribute('data-open', 'false')
|
|
3423
|
+
modelSubBody = document.createElement('div')
|
|
3424
|
+
modelSubBody.className = 'dsh-claude-model-popover-body'
|
|
3425
|
+
modelSubPop.appendChild(modelSubBody)
|
|
3426
|
+
modelSubPop.addEventListener('mouseenter', cancelCloseModel)
|
|
3427
|
+
modelSubPop.addEventListener('mouseleave', scheduleCloseModel)
|
|
3428
|
+
document.body.appendChild(modelSubPop)
|
|
3429
|
+
}
|
|
3430
|
+
}
|
|
3431
|
+
|
|
3432
|
+
/** Build/refresh the trigger, its label and the popover rows. */
|
|
3433
|
+
function syncModelControl() {
|
|
3434
|
+
modelDirectory()
|
|
3435
|
+
var slot = document.querySelector('[data-slot="conversation.input.model"]')
|
|
3436
|
+
if (slot === null) return
|
|
3437
|
+
// Hide the host's own seat (React owns the node; re-mark on swap).
|
|
3438
|
+
var hostRoot = slot.firstElementChild
|
|
3439
|
+
if (hostRoot !== null && !hostRoot.hasAttribute('data-dsh-claude-model-host')) {
|
|
3440
|
+
hostRoot.setAttribute('data-dsh-claude-model-host', '')
|
|
3441
|
+
}
|
|
3442
|
+
if (modelBtn === null || modelBtn.parentElement !== slot) {
|
|
3443
|
+
if (modelBtn !== null && modelBtn.parentElement !== null) modelBtn.parentElement.removeChild(modelBtn)
|
|
3444
|
+
modelBtn = document.createElement('button')
|
|
3445
|
+
modelBtn.type = 'button'
|
|
3446
|
+
modelBtn.className = 'dsh-claude-model-btn'
|
|
3447
|
+
modelBtn.setAttribute('aria-haspopup', 'menu')
|
|
3448
|
+
modelBtn.innerHTML =
|
|
3449
|
+
'<span class="dsh-claude-model-btn-label"></span>' +
|
|
3450
|
+
'<span class="dsh-claude-model-btn-chevron">' + MODEL_CHEVRON_DOWN_SVG + '</span>'
|
|
3451
|
+
modelBtn.addEventListener('mouseenter', function () { openModelPopover() })
|
|
3452
|
+
modelBtn.addEventListener('mouseleave', scheduleCloseModel)
|
|
3453
|
+
modelBtn.addEventListener('click', function (e) {
|
|
3454
|
+
e.stopPropagation()
|
|
3455
|
+
if (modelPop && modelPop.getAttribute('data-open') === 'true') closeModelPopovers()
|
|
3456
|
+
else openModelPopover()
|
|
3457
|
+
})
|
|
3458
|
+
slot.appendChild(modelBtn)
|
|
3459
|
+
}
|
|
3460
|
+
ensureModelChrome()
|
|
3461
|
+
|
|
3462
|
+
var snap = modelSnapshot()
|
|
3463
|
+
var current = modelCurrent(snap)
|
|
3464
|
+
var effort = modelEffort(snap)
|
|
3465
|
+
var label = current ? current.model.name : MODEL_FALLBACK_LABEL
|
|
3466
|
+
var labelEl = modelBtn.querySelector('.dsh-claude-model-btn-label')
|
|
3467
|
+
if (labelEl) {
|
|
3468
|
+
labelEl.textContent = label
|
|
3469
|
+
labelEl.classList.toggle('dsh-claude-model-btn-loading', !!(snap && (snap.status === 'loading' || snap.status === 'idle' || snap.status === 'selecting')))
|
|
3470
|
+
}
|
|
3471
|
+
var effortEl = modelBtn.querySelector('.dsh-claude-model-btn-effort')
|
|
3472
|
+
if (effort) {
|
|
3473
|
+
if (effortEl === null) {
|
|
3474
|
+
effortEl = modelEl('span', 'dsh-claude-model-btn-effort')
|
|
3475
|
+
modelBtn.insertBefore(effortEl, modelBtn.firstChild ? labelEl.nextSibling : null)
|
|
3476
|
+
}
|
|
3477
|
+
effortEl.textContent = '· ' + effort.label
|
|
3478
|
+
} else if (effortEl !== null && effortEl.parentElement) {
|
|
3479
|
+
effortEl.parentElement.removeChild(effortEl)
|
|
3480
|
+
}
|
|
3481
|
+
modelBtn.setAttribute('aria-label', '选择模型,当前 ' + label)
|
|
3482
|
+
modelBtn.disabled = false
|
|
3483
|
+
|
|
3484
|
+
renderModelBody()
|
|
3485
|
+
if (modelSubKind !== null) {
|
|
3486
|
+
renderModelSub()
|
|
3487
|
+
if (modelSubPop && modelSubPop.getAttribute('data-open') === 'true') positionModelPopovers()
|
|
3488
|
+
}
|
|
3489
|
+
if (modelPop && modelPop.getAttribute('data-open') === 'true') positionModelPopovers()
|
|
3490
|
+
}
|
|
3491
|
+
|
|
2671
3492
|
// --- 4.3 Account Footer & Popover ---
|
|
2672
3493
|
var accountBtn = null
|
|
2673
3494
|
var accountPopover = null
|
|
@@ -2680,6 +3501,13 @@ window.__ModuleLoader__.load({
|
|
|
2680
3501
|
clearTimeout(popoverTimer)
|
|
2681
3502
|
popoverTimer = null
|
|
2682
3503
|
}
|
|
3504
|
+
// Mirrors are frozen while the popover is open (syncPopoverItems
|
|
3505
|
+
// bails), so reconcile them here — before the reveal — to show fresh
|
|
3506
|
+
// content/order and bind click targets for the upcoming interaction.
|
|
3507
|
+
try {
|
|
3508
|
+
var footArea = document.querySelector('[class*="footArea"]')
|
|
3509
|
+
if (footArea) syncPopoverItems(footArea)
|
|
3510
|
+
} catch (error) { /* opening must never fail because of a mirror sync */ }
|
|
2683
3511
|
accountPopover.setAttribute('data-open', 'true')
|
|
2684
3512
|
accountBtn.setAttribute('data-open', 'true')
|
|
2685
3513
|
accountBtn.setAttribute('aria-expanded', 'true')
|
|
@@ -2766,6 +3594,15 @@ window.__ModuleLoader__.load({
|
|
|
2766
3594
|
var footerActions = footArea.querySelector('[class*="footerActions"]')
|
|
2767
3595
|
var footerEntries = syncFooterActionVisibility(footerActions)
|
|
2768
3596
|
|
|
3597
|
+
// While the popover is open, its mirrors must stay completely static:
|
|
3598
|
+
// a content rewrite, reorder, or embedded-clone replacement under the
|
|
3599
|
+
// pointer cancels the browser's :hover state and can swallow the click
|
|
3600
|
+
// between pointerdown and pointerup. Sync runs only while closed;
|
|
3601
|
+
// openPopover runs one final pass right before the reveal — and the
|
|
3602
|
+
// sidebar-side redirection above stays live, so a newly mounted entry
|
|
3603
|
+
// keeps being hidden even with the popover open.
|
|
3604
|
+
if (accountPopover && accountPopover.getAttribute('data-open') === 'true') return
|
|
3605
|
+
|
|
2769
3606
|
var existingActionItems = popoverBody.querySelectorAll('[data-action-index], [data-embed-index]')
|
|
2770
3607
|
for (var ea = 0; ea < existingActionItems.length; ea++) {
|
|
2771
3608
|
var staleIdx = parseInt(existingActionItems[ea].getAttribute('data-action-index') || existingActionItems[ea].getAttribute('data-embed-index'), 10)
|
|
@@ -2775,7 +3612,8 @@ window.__ModuleLoader__.load({
|
|
|
2775
3612
|
}
|
|
2776
3613
|
|
|
2777
3614
|
for (var f = 0; f < footerEntries.length; f++) {
|
|
2778
|
-
|
|
3615
|
+
try {
|
|
3616
|
+
(function (entry, idx) {
|
|
2779
3617
|
var trigger = findFooterTrigger(entry)
|
|
2780
3618
|
var hasContent = (entry.textContent || '').trim() !== '' ||
|
|
2781
3619
|
entry.querySelector('svg, img, canvas') !== null
|
|
@@ -2817,11 +3655,26 @@ window.__ModuleLoader__.load({
|
|
|
2817
3655
|
item.addEventListener('click', function (e) {
|
|
2818
3656
|
e.stopPropagation()
|
|
2819
3657
|
closePopover()
|
|
2820
|
-
// The activator is rebound on every sync pass
|
|
3658
|
+
// The activator is rebound on every (closed-state) sync pass
|
|
2821
3659
|
// (`item.__dshActivator`), never captured at creation — the
|
|
2822
3660
|
// host re-sorts list slots by `order` on each render, so the
|
|
2823
3661
|
// entry behind an index changes over time.
|
|
2824
3662
|
var live = item.__dshActivator
|
|
3663
|
+
if (!live || typeof live.click !== 'function') {
|
|
3664
|
+
// Safety net: re-resolve the current trigger for this index
|
|
3665
|
+
// from the live footer DOM. Covers the rare case where the
|
|
3666
|
+
// stored node was detached by a host re-render while the
|
|
3667
|
+
// popover was open.
|
|
3668
|
+
try {
|
|
3669
|
+
var fa = document.querySelector('[class*="footArea"]')
|
|
3670
|
+
var actions = fa ? fa.querySelector('[class*="footerActions"]') : null
|
|
3671
|
+
var liveEntries = actions ? footerEntriesOf(actions) : []
|
|
3672
|
+
var liveEntry = liveEntries[idx] || null
|
|
3673
|
+
live = liveEntry ? findFooterTrigger(liveEntry) : null
|
|
3674
|
+
} catch (error) {
|
|
3675
|
+
live = null
|
|
3676
|
+
}
|
|
3677
|
+
}
|
|
2825
3678
|
if (live && typeof live.click === 'function') live.click()
|
|
2826
3679
|
})
|
|
2827
3680
|
popoverBody.insertBefore(item, settingsItem)
|
|
@@ -2841,7 +3694,12 @@ window.__ModuleLoader__.load({
|
|
|
2841
3694
|
// Rebind the click target to the entry currently behind this
|
|
2842
3695
|
// index. Done on every pass, for new and reused items alike.
|
|
2843
3696
|
item.__dshActivator = activator
|
|
2844
|
-
|
|
3697
|
+
})(footerEntries[f], f)
|
|
3698
|
+
} catch (err) {
|
|
3699
|
+
// A single broken entry must not abort the rest of the mirror
|
|
3700
|
+
// sync (which would leave later items without a rebound
|
|
3701
|
+
// activator or un-ordered).
|
|
3702
|
+
}
|
|
2845
3703
|
}
|
|
2846
3704
|
|
|
2847
3705
|
// The host re-sorts list-slot outlets by `order` on every render
|
|
@@ -3239,8 +4097,15 @@ window.__ModuleLoader__.load({
|
|
|
3239
4097
|
// Zone 5: 响应式调度与生命周期清理 (Scheduler & Teardown)
|
|
3240
4098
|
// ============================================================================
|
|
3241
4099
|
function onGlobalPointerDown(e) {
|
|
3242
|
-
if (!accountPopover || !accountBtn) return
|
|
3243
4100
|
var target = e.target
|
|
4101
|
+
// The model picker is hover-driven; a press anywhere outside its
|
|
4102
|
+
// trigger and both levels closes it (same discipline as the perm menu).
|
|
4103
|
+
if (target && (modelBtn === null || !modelBtn.contains(target)) &&
|
|
4104
|
+
(modelPop === null || !modelPop.contains(target)) &&
|
|
4105
|
+
(modelSubPop === null || !modelSubPop.contains(target))) {
|
|
4106
|
+
closeModelPopovers()
|
|
4107
|
+
}
|
|
4108
|
+
if (!accountPopover || !accountBtn) return
|
|
3244
4109
|
if (target && (accountBtn.contains(target) || accountPopover.contains(target))) return
|
|
3245
4110
|
closePopover()
|
|
3246
4111
|
}
|
|
@@ -3249,6 +4114,7 @@ window.__ModuleLoader__.load({
|
|
|
3249
4114
|
if (e.key === 'Escape') {
|
|
3250
4115
|
closePopover()
|
|
3251
4116
|
closePermMenu()
|
|
4117
|
+
closeModelPopovers()
|
|
3252
4118
|
}
|
|
3253
4119
|
if ((e.ctrlKey || e.metaKey) && e.key === ',') {
|
|
3254
4120
|
e.preventDefault()
|
|
@@ -3290,6 +4156,14 @@ window.__ModuleLoader__.load({
|
|
|
3290
4156
|
document.addEventListener('pointerdown', onCardPointerDown)
|
|
3291
4157
|
document.addEventListener('keydown', onGlobalKeyDown, true)
|
|
3292
4158
|
|
|
4159
|
+
// The picker is position:fixed against the trigger; scroll of the page
|
|
4160
|
+
// (not the conversation's own auto-stick) and resizes move the anchor.
|
|
4161
|
+
function onModelViewportChange() {
|
|
4162
|
+
if (modelPop && modelPop.getAttribute('data-open') === 'true') positionModelPopovers()
|
|
4163
|
+
}
|
|
4164
|
+
window.addEventListener('resize', onModelViewportChange)
|
|
4165
|
+
window.addEventListener('scroll', onModelViewportChange, true)
|
|
4166
|
+
|
|
3293
4167
|
// Chat streaming mutates the tree constantly; coalesce to one pass a frame.
|
|
3294
4168
|
var scheduled = false
|
|
3295
4169
|
var composerCardObserver = null
|
|
@@ -3315,8 +4189,10 @@ window.__ModuleLoader__.load({
|
|
|
3315
4189
|
rewriteHint()
|
|
3316
4190
|
rewriteTurnStatus()
|
|
3317
4191
|
syncAttachmentState()
|
|
3318
|
-
|
|
4192
|
+
mergeStatsIntoRow()
|
|
3319
4193
|
syncSegments()
|
|
4194
|
+
syncChatTabComposer()
|
|
4195
|
+
syncModelControl()
|
|
3320
4196
|
syncAccountFooter()
|
|
3321
4197
|
if (composerCardObserver) {
|
|
3322
4198
|
var currentCard = document.querySelector('[data-composer-card]')
|
|
@@ -3335,8 +4211,9 @@ window.__ModuleLoader__.load({
|
|
|
3335
4211
|
characterData: true,
|
|
3336
4212
|
subtree: true,
|
|
3337
4213
|
attributes: true,
|
|
3338
|
-
// The shipped trigger carries the current preset in its aria-label
|
|
3339
|
-
|
|
4214
|
+
// The shipped trigger carries the current preset in its aria-label;
|
|
4215
|
+
// the conversation tabs carry the active view in aria-selected.
|
|
4216
|
+
attributeFilter: ['aria-label', 'aria-selected'],
|
|
3340
4217
|
})
|
|
3341
4218
|
schedule()
|
|
3342
4219
|
|
|
@@ -3350,6 +4227,22 @@ window.__ModuleLoader__.load({
|
|
|
3350
4227
|
return function () {
|
|
3351
4228
|
clearInterval(greetingTimer)
|
|
3352
4229
|
greetingTimer = null
|
|
4230
|
+
cancelCloseModel()
|
|
4231
|
+
dropModelSubscription()
|
|
4232
|
+
modelDir = null
|
|
4233
|
+
modelSessionId = null
|
|
4234
|
+
window.removeEventListener('resize', onModelViewportChange)
|
|
4235
|
+
window.removeEventListener('scroll', onModelViewportChange, true)
|
|
4236
|
+
// Null the model chrome too: the sweep below detaches the nodes, and a
|
|
4237
|
+
// later re-install must rebuild them rather than reuse dead elements.
|
|
4238
|
+
modelBtn = null
|
|
4239
|
+
modelPop = null
|
|
4240
|
+
modelSubPop = null
|
|
4241
|
+
modelBody = null
|
|
4242
|
+
modelSubBody = null
|
|
4243
|
+
modelSubKind = null
|
|
4244
|
+
modelBodySig = ''
|
|
4245
|
+
modelSubSig = ''
|
|
3353
4246
|
observer.disconnect()
|
|
3354
4247
|
if (composerCardObserver) {
|
|
3355
4248
|
composerCardObserver.disconnect()
|
|
@@ -3390,7 +4283,7 @@ window.__ModuleLoader__.load({
|
|
|
3390
4283
|
accountBtn.parentElement.removeChild(accountBtn)
|
|
3391
4284
|
}
|
|
3392
4285
|
accountBtn = null
|
|
3393
|
-
var leftoverItems = document.querySelectorAll('.dsh-claude-popover-item, .dsh-claude-popover-embed, .dsh-claude-account-popover, .dsh-claude-account-btn, .dsh-claude-perm-container, .dsh-claude-perm-popover, .dsh-claude-segments')
|
|
4286
|
+
var leftoverItems = document.querySelectorAll('.dsh-claude-popover-item, .dsh-claude-popover-embed, .dsh-claude-account-popover, .dsh-claude-account-btn, .dsh-claude-perm-container, .dsh-claude-perm-popover, .dsh-claude-segments, .dsh-claude-model-btn, .dsh-claude-model-popover')
|
|
3394
4287
|
for (var li = 0; li < leftoverItems.length; li++) {
|
|
3395
4288
|
if (leftoverItems[li].parentElement) {
|
|
3396
4289
|
leftoverItems[li].parentElement.removeChild(leftoverItems[li])
|