@umriss-ui/schedule 0.44.0 → 0.46.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
@@ -18,6 +18,34 @@ moves from here under the rule above.
18
18
 
19
19
  ---
20
20
 
21
+ ## 0.46.0 – Zoom keys, and the plan as a table (Oct. 2026)
22
+
23
+ ### Added
24
+
25
+ - **On the focused plot `+` and `=` zoom in, `-` and `_` zoom out and `0` fits the work**, about the active subtask, each reported once through `onViewChange`; the live region says the new span.
26
+ - **`useSchedule` hands back `DataTable`:** placed inside a `Schedule` it adds a "Show data" key that opens a table of the subtasks in view - lane, task, subtask, from and to with their dates, duration, findings - while the plot and the lane headers are hidden.
27
+ - **The demo shows what the application writes itself:** zoom and fit buttons, undo of the applied intents, a critical path and a highlighted lane.
28
+
29
+ ### Changed
30
+
31
+ - **A `Schedule`'s children render inside its root element** instead of after it; the parts that declare render nothing, so nothing visible moves.
32
+ - Migration: nothing changes unless a child of `Schedule` renders an element of its own, which now lands in the grid inside the root.
33
+ - **The peer ranges on core and charts move to `^0.46.0`.**
34
+ - Migration: install the 0.46 versions of `@umriss-ui/core` and `@umriss-ui/charts` beside it.
35
+
36
+ ## 0.45.0 – A plan in the plant's time (Oct. 2026)
37
+
38
+ ### Added
39
+
40
+ - **The schedule follows the time zone named in core's formats** (ADR-0076): the day and fine bands, the snap raster of a drag or a key move, and today are the zone's, and the zone's name stands once above the lane headers and in the plot's description where the reader's own zone is another. `snapTime` takes the zone as an optional last argument.
41
+
42
+ ### Changed
43
+
44
+ - **On the day the clocks go back, the time axis follows the clock change** in the reader's zone as in a named one: a two-hour step stays on even hours, and a time inside the doubled hour carries its offset (`02:30 GMT+1`) in the band, the tooltip, the ghost and the summary. Today covers the whole 25-hour day.
45
+ - Migration: none needed; only a plan across a clock change looks different.
46
+ - **The peer ranges on core and charts move to `^0.45.0`.**
47
+ - Migration: install the 0.45 versions of `@umriss-ui/core` and `@umriss-ui/charts` beside it.
48
+
21
49
  ## 0.44.0 – Malformed data says so, and the handle goes (Oct. 2026)
22
50
 
23
51
  ### Added
package/README.md CHANGED
@@ -138,12 +138,20 @@ A tooltip on a hovered subtask or dependency names the order, the times, lead-in
138
138
  and lead-out and the findings; `tooltip` replaces its content or switches it
139
139
  off. `now` draws the present across the lanes. The wheel over the schedule,
140
140
  lane headers included, scrolls the lanes and releases the page at their end,
141
- Ctrl or ⌘ and a pinch zoom, Shift pans; on a touch screen one finger pans, a
141
+ Ctrl or ⌘ and a pinch zoom, Shift pans; on the focused plot `+` (or `=`) zooms in, `-` zooms out and `0` fits the work, and the live region says the new span; on a touch screen one finger pans, a
142
142
  tap selects and a long press on a bar grabs it (with `"move"` or `"lane"` in `intents`), and a vertical swipe scrolls the page while all lanes fit (when they
143
143
  overflow, the lane names scroll the page). The lane headers take at most 40 % of the width, so that on a
144
144
  phone the plot keeps the larger part; `positionAt` and `clientPointOf`, on what
145
145
  `useSchedule` hands back, turn a client point into a time and a lane and back.
146
146
 
147
+ `DataTable`, which `useSchedule` hands back, is opt-in: placed inside the
148
+ `Schedule`, it adds a Show data key beside the bottom time band. The key opens a
149
+ table over the lanes and the plot, one row per subtask whose time, lead-in and
150
+ lead-out included, touches the span in view, in lane order, with the lane,
151
+ task, subtask, from and to with their dates, the duration and the findings in
152
+ words - a reader walks it with a screen reader's table keys instead of one
153
+ subtask at a time. Without the part nothing changes.
154
+
147
155
  ## Its size
