dsh-client-auto-continue 0.10.2 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/README.zh.md +2 -0
- package/lib/client.js +760 -348
- package/lib/client.js.map +2 -2
- package/lib/types/client/locales.d.ts +17 -0
- package/package.json +2 -2
- package/src/client/locales.ts +36 -2
- package/src/client/settings-card.tsx +420 -265
- package/src/client/styles.ts +259 -17
package/src/client/styles.ts
CHANGED
|
@@ -7,39 +7,194 @@
|
|
|
7
7
|
|
|
8
8
|
const css = `
|
|
9
9
|
.dshAcCard {
|
|
10
|
+
--dsh-ac-violet: #8b7cff;
|
|
11
|
+
--dsh-ac-cyan: #45cce5;
|
|
12
|
+
--dsh-ac-mint: #46d69d;
|
|
13
|
+
--dsh-ac-amber: #f1b95c;
|
|
14
|
+
isolation: isolate;
|
|
15
|
+
position: relative;
|
|
16
|
+
overflow: hidden;
|
|
10
17
|
border: 1px solid var(--dsw-alias-border-l2);
|
|
11
18
|
background: var(--dsw-alias-bg-layer-3);
|
|
12
|
-
border-radius:
|
|
19
|
+
border-radius: 16px;
|
|
13
20
|
list-style: none;
|
|
14
|
-
|
|
21
|
+
box-shadow: 0 10px 34px rgb(0 0 0 / 8%);
|
|
22
|
+
transition: border-color .2s ease, background .2s ease, box-shadow .2s ease, transform .2s ease;
|
|
23
|
+
}
|
|
24
|
+
.dshAcCard::before {
|
|
25
|
+
content: "";
|
|
26
|
+
z-index: 2;
|
|
27
|
+
position: absolute;
|
|
28
|
+
inset: 0 0 auto;
|
|
29
|
+
height: 2px;
|
|
30
|
+
pointer-events: none;
|
|
31
|
+
opacity: .72;
|
|
32
|
+
background: linear-gradient(90deg, transparent 1%, var(--dsh-ac-violet) 22%, var(--dsh-ac-cyan) 52%, var(--dsh-ac-mint) 80%, transparent 99%);
|
|
33
|
+
}
|
|
34
|
+
.dshAcCard::after {
|
|
35
|
+
content: "";
|
|
36
|
+
z-index: -1;
|
|
37
|
+
position: absolute;
|
|
38
|
+
width: 190px;
|
|
39
|
+
height: 190px;
|
|
40
|
+
top: -104px;
|
|
41
|
+
left: -76px;
|
|
42
|
+
pointer-events: none;
|
|
43
|
+
border-radius: 999px;
|
|
44
|
+
background: radial-gradient(circle, rgb(139 124 255 / 14%) 0, transparent 68%);
|
|
45
|
+
}
|
|
46
|
+
.dshAcCard:hover {
|
|
47
|
+
border-color: color-mix(in srgb, var(--dsh-ac-violet) 48%, var(--dsw-alias-border-l2));
|
|
48
|
+
box-shadow: 0 14px 42px rgb(0 0 0 / 12%);
|
|
49
|
+
transform: translateY(-1px);
|
|
15
50
|
}
|
|
16
|
-
.dshAcCard:hover { border-color: var(--dsw-alias-label-dimmed); }
|
|
17
51
|
.dshAcCardOpen {
|
|
18
52
|
background: var(--dsw-alias-bg-layer-2);
|
|
19
|
-
border-color: var(--dsw-alias-
|
|
53
|
+
border-color: color-mix(in srgb, var(--dsh-ac-violet) 42%, var(--dsw-alias-border-l2));
|
|
54
|
+
box-shadow: 0 18px 54px rgb(0 0 0 / 14%);
|
|
55
|
+
transform: none;
|
|
56
|
+
}
|
|
57
|
+
.dshAcHeaderFrame {
|
|
58
|
+
align-items: stretch;
|
|
59
|
+
flex-direction: column;
|
|
60
|
+
display: flex;
|
|
20
61
|
}
|
|
21
62
|
.dshAcHeader {
|
|
22
63
|
appearance: none;
|
|
23
|
-
width:
|
|
64
|
+
min-width: 0;
|
|
65
|
+
flex: 1;
|
|
24
66
|
font: inherit;
|
|
25
67
|
color: inherit;
|
|
26
68
|
text-align: left;
|
|
27
69
|
cursor: pointer;
|
|
28
70
|
background: none;
|
|
29
71
|
border: 0;
|
|
30
|
-
border-radius:
|
|
72
|
+
border-radius: 16px;
|
|
31
73
|
align-items: center;
|
|
32
|
-
gap:
|
|
33
|
-
padding:
|
|
74
|
+
gap: 14px;
|
|
75
|
+
padding: 18px 18px 12px;
|
|
34
76
|
display: flex;
|
|
35
77
|
}
|
|
36
|
-
.dshAcHeader:focus-visible { outline: 2px solid var(--
|
|
37
|
-
.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
78
|
+
.dshAcHeader:focus-visible { outline: 2px solid var(--dsh-ac-violet); outline-offset: -3px; }
|
|
79
|
+
.dshAcRelayMark {
|
|
80
|
+
width: 54px;
|
|
81
|
+
height: 54px;
|
|
82
|
+
flex: none;
|
|
83
|
+
place-items: center;
|
|
84
|
+
display: grid;
|
|
85
|
+
color: var(--dsh-ac-cyan);
|
|
86
|
+
border: 1px solid color-mix(in srgb, var(--dsh-ac-violet) 42%, var(--dsw-alias-border-l2));
|
|
87
|
+
border-radius: 17px;
|
|
88
|
+
background: color-mix(in srgb, var(--dsw-alias-bg-layer-2) 84%, var(--dsh-ac-violet) 16%);
|
|
89
|
+
box-shadow: inset 0 0 0 1px rgb(255 255 255 / 4%), 0 8px 24px rgb(62 51 153 / 16%);
|
|
90
|
+
}
|
|
91
|
+
.dshAcRelayMark svg { width: 44px; height: 44px; overflow: visible; }
|
|
92
|
+
.dshAcRelayArc { fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; }
|
|
93
|
+
.dshAcRelayArcEcho { opacity: .42; }
|
|
94
|
+
.dshAcRelayNode { stroke: var(--dsw-alias-bg-layer-3); stroke-width: 1.5; }
|
|
95
|
+
.dshAcRelayNodeStart { fill: var(--dsh-ac-amber); }
|
|
96
|
+
.dshAcRelayNodeEnd { fill: var(--dsh-ac-mint); }
|
|
97
|
+
.dshAcRelayPulse { fill: var(--dsh-ac-violet); opacity: .85; }
|
|
98
|
+
.dshAcCard:hover .dshAcRelayPulse, .dshAcCardOpen .dshAcRelayPulse {
|
|
99
|
+
animation: dshAcRelayTravel 1.8s cubic-bezier(.4, 0, .2, 1) infinite;
|
|
100
|
+
}
|
|
101
|
+
.dshAcHeadText { flex-direction: column; flex: 1; gap: 3px; min-width: 0; display: flex; }
|
|
102
|
+
.dshAcEyebrow {
|
|
103
|
+
color: color-mix(in srgb, var(--dsh-ac-violet) 76%, var(--dsw-alias-label-secondary));
|
|
104
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
105
|
+
font-size: 10px;
|
|
106
|
+
font-weight: 700;
|
|
107
|
+
line-height: 1.4;
|
|
108
|
+
letter-spacing: .12em;
|
|
109
|
+
text-transform: uppercase;
|
|
110
|
+
}
|
|
111
|
+
.dshAcName {
|
|
112
|
+
color: var(--dsw-alias-label-primary);
|
|
113
|
+
font-family: ui-rounded, "SF Pro Rounded", "Segoe UI", sans-serif;
|
|
114
|
+
font-size: 18px;
|
|
115
|
+
font-weight: 680;
|
|
116
|
+
letter-spacing: -.015em;
|
|
117
|
+
line-height: 1.35;
|
|
118
|
+
}
|
|
119
|
+
.dshAcDescription { max-width: 660px; color: var(--dsw-alias-label-tertiary); font-size: 13px; line-height: 1.5; }
|
|
120
|
+
.dshAcJourney { flex-wrap: wrap; align-items: center; gap: 7px; margin-top: 4px; display: flex; }
|
|
121
|
+
.dshAcJourneyStep {
|
|
122
|
+
align-items: center;
|
|
123
|
+
gap: 5px;
|
|
124
|
+
color: var(--dsw-alias-label-secondary);
|
|
125
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
126
|
+
font-size: 10px;
|
|
127
|
+
font-weight: 600;
|
|
128
|
+
line-height: 1.4;
|
|
129
|
+
letter-spacing: .02em;
|
|
130
|
+
display: inline-flex;
|
|
131
|
+
}
|
|
132
|
+
.dshAcJourneyDot { width: 5px; height: 5px; flex: none; border-radius: 999px; background: currentColor; box-shadow: 0 0 0 3px rgb(255 255 255 / 3%); }
|
|
133
|
+
.dshAcJourneyInterrupted .dshAcJourneyDot { color: var(--dsh-ac-amber); }
|
|
134
|
+
.dshAcJourneyGrace .dshAcJourneyDot { color: var(--dsh-ac-cyan); }
|
|
135
|
+
.dshAcJourneyContinue .dshAcJourneyDot { color: var(--dsh-ac-mint); }
|
|
136
|
+
.dshAcJourneyLine {
|
|
137
|
+
width: 25px;
|
|
138
|
+
height: 1px;
|
|
139
|
+
flex: none;
|
|
140
|
+
opacity: .7;
|
|
141
|
+
background: linear-gradient(90deg, var(--dsh-ac-violet), var(--dsh-ac-cyan), var(--dsh-ac-mint));
|
|
142
|
+
background-size: 220% 100%;
|
|
143
|
+
}
|
|
144
|
+
.dshAcCard:hover .dshAcJourneyLine, .dshAcCardOpen .dshAcJourneyLine { animation: dshAcSignalSweep 1.8s linear infinite; }
|
|
145
|
+
.dshAcChevron {
|
|
146
|
+
width: 30px;
|
|
147
|
+
height: 30px;
|
|
148
|
+
color: var(--dsw-alias-label-tertiary);
|
|
149
|
+
border: 1px solid var(--dsw-alias-border-l2);
|
|
150
|
+
border-radius: 999px;
|
|
151
|
+
flex: none;
|
|
152
|
+
place-items: center;
|
|
153
|
+
display: grid;
|
|
154
|
+
transition: color .18s ease, border-color .18s ease, transform .18s ease;
|
|
155
|
+
}
|
|
156
|
+
.dshAcChevron svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
|
|
157
|
+
.dshAcHeader:hover .dshAcChevron { color: var(--dsh-ac-violet); border-color: color-mix(in srgb, var(--dsh-ac-violet) 48%, var(--dsw-alias-border-l2)); }
|
|
41
158
|
.dshAcChevronOpen { transform: rotate(180deg); }
|
|
42
|
-
.
|
|
159
|
+
.dshAcGithub {
|
|
160
|
+
min-width: 0;
|
|
161
|
+
max-width: none;
|
|
162
|
+
align-self: stretch;
|
|
163
|
+
align-items: center;
|
|
164
|
+
gap: 10px;
|
|
165
|
+
margin: 0 18px 16px;
|
|
166
|
+
padding: 9px 11px;
|
|
167
|
+
color: var(--dsw-alias-label-primary);
|
|
168
|
+
text-decoration: none;
|
|
169
|
+
border: 1px solid var(--dsw-alias-border-l2);
|
|
170
|
+
border-radius: 13px;
|
|
171
|
+
background: color-mix(in srgb, var(--dsw-alias-bg-layer-2) 90%, var(--dsh-ac-violet) 10%);
|
|
172
|
+
display: flex;
|
|
173
|
+
transition: border-color .18s ease, background .18s ease, transform .18s ease;
|
|
174
|
+
}
|
|
175
|
+
.dshAcGithub:hover {
|
|
176
|
+
border-color: color-mix(in srgb, var(--dsh-ac-violet) 58%, var(--dsw-alias-border-l2));
|
|
177
|
+
background: color-mix(in srgb, var(--dsw-alias-bg-layer-2) 82%, var(--dsh-ac-violet) 18%);
|
|
178
|
+
transform: translateY(-1px);
|
|
179
|
+
}
|
|
180
|
+
.dshAcGithub:focus-visible { outline: 2px solid var(--dsh-ac-violet); outline-offset: 2px; }
|
|
181
|
+
.dshAcGithubIcon { width: 23px; height: 23px; flex: none; color: var(--dsw-alias-label-primary); }
|
|
182
|
+
.dshAcGithubIcon svg { width: 100%; height: 100%; fill: currentColor; }
|
|
183
|
+
.dshAcGithubText { min-width: 0; flex: 1; flex-direction: column; gap: 1px; display: flex; }
|
|
184
|
+
.dshAcGithubAction { font-size: 12px; font-weight: 680; line-height: 1.4; }
|
|
185
|
+
.dshAcGithubAction::before { content: "★"; color: var(--dsh-ac-amber); margin-right: 5px; }
|
|
186
|
+
.dshAcGithubSlug {
|
|
187
|
+
overflow: hidden;
|
|
188
|
+
color: var(--dsw-alias-label-tertiary);
|
|
189
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
190
|
+
font-size: 9.5px;
|
|
191
|
+
line-height: 1.4;
|
|
192
|
+
text-overflow: ellipsis;
|
|
193
|
+
white-space: nowrap;
|
|
194
|
+
}
|
|
195
|
+
.dshAcExternal { width: 15px; height: 15px; flex: none; color: var(--dsw-alias-label-tertiary); }
|
|
196
|
+
.dshAcExternal svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.25; stroke-linecap: round; stroke-linejoin: round; }
|
|
197
|
+
.dshAcBody { border-top: 1px solid var(--dsw-alias-border-l2); margin: 0 18px 12px; padding: 4px 0 0; }
|
|
43
198
|
.dshAcReadOnly { color: var(--dsw-alias-label-tertiary); margin: 12px 0 0; font-size: 12px; line-height: 1.5; }
|
|
44
199
|
.dshAcPending {
|
|
45
200
|
white-space: nowrap;
|
|
@@ -76,8 +231,53 @@ const css = `
|
|
|
76
231
|
.dshAcSave { background: var(--dsw-alias-label-primary); color: var(--dsw-alias-bg-layer-3); }
|
|
77
232
|
.dshAcDiscard:disabled, .dshAcSave:disabled { opacity: .4; cursor: default; }
|
|
78
233
|
.dshAcDiscard:focus-visible, .dshAcSave:focus-visible { outline: 2px solid var(--dsw-alias-brand-primary); outline-offset: 1px; }
|
|
79
|
-
.
|
|
80
|
-
.
|
|
234
|
+
.dshAcFormCanvas { flex-direction: column; gap: 14px; padding: 12px 0 8px; display: flex; }
|
|
235
|
+
.dshAcFormSection {
|
|
236
|
+
--dsh-ac-section: var(--dsh-ac-violet);
|
|
237
|
+
overflow: hidden;
|
|
238
|
+
border: 1px solid var(--dsw-alias-border-l2);
|
|
239
|
+
border-radius: 14px;
|
|
240
|
+
background: var(--dsw-alias-bg-layer-3);
|
|
241
|
+
background: color-mix(in srgb, var(--dsw-alias-bg-layer-3) 95%, var(--dsh-ac-section) 5%);
|
|
242
|
+
}
|
|
243
|
+
.dshAcFormSection-handoff { --dsh-ac-section: var(--dsh-ac-mint); }
|
|
244
|
+
.dshAcFormSection-safety { --dsh-ac-section: var(--dsh-ac-amber); }
|
|
245
|
+
.dshAcFormSection-recovery { --dsh-ac-section: var(--dsh-ac-cyan); }
|
|
246
|
+
.dshAcFormSection-loop { --dsh-ac-section: var(--dsh-ac-violet); }
|
|
247
|
+
.dshAcFormSection-live { --dsh-ac-section: color-mix(in srgb, var(--dsh-ac-violet) 60%, var(--dsh-ac-cyan)); }
|
|
248
|
+
.dshAcSectionHead {
|
|
249
|
+
align-items: center;
|
|
250
|
+
gap: 11px;
|
|
251
|
+
padding: 13px 14px 11px;
|
|
252
|
+
border-bottom: 1px solid var(--dsw-alias-border-l2);
|
|
253
|
+
display: flex;
|
|
254
|
+
}
|
|
255
|
+
.dshAcSectionSignal {
|
|
256
|
+
width: 4px;
|
|
257
|
+
height: 34px;
|
|
258
|
+
flex: none;
|
|
259
|
+
border-radius: 999px;
|
|
260
|
+
background: var(--dsh-ac-section);
|
|
261
|
+
box-shadow: 0 0 18px color-mix(in srgb, var(--dsh-ac-section) 55%, transparent);
|
|
262
|
+
}
|
|
263
|
+
.dshAcSectionCopy { min-width: 0; flex-direction: column; gap: 2px; display: flex; }
|
|
264
|
+
.dshAcSectionTitle {
|
|
265
|
+
color: var(--dsw-alias-label-primary);
|
|
266
|
+
font-family: ui-rounded, "SF Pro Rounded", "Segoe UI", sans-serif;
|
|
267
|
+
font-size: 14px;
|
|
268
|
+
font-weight: 680;
|
|
269
|
+
line-height: 1.4;
|
|
270
|
+
}
|
|
271
|
+
.dshAcSectionDescription { color: var(--dsw-alias-label-tertiary); font-size: 11.5px; line-height: 1.45; }
|
|
272
|
+
.dshAcSectionGrid {
|
|
273
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
274
|
+
column-gap: 22px;
|
|
275
|
+
padding: 0 14px 4px;
|
|
276
|
+
display: grid;
|
|
277
|
+
}
|
|
278
|
+
.dshAcField { min-width: 0; flex-direction: column; gap: 6px; padding: 12px 0; border-top: 1px solid var(--dsw-alias-border-l2); display: flex; }
|
|
279
|
+
.dshAcSectionGrid > .dshAcField:first-child { border-top: 0; }
|
|
280
|
+
.dshAcFieldWide { grid-column: 1 / -1; }
|
|
81
281
|
.dshAcHead { align-items: center; gap: 8px; display: flex; }
|
|
82
282
|
.dshAcLabel { min-width: 0; color: var(--dsw-alias-label-primary); flex: 1; font-size: 13px; font-weight: 500; line-height: 1.5; }
|
|
83
283
|
.dshAcBadges { align-items: center; gap: 8px; display: inline-flex; }
|
|
@@ -104,6 +304,8 @@ const css = `
|
|
|
104
304
|
.dshAcReset:hover:not(:disabled) { color: var(--dsw-alias-label-primary); }
|
|
105
305
|
.dshAcReset:disabled { cursor: default; }
|
|
106
306
|
.dshAcInput {
|
|
307
|
+
box-sizing: border-box;
|
|
308
|
+
width: 100%;
|
|
107
309
|
border: 1px solid var(--dsw-alias-border-l2);
|
|
108
310
|
background: var(--dsw-alias-bg-layer-3);
|
|
109
311
|
height: 34px;
|
|
@@ -119,6 +321,8 @@ const css = `
|
|
|
119
321
|
.dshAcInputInvalid { border-color: var(--dsw-alias-label-error); }
|
|
120
322
|
.dshAcTextArea { box-sizing: border-box; height: auto; min-height: 84px; padding: 8px 12px; resize: vertical; }
|
|
121
323
|
.dshAcSelect {
|
|
324
|
+
box-sizing: border-box;
|
|
325
|
+
width: 100%;
|
|
122
326
|
border: 1px solid var(--dsw-alias-border-l2);
|
|
123
327
|
background: var(--dsw-alias-bg-layer-3);
|
|
124
328
|
height: 34px;
|
|
@@ -133,7 +337,8 @@ const css = `
|
|
|
133
337
|
.dshAcSelect:disabled { color: var(--dsw-alias-label-tertiary); cursor: default; }
|
|
134
338
|
.dshAcInvalid { color: var(--dsw-alias-label-error); margin: 0; font-size: 12px; line-height: 1.5; }
|
|
135
339
|
.dshAcHint { color: var(--dsw-alias-label-tertiary); margin: 0; font-size: 12px; line-height: 1.5; }
|
|
136
|
-
.dshAcPanel {
|
|
340
|
+
.dshAcPanel { min-width: 0; flex-direction: column; gap: 8px; padding: 12px 0 14px; display: flex; }
|
|
341
|
+
.dshAcPanel + .dshAcPanel { border-left: 1px solid var(--dsw-alias-border-l2); padding-left: 20px; }
|
|
137
342
|
.dshAcPanelHead { align-items: center; gap: 8px; display: flex; }
|
|
138
343
|
.dshAcPanelTitle { color: var(--dsw-alias-label-primary); flex: 1; font-size: 13px; font-weight: 600; line-height: 1.5; }
|
|
139
344
|
.dshAcStats { gap: 4px 16px; margin: 0; grid-template-columns: repeat(2, minmax(0, 1fr)); display: grid; }
|
|
@@ -159,6 +364,43 @@ const css = `
|
|
|
159
364
|
font-size: 12px;
|
|
160
365
|
line-height: 1.5;
|
|
161
366
|
}
|
|
367
|
+
@keyframes dshAcRelayTravel {
|
|
368
|
+
0% { opacity: 0; transform: translate(-19px, 18px) scale(.7); }
|
|
369
|
+
18% { opacity: 1; }
|
|
370
|
+
82% { opacity: 1; }
|
|
371
|
+
100% { opacity: 0; transform: translate(12px, 6px) scale(1.15); }
|
|
372
|
+
}
|
|
373
|
+
@keyframes dshAcSignalSweep {
|
|
374
|
+
from { background-position: 100% 0; }
|
|
375
|
+
to { background-position: -120% 0; }
|
|
376
|
+
}
|
|
377
|
+
@media (max-width: 820px) {
|
|
378
|
+
.dshAcSectionGrid { grid-template-columns: minmax(0, 1fr); }
|
|
379
|
+
.dshAcFieldWide { grid-column: auto; }
|
|
380
|
+
.dshAcPanel + .dshAcPanel {
|
|
381
|
+
border-top: 1px solid var(--dsw-alias-border-l2);
|
|
382
|
+
border-left: 0;
|
|
383
|
+
padding-left: 0;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
@media (max-width: 560px) {
|
|
387
|
+
.dshAcHeader { align-items: flex-start; gap: 11px; padding: 15px 13px 10px; }
|
|
388
|
+
.dshAcRelayMark { width: 46px; height: 46px; border-radius: 14px; }
|
|
389
|
+
.dshAcRelayMark svg { width: 38px; height: 38px; }
|
|
390
|
+
.dshAcName { font-size: 16px; }
|
|
391
|
+
.dshAcDescription { font-size: 12px; }
|
|
392
|
+
.dshAcJourney { gap: 5px; }
|
|
393
|
+
.dshAcJourneyLine { width: 13px; }
|
|
394
|
+
.dshAcChevron { width: 27px; height: 27px; }
|
|
395
|
+
.dshAcPending { display: none; }
|
|
396
|
+
.dshAcGithub { margin: 0 13px 13px; }
|
|
397
|
+
.dshAcBody { margin-right: 13px; margin-left: 13px; }
|
|
398
|
+
}
|
|
399
|
+
@media (prefers-reduced-motion: reduce) {
|
|
400
|
+
.dshAcCard, .dshAcGithub, .dshAcChevron { transition: none; }
|
|
401
|
+
.dshAcCard:hover, .dshAcGithub:hover { transform: none; }
|
|
402
|
+
.dshAcRelayPulse, .dshAcJourneyLine { animation: none !important; }
|
|
403
|
+
}
|
|
162
404
|
`;
|
|
163
405
|
|
|
164
406
|
/** Inject the stylesheet once; a no-op outside a browser environment. */
|