@umriss-ui/schedule 0.5.7 → 0.7.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/CHANGELOG.md CHANGED
@@ -15,6 +15,41 @@ moves from here under the rule above.
15
15
 
16
16
  ---
17
17
 
18
+ ## 0.7.0 – The summary counts the milestones (Oct. 2026)
19
+
20
+ Needs `@umriss-ui/core` 0.32; the peer range moves to `^0.32.0`.
21
+
22
+ ### Added
23
+
24
+ - **Milestones in the summary**: the plot's description names how many milestones the plan shows ("2 milestones."), and nothing where there are none. Needs `@umriss-ui/core` with the new `scheduleSummary` argument.
25
+
26
+ ---
27
+
28
+ ## 0.6.0 – Milestones (Oct. 2026)
29
+
30
+ Needs `@umriss-ui/core` 0.31 and `@umriss-ui/charts` 0.15; the peer ranges move to `^0.31.0` and `^0.15.0`.
31
+
32
+ ### Added
33
+
34
+ - **`<Milestones data />`.** A point in time on a lane, drawn as a diamond
35
+ above the work: plain data `{ id, lane, at, label? }`, declared inside the
36
+ `Schedule` like `BlockedTimes` and handed out by `useSchedule`. It is
37
+ read-only - not dragged, no intent, no finding. The tooltip names it by
38
+ label (or id) and time, and the keys walk to it in time order among the work
39
+ of its lane. New types `Milestone` and `MilestonesProps`; the words come
40
+ from core's new `scheduleMilestone` wording ("Milestone: Release"), so it
41
+ needs a core with it.
42
+
43
+ ### Changed
44
+
45
+ - **`ScheduleTooltipTarget` and `ScheduleHit` have a third kind,
46
+ `"milestone"`.** A `tooltip` function of your own that reads `target.task`
47
+ or `target.violated` without checking `target.kind` first no longer
48
+ type-checks; add a case for the milestone (`target.milestone`) or return
49
+ `null` for it.
50
+
51
+ ---
52
+
18
53
  ## 0.5.7 – Charts 0.14.0 (Oct. 2026)
19
54
 
20
55
  Needs `@umriss-ui/charts` 0.14; the peer range moves to `^0.14.0`. Nothing else changes for a caller.
package/README.md CHANGED
@@ -148,17 +148,26 @@ hatched behind the work; a subtask that covers some of it is a finding
148
148
  (`inBlockedTime`, and the third argument of `findings`), and a drag does not
149
149
  put work into it.
150
150
 
151
+ ## Milestones
152
+
153
+ `<Milestones data={…} />` takes points in time on a lane — a handover, a
154
+ release — as plain data, `{ id, lane, at, label? }`. Each is drawn as a diamond
155
+ on its lane above the work, in the text ink; there is no tone and no size. It
156
+ is read-only: it is not dragged, reports no intent and is no finding. The
157
+ pointer's tooltip names it by label (or id) and time; the keys walk to it in
158
+ time order among the work of its lane, and the live region reads its lane,
159
+ label and time.
160
+
151
161
  ## Not yet
152
162
 
153
163
  What the schedule does not do today, and waits for a caller who needs it (what
154
164
  it never does stands in ADR-0032):
155
165
 
156
- * **Milestones** — a point in time on a lane, drawn as a mark rather than a bar.
157
166
  * **Stacked overlap** — overlapping subtasks packed into sub-lanes on request;
158
167
  today an overlap is always drawn offset, as the finding it is.
159
168
  * **Dependencies across tasks** — a dependency joins two subtasks of one task.
160
169
 
161
- Done from this list: **blocked time** per lane.
170
+ Done from this list: **blocked time** per lane and **milestones**.
162
171
 
163
172
  ## Where to read on
164
173
 
@@ -176,7 +185,7 @@ Done from this list: **blocked time** per lane.
176
185
  page also has a Markdown twin online; for the latest version:
177
186
  <https://romanhaendler.github.io/umriss-ui/schedule/llms.txt>.
178
187
  * The vocabulary — **Task**, **Subtask**, **Lead-in**, **Lead-out**,
