@umriss-ui/schedule 0.7.0 → 0.34.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
@@ -1,20 +1,49 @@
1
1
  # Changes to `@umriss-ui/schedule`
2
2
 
3
3
  This document describes what changes for **callers** of the package: exports,
4
- props, behaviour. What was worked on in the repository stands in the
5
- repository's journal (`docs/journal.md`) and in the specs under `.scratch/`.
4
+ props, behaviour.
6
5
 
7
6
  **The numbers.** The middle digit rises when something is added; the last one
8
7
  when something is repaired. As long as the first digit is `0`, no number
9
8
  promises compatibility — which is why whatever changes existing behaviour stands
10
9
  under a heading "Changed" of its own, no matter which digit rose.
11
10
 
11
+ From 0.34.0 all five packages share one number: they are released together, and a package without a change of its own still gets a heading for it.
12
+
12
13
  **Release candidates.** The package started as a release candidate under the
13
14
  tag `next`. With `0.1.0` it is released: the tag is gone, and the interface
14
15
  moves from here under the rule above.
15
16
 
16
17
  ---
17
18
 
19
+ ## 0.34.0 – A view is set, not handed back (Oct. 2026)
20
+
21
+ From this version all five packages carry one number and are released
22
+ together. Needs `@umriss-ui/core` and `@umriss-ui/charts` 0.34; the peer ranges
23
+ are `^0.34.0`.
24
+
25
+ ### Changed
26
+
27
+ - **`initialView` is read once, and `setView` is new.** A different `initialView` on a later render is now ignored, as React ignores a changed `defaultValue`; it used to be applied whenever its content differed from the last one handed in. To go to a view later, call the new `setView(view)` that `useSchedule` returns: it applies a whole view, and what the view leaves out goes back to its default. `setView` is not reported through `onViewChange`, which reports what the planner did, so two schedules kept in step by `onViewChange: (v) => other.setView(v)` in both directions do not answer each other. A caller that kept the reported view in state and handed it back as `initialView` writes `setView` instead: restoring a kept view is `setView(kept)`, and the state that mirrors the schedule's view becomes `view` from the hook.
28
+
29
+ ---
30
+
31
+ ## 0.7.1 – Core 0.33.0, charts 0.16.0 (Oct. 2026)
32
+
33
+ Needs `@umriss-ui/core` 0.33 and `@umriss-ui/charts` 0.16; the peer ranges move to `^0.33.0` and `^0.16.0`.
34
+
35
+ ### Added
36
+
37
+ - **The unit tests run against React 18.3.1 and 19 in CI**, and a schedule is rendered to a string with no `window` in a test (`tests-unit/ssr.test.tsx`): its labelled frame and empty canvases.
38
+
39
+ ### Changed
40
+
41
+ - **Every entry begins with `"use client";`.** The built file `dist/schedule.js` starts with the directive, then the stylesheet import, so a bundler that splits server from client code takes each as client code. The directive is written to the built entries only; the sources are unchanged.
42
+
43
+ - **Every export is a client component.** A hook called in a Server Component now fails with React's message about a client reference, not one about `useState`.
44
+
45
+ ---
46
+
18
47
  ## 0.7.0 – The summary counts the milestones (Oct. 2026)
19
48
 
20
49
  Needs `@umriss-ui/core` 0.32; the peer range moves to `^0.32.0`.
package/README.md CHANGED
@@ -19,7 +19,14 @@ Both `@umriss-ui/core` and `@umriss-ui/charts` are **peer dependencies**
19
19
  (ADR-0022): the schedule takes its styling regime, provider, formats and
20
20
  wording from core, and its time arithmetic — the affine scale, the time steps,
21
21
  the working calendar, the canvas colour resolution — from charts. React 18 or
22
- 19 as a peer as well.
22
+ 19 as a peer as well; the unit tests run against 18.3 and 19 in CI.
23
+
24
+ Every entry begins with `"use client"`, the directive a framework
25
+ with Server Components reads to treat a module as client code. No test runs
26
+ inside such a framework: the
27
+ schedule is rendered to a string in a test. On a server it gives its labelled
28
+ frame and empty canvases; the lanes, subtasks and the summary's counts arrive
29
+ on the client after mount.
23
30
 
24
31
  ## The smallest schedule that runs
25
32
 
@@ -133,11 +140,11 @@ time and a lane and back.
133
140
  ## The view
134
141
 
135
142
  The schedule holds its own view (ADR-0047): the span in view and the folded
