dsh-claude-style 0.13.2 → 0.14.0-dev.12
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 +182 -0
- package/LICENSE +0 -5
- package/README.en.md +1 -1
- package/README.md +2 -2
- package/THIRD_PARTY_NOTICES.md +282 -6
- package/docs/FEATURES.en.md +13 -14
- package/docs/FEATURES.md +13 -14
- package/docs/SETTINGS.en.md +21 -12
- package/docs/SETTINGS.md +21 -12
- package/docs/STYLE.md +151 -12
- package/lib/assets/1952ecd55916.js.br +0 -0
- package/lib/assets/3b91bf51db72.js.br +0 -0
- package/lib/assets/4ec527e58330.js.br +0 -0
- package/lib/assets/7323c8c86470.js.br +0 -0
- package/lib/assets/755d09170f37.js.br +0 -0
- package/lib/assets/c02a70a798bc.js.br +0 -0
- package/lib/assets/d8df7a57fbe3.js.br +0 -0
- package/lib/assets/manifest.json +28 -28
- package/lib/client.js +11 -8
- package/lib/host/brand.js +136 -0
- package/lib/host/http.js +74 -0
- package/lib/host/peakrate.js +7 -0
- package/lib/host/routes.js +26 -88
- package/lib/host/search.js +8 -1
- package/lib/host/settings.js +5 -0
- package/lib/model-descriptions.json +195 -43
- package/package.json +12 -4
- package/docs/decisions/D11-private-routes.md +0 -26
- package/docs/decisions/D12-fail-fast.md +0 -36
- package/docs/decisions/D14-account-surface.md +0 -26
- package/docs/decisions/D15-hdsl-contract.md +0 -24
- package/docs/decisions/D16-popover-baseline.md +0 -23
- package/docs/decisions/D17-permission-presets.md +0 -26
- package/docs/decisions/D19-host-contracts.md +0 -27
- package/docs/decisions/D20-sliding-pill.md +0 -26
- package/docs/decisions/D21-archived-list.md +0 -24
- package/docs/decisions/D22-search-panel.md +0 -30
- package/docs/decisions/D24-mascot.md +0 -32
- package/docs/decisions/D25-ban-screen-titlebar.md +0 -24
- package/docs/decisions/D26-motion-preference.md +0 -23
- package/docs/decisions/D27-context-stats.md +0 -35
- package/docs/decisions/D28-desktop-band.md +0 -23
- package/docs/decisions/D29-feature-switches.md +0 -24
- package/docs/decisions/D3-host-selectors.md +0 -28
- package/docs/decisions/D30-palette-and-typeface.md +0 -25
- package/docs/decisions/D31-windows-titlebar.md +0 -24
- package/docs/decisions/D32-chat-interactions.md +0 -33
- package/docs/decisions/D33-stylesheet-ownership.md +0 -26
- package/docs/decisions/D34-turn-navigator.md +0 -29
- package/docs/decisions/D35-selection-scope.md +0 -23
- package/docs/decisions/D36-modules-and-bundling.md +0 -35
- package/docs/decisions/D38-assets.md +0 -28
- package/docs/decisions/D39-on-demand-loading.md +0 -33
- package/docs/decisions/D4-composer-gate.md +0 -22
- package/docs/decisions/D40-observation-bus.md +0 -36
- package/docs/decisions/D41-scroll-owner.md +0 -40
- package/docs/decisions/D42-feature-manifest.md +0 -28
- package/docs/decisions/D43-overlay-and-upstream.md +0 -27
- package/docs/decisions/D44-contract-module.md +0 -36
- package/docs/decisions/D45-testing.md +0 -30
- package/docs/decisions/D46-monorepo.md +0 -31
- package/docs/decisions/D47-build-output.md +0 -30
- package/docs/decisions/D48-documentation.md +0 -28
- package/docs/decisions/D49-visual-yield.md +0 -30
- package/docs/decisions/D5-model-copy.md +0 -29
- package/docs/decisions/D50-brand.md +0 -24
- package/docs/decisions/D51-css-toolchain.md +0 -34
- package/docs/decisions/D52-header-band.md +0 -31
- package/docs/decisions/D53-usage-merge.md +0 -33
- package/docs/decisions/D54-peakrate-meter.md +0 -33
- package/docs/decisions/D58-redraw-retired.md +0 -29
- package/docs/decisions/D60-settings-transport.md +0 -31
- package/docs/decisions/D61-wallpaper-under-one-mask.md +0 -28
- package/docs/decisions/D62-file-row-merge.md +0 -28
- package/docs/decisions/D63-turn-status-retired.md +0 -29
- package/docs/decisions/D7-one-package.md +0 -23
- package/docs/decisions/D9-style-performance.md +0 -25
- package/docs/decisions/README.md +0 -86
- package/lib/assets/2c01384360ac.js.map.br +0 -0
- package/lib/assets/31253ed42440.js.br +0 -0
- package/lib/assets/5063c46824b6.js.br +0 -0
- package/lib/assets/55a6154f87b5.js.map.br +0 -0
- package/lib/assets/5e05b29d5005.js.br +0 -0
- package/lib/assets/668d06ca781b.js.map.br +0 -0
- package/lib/assets/930546669455.js.map.br +0 -0
- package/lib/assets/968fcbfc3e22.js.br +0 -0
- package/lib/assets/abf0547f08a4.js.br +0 -0
- package/lib/assets/ac9b0e625837.js.map.br +0 -0
- package/lib/assets/ad2905345a69.js.br +0 -0
- package/lib/assets/ba68f60ecc71.js.map.br +0 -0
- package/lib/assets/c52e41b4842b.js.map.br +0 -0
- package/lib/assets/e1291f79b7c9.js.br +0 -0
- package/lib/client.js.map +0 -7
package/docs/STYLE.md
CHANGED
|
@@ -223,6 +223,111 @@ and scrolls to its end.
|
|
|
223
223
|
follows the same hairline so the two tiers stay one outline. Accent is never
|
|
224
224
|
used for focus strokes.
|
|
225
225
|
|
|
226
|
+
## Motion
|
|
227
|
+
|
|
228
|
+
Every duration, curve, distance, blur and scale the skin uses is a token here,
|
|
229
|
+
and a stylesheet or a Web Animations call reads the token rather than writing the
|
|
230
|
+
value (D65). One value per role, so a faster feedback or a calmer swap is one
|
|
231
|
+
edit; the build refuses a time or a curve written anywhere else.
|
|
232
|
+
|
|
233
|
+
- Feedback: a control answering hover, press or focus.
|
|
234
|
+
- Reveal: content entering the chat area at the host's own 120 ms.
|
|
235
|
+
- Surface: an entrance — a menu, a popover, a panel, a dialog, a toast.
|
|
236
|
+
- Exit: a dismissal, deliberately quicker than the entrance.
|
|
237
|
+
- Travel: something moving along its own track (a fold's door, the reasoning
|
|
238
|
+
slider).
|
|
239
|
+
- The swap, its gap and the roll of a figure's digits come from the transitions
|
|
240
|
+
this skin ports; `THIRD_PARTY_NOTICES.md` names each one.
|
|
241
|
+
- Loop periods are separate from durations: a sweep, a pulse, a blink, a spin.
|
|
242
|
+
- Open: a menu growing out of its trigger, a dialog out of the centre, a
|
|
243
|
+
settings page sliding in — the transitions.dev surfaces, settling on their own
|
|
244
|
+
curve and closing on the exit duration.
|
|
245
|
+
- The presets these tokens feed live in `packages/client/src/shared/motion.css`:
|
|
246
|
+
a surface arriving or leaving, a menu growing out of its trigger, a plain
|
|
247
|
+
fade, one half of a wording swap, the placeholder pulse, and the two paints
|
|
248
|
+
the waiting line's words can wear (a highlight band and a colour wash). A
|
|
249
|
+
feature that needs its own effect reads the tokens and keeps its own
|
|
250
|
+
keyframes.
|
|
251
|
+
|
|
252
|
+
The table below is generated from `packages/client/src/theme/tokens.json` by `npm run build`;
|
|
253
|
+
edit the JSON, not the table.
|
|
254
|
+
|
|
255
|
+
<!-- generated:motion (packages/client/src/theme/tokens.json) -->
|
|
256
|
+
| Token | Value | Use |
|
|
257
|
+
|---|---|---|
|
|
258
|
+
| `--dsh-claude-duration-instant` | `80ms` | the composer caret following the insertion point |
|
|
259
|
+
| `--dsh-claude-duration-feedback` | `120ms` | a control answering hover, press or focus: its colour, background, border, shadow, or a small turn or slide of its own parts |
|
|
260
|
+
| `--dsh-claude-duration-reveal` | `120ms` | content entering the chat area: an opened row's body, and each streamed piece of the answer |
|
|
261
|
+
| `--dsh-claude-duration-surface` | `150ms` | a floating surface or a group of controls appearing: popover cards, menus, panels, the search dialog, a toast, a strip fading in |
|
|
262
|
+
| `--dsh-claude-duration-exit` | `120ms` | a surface leaving on the reader's dismissal: a menu or a dialog closing, the overtime badge leaving |
|
|
263
|
+
| `--dsh-claude-duration-open` | `250ms` | a surface growing out of its anchor: a menu out of its trigger, a full-window dialog out of the centre, a settings page sliding in, the overtime badge sliding onto its line |
|
|
264
|
+
| `--dsh-claude-duration-swap` | `150ms` | each half of a wording swap: the old words leaving, the new ones arriving |
|
|
265
|
+
| `--dsh-claude-duration-swap-gap` | `50ms` | the pause between the two halves of a wording swap |
|
|
266
|
+
| `--dsh-claude-duration-roll` | `160ms` | a figure's characters rolling over to new digits |
|
|
267
|
+
| `--dsh-claude-duration-move` | `200ms` | something travelling along its own track: a fold's door, the reasoning slider's knob and fill |
|
|
268
|
+
| `--dsh-claude-duration-slide` | `240ms` | the segmented controls' sliding highlight (D20), a sidebar icon's quarter turn, and the wording box taking the width of the words arriving |
|
|
269
|
+
| `--dsh-claude-duration-fade` | `300ms` | a slow cross-fade: the theme flip, the titlebar tabs' hover reveal, the reasoning knob's glow, a placeholder handing its place to what it stood for |
|
|
270
|
+
| `--dsh-claude-duration-bounce` | `350ms` | a switch's knob travelling across with its double bounce |
|
|
271
|
+
| `--dsh-claude-duration-flight` | `400ms` | the sent message flying from the composer to its row |
|
|
272
|
+
| `--dsh-claude-duration-step` | `500ms` | one step of the reasoning window's text rising two lines |
|
|
273
|
+
| `--dsh-claude-duration-pop` | `500ms` | something popping into place: a changed digit of the session numbers, the overtime badge's own pill |
|
|
274
|
+
| `--dsh-claude-duration-rise` | `500ms` | a line of the home greeting rising into place |
|
|
275
|
+
| `--dsh-claude-duration-stagger` | `70ms` | how far behind the piece before it a staggered piece starts: the last two popping digits, the greeting's second line |
|
|
276
|
+
| `--dsh-claude-duration-reduced` | `0.01ms` | every skin animation and transition under the Reduced animation choice (D26) |
|
|
277
|
+
| `--dsh-claude-period-host-sweep` | `1500ms` | one pass of the highlight band across the waiting line's words and a running process group's header |
|
|
278
|
+
| `--dsh-claude-period-preview-swap` | `4000ms` | one turn of the settings page's waiting-line preview: one wording standing, leaving, and standing again |
|
|
279
|
+
| `--dsh-claude-period-wash-hue` | `4000ms` | one turn of the hue rotation the waiting line's colour wash runs through |
|
|
280
|
+
| `--dsh-claude-period-wash-drift` | `5000ms` | one orbit of the colour washes around the waiting line's glyph box |
|
|
281
|
+
| `--dsh-claude-period-pulse` | `1600ms` | a placeholder breathing while its numbers are computed |
|
|
282
|
+
| `--dsh-claude-period-flash` | `1450ms` | one flash of the reasoning slider's top-rung matrix |
|
|
283
|
+
| `--dsh-claude-period-blink` | `1000ms` | one blink of the composer caret |
|
|
284
|
+
| `--dsh-claude-period-spin` | `850ms` | one turn of the background-work ring in the sidebar |
|
|
285
|
+
| `--dsh-claude-period-landed` | `1400ms` | the mark on the turn the conversation navigator landed on |
|
|
286
|
+
| `--dsh-claude-period-hold` | `840ms` | how long the reasoning window's text stands between two steps |
|
|
287
|
+
| `--dsh-claude-period-dot-bounce` | `500ms` | one bounce of the waiting line's loader dots under the Claude brand, and the period each dot's own start is measured against |
|
|
288
|
+
| `--dsh-claude-ease-standard` | `ease` | feedback and surfaces: the default curve |
|
|
289
|
+
| `--dsh-claude-ease-out` | `ease-out` | something arriving and settling: a fold's door, content entering the chat area, the landing mark |
|
|
290
|
+
| `--dsh-claude-ease-in-out` | `ease-in-out` | something that leaves and returns, or swaps in place: wording swaps, pulses, flashes |
|
|
291
|
+
| `--dsh-claude-ease-glide` | `cubic-bezier(0.22, 0.61, 0.36, 1)` | travel along a track: the sliding highlight, the reasoning slider, the search dialog's entrance, the reasoning window's step, the wording box's width |
|
|
292
|
+
| `--dsh-claude-ease-roll` | `cubic-bezier(0.4, 0, 0.2, 1)` | digits rolling over: the file rows' tail and the process group header's counts |
|
|
293
|
+
| `--dsh-claude-ease-spring` | `cubic-bezier(0.34, 1.45, 0.64, 1)` | a small overshoot as something lands: the session numbers' digits and the overtime badge popping in, a switch's knob bouncing past its end |
|
|
294
|
+
| `--dsh-claude-ease-settle` | `cubic-bezier(0.22, 1, 0.36, 1)` | a surface or a page settling into place out of its anchor: menus and dialogs opening and closing, a settings page sliding, the overtime badge sliding onto its line, the greeting's lines rising |
|
|
295
|
+
| `--dsh-claude-ease-host-sweep` | `steps(48, end)` | the band across the waiting line's words and a running process group's header |
|
|
296
|
+
| `--dsh-claude-distance-nudge` | `4px` | the short offset a surface rises from, and a small row's wording swap travels |
|
|
297
|
+
| `--dsh-claude-distance-travel` | `8px` | the waiting line's wording swap, the distance a popping digit comes from, a settings page's slide, the overtime badge's sideways slide |
|
|
298
|
+
| `--dsh-claude-distance-rise` | `12px` | how far below its place a line of the home greeting starts, and the overtime badge's upward slide |
|
|
299
|
+
| `--dsh-claude-blur-soft` | `2px` | the blur words, digits and badges pass through while they swap or pop in, and a placeholder passes through as it hands its place over |
|
|
300
|
+
| `--dsh-claude-blur-enter` | `3px` | the blur a settings page or a line of the home greeting passes through as it slides or rises in |
|
|
301
|
+
| `--dsh-claude-scale-surface` | `0.98` | the scale a surface grows from as it rises |
|
|
302
|
+
| `--dsh-claude-scale-dropdown` | `0.97` | the scale a menu grows from out of its trigger |
|
|
303
|
+
| `--dsh-claude-scale-dropdown-exit` | `0.99` | the scale a menu shrinks to while it fades on closing |
|
|
304
|
+
| `--dsh-claude-scale-dialog` | `0.96` | the scale a full-window dialog grows from and returns to |
|
|
305
|
+
| `--dsh-claude-timing-feedback` | `var(--dsh-claude-duration-feedback) var(--dsh-claude-ease-standard)` | shorthand: a control's state change, written after the property in a transition |
|
|
306
|
+
| `--dsh-claude-timing-surface` | `var(--dsh-claude-duration-surface) var(--dsh-claude-ease-standard)` | shorthand: a surface appearing, written after the property or the keyframes' name |
|
|
307
|
+
<!-- /generated:motion -->
|
|
308
|
+
|
|
309
|
+
## Layers
|
|
310
|
+
|
|
311
|
+
A z-index the skin writes is one of two kinds (D67). Inside one box, siblings
|
|
312
|
+
are ordered with a literal from -1 to 9: a fill painted under its own content,
|
|
313
|
+
a label over its sliding pill, the composer's rows over one another. Anything
|
|
314
|
+
that has to clear what the host draws around it — the composer's own controls,
|
|
315
|
+
the window's title row, a floating card, a surface over the whole window —
|
|
316
|
+
stands on a layer token, and the build refuses any other number.
|
|
317
|
+
|
|
318
|
+
The table below is generated from `packages/client/src/theme/tokens.json` by `npm run build`;
|
|
319
|
+
edit the JSON, not the table.
|
|
320
|
+
|
|
321
|
+
<!-- generated:layers (packages/client/src/theme/tokens.json) -->
|
|
322
|
+
| Token | Value | Use |
|
|
323
|
+
|---|---|---|
|
|
324
|
+
| `--dsh-claude-layer-control` | `10` | a control kept over the composer card's own stacked rows: the send and stop buttons, the reasoning picker's trigger |
|
|
325
|
+
| `--dsh-claude-layer-picker` | `20` | a picker that hangs its card from inside the composer: the permission picker, whose card has to stand over the controls beside it |
|
|
326
|
+
| `--dsh-claude-layer-chrome` | `30` | the window's title row the skin draws into: the header band's title and actions, the titlebar's view tabs, over the host's own header |
|
|
327
|
+
| `--dsh-claude-layer-float` | `99999` | a floating card or menu over everything the host draws: the popover cards, the hero menu |
|
|
328
|
+
| `--dsh-claude-layer-takeover` | `2147483000` | a surface that covers the whole window: the account-hold page, the sent message's stand-in in flight |
|
|
329
|
+
<!-- /generated:layers -->
|
|
330
|
+
|
|
226
331
|
## Text selection
|
|
227
332
|
|
|
228
333
|
Selection is the one surface that leaves the palette on purpose — it is a
|
|
@@ -238,7 +343,7 @@ Both are solid (never translucent) and `!important`, so they override whatever
|
|
|
238
343
|
colour the text underneath carries — links, inline code, syntax tokens. CSS
|
|
239
344
|
cannot read window focus: Chromium reaches the inactive paint through its own
|
|
240
345
|
internal `-internal-inactive-selection-*` properties, which a stylesheet cannot
|
|
241
|
-
address. `packages/client/src/features/
|
|
346
|
+
address. `packages/client/src/features/composer/selection-mirror.ts` therefore mirrors `document.hasFocus()`
|
|
242
347
|
onto `data-dsh-window-blur` and the stylesheet switches on that attribute; the
|
|
243
348
|
selection itself survives the blur.
|
|
244
349
|
|
|
@@ -453,7 +558,8 @@ padding, so the box's hairline stands on the two edges of the column's own
|
|
|
453
558
|
inset and is exactly as wide as the New session plate below it. In the desktop
|
|
454
559
|
titlebar mode the brand row rises 6px, since the sidebar column starts under
|
|
455
560
|
the 40px titlebar — as far as it goes with the box still wholly below that
|
|
456
|
-
edge, which clips the column.
|
|
561
|
+
edge, which clips the column. A box narrower than 200px keeps its glyph and
|
|
562
|
+
label and leaves the keycaps out.
|
|
457
563
|
|
|
458
564
|
**Palette.** A modal card set 8vh from the top, 760px wide at most, 16px radius,
|
|
459
565
|
on the same ivory fill (dark `#1E1E1D`) under the host's mask. From the top: a
|
|
@@ -471,18 +577,50 @@ and shows the Enter glyph; the others hide it. The card fades in and settles
|
|
|
471
577
|
from 6px above at 98.5% scale over 0.18s; on close card and mask fade out
|
|
472
578
|
together over 0.14s before the modal unmounts.
|
|
473
579
|
|
|
580
|
+
## Chat / Code switch · 聊天 / 代码切换
|
|
581
|
+
|
|
582
|
+
With ds-bot installed, the switch is two 28×22 options on a 2px-padded plate
|
|
583
|
+
with a 7px radius, each option 5px: chat bubbles and `</>`, 16px glyphs in the
|
|
584
|
+
1.3px stroke the sidebar's glyphs use. It is painted on both sides of the switch
|
|
585
|
+
by whoever paints the host's tokens — the theme on the Code side, ds-bot on the
|
|
586
|
+
Chat side — so the plate is a translucent tint (`rgba(20, 20, 19, 0.06)`, dark
|
|
587
|
+
`rgba(255, 255, 255, 0.08)`), the options take the tertiary label at rest and
|
|
588
|
+
the primary on hover, and the checked one is cut from the conversation canvas
|
|
589
|
+
(`--dsw-alias-bg-base`) with a 1px `rgba(20, 20, 19, 0.10)` drop (dark: a
|
|
590
|
+
`rgba(255, 255, 255, 0.14)` fill and no drop). On the desktop it stands in the
|
|
591
|
+
caption row, its right edge 12px inside the sidebar column's, centred in the
|
|
592
|
+
row, and leaves the screen while the column is too narrow to keep 8px clear of
|
|
593
|
+
the controls at the row's left end; on the web it is a cell of the sidebar's
|
|
594
|
+
first row, before the collapse toggle. It moves nothing: there is no
|
|
595
|
+
transition, since the press hands the whole page to the other side.
|
|
596
|
+
|
|
474
597
|
## The waiting line · 模型正在做什么的那一行
|
|
475
598
|
|
|
476
|
-
The host's running row
|
|
477
|
-
|
|
478
|
-
|
|
599
|
+
The host's running row, its divider and its live region stay as the host draws
|
|
600
|
+
them. Its whale tail is DeepSeek's own character, so under the Claude brand the
|
|
601
|
+
skin hides it and leads the line with its own loader: three 4px dots of the
|
|
602
|
+
accent in force in an 18 × 14 box, resting on the floor, each rising the skin's
|
|
603
|
+
8px and flattening against the floor as it leaves, half a second a bounce with
|
|
604
|
+
the second dot starting two fifths of the period behind the first and the third
|
|
605
|
+
three fifths; under the other brands the host's whale stands. The host's own
|
|
606
|
+
shimmering words step aside for the skin's line beside it: the wording in the
|
|
607
|
+
secondary label at 14px on a 24px line,
|
|
479
608
|
the turn's clock 8px later in the caption at 13px with tabular figures, and the
|
|
480
609
|
"No response yet" badge 8px after that (11px on a 16px line, 0 6px padding, a 5px
|
|
481
|
-
radius, the warning label over 16% of itself). The wording
|
|
482
|
-
|
|
610
|
+
radius, the warning label over 16% of itself). The wording wears one of two
|
|
611
|
+
paints, whichever the Motion tab's Waiting-line animation holds: a highlight band
|
|
612
|
+
swept across it the way the host's own rows sweep — 1.5s a pass with the band
|
|
613
|
+
resting the last third of it, in the host's shimmer tint — or a colour wash, the
|
|
614
|
+
seven radial washes of `packages/client/src/shared/motion.css` over a grey ramp,
|
|
615
|
+
orbiting the glyph box (5s an orbit while the hue turns a full circle over 4s),
|
|
616
|
+
which is the effect transitions.dev ships as its Pro gradient text. A wording that
|
|
617
|
+
changes runs the three-phase
|
|
483
618
|
swap over 0.15s: the old one leaves upward with a 2px blur, the new one enters
|
|
484
|
-
from 4px below; under Reduced motion the band is left out
|
|
485
|
-
written at once.
|
|
619
|
+
from 4px below; under Reduced motion the band is left out, the wash holds its
|
|
620
|
+
still frame, and the wording is written at once. The Motion tab's preview cards
|
|
621
|
+
wear these same two paints (`packages/client/src/features/settings/settings.css`)
|
|
622
|
+
and take turns between a state word and the host's own word for a wait, so a card
|
|
623
|
+
shows the wording swap as well as the paint.
|
|
486
624
|
|
|
487
625
|
While the conversation follows its tail the row is pinned at the place the
|
|
488
626
|
follow's glide comes to rest — the composer's own height, the fade band above it
|
|
@@ -504,6 +642,7 @@ inside `…_composerStack …_composerHero` — so only the arrangement differs.
|
|
|
504
642
|
| greeting | centred, 44.2px serif, brand mark on its line | top left, one fixed line naming the user ("What's up next, …?") in the 20px sans UI face, a 21px brand mark on its line |
|
|
505
643
|
| composer card | vertically centred in the scroll body | the conversation's single-line inline form, resting on the window's bottom edge (16px foot) |
|
|
506
644
|
| between them | — | the usage panel |
|
|
645
|
+
| permission control | the segment group | the conversation's trigger and its card |
|
|
507
646
|
| workspace / preset row | the card's footer tray | hairline chips directly above the card |
|
|
508
647
|
| column width | the hero's centred box | a 720px composer column; the greeting and the panel form a 480px block against its left edge |
|
|
509
648
|
|
|
@@ -531,7 +670,7 @@ The cold start card waits for a workspace: the host marks it with a dashed ring
|
|
|
531
670
|
and makes every control on it inert, so a press anywhere opens the workspace
|
|
532
671
|
picker. In the studio form the ring sits on the single-line input box itself
|
|
533
672
|
(the host's dashed stroke and colours, flat, no drop shadow), and the permission
|
|
534
|
-
|
|
673
|
+
trigger fills the card's empty mode strip on the preset a new session starts in
|
|
535
674
|
— disabled, like the rest of the card's controls.
|
|
536
675
|
|
|
537
676
|
The panel is Claude Code's dashboard shape: a flat warm-gray wash (a
|
|
@@ -559,8 +698,8 @@ hero, and a range that has not reached it steps down to the longest book it has
|
|
|
559
698
|
passed, so the range pills keep the same book whenever the totals allow. The heat
|
|
560
699
|
grid takes one
|
|
561
700
|
equal column per week (twenty-six weeks), square cells from a 3px gutter, in
|
|
562
|
-
Claude Code's blue data ramp (`#3b6ecf`
|
|
563
|
-
cell); because the columns are fractions of the panel's own width, the newest
|
|
701
|
+
Claude Code's blue data ramp (`#3b6ecf` mixed in at the shares `HOME_HEAT_RAMP`
|
|
702
|
+
in `packages/client/src/constants.ts` lists, over the neutral empty cell); because the columns are fractions of the panel's own width, the newest
|
|
564
703
|
week can never fall past the edge. Hovering a cell shows Claude Code's day tip at
|
|
565
704
|
once: a solid pill in the label ink with the canvas tone for text (so it inverts
|
|
566
705
|
with the theme), 13px medium, reading the day in the shell's language and the
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/assets/manifest.json
CHANGED
|
@@ -91,75 +91,75 @@
|
|
|
91
91
|
"encoding": "br",
|
|
92
92
|
"bytes": 143044
|
|
93
93
|
},
|
|
94
|
-
"
|
|
94
|
+
"4ec527e58330.js": {
|
|
95
95
|
"type": "text/javascript; charset=utf-8",
|
|
96
96
|
"encoding": "br",
|
|
97
|
-
"bytes":
|
|
97
|
+
"bytes": 15736
|
|
98
98
|
},
|
|
99
|
-
"
|
|
99
|
+
"939b90bfe109.js.map": {
|
|
100
100
|
"type": "application/json; charset=utf-8",
|
|
101
101
|
"encoding": "br",
|
|
102
|
-
"bytes":
|
|
102
|
+
"bytes": 78267
|
|
103
103
|
},
|
|
104
|
-
"
|
|
104
|
+
"3b91bf51db72.js": {
|
|
105
105
|
"type": "text/javascript; charset=utf-8",
|
|
106
106
|
"encoding": "br",
|
|
107
|
-
"bytes":
|
|
107
|
+
"bytes": 18772
|
|
108
108
|
},
|
|
109
|
-
"
|
|
109
|
+
"a5f822455872.js.map": {
|
|
110
110
|
"type": "application/json; charset=utf-8",
|
|
111
111
|
"encoding": "br",
|
|
112
|
-
"bytes":
|
|
112
|
+
"bytes": 99310
|
|
113
113
|
},
|
|
114
|
-
"
|
|
114
|
+
"d8df7a57fbe3.js": {
|
|
115
115
|
"type": "text/javascript; charset=utf-8",
|
|
116
116
|
"encoding": "br",
|
|
117
|
-
"bytes":
|
|
117
|
+
"bytes": 9972
|
|
118
118
|
},
|
|
119
|
-
"
|
|
119
|
+
"1c63ba6a0ae4.js.map": {
|
|
120
120
|
"type": "application/json; charset=utf-8",
|
|
121
121
|
"encoding": "br",
|
|
122
|
-
"bytes":
|
|
122
|
+
"bytes": 27515
|
|
123
123
|
},
|
|
124
|
-
"
|
|
124
|
+
"755d09170f37.js": {
|
|
125
125
|
"type": "text/javascript; charset=utf-8",
|
|
126
126
|
"encoding": "br",
|
|
127
|
-
"bytes":
|
|
127
|
+
"bytes": 20445
|
|
128
128
|
},
|
|
129
|
-
"
|
|
129
|
+
"89a834267a8e.js.map": {
|
|
130
130
|
"type": "application/json; charset=utf-8",
|
|
131
131
|
"encoding": "br",
|
|
132
|
-
"bytes":
|
|
132
|
+
"bytes": 74139
|
|
133
133
|
},
|
|
134
|
-
"
|
|
134
|
+
"7323c8c86470.js": {
|
|
135
135
|
"type": "text/javascript; charset=utf-8",
|
|
136
136
|
"encoding": "br",
|
|
137
|
-
"bytes":
|
|
137
|
+
"bytes": 8044
|
|
138
138
|
},
|
|
139
|
-
"
|
|
139
|
+
"725219568623.js.map": {
|
|
140
140
|
"type": "application/json; charset=utf-8",
|
|
141
141
|
"encoding": "br",
|
|
142
|
-
"bytes":
|
|
142
|
+
"bytes": 32476
|
|
143
143
|
},
|
|
144
|
-
"
|
|
144
|
+
"1952ecd55916.js": {
|
|
145
145
|
"type": "text/javascript; charset=utf-8",
|
|
146
146
|
"encoding": "br",
|
|
147
|
-
"bytes":
|
|
147
|
+
"bytes": 19214
|
|
148
148
|
},
|
|
149
|
-
"
|
|
149
|
+
"aa84f6ab0740.js.map": {
|
|
150
150
|
"type": "application/json; charset=utf-8",
|
|
151
151
|
"encoding": "br",
|
|
152
|
-
"bytes":
|
|
152
|
+
"bytes": 125109
|
|
153
153
|
},
|
|
154
|
-
"
|
|
154
|
+
"c02a70a798bc.js": {
|
|
155
155
|
"type": "text/javascript; charset=utf-8",
|
|
156
156
|
"encoding": "br",
|
|
157
|
-
"bytes":
|
|
157
|
+
"bytes": 30435
|
|
158
158
|
},
|
|
159
|
-
"
|
|
159
|
+
"8dd600f2d49b.js.map": {
|
|
160
160
|
"type": "application/json; charset=utf-8",
|
|
161
161
|
"encoding": "br",
|
|
162
|
-
"bytes":
|
|
162
|
+
"bytes": 104310
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
}
|