179
- **Dependency**, **Violated dependency**, **Blocked time**, **Lane header**, **Lane group**,
188
+ **Dependency**, **Violated dependency**, **Blocked time**, **Milestone**, **Lane header**, **Lane group**,
180
189
  **Miniature**, **Intent**, **Ghost** — stands in the workspace's
181
190
  `CONTEXT.md`, section "The schedule".
182
191
  * [`../../docs/design-language.md`](../../docs/design-language.md) — the design
package/dist/index.d.ts CHANGED
@@ -210,6 +210,35 @@ export declare interface LeadOutIntent {
210
210
  readonly leadOut: number;
211
211
  }
212
212
 
213
+ /** A point in time on a lane: a handover, a release, a deadline. Drawn as a
214
+ mark, not a bar - it has no duration and no task, and it is not moved: the
215
+ schedule reports no intent for it and finds nothing wrong with work beside
216
+ it.
217
+
218
+ A list of its own, like blocked time and for the same reason: it is data
219
+ the caller already holds (ADR-0023), keyed by lane. */
220
+ export declare interface Milestone {
221
+ /** The caller's identity of the milestone. */
222
+ readonly id: string;
223
+ /** The id of the lane it stands on. */
224
+ readonly lane: string;
225
+ /** The instant it stands at. */
226
+ readonly at: number;
227
+ /** What it is called, where the schedule names it; without it, its id. */
228
+ readonly label?: string;
229
+ }
230
+
231
+ /** A layer of milestones. Wherever it is declared, it is drawn above the work:
232
+ a milestone is a mark that must not be hidden by a bar it stands on. */
233
+ declare function Milestones({ data }: MilestonesProps): null;
234
+
235
+ /** The props of `Milestones`. */
236
+ export declare interface MilestonesProps {
237
+ /** The milestones of the lanes, as the caller holds them: one list, each
238
+ naming its lane and the instant it stands at. */
239
+ data: readonly Milestone[];
240
+ }
241
+
213
242
  /** Move the subtask in time: the main time keeps its length. */