136
- groups. `useSchedule({ initialView, onViewChange })` takes a start and reports
137
- every change, always the whole view; a view handed in that differs from the
138
- last one applies at once, so two schedules keep in step by handing each other
139
- what they report. Without a span the schedule shows the extent of its subtasks.
140
- `view`, `setDomain`, `toggleGroup`, `foldAll` and `unfoldAll` stand on what the
143
+ groups. `useSchedule({ initialView, onViewChange })` takes a start, read once, and
144
+ reports what the planner does, always the whole view; two schedules keep in
145
+ step by sending each other what they report through `setView`, which is not
146
+ reported in turn. Without a span the schedule shows the extent of its subtasks.
147
+ `view`, `setView`, `setDomain`, `toggleGroup`, `foldAll` and `unfoldAll` stand on what the
141
148
  hook hands back.
142
149
 
143
150
  ## Blocked time
@@ -161,7 +168,8 @@ label and time.
161
168
  ## Not yet
162
169
 
163
170
  What the schedule does not do today, and waits for a caller who needs it (what
164
- it never does stands in ADR-0032):
171
+ it never does stands in ADR-0032): umriss shows the reader's time, and a
172
+ plant's zone is not yet offered (ADR-0060).
165
173
 
166
174
  * **Stacked overlap** — overlapping subtasks packed into sub-lanes on request;
167
175
  today an overlap is always drawn offset, as the finding it is.