148
156
 
149
157
  The width is the host's. Without `height`, a schedule fills its frame - a stretched grid cell, a card the
@@ -185,11 +193,21 @@ pointer's tooltip names it by label (or id) and time; the keys walk to it in
185
193
  time order among the work of its lane, and the live region reads its lane,
186
194
  label and time.
187
195
 
196
+ ## The plant's time zone
197
+
198
+ The schedule follows the `timeZone` of core's formats (`<LanguageProvider formats={{ timeZone: "Europe/Berlin" }}>`);
199
+ it takes no prop of its own. The fine band reads the zone's hours, the day band holds the zone's days, "today"
200
+ is the zone's, and the now line, an instant, does not move. A `snap` raster is laid on the zone's time: eight
201
+ hours offset by six snap to 06:00, 14:00 and 22:00 there on both sides of a clock change (`snapTime(time,
202
+ raster, timeZone?)` takes the zone as its last argument). A time inside the hour a clock change doubles carries
203
+ its offset (`02:30 GMT+1`), in the band, the tooltip, the ghost and the summary. Where the reader's zone is
204
+ another, the zone's name stands once above the lane headers and in the plot's description (core's
205
+ `useTimeZoneLabel`); without a named zone, nothing changes.
206
+
188
207
  ## Not yet
189
208
 
190
209
  What the schedule does not do today, and waits for a caller who needs it (what
191
- it never does stands in ADR-0032): umriss shows the reader's time, and a
192
- plant's zone is not yet offered (ADR-0060).
210
+ it never does stands in ADR-0032).
193
211
 
194
212
  * **Stacked overlap** — overlapping subtasks packed into sub-lanes on request;
195
213
  today an overlap is always drawn offset, as the finding it is.
package/dist/index.d.ts CHANGED
@@ -43,6 +43,13 @@ export declare interface BlockedTimesProps {
43
43
  data: readonly BlockedTime[];
44
44
  }
45
45
 
46
+ /** The plan as a table, on demand: a key beside the bottom time band opens a
47
+ table of the subtasks in view - lane, task, subtask, from and to with
48
+ their dates, duration and findings in words. For a reader who wants every
49
+ value at once. Place it inside a `Schedule`; it takes no props and renders
50
+ nothing outside one. */
51
+ declare function DataTable(): ReactNode;
52
+
46
53
  /** When a dependency leaves its subtask, by its anchor. */
47
54
  export declare function departure(dependency: Dependency, from: Subtask): number;
48
55
 
@@ -523,6 +530,13 @@ export declare interface ScheduleParts {
523
530
  Dependencies: typeof Dependencies;
524
531
  BlockedTimes: typeof BlockedTimes;
525
532
  Milestones: typeof Milestones;
533
+ /** The plan as a table, on demand: placed inside the `Schedule`, it gives the
534
+ schedule a "Show data" key beside the bottom time band, and the key opens
535
+ a table of the subtasks in view - lane, task, subtask, from and to with
536
+ their dates, duration and findings in words. For a reader who wants every
537
+ value at once. It takes no props and renders nothing outside a
538
+ `Schedule`. */
539
+ DataTable: typeof DataTable;
526
540
  /** How the planner is looking at the plan: the span and the folded groups. */
527
541
  view: ScheduleView;
528
542
  /** Goes to a whole view; what it leaves out is shown whole again. Not
@@ -642,10 +656,10 @@ export declare interface SnapRaster {
642
656
  readonly offset: number;
643
657
  }
644
658
 
645
- /** `time` onto the nearest line of the raster in local time - a step alone
646
- starts at local midnight. A step of zero or less is no raster: the time
647
- stays as it is. */
648
- export declare function snapTime(time: number, raster: number | SnapRaster): number;
659
+ /** `time` onto the nearest line of the raster in the zone's time, the reader's
660
+ unless one is named - a step alone starts at the zone's midnight. A step of
661
+ zero or less is no raster: the time stays as it is. */
662
+ export declare function snapTime(time: number, raster: number | SnapRaster, timeZone?: string): number;
649
663
 
650
664
  /** Stretch the main time at one or both of its edges. */
651
665
  export declare interface StretchIntent {
@@ -718,7 +732,7 @@ export declare interface Task {
718
732
  }
719
733
 
720
734
  /** Declares a schedule: hands back `Schedule` and the parts declared inside it
721
- - `Lane`, `LaneGroup`, `Subtasks`, `Dependencies`, `BlockedTimes`, `Milestones` -, its
735
+ - `Lane`, `LaneGroup`, `Subtasks`, `Dependencies`, `BlockedTimes`, `Milestones`, `DataTable` -, its
722
736
  `view` and the setters `setView`, `setDomain`, `toggleGroup`, `foldAll` and
723
737
  `unfoldAll`, `positionAt`, `clientPointOf` and `visibleDomain`, and `scrollToLane`, `scrollToSubtask` and
724
738
  `focusSubtask`. */
package/dist/schedule.css CHANGED
@@ -1 +1 @@
1
- @layer umriss.tokens,umriss.base,umriss.components;@layer umriss.base{._text_18806_22{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_18806_38{--u-control-height-sm: var(--u-control-height-xs)}}._ink_18806_49{--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_18806_75{--_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_18806_90{caret-color:var(--u-color-accent)}._scroll_18806_96{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--u-color-text) 25%,transparent) transparent}._scroll_18806_96::-webkit-scrollbar{width:10px;height:10px}._scroll_18806_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_18806_96::-webkit-scrollbar-track{background:transparent}}@layer umriss.components{._ring_18806_125:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}@media(pointer:coarse){._field_18806_90._field_18806_90,._fieldRoot_18806_145._fieldRoot_18806_145{font-size:16px}}._field_18806_90:-webkit-autofill,._field_18806_90:-webkit-autofill:hover,._field_18806_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.components{._root_mm9nj_4,._root_mm9nj_4:before,._root_mm9nj_4:after{box-sizing:border-box}._corner_mm9nj_19,._corner_mm9nj_19:before,._corner_mm9nj_19:after{box-sizing:border-box}._dayBand_mm9nj_23,._dayBand_mm9nj_23:before,._dayBand_mm9nj_23:after{box-sizing:border-box}._tickBand_mm9nj_24,._tickBand_mm9nj_24:before,._tickBand_mm9nj_24:after{box-sizing:border-box}._day_mm9nj_23,._day_mm9nj_23:before,._day_mm9nj_23:after{box-sizing:border-box}._dayLabel_mm9nj_50,._dayLabel_mm9nj_50:before,._dayLabel_mm9nj_50:after{box-sizing:border-box}._tick_mm9nj_24,._tick_mm9nj_24:before,._tick_mm9nj_24:after{box-sizing:border-box}._tickLabel_mm9nj_71,._tickLabel_mm9nj_71:before,._tickLabel_mm9nj_71:after{box-sizing:border-box}._headers_mm9nj_81,._headers_mm9nj_81:before,._headers_mm9nj_81:after{box-sizing:border-box}._header_mm9nj_81,._header_mm9nj_81:before,._header_mm9nj_81:after{box-sizing:border-box}._headerLabel_mm9nj_100,._headerLabel_mm9nj_100:before,._headerLabel_mm9nj_100:after{box-sizing:border-box}._headerCount_mm9nj_136,._headerCount_mm9nj_136:before,._headerCount_mm9nj_136:after{box-sizing:border-box}._chevron_mm9nj_145,._chevron_mm9nj_145:before,._chevron_mm9nj_145:after{box-sizing:border-box}._plot_mm9nj_223,._plot_mm9nj_223:before,._plot_mm9nj_223:after{box-sizing:border-box}._focusRing_mm9nj_237,._focusRing_mm9nj_237:before,._focusRing_mm9nj_237:after{box-sizing:border-box}._layer_mm9nj_255,._layer_mm9nj_255:before,._layer_mm9nj_255:after{box-sizing:border-box}._grip_mm9nj_282,._grip_mm9nj_282:before,._grip_mm9nj_282:after{box-sizing:border-box}._ghostLabel_mm9nj_292,._ghostLabel_mm9nj_292:before,._ghostLabel_mm9nj_292:after{box-sizing:border-box}._finding_mm9nj_305,._finding_mm9nj_305:before,._finding_mm9nj_305:after{box-sizing:border-box}._refusal_mm9nj_313,._refusal_mm9nj_313:before,._refusal_mm9nj_313:after{box-sizing:border-box}._tooltip_mm9nj_317,._tooltip_mm9nj_317:before,._tooltip_mm9nj_317:after{box-sizing:border-box}._tooltipHead_mm9nj_336,._tooltipHead_mm9nj_336:before,._tooltipHead_mm9nj_336:after{box-sizing:border-box}._tooltipTimes_mm9nj_341,._tooltipTimes_mm9nj_341:before,._tooltipTimes_mm9nj_341:after{box-sizing:border-box}._now_mm9nj_350,._now_mm9nj_350:before,._now_mm9nj_350:after{box-sizing:border-box}._barLabel_mm9nj_364,._barLabel_mm9nj_364:before,._barLabel_mm9nj_364:after{box-sizing:border-box}._barLabelText_mm9nj_377,._barLabelText_mm9nj_377:before,._barLabelText_mm9nj_377:after{box-sizing:border-box}._root_mm9nj_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;user-select:none}._corner_mm9nj_19{background:var(--u-color-surface)}._dayBand_mm9nj_23,._tickBand_mm9nj_24{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_mm9nj_23{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_mm9nj_24{border-top:1px solid var(--u-hairline-strong)}._day_mm9nj_23{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_mm9nj_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_mm9nj_24{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_mm9nj_71{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_mm9nj_81{contain:size;position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_mm9nj_81{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_mm9nj_100{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_mm9nj_81[data-row=lane],._header_mm9nj_81[data-row=miniature]{container:lane-header / size}@container lane-header (height >= 2.5rem){._headerLabel_mm9nj_100:not(:has(*)){display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal;text-wrap:balance}}._header_mm9nj_81[data-row=groupHead],._header_mm9nj_81[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_mm9nj_136{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_mm9nj_145{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_mm9nj_145:hover{background:var(--u-color-surface-sunken);color:var(--u-color-text)}._chevron_mm9nj_145:active{background:var(--u-color-surface-pressed)}._chevron_mm9nj_145:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._chevron_mm9nj_145 svg{box-sizing:border-box}._chevron_mm9nj_145 svg{transition:transform var(--u-transition-path)}._chevron_mm9nj_145 svg[data-open]{box-sizing:border-box}._chevron_mm9nj_145 svg[data-open]{transform:rotate(90deg)}@media(pointer:coarse){._chevron_mm9nj_145{position:relative}._chevron_mm9nj_145:after{content:"";position:absolute;inset:-4px}._header_mm9nj_81[data-row=groupHead]{overflow:clip;overflow-clip-margin:2px}}@media(prefers-reduced-motion:reduce){._chevron_mm9nj_145 svg{transition:none}}._header_mm9nj_81[data-refused]{color:var(--u-color-text-muted)}._plot_mm9nj_223{contain:size;position:relative;overflow:hidden;touch-action:none;-webkit-touch-callout:none;user-select:none}._plot_mm9nj_223:focus{outline:none}._focusRing_mm9nj_237{position:absolute;inset:2px;border-radius:var(--u-radius-md);corner-shape:squircle;pointer-events:none}._plot_mm9nj_223:focus-visible>._focusRing_mm9nj_237{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._layer_mm9nj_255{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}._plot_mm9nj_223[data-stale]{pointer-events:none}._plot_mm9nj_223[data-stale]>:not(._focusRing_mm9nj_237){opacity:.5;transition:opacity var(--u-transition, .12s cubic-bezier(.22, 1, .36, 1)) var(--u-delay-stale, .2s)}@media(prefers-reduced-motion:reduce){._plot_mm9nj_223[data-stale]>:not(._focusRing_mm9nj_237){transition-duration:0s}}._grip_mm9nj_282{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_mm9nj_292{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_mm9nj_305{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_mm9nj_313{font-weight:var(--u-weight-semibold)}._tooltip_mm9nj_317{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_mm9nj_336{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_mm9nj_341{color:var(--u-color-text)}._tooltip_mm9nj_317 ._finding_mm9nj_305{color:var(--u-color-danger-text)}._now_mm9nj_350{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_mm9nj_364{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_mm9nj_377{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_mm9nj_364[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_mm9nj_364[data-on=light]{color:var(--u-color-text)}@media(forced-colors:active){._grip_mm9nj_282{outline:2px solid CanvasText;outline-offset:-2px}._ghostLabel_mm9nj_292{outline:1px solid CanvasText}}}
1
+ @layer umriss.tokens,umriss.base,umriss.components;@layer umriss.base{._text_18806_22{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_18806_38{--u-control-height-sm: var(--u-control-height-xs)}}._ink_18806_49{--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_18806_75{--_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_18806_90{caret-color:var(--u-color-accent)}._scroll_18806_96{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--u-color-text) 25%,transparent) transparent}._scroll_18806_96::-webkit-scrollbar{width:10px;height:10px}._scroll_18806_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_18806_96::-webkit-scrollbar-track{background:transparent}}@layer umriss.components{._ring_18806_125:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}@media(pointer:coarse){._field_18806_90._field_18806_90,._fieldRoot_18806_145._fieldRoot_18806_145{font-size:16px}}._field_18806_90:-webkit-autofill,._field_18806_90:-webkit-autofill:hover,._field_18806_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.components{._root_9ariw_4,._root_9ariw_4:before,._root_9ariw_4:after{box-sizing:border-box}._corner_9ariw_19,._corner_9ariw_19:before,._corner_9ariw_19:after{box-sizing:border-box}._zoneLabel_9ariw_24,._zoneLabel_9ariw_24:before,._zoneLabel_9ariw_24:after{box-sizing:border-box}._dayBand_9ariw_43,._dayBand_9ariw_43:before,._dayBand_9ariw_43:after{box-sizing:border-box}._headers_9ariw_48,._headers_9ariw_48:before,._headers_9ariw_48:after{box-sizing:border-box}._plot_9ariw_53,._plot_9ariw_53:before,._plot_9ariw_53:after{box-sizing:border-box}._cornerBottom_9ariw_58,._cornerBottom_9ariw_58:before,._cornerBottom_9ariw_58:after{box-sizing:border-box}._tickBand_9ariw_63,._tickBand_9ariw_63:before,._tickBand_9ariw_63:after{box-sizing:border-box}._dataKey_9ariw_69,._dataKey_9ariw_69:before,._dataKey_9ariw_69:after{box-sizing:border-box}._dataPanel_9ariw_100,._dataPanel_9ariw_100:before,._dataPanel_9ariw_100:after{box-sizing:border-box}._dataTable_9ariw_119,._dataTable_9ariw_119:before,._dataTable_9ariw_119:after{box-sizing:border-box}._day_9ariw_43,._day_9ariw_43:before,._day_9ariw_43:after{box-sizing:border-box}._dayLabel_9ariw_179,._dayLabel_9ariw_179:before,._dayLabel_9ariw_179:after{box-sizing:border-box}._tick_9ariw_63,._tick_9ariw_63:before,._tick_9ariw_63:after{box-sizing:border-box}._tickLabel_9ariw_200,._tickLabel_9ariw_200:before,._tickLabel_9ariw_200:after{box-sizing:border-box}._header_9ariw_48,._header_9ariw_48:before,._header_9ariw_48:after{box-sizing:border-box}._headerLabel_9ariw_229,._headerLabel_9ariw_229:before,._headerLabel_9ariw_229:after{box-sizing:border-box}._headerCount_9ariw_265,._headerCount_9ariw_265:before,._headerCount_9ariw_265:after{box-sizing:border-box}._chevron_9ariw_274,._chevron_9ariw_274:before,._chevron_9ariw_274:after{box-sizing:border-box}._focusRing_9ariw_372,._focusRing_9ariw_372:before,._focusRing_9ariw_372:after{box-sizing:border-box}._layer_9ariw_390,._layer_9ariw_390:before,._layer_9ariw_390:after{box-sizing:border-box}._grip_9ariw_417,._grip_9ariw_417:before,._grip_9ariw_417:after{box-sizing:border-box}._ghostLabel_9ariw_427,._ghostLabel_9ariw_427:before,._ghostLabel_9ariw_427:after{box-sizing:border-box}._finding_9ariw_440,._finding_9ariw_440:before,._finding_9ariw_440:after{box-sizing:border-box}._refusal_9ariw_448,._refusal_9ariw_448:before,._refusal_9ariw_448:after{box-sizing:border-box}._tooltip_9ariw_452,._tooltip_9ariw_452:before,._tooltip_9ariw_452:after{box-sizing:border-box}._tooltipHead_9ariw_471,._tooltipHead_9ariw_471:before,._tooltipHead_9ariw_471:after{box-sizing:border-box}._tooltipTimes_9ariw_476,._tooltipTimes_9ariw_476:before,._tooltipTimes_9ariw_476:after{box-sizing:border-box}._now_9ariw_485,._now_9ariw_485:before,._now_9ariw_485:after{box-sizing:border-box}._barLabel_9ariw_499,._barLabel_9ariw_499:before,._barLabel_9ariw_499:after{box-sizing:border-box}._barLabelText_9ariw_512,._barLabelText_9ariw_512:before,._barLabelText_9ariw_512:after{box-sizing:border-box}._root_9ariw_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;user-select:none}._corner_9ariw_19{background:var(--u-color-surface)}._corner_9ariw_19:has(._zoneLabel_9ariw_24){display:flex;align-items:center}._zoneLabel_9ariw_24{display:block;min-width:0;padding:0 var(--u-space-2);overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs);text-overflow:ellipsis;white-space:nowrap}._dayBand_9ariw_43{grid-column:2;grid-row:1}._headers_9ariw_48{grid-column:1;grid-row:2}._plot_9ariw_53{grid-column:2;grid-row:2}._cornerBottom_9ariw_58{grid-column:1;grid-row:3}._tickBand_9ariw_63{grid-column:2;grid-row:3}._dataKey_9ariw_69{grid-column:1;grid-row:3;justify-self:start;align-self:center;margin:0 var(--u-space-2);padding:0 var(--u-space-2);max-width:calc(100% - 2 * var(--u-space-2));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:inherit;font-size:var(--u-text-xs);color:var(--u-color-text-muted);background:transparent;border:0;border-radius:var(--u-radius-sm);corner-shape:squircle;cursor:pointer}._dataKey_9ariw_69:hover{color:var(--u-color-text)}._dataKey_9ariw_69:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._dataPanel_9ariw_100{grid-column:1 / -1;grid-row:2;z-index:3;overflow:auto;background:var(--u-color-surface);font-size:var(--u-text-sm);user-select:text}._dataPanel_9ariw_100:focus{outline:none}._dataPanel_9ariw_100:focus-visible{outline:2px solid transparent;box-shadow:inset var(--u-focus-ring)}._dataTable_9ariw_119{width:100%;border-collapse:collapse}._dataTable_9ariw_119>caption{box-sizing:border-box}._dataTable_9ariw_119>caption{padding:var(--u-space-2) var(--u-space-3);text-align:left;color:var(--u-color-text-muted)}._dataTable_9ariw_119 th,._dataTable_9ariw_119 td{box-sizing:border-box}._dataTable_9ariw_119 th,._dataTable_9ariw_119 td{padding:var(--u-space-1) var(--u-space-3);border-bottom:1px solid var(--u-hairline);white-space:nowrap;font-weight:400;text-align:left}._dataTable_9ariw_119>thead th{box-sizing:border-box}._dataTable_9ariw_119>thead th{position:sticky;top:0;background:var(--u-color-surface);border-bottom-color:var(--u-hairline-strong);font-weight:var(--u-weight-medium)}._dataTable_9ariw_119>tbody th{box-sizing:border-box}._dataTable_9ariw_119>tbody th{font-weight:var(--u-weight-medium)}._dayBand_9ariw_43,._tickBand_9ariw_63{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_9ariw_43{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_9ariw_63{border-top:1px solid var(--u-hairline-strong)}._day_9ariw_43{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_9ariw_179{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_9ariw_63{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_9ariw_200{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_9ariw_48{contain:size;position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_9ariw_48{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_9ariw_229{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_9ariw_48[data-row=lane],._header_9ariw_48[data-row=miniature]{container:lane-header / size}@container lane-header (height >= 2.5rem){._headerLabel_9ariw_229:not(:has(*)){display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal;text-wrap:balance}}._header_9ariw_48[data-row=groupHead],._header_9ariw_48[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_9ariw_265{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_9ariw_274{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_9ariw_274:hover{background:var(--u-color-surface-sunken);color:var(--u-color-text)}._chevron_9ariw_274:active{background:var(--u-color-surface-pressed)}._chevron_9ariw_274:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._chevron_9ariw_274 svg{box-sizing:border-box}._chevron_9ariw_274 svg{transition:transform var(--u-transition-path)}._chevron_9ariw_274 svg[data-open]{box-sizing:border-box}._chevron_9ariw_274 svg[data-open]{transform:rotate(90deg)}@media(pointer:coarse){._chevron_9ariw_274{position:relative}._chevron_9ariw_274:after{content:"";position:absolute;inset:-4px}._dataKey_9ariw_69{min-height:24px}._header_9ariw_48[data-row=groupHead]{overflow:clip;overflow-clip-margin:2px}}@media(prefers-reduced-motion:reduce){._chevron_9ariw_274 svg{transition:none}}._header_9ariw_48[data-refused]{color:var(--u-color-text-muted)}._plot_9ariw_53{contain:size;position:relative;overflow:hidden;touch-action:none;-webkit-touch-callout:none;user-select:none}._plot_9ariw_53:focus{outline:none}._focusRing_9ariw_372{position:absolute;inset:2px;border-radius:var(--u-radius-md);corner-shape:squircle;pointer-events:none}._plot_9ariw_53:focus-visible>._focusRing_9ariw_372{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._layer_9ariw_390{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}._plot_9ariw_53[data-stale]{pointer-events:none}._plot_9ariw_53[data-stale]>:not(._focusRing_9ariw_372){opacity:.5;transition:opacity var(--u-transition, .12s cubic-bezier(.22, 1, .36, 1)) var(--u-delay-stale, .2s)}@media(prefers-reduced-motion:reduce){._plot_9ariw_53[data-stale]>:not(._focusRing_9ariw_372){transition-duration:0s}}._grip_9ariw_417{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_9ariw_427{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_9ariw_440{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_9ariw_448{font-weight:var(--u-weight-semibold)}._tooltip_9ariw_452{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_9ariw_471{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_9ariw_476{color:var(--u-color-text)}._tooltip_9ariw_452 ._finding_9ariw_440{color:var(--u-color-danger-text)}._now_9ariw_485{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_9ariw_499{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_9ariw_512{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_9ariw_499[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_9ariw_499[data-on=light]{color:var(--u-color-text)}@media(forced-colors:active){._grip_9ariw_417{outline:2px solid CanvasText;outline-offset:-2px}._ghostLabel_9ariw_427{outline:1px solid CanvasText}}}