214
243
  export declare interface MoveIntent {
215
244
  readonly kind: "move";
@@ -345,6 +374,9 @@ export declare type ScheduleHit = {
345
374
  } | {
346
375
  readonly kind: "dependency";
347
376
  readonly dependency: Dependency;
377
+ } | {
378
+ readonly kind: "milestone";
379
+ readonly milestone: Milestone;
348
380
  } | {
349
381
  readonly kind: "lane";
350
382
  readonly lane: string;
@@ -395,6 +427,7 @@ export declare interface ScheduleParts {
395
427
  Subtasks: typeof Subtasks;
396
428
  Dependencies: typeof Dependencies;
397
429
  BlockedTimes: typeof BlockedTimes;
430
+ Milestones: typeof Milestones;
398
431
  /** How the planner is looking at the plan: the span and the folded groups. */
399
432
  view: ScheduleView;
400
433
  /** Puts a span of two wall-clock instants in view; `null` shows the
@@ -531,6 +564,11 @@ export declare type ScheduleTooltipTarget = {
531
564
  readonly violatedDependencies: readonly ViolatedDependency[];
532
565
  /** The blocked time it covers on its lane. */
533
566
  readonly blocked: readonly BlockedTime[];
567
+ } | {
568
+ /** A milestone is hovered. */
569
+ readonly kind: "milestone";
570
+ /** The hovered milestone. */
571
+ readonly milestone: Milestone;
534
572
  } | {
535
573
  /** A dependency is hovered. */
536
574
  readonly kind: "dependency";
@@ -653,7 +691,7 @@ export declare interface Task {
653
691
  }
654
692
 
655
693
  /** Declares a schedule: hands back `Schedule` and the parts declared inside it
656
- - `Lane`, `LaneGroup`, `Subtasks`, `Dependencies`, `BlockedTimes` -, its
694
+ - `Lane`, `LaneGroup`, `Subtasks`, `Dependencies`, `BlockedTimes`, `Milestones` -, its
657
695
  `view` and the setters `setDomain`, `toggleGroup`, `foldAll` and
658
696
  `unfoldAll`. A ref on `Schedule` still gives the `ScheduleHandle`. */
659
697
  export declare function useSchedule(options?: ScheduleOptions): ScheduleParts;
package/dist/schedule.css CHANGED
@@ -1 +1 @@
1
- @layer umriss.tokens,umriss.base,umriss.components;@layer umriss.base{._text_r8i8z_23{font-family:var(--u-font-sans);font-size:var(--u-text-md);line-height:var(--u-leading-normal);color:var(--u-color-text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}@media(pointer:fine){._dense_r8i8z_39{--u-control-height-sm: var(--u-control-height-xs)}}._ink_r8i8z_50{--u-color-text: var(--u-color-bg);--u-color-text-secondary: color-mix(in srgb, var(--u-color-bg) 75%, transparent);--u-color-text-muted: color-mix(in srgb, var(--u-color-bg) 60%, transparent)}._extent_r8i8z_75{--_chars: 16;--_extra: 0;--_tracking: 0px;--_chrome: 0px;min-inline-size:0;max-inline-size:100%;contain:inline-size;contain-intrinsic-inline-size:calc((var(--_chars) + var(--_extra)) * (1ch + var(--_tracking)) + var(--_chrome))}._field_r8i8z_90{caret-color:var(--u-color-accent)}._scroll_r8i8z_96{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--u-color-text) 25%,transparent) transparent}._scroll_r8i8z_96::-webkit-scrollbar{width:10px;height:10px}._scroll_r8i8z_96::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--u-color-text) 22%,transparent);border-radius:var(--u-radius-full);border:3px solid transparent;background-clip:content-box}._scroll_r8i8z_96::-webkit-scrollbar-track{background:transparent}}@layer umriss.components{._ring_r8i8z_125:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}@media(pointer:coarse){._field_r8i8z_90._field_r8i8z_90,._fieldRoot_r8i8z_145._fieldRoot_r8i8z_145{font-size:16px}}._field_r8i8z_90:-webkit-autofill,._field_r8i8z_90:-webkit-autofill:hover,._field_r8i8z_90:-webkit-autofill:focus{-webkit-box-shadow:inset 0 0 0 1000px var(--u-color-surface),0 0 0 1px var(--u-edge-color-strong);-webkit-text-fill-color:var(--u-color-text);caret-color:var(--u-color-accent)}}@layer umriss.tokens,umriss.base,umriss.components;@layer umriss.components{._root_1892z_4,._root_1892z_4:before,._root_1892z_4:after{box-sizing:border-box}._corner_1892z_19,._corner_1892z_19:before,._corner_1892z_19:after{box-sizing:border-box}._dayBand_1892z_23,._dayBand_1892z_23:before,._dayBand_1892z_23:after{box-sizing:border-box}._tickBand_1892z_24,._tickBand_1892z_24:before,._tickBand_1892z_24:after{box-sizing:border-box}._day_1892z_23,._day_1892z_23:before,._day_1892z_23:after{box-sizing:border-box}._dayLabel_1892z_50,._dayLabel_1892z_50:before,._dayLabel_1892z_50:after{box-sizing:border-box}._tick_1892z_24,._tick_1892z_24:before,._tick_1892z_24:after{box-sizing:border-box}._tickLabel_1892z_71,._tickLabel_1892z_71:before,._tickLabel_1892z_71:after{box-sizing:border-box}._headers_1892z_79,._headers_1892z_79:before,._headers_1892z_79:after{box-sizing:border-box}._header_1892z_79,._header_1892z_79:before,._header_1892z_79:after{box-sizing:border-box}._headerLabel_1892z_97,._headerLabel_1892z_97:before,._headerLabel_1892z_97:after{box-sizing:border-box}._headerCount_1892z_134,._headerCount_1892z_134:before,._headerCount_1892z_134:after{box-sizing:border-box}._chevron_1892z_143,._chevron_1892z_143:before,._chevron_1892z_143:after{box-sizing:border-box}._plot_1892z_201,._plot_1892z_201:before,._plot_1892z_201:after{box-sizing:border-box}._focusRing_1892z_208,._focusRing_1892z_208:before,._focusRing_1892z_208:after{box-sizing:border-box}._layer_1892z_226,._layer_1892z_226:before,._layer_1892z_226:after{box-sizing:border-box}._grip_1892z_235,._grip_1892z_235:before,._grip_1892z_235:after{box-sizing:border-box}._ghostLabel_1892z_245,._ghostLabel_1892z_245:before,._ghostLabel_1892z_245:after{box-sizing:border-box}._finding_1892z_258,._finding_1892z_258:before,._finding_1892z_258:after{box-sizing:border-box}._refusal_1892z_266,._refusal_1892z_266:before,._refusal_1892z_266:after{box-sizing:border-box}._tooltip_1892z_270,._tooltip_1892z_270:before,._tooltip_1892z_270:after{box-sizing:border-box}._tooltipHead_1892z_289,._tooltipHead_1892z_289:before,._tooltipHead_1892z_289:after{box-sizing:border-box}._tooltipTimes_1892z_294,._tooltipTimes_1892z_294:before,._tooltipTimes_1892z_294:after{box-sizing:border-box}._now_1892z_303,._now_1892z_303:before,._now_1892z_303:after{box-sizing:border-box}._barLabel_1892z_317,._barLabel_1892z_317:before,._barLabel_1892z_317:after{box-sizing:border-box}._barLabelText_1892z_330,._barLabelText_1892z_330:before,._barLabelText_1892z_330:after{box-sizing:border-box}._root_1892z_4{display:grid;grid-template-rows:28px minmax(0,1fr) 28px;width:100%;font-size:var(--u-text-sm);background:var(--u-color-surface);outline:1px solid transparent;box-shadow:var(--u-edge);border-radius:var(--u-radius-md);corner-shape:squircle;overflow:hidden;font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none}._corner_1892z_19{background:var(--u-color-surface)}._dayBand_1892z_23,._tickBand_1892z_24{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_1892z_23{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_1892z_24{border-top:1px solid var(--u-hairline-strong)}._day_1892z_23{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_1892z_50{position:absolute;z-index:1;left:var(--u-space-1);padding:0 var(--u-space-1);background:var(--u-color-surface);top:50%;transform:translateY(-50%);white-space:nowrap;color:var(--u-color-text);font-weight:var(--u-weight-medium)}._tick_1892z_24{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_1892z_71{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_1892z_79{position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_1892z_79{display:flex;align-items:center;gap:var(--u-space-2);padding-right:var(--u-space-3);border-bottom:1px solid var(--u-hairline);overflow:hidden;white-space:nowrap}._headerLabel_1892z_97{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_1892z_79[data-row=lane],._header_1892z_79[data-row=miniature]{container:lane-header / size}@container lane-header (height >= 2.5rem){._headerLabel_1892z_97:not(:has(*)){display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal;text-wrap:balance}}._header_1892z_79[data-row=groupHead],._header_1892z_79[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_1892z_134{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_1892z_143{flex:none;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;border-radius:var(--u-radius-xs);corner-shape:squircle;background:transparent;color:var(--u-color-text-secondary);cursor:pointer;transition:background-color var(--u-transition),color var(--u-transition)}._chevron_1892z_143:hover{background:var(--u-color-surface-sunken);color:var(--u-color-text)}._chevron_1892z_143:active{background:var(--u-color-surface-pressed)}._chevron_1892z_143:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._chevron_1892z_143 svg{box-sizing:border-box}._chevron_1892z_143 svg{transition:transform var(--u-transition-path)}._chevron_1892z_143 svg[data-open]{box-sizing:border-box}._chevron_1892z_143 svg[data-open]{transform:rotate(90deg)}@media(prefers-reduced-motion:reduce){._chevron_1892z_143 svg{transition:none}}._header_1892z_79[data-refused]{color:var(--u-color-text-muted)}._plot_1892z_201{position:relative;overflow:hidden;touch-action:none}._plot_1892z_201:focus{outline:none}._focusRing_1892z_208{position:absolute;top:2px;right:2px;bottom:2px;left:2px;border-radius:var(--u-radius-md);corner-shape:squircle;pointer-events:none}._plot_1892z_201:focus-visible>._focusRing_1892z_208{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._layer_1892z_226{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;pointer-events:none}._grip_1892z_235{position:absolute;width:9px;margin-left:-4px;border-radius:var(--u-radius-xs);corner-shape:squircle;background:var(--u-color-surface);box-shadow:inset 0 0 0 1.5px var(--u-color-text);cursor:ew-resize}._ghostLabel_1892z_245{position:absolute;display:inline-flex;gap:var(--u-space-2);padding:1px var(--u-space-2);border-radius:var(--u-radius-sm);corner-shape:squircle;background:var(--u-color-text);color:var(--u-color-surface);font-size:var(--u-text-xs);white-space:nowrap;pointer-events:none}._finding_1892z_258{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_1892z_266{font-weight:var(--u-weight-semibold)}._tooltip_1892z_270{position:absolute;z-index:1;display:flex;flex-direction:column;gap:1px;max-width:260px;padding:var(--u-space-2) var(--u-space-3);border-radius:var(--u-radius-sm);corner-shape:squircle;background:var(--u-color-surface);outline:1px solid transparent;box-shadow:var(--u-shadow-overlay);color:var(--u-color-text-secondary);font-size:var(--u-text-xs);line-height:var(--u-leading-tight);pointer-events:none;white-space:nowrap}._tooltipHead_1892z_289{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_1892z_294{color:var(--u-color-text)}._tooltip_1892z_270 ._finding_1892z_258{color:var(--u-color-danger-text)}._now_1892z_303{position:absolute;top:0;width:0;height:0;margin-left:-4px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid var(--u-color-accent)}._barLabel_1892z_317{position:absolute;display:flex;align-items:center;padding:0 var(--u-space-1);overflow:hidden;font-size:var(--u-text-xs);line-height:var(--u-leading-tight);pointer-events:none}._barLabelText_1892z_330{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_1892z_317[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_1892z_317[data-on=light]{color:var(--u-color-text)}@media(forced-colors:active){._grip_1892z_235{outline:2px solid CanvasText;outline-offset:-2px}._ghostLabel_1892z_245{outline:1px solid CanvasText}}}
1
+ @layer umriss.tokens,umriss.base,umriss.components;@layer umriss.base{._text_1krlf_23{font-family:var(--u-font-sans);font-size:var(--u-text-md);line-height:var(--u-leading-normal);color:var(--u-color-text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}@media(pointer:fine){._dense_1krlf_39{--u-control-height-sm: var(--u-control-height-xs)}}._ink_1krlf_50{--u-color-text: var(--u-color-bg);--u-color-text-secondary: color-mix(in srgb, var(--u-color-bg) 75%, transparent);--u-color-text-muted: color-mix(in srgb, var(--u-color-bg) 60%, transparent)}._extent_1krlf_76{--_chars: 20;--_extra: 0;--_tracking: 0px;--_chrome: 0px;min-inline-size:0;max-inline-size:100%;contain:inline-size;contain-intrinsic-inline-size:calc((var(--_chars) + var(--_extra)) * (1ch + var(--_tracking)) + var(--_chrome))}._field_1krlf_91{caret-color:var(--u-color-accent)}._scroll_1krlf_97{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--u-color-text) 25%,transparent) transparent}._scroll_1krlf_97::-webkit-scrollbar{width:10px;height:10px}._scroll_1krlf_97::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--u-color-text) 22%,transparent);border-radius:var(--u-radius-full);border:3px solid transparent;background-clip:content-box}._scroll_1krlf_97::-webkit-scrollbar-track{background:transparent}}@layer umriss.components{._ring_1krlf_126:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}@media(pointer:coarse){._field_1krlf_91._field_1krlf_91,._fieldRoot_1krlf_146._fieldRoot_1krlf_146{font-size:16px}}._field_1krlf_91:-webkit-autofill,._field_1krlf_91:-webkit-autofill:hover,._field_1krlf_91:-webkit-autofill:focus{-webkit-box-shadow:inset 0 0 0 1000px var(--u-color-surface),0 0 0 1px var(--u-edge-color-strong);-webkit-text-fill-color:var(--u-color-text);caret-color:var(--u-color-accent)}}@layer umriss.components{._root_1892z_4,._root_1892z_4:before,._root_1892z_4:after{box-sizing:border-box}._corner_1892z_19,._corner_1892z_19:before,._corner_1892z_19:after{box-sizing:border-box}._dayBand_1892z_23,._dayBand_1892z_23:before,._dayBand_1892z_23:after{box-sizing:border-box}._tickBand_1892z_24,._tickBand_1892z_24:before,._tickBand_1892z_24:after{box-sizing:border-box}._day_1892z_23,._day_1892z_23:before,._day_1892z_23:after{box-sizing:border-box}._dayLabel_1892z_50,._dayLabel_1892z_50:before,._dayLabel_1892z_50:after{box-sizing:border-box}._tick_1892z_24,._tick_1892z_24:before,._tick_1892z_24:after{box-sizing:border-box}._tickLabel_1892z_71,._tickLabel_1892z_71:before,._tickLabel_1892z_71:after{box-sizing:border-box}._headers_1892z_79,._headers_1892z_79:before,._headers_1892z_79:after{box-sizing:border-box}._header_1892z_79,._header_1892z_79:before,._header_1892z_79:after{box-sizing:border-box}._headerLabel_1892z_97,._headerLabel_1892z_97:before,._headerLabel_1892z_97:after{box-sizing:border-box}._headerCount_1892z_134,._headerCount_1892z_134:before,._headerCount_1892z_134:after{box-sizing:border-box}._chevron_1892z_143,._chevron_1892z_143:before,._chevron_1892z_143:after{box-sizing:border-box}._plot_1892z_201,._plot_1892z_201:before,._plot_1892z_201:after{box-sizing:border-box}._focusRing_1892z_208,._focusRing_1892z_208:before,._focusRing_1892z_208:after{box-sizing:border-box}._layer_1892z_226,._layer_1892z_226:before,._layer_1892z_226:after{box-sizing:border-box}._grip_1892z_235,._grip_1892z_235:before,._grip_1892z_235:after{box-sizing:border-box}._ghostLabel_1892z_245,._ghostLabel_1892z_245:before,._ghostLabel_1892z_245:after{box-sizing:border-box}._finding_1892z_258,._finding_1892z_258:before,._finding_1892z_258:after{box-sizing:border-box}._refusal_1892z_266,._refusal_1892z_266:before,._refusal_1892z_266:after{box-sizing:border-box}._tooltip_1892z_270,._tooltip_1892z_270:before,._tooltip_1892z_270:after{box-sizing:border-box}._tooltipHead_1892z_289,._tooltipHead_1892z_289:before,._tooltipHead_1892z_289:after{box-sizing:border-box}._tooltipTimes_1892z_294,._tooltipTimes_1892z_294:before,._tooltipTimes_1892z_294:after{box-sizing:border-box}._now_1892z_303,._now_1892z_303:before,._now_1892z_303:after{box-sizing:border-box}._barLabel_1892z_317,._barLabel_1892z_317:before,._barLabel_1892z_317:after{box-sizing:border-box}._barLabelText_1892z_330,._barLabelText_1892z_330:before,._barLabelText_1892z_330:after{box-sizing:border-box}._root_1892z_4{display:grid;grid-template-rows:28px minmax(0,1fr) 28px;width:100%;font-size:var(--u-text-sm);background:var(--u-color-surface);outline:1px solid transparent;box-shadow:var(--u-edge);border-radius:var(--u-radius-md);corner-shape:squircle;overflow:hidden;font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none}._corner_1892z_19{background:var(--u-color-surface)}._dayBand_1892z_23,._tickBand_1892z_24{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_1892z_23{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_1892z_24{border-top:1px solid var(--u-hairline-strong)}._day_1892z_23{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_1892z_50{position:absolute;z-index:1;left:var(--u-space-1);padding:0 var(--u-space-1);background:var(--u-color-surface);top:50%;transform:translateY(-50%);white-space:nowrap;color:var(--u-color-text);font-weight:var(--u-weight-medium)}._tick_1892z_24{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_1892z_71{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_1892z_79{position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_1892z_79{display:flex;align-items:center;gap:var(--u-space-2);padding-right:var(--u-space-3);border-bottom:1px solid var(--u-hairline);overflow:hidden;white-space:nowrap}._headerLabel_1892z_97{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_1892z_79[data-row=lane],._header_1892z_79[data-row=miniature]{container:lane-header / size}@container lane-header (height >= 2.5rem){._headerLabel_1892z_97:not(:has(*)){display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal;text-wrap:balance}}._header_1892z_79[data-row=groupHead],._header_1892z_79[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_1892z_134{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_1892z_143{flex:none;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;border-radius:var(--u-radius-xs);corner-shape:squircle;background:transparent;color:var(--u-color-text-secondary);cursor:pointer;transition:background-color var(--u-transition),color var(--u-transition)}._chevron_1892z_143:hover{background:var(--u-color-surface-sunken);color:var(--u-color-text)}._chevron_1892z_143:active{background:var(--u-color-surface-pressed)}._chevron_1892z_143:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._chevron_1892z_143 svg{box-sizing:border-box}._chevron_1892z_143 svg{transition:transform var(--u-transition-path)}._chevron_1892z_143 svg[data-open]{box-sizing:border-box}._chevron_1892z_143 svg[data-open]{transform:rotate(90deg)}@media(prefers-reduced-motion:reduce){._chevron_1892z_143 svg{transition:none}}._header_1892z_79[data-refused]{color:var(--u-color-text-muted)}._plot_1892z_201{position:relative;overflow:hidden;touch-action:none}._plot_1892z_201:focus{outline:none}._focusRing_1892z_208{position:absolute;top:2px;right:2px;bottom:2px;left:2px;border-radius:var(--u-radius-md);corner-shape:squircle;pointer-events:none}._plot_1892z_201:focus-visible>._focusRing_1892z_208{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._layer_1892z_226{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;pointer-events:none}._grip_1892z_235{position:absolute;width:9px;margin-left:-4px;border-radius:var(--u-radius-xs);corner-shape:squircle;background:var(--u-color-surface);box-shadow:inset 0 0 0 1.5px var(--u-color-text);cursor:ew-resize}._ghostLabel_1892z_245{position:absolute;display:inline-flex;gap:var(--u-space-2);padding:1px var(--u-space-2);border-radius:var(--u-radius-sm);corner-shape:squircle;background:var(--u-color-text);color:var(--u-color-surface);font-size:var(--u-text-xs);white-space:nowrap;pointer-events:none}._finding_1892z_258{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_1892z_266{font-weight:var(--u-weight-semibold)}._tooltip_1892z_270{position:absolute;z-index:1;display:flex;flex-direction:column;gap:1px;max-width:260px;padding:var(--u-space-2) var(--u-space-3);border-radius:var(--u-radius-sm);corner-shape:squircle;background:var(--u-color-surface);outline:1px solid transparent;box-shadow:var(--u-shadow-overlay);color:var(--u-color-text-secondary);font-size:var(--u-text-xs);line-height:var(--u-leading-tight);pointer-events:none;white-space:nowrap}._tooltipHead_1892z_289{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_1892z_294{color:var(--u-color-text)}._tooltip_1892z_270 ._finding_1892z_258{color:var(--u-color-danger-text)}._now_1892z_303{position:absolute;top:0;width:0;height:0;margin-left:-4px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid var(--u-color-accent)}._barLabel_1892z_317{position:absolute;display:flex;align-items:center;padding:0 var(--u-space-1);overflow:hidden;font-size:var(--u-text-xs);line-height:var(--u-leading-tight);pointer-events:none}._barLabelText_1892z_330{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_1892z_317[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_1892z_317[data-on=light]{color:var(--u-color-text)}@media(forced-colors:active){._grip_1892z_235{outline:2px solid CanvasText;outline-offset:-2px}._ghostLabel_1892z_245{outline:1px solid CanvasText}}}