package/dist/index.d.ts CHANGED
@@ -277,7 +277,7 @@ export declare interface Overlap {
277
277
  export declare function overlaps(subtasks: readonly Subtask[]): Overlap[];
278
278
 
279
279
  /** Put work on the plan that was not on it: the answer to a drag from outside
280
- the schedule (schedule-refinement 07). It carries no subtask id - there is
280
+ the schedule. It carries no subtask id - there is
281
281
  no subtask yet; the caller creates one, with its own identity, from
282
282
  `subtaskFromPlace`. */
283
283
  export declare interface PlaceIntent {
@@ -298,9 +298,9 @@ export declare interface PlaceIntent {
298
298
  readonly leadOut?: number;
299
299
  }
300
300
 
301
- /** What the application says it is dragging in, while it drags it
302
- (schedule-refinement 07): the browser hands over the dragged data only on
303
- the drop, so the ghost before the drop can only come from the caller. */
301
+ /** What the application says it is dragging in, while it drags it: the
302
+ browser hands over the dragged data only on the drop, so the ghost before
303
+ the drop can only come from the caller. */
304
304
  export declare interface PlacingItem {
305
305
  /** The caller's key for the dragged item; it comes back in the intent. */
306
306
  readonly item: string;
@@ -322,17 +322,15 @@ export declare function resolveAppearance(appearance: readonly SubtaskAppearance
322
322
 
323
323
  /** What the drawing needs to know, with the contradiction already settled.
324
324
 
325
- The four names are the ones this module was born with, and they are kept so
326
- that a caller's code does not change because a picture did. Two of them are
327
- now named after a drawing they no longer use, and the channel each one
328
- really owns stands beside it. */
325
+ Two of the field names (`dashed`, `hatched`) are older than the drawing;
326
+ the channel each one owns stands beside it. */
329
327
  export declare interface ResolvedAppearance {
330
328
  /** `provisional`: the FILL - none at all, so the surface shows through, with
331
329
  a dashed outline in the task colour. Planned, not released. */
332
330
  readonly dashed: boolean;
333
- /** `fixed`: the ENDS - a cap at each end of the main time. Not a hatch any
334
- more; a hatch now says "not available" of a refused lane, and the name is
335
- kept only so that this type did not change with the picture. */
331
+ /** `fixed`: the ENDS - a cap at each end of the main time. Not a hatch: a
332
+ hatch says "not available" of a refused lane. The field keeps the name
333
+ `hatched`. */
336
334
  readonly hatched: boolean;
337
335
  /** `muted`: the SATURATION - the task colour mixed half into the surface,
338
336
  opaque and at full height. Another team's, another crew's. */
@@ -404,16 +402,15 @@ export declare interface ScheduleInteraction {
404
402
  /** What `useSchedule` takes: the view to start from and the handler that
405
403
  hears every change of it. */
406
404
  export declare interface ScheduleOptions {
407
- /** The view to start from, and to go to whenever one differing in content
408
- from the last is handed in - the same view again changes nothing, and
409
- what it leaves out is reset; one the schedule reported itself, handed
410
- back late, is its own state coming back and not gone to. The schedule
405
+ /** The view to start from, read once when the hook first runs; a different
406
+ value on a later render is ignored, as React ignores a changed
407
+ `defaultValue`. To go to a view later, call `setView`. The schedule
411
408
  remembers none: where a view is kept is the application's decision. */
412
409
  initialView?: ScheduleView;
413
- /** Every change of the view, once, always the whole view - the one to keep,
414
- or to hand another schedule as its `initialView`. A pan or zoom is
415
- reported at most once per frame. Not called for the view the schedule
416
- starts with. */
410
+ /** Every change the planner makes, once, always the whole view - the one to
411
+ keep, or to hand another schedule's `setView`. A pan or zoom is reported
412
+ at most once per frame. Not called for the view the schedule starts
413
+ with, nor for one `setView` applies. */
417
414
  onViewChange?: (view: ScheduleView) => void;
418
415
  }
419
416
 
@@ -430,6 +427,11 @@ export declare interface ScheduleParts {
430
427
  Milestones: typeof Milestones;
431
428
  /** How the planner is looking at the plan: the span and the folded groups. */
432
429
  view: ScheduleView;
430
+ /** Goes to a whole view; what it leaves out is shown whole again. Not
431
+ reported through `onViewChange`: two schedules kept in step by
432
+ `onViewChange: (v) => other.setView(v)` in both directions do not answer
433
+ each other. A view with the content already shown changes nothing. */
434
+ setView: (view: ScheduleView) => void;
433
435
  /** Puts a span of two wall-clock instants in view; `null` shows the
434
436
  subtasks' extent. */
435
437
  setDomain: (span: readonly [number, number] | null) => void;
@@ -692,7 +694,7 @@ export declare interface Task {
692
694
 
693
695
  /** Declares a schedule: hands back `Schedule` and the parts declared inside it
694
696
  - `Lane`, `LaneGroup`, `Subtasks`, `Dependencies`, `BlockedTimes`, `Milestones` -, its
695
- `view` and the setters `setDomain`, `toggleGroup`, `foldAll` and
697
+ `view` and the setters `setView`, `setDomain`, `toggleGroup`, `foldAll` and
696
698
  `unfoldAll`. A ref on `Schedule` still gives the `ScheduleHandle`. */
697
699
  export declare function useSchedule(options?: ScheduleOptions): ScheduleParts;
698
700
 
package/dist/schedule.css CHANGED
@@ -1 +1 @@
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}}}
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_1g7hg_4,._root_1g7hg_4:before,._root_1g7hg_4:after{box-sizing:border-box}._corner_1g7hg_19,._corner_1g7hg_19:before,._corner_1g7hg_19:after{box-sizing:border-box}._dayBand_1g7hg_23,._dayBand_1g7hg_23:before,._dayBand_1g7hg_23:after{box-sizing:border-box}._tickBand_1g7hg_24,._tickBand_1g7hg_24:before,._tickBand_1g7hg_24:after{box-sizing:border-box}._day_1g7hg_23,._day_1g7hg_23:before,._day_1g7hg_23:after{box-sizing:border-box}._dayLabel_1g7hg_50,._dayLabel_1g7hg_50:before,._dayLabel_1g7hg_50:after{box-sizing:border-box}._tick_1g7hg_24,._tick_1g7hg_24:before,._tick_1g7hg_24:after{box-sizing:border-box}._tickLabel_1g7hg_71,._tickLabel_1g7hg_71:before,._tickLabel_1g7hg_71:after{box-sizing:border-box}._headers_1g7hg_79,._headers_1g7hg_79:before,._headers_1g7hg_79:after{box-sizing:border-box}._header_1g7hg_79,._header_1g7hg_79:before,._header_1g7hg_79:after{box-sizing:border-box}._headerLabel_1g7hg_97,._headerLabel_1g7hg_97:before,._headerLabel_1g7hg_97:after{box-sizing:border-box}._headerCount_1g7hg_133,._headerCount_1g7hg_133:before,._headerCount_1g7hg_133:after{box-sizing:border-box}._chevron_1g7hg_142,._chevron_1g7hg_142:before,._chevron_1g7hg_142:after{box-sizing:border-box}._plot_1g7hg_197,._plot_1g7hg_197:before,._plot_1g7hg_197:after{box-sizing:border-box}._focusRing_1g7hg_204,._focusRing_1g7hg_204:before,._focusRing_1g7hg_204:after{box-sizing:border-box}._layer_1g7hg_222,._layer_1g7hg_222:before,._layer_1g7hg_222:after{box-sizing:border-box}._grip_1g7hg_231,._grip_1g7hg_231:before,._grip_1g7hg_231:after{box-sizing:border-box}._ghostLabel_1g7hg_241,._ghostLabel_1g7hg_241:before,._ghostLabel_1g7hg_241:after{box-sizing:border-box}._finding_1g7hg_254,._finding_1g7hg_254:before,._finding_1g7hg_254:after{box-sizing:border-box}._refusal_1g7hg_262,._refusal_1g7hg_262:before,._refusal_1g7hg_262:after{box-sizing:border-box}._tooltip_1g7hg_266,._tooltip_1g7hg_266:before,._tooltip_1g7hg_266:after{box-sizing:border-box}._tooltipHead_1g7hg_285,._tooltipHead_1g7hg_285:before,._tooltipHead_1g7hg_285:after{box-sizing:border-box}._tooltipTimes_1g7hg_290,._tooltipTimes_1g7hg_290:before,._tooltipTimes_1g7hg_290:after{box-sizing:border-box}._now_1g7hg_299,._now_1g7hg_299:before,._now_1g7hg_299:after{box-sizing:border-box}._barLabel_1g7hg_313,._barLabel_1g7hg_313:before,._barLabel_1g7hg_313:after{box-sizing:border-box}._barLabelText_1g7hg_326,._barLabelText_1g7hg_326:before,._barLabelText_1g7hg_326:after{box-sizing:border-box}._root_1g7hg_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_1g7hg_19{background:var(--u-color-surface)}._dayBand_1g7hg_23,._tickBand_1g7hg_24{position:relative;overflow:hidden;color:var(--u-color-text-muted);font-size:var(--u-text-xs)}._dayBand_1g7hg_23{border-bottom:1px solid var(--u-hairline-strong)}._tickBand_1g7hg_24{border-top:1px solid var(--u-hairline-strong)}._day_1g7hg_23{position:absolute;top:0;bottom:0;border-left:1px solid var(--u-hairline-strong);overflow:hidden}._dayLabel_1g7hg_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_1g7hg_24{position:absolute;top:0;bottom:0;width:1px;background:var(--u-hairline)}._tickLabel_1g7hg_71{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);white-space:nowrap}._headers_1g7hg_79{position:relative;overflow:hidden;border-right:1px solid var(--u-hairline-strong)}._header_1g7hg_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_1g7hg_97{min-width:0;overflow:hidden;text-overflow:ellipsis}._header_1g7hg_79[data-row=lane],._header_1g7hg_79[data-row=miniature]{container:lane-header / size}@container lane-header (height >= 2.5rem){._headerLabel_1g7hg_97:not(:has(*)){display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal;text-wrap:balance}}._header_1g7hg_79[data-row=groupHead],._header_1g7hg_79[data-row=miniature]{font-weight:var(--u-weight-medium)}._headerCount_1g7hg_133{flex:none;color:var(--u-color-text-muted);font-size:var(--u-text-xs);font-variant-numeric:tabular-nums}._chevron_1g7hg_142{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_1g7hg_142:hover{background:var(--u-color-surface-sunken);color:var(--u-color-text)}._chevron_1g7hg_142:active{background:var(--u-color-surface-pressed)}._chevron_1g7hg_142:focus-visible{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._chevron_1g7hg_142 svg{box-sizing:border-box}._chevron_1g7hg_142 svg{transition:transform var(--u-transition-path)}._chevron_1g7hg_142 svg[data-open]{box-sizing:border-box}._chevron_1g7hg_142 svg[data-open]{transform:rotate(90deg)}@media(prefers-reduced-motion:reduce){._chevron_1g7hg_142 svg{transition:none}}._header_1g7hg_79[data-refused]{color:var(--u-color-text-muted)}._plot_1g7hg_197{position:relative;overflow:hidden;touch-action:none}._plot_1g7hg_197:focus{outline:none}._focusRing_1g7hg_204{position:absolute;top:2px;right:2px;bottom:2px;left:2px;border-radius:var(--u-radius-md);corner-shape:squircle;pointer-events:none}._plot_1g7hg_197:focus-visible>._focusRing_1g7hg_204{outline:2px solid transparent;box-shadow:var(--u-focus-ring)}._layer_1g7hg_222{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;pointer-events:none}._grip_1g7hg_231{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_1g7hg_241{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_1g7hg_254{font-weight:var(--u-weight-semibold);color:var(--u-color-danger-subtle)}._refusal_1g7hg_262{font-weight:var(--u-weight-semibold)}._tooltip_1g7hg_266{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_1g7hg_285{color:var(--u-color-text);font-weight:var(--u-weight-semibold)}._tooltipTimes_1g7hg_290{color:var(--u-color-text)}._tooltip_1g7hg_266 ._finding_1g7hg_254{color:var(--u-color-danger-text)}._now_1g7hg_299{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_1g7hg_313{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_1g7hg_326{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._barLabel_1g7hg_313[data-on=dark]{color:var(--u-color-on-accent)}._barLabel_1g7hg_313[data-on=light]{color:var(--u-color-text)}@media(forced-colors:active){._grip_1g7hg_231{outline:2px solid CanvasText;outline-offset:-2px}._ghostLabel_1g7hg_241{outline:1px solid CanvasText}}}