@ex-grid/core 0.2.0-beta.3 → 0.2.0-rc.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["ex-grid.css"],"sourcesContent":["/* Instance-scoped styling: every class is ex- prefixed and every variable lives on the\n instance root, never :root (ADR-0018). The inline --ex-row-height set from the C#\n RowHeight parameter wins over any stylesheet value (ADR-0013). */\n/* The font size is a Geometry Token from the resolved Grid Metrics (ADR-0028): the\n digit width is stated against it, and inheriting the host's would silently break\n the >= any-glyph contract (ADR-0016). A theme changing the font supplies its own\n CellMetrics. */\n/* Dragging across cells is a selection gesture, not a text selection: without this the\n browser paints its own highlight over the top of the grid's (ADR-0008). Copying goes\n through the clipboard path, not through a native text selection (ADR-0005). */\n/* The family carries a default so the metric defaults are true of each other\n (ADR-0016): the character-class widths were measured against system-ui at this\n size. --ex-font-family is metrics-bearing — whoever sets it owes new CellMetrics\n (ADR-0027). */\n/* position: relative carries no offsets — it exists so the popovers can anchor to the\n instance root, outside the scroll container (ADR-0017/0018). The ground defaults to\n system colours, so the bare grid follows the host's colour scheme and forced-colors\n settings (ADR-0027/0029). */\n/* The one rule outside an instance (ADR-0018's exception of 2026-10-27). A bundler that\n lowers light-dark() for older browsers (Vite's default target, through lightningcss)\n writes var(--lightningcss-light, A) var(--lightningcss-dark, B), and defines the two\n only in rules it lowered that declare color-scheme. On a page whose bundled CSS\n declares none, both stay undefined and every light-dark() colour here (the reference\n colours, the Formula Bar's ground) is silently lost: a text falls back to the inherited\n colour, a ground to none. This says light, as the\n browser does when nothing is declared; it holds no colour and no theme, and :where()\n gives it no specificity, so any declaration of the page's wins. The core declares no\n color-scheme of its own (UX-8). */\n:where(html) { --lightningcss-light: initial; --lightningcss-dark: ; }\n.ex-grid {\n position: relative;\n font-family: var(--ex-font-family, system-ui, sans-serif);\n font-size: var(--ex-font-size, 14px);\n font-weight: var(--ex-font-weight, 400);\n font-variant-numeric: tabular-nums;\n background: var(--ex-background, Canvas);\n color: var(--ex-color, CanvasText);\n user-select: none;\n}\n/* The root is the tab stop and where keys are captured (ADR-0018), so it needs to say\n when it holds the keyboard. :focus-visible rather than :focus — a click already shows\n itself by moving the selection, and a permanent ring around a clicked grid is noise.\n Distinct from the selection's own Focus outline: this one says \"keys come here\", that\n one says \"and they start from this cell\".\n On a grid that edits, the keyboard is held by its Keyboard Field inside the root (ADR-0080),\n and a text field matches :focus-visible on every focus, a click's too, so it cannot say how the\n keyboard arrived. The script marks the root (data-ex-focus-visible) while its field holds the\n keyboard that did not come from a press on the grid, and the same ring is drawn from the mark.\n An attribute, not a class: the root's class is the core's render, rewritten whole whenever it\n changes (an edit ending, rows loading), which would take a class the script added with it. */\n.ex-grid:focus { outline: none; }\n.ex-grid:focus-visible,\n.ex-grid[data-ex-focus-visible] { outline: var(--ex-grid-focus-outline, 2px solid Highlight); outline-offset: 1px; }\n/* One scroll container for both axes. The header and the Pinned Columns are held in\n place inside it with `position: sticky`, which is why there can only be one: a nested\n container with a non-visible overflow on one axis computes `auto` on the other (CSS\n Overflow 3), becomes the scrollport itself, and the sticky offsets then measure\n against the wrong box. Width and height both come from C#, where the geometry's truth\n lives (ADR-0013). */\n.ex-scroller { overflow: auto; position: relative; box-sizing: border-box; }\n/* Total columns wide by header + total rows tall — the scrollbars are as long as the\n whole result on both axes, whatever fraction of it the Window holds (ADR-0013). */\n.ex-spacer { position: relative; min-width: 100%; }\n/* The header occupies the content's first row height and covers the Viewport's first\n row height; the C# arithmetic assumes exactly that, so the height is stated here and\n not left to the line box. Sticky elements are transparent by default and rows would\n scroll through it, hence the explicit background — a theme overrides the variable on\n the instance root rather than the class. */\n.ex-header {\n display: flex;\n position: sticky;\n top: 0;\n z-index: 4;\n height: var(--ex-header-height);\n line-height: var(--ex-header-height);\n background: var(--ex-header-background, Canvas);\n color: var(--ex-header-color, inherit);\n font-weight: var(--ex-header-font-weight, 600);\n /* The band's own rule, painted as a gradient on its bottom pixel — never a\n border, which would add to the box (ADR-0028/0029). */\n background-image: linear-gradient(to top, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)) 0 var(--ex-rule-width, 1px), transparent var(--ex-rule-width, 1px));\n}\n/* The rows' layer. Its transform (inline, ADR-0053) makes it a stacking context, which the\n selection layers inside it rely on (ADR-0008). It is not composited on its own: as a layer\n (will-change: transform) it was rasterised at the fraction of a device pixel where the page\n happened to put the grid, and every line a cell draws in device pixels blended across two (a\n Sheet's dotted Border read 2, 1, 3, 1 where Excel's is 2, 2, 2, 2; CI, Linux, 150%, ticket 49).\n Painted with its parent, it is snapped to the device pixels as any box is. Scrolling measured\n the same either way: frame intervals on /wide and /sheet, slow and flung, at 100% and 150%,\n headless, within 0.2 ms of each other at the median. */\n.ex-viewport { position: absolute; top: var(--ex-header-height); left: 0; right: 0; }\n/* pointer-events is inherited, so this one declaration makes every cell, spacer and\n Placeholder bar transparent to the mouse and leaves .ex-viewport as the target of every\n event in the body. The grid then reads the cell from the event's own offsets and its\n own geometry, instead of a handler on each of a couple of hundred cells (ADR-0004) or a\n layout read through JavaScript (ADR-0021). A Template or Action cell turns it back on\n for itself and stops the event there (ADR-0020). */\n.ex-row { display: flex; height: var(--ex-row-height); line-height: var(--ex-row-height); pointer-events: none; }\n/* The row rule, transparent by default: a Theme turns it on by setting the token —\n painted, never a border, so the row's box never grows (ADR-0028/0029). The Row Kind\n blocks below override it on group and total rows, whose grounds carry their own. Its\n width is --ex-rule-width in whole device pixels (--ex-rule-dp, below), here and wherever\n else the row's rule is painted. */\n.ex-row {\n background-image: linear-gradient(to top, var(--ex-row-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent var(--ex-rule-dp, 1px));\n}\n/* The same rule on a Pinned Column's cell (ticket 92). Its opaque ground hides the rule its row\n paints beneath it, so the cell paints the rule itself — transparent until a theme turns it on,\n as the row's is, so a grid without one paints as before. It is named in --ex-row-rule, and each\n ground that paints over the cell keeps it where the scrollable cells show it: above a Row\n Stripe, which the row paints beneath its rule, and beneath a Missing state's tint and a cell's\n lines (.ex-lined), which a scrollable cell paints over its row's. A Fill covers it, as a Fill\n covers its gridlines (the generated rule names none), and a group or total row names none, as\n its row paints none. One class's specificity, so each of those wins whatever its order. */\n.ex-pinned:where(.ex-cell) {\n --ex-row-rule: linear-gradient(to top, var(--ex-row-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent var(--ex-rule-dp, 1px));\n background-image: var(--ex-row-rule);\n}\n/* Row Stripes (ADR-0038): the class comes from the row's absolute position, so the pattern\n stays with its row however the Viewport scrolls — :nth-child() would count painted\n siblings and crawl. Painted on the row, under its rule, and on the Pinned Columns' cells,\n whose opaque ground would otherwise stop the band at the pinned block. Not on the\n scrollable cells: they are transparent over the row already, and a second layer there\n would make them darker than the pinned ones. Declared before Row Kind and Cell State, so\n that at equal specificity the grounds that carry meaning paint over the one that does not.\n A cell's tint — this one, Row Kind's and a Missing state's — is named in --ex-tint and\n painted from it, so that a cell carrying lines can paint the same tint beneath them\n (.ex-lined, ADR-0050 item 15); the cascade that picks the winning tint is unchanged. */\n.ex-row-stripe {\n background-image:\n linear-gradient(to top, var(--ex-row-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent var(--ex-rule-dp, 1px)),\n linear-gradient(var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)), var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)));\n}\n.ex-row-stripe .ex-pinned {\n --ex-tint: linear-gradient(var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)), var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)));\n background-image: var(--ex-row-rule, none), var(--ex-tint);\n}\n/* Row Kind (ADR-0024): the role of a row, painted without touching its geometry. Height\n stays exactly the detail row's — the virtualisation arithmetic, the selection overlay\n and the editor position are all one row height (ADR-0013), and a group row that were\n taller would drift all three out of alignment. No indentation either: Row Kind is the\n role, not the depth, and the grid is told neither how deep a group sits nor what it\n contains (ADR-0001). Weight and ground only. */\n.ex-row-group { font-weight: var(--ex-row-group-weight, 600); }\n.ex-row-total { font-weight: var(--ex-row-total-weight, 600); }\n/* Painted on its cells, as a background IMAGE layer, and on the row only where no cell\n is. A Pinned Column carries its own opaque background-color (it has to: the columns\n underneath pass beneath it), and so does a cell with a Fill, so a tint on the row alone\n stops at the pinned block and the role of the row is visible everywhere except the\n column its name is in. An image layer sits above that colour on the cell itself. A\n scrollable cell without a Fill is transparent, so a tint on the row as well would lie\n beneath it, and the cell would be two tints deep where its pinned neighbour is one\n (ticket 85): the row paints none beneath its cells. Its ::after, after the last of them,\n grows into the space beyond the last column and paints it there, and the gap standing in\n for the columns virtualised away paints it too, so no part of the row goes untinted while\n a sideways scroll waits for its cells. A Placeholder paints no scrollable cell, only its\n pinned ones and its bar, which is its ::after, so it keeps the tint on the row. Every\n part of the row is then one tint deep over its own ground, which is what the token says.\n The separating rule is likewise a 1px gradient, not a border: .ex-row's height is\n content-box, so a border would make every total row one pixel taller than the\n arithmetic says — the drift ADR-0013 warns about, and invisible on screen. */\n.ex-row-group, .ex-row-group .ex-cell {\n --ex-tint: linear-gradient(var(--ex-row-group-background, rgba(128, 128, 128, 0.08)), var(--ex-row-group-background, rgba(128, 128, 128, 0.08)));\n --ex-row-rule: none;\n}\n.ex-row-total, .ex-row-total .ex-cell {\n --ex-tint: linear-gradient(var(--ex-row-total-rule-color, rgba(128, 128, 128, 0.45)) 0 1px, transparent 1px);\n --ex-row-rule: none;\n}\n.ex-row-group, .ex-row-total { background-image: none; }\n.ex-row-group .ex-cell, .ex-row-group .ex-gap, .ex-row-group.ex-placeholder,\n.ex-row-total .ex-cell, .ex-row-total .ex-gap, .ex-row-total.ex-placeholder { background-image: var(--ex-tint); }\n.ex-row-group:not(.ex-placeholder)::after, .ex-row-total:not(.ex-placeholder)::after {\n content: \"\";\n flex: 1 1 auto;\n background-image: var(--ex-tint);\n}\n/* Widths come from the C#-resolved per-column widths as inline styles (ADR-0016);\n the padding is a Geometry Token from the same Grid Metrics the width estimates read,\n so the pairing is structural rather than a comment (ADR-0028). The ellipsis only\n ever shows on Text/Boolean: a number that does not fit is painted as #### by the\n core, never clipped. */\n.ex-cell, .ex-header-cell { flex: 0 0 auto; box-sizing: border-box; padding: 0 var(--ex-cell-padding-x, 8px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n/* A #### run (ADR-0016, 2026-10-02) is longer than its cell, and may break between any two #: the\n cell is one line tall, so the line it shows is exactly the # that fit in the face and weight it is\n painted in, and the rest fall to a line the cell hides. No # is cut and no ellipsis is drawn, and\n nothing is measured. A shown number keeps the cell's nowrap, so it never wraps out of sight. */\n.ex-hashes { white-space: normal; word-break: break-all; }\n/* The header is the delegated click target the way .ex-viewport is for the rows: its\n cells and gap spacer are transparent to the mouse, so the sort click's offsets are\n measured from the header's own left edge and the column is read from the geometry\n (ADR-0012). position: relative carries no offsets — it exists so the resize grip\n can anchor to the cell's own right edge. */\n.ex-header-cell, .ex-header .ex-gap { pointer-events: none; }\n.ex-header-cell { position: relative; }\n/* The grip in the header cell's right-hand edge (ADR-0016): the one part of a header\n cell that takes its own pointer, because it starts a different gesture. Its width is a\n hit target, a Geometry Token from Grid Metrics (ADR-0027/0028; UX-1). */\n.ex-resize-grip { position: absolute; top: 0; right: 0; width: var(--ex-resize-grip-width); height: 100%; cursor: col-resize; pointer-events: auto; }\n/* The guide a resize drags (ADR-0016) and the reorder drop indicator (ADR-0011):\n painted, never laid out — their colours are Visual Tokens (ADR-0029). Their width is a\n Geometry Token, drawn as a rule is (--ex-rule-dp, ADR-0090): rounded down to the Device\n Pixel and never under one, so whole Device Pixels at every scale and zoom. C# puts their\n left edge on a Device Pixel (UX-1). */\n.ex-resize-guide, .ex-drop-indicator { position: absolute; top: 0; bottom: 0; width: max(var(--ex-dp), round(down, var(--ex-column-guide-width), var(--ex-dp))); z-index: 7; pointer-events: none; }\n.ex-resize-guide { background: var(--ex-resize-guide-color, rgba(60, 120, 216, 0.7)); }\n.ex-drop-indicator { background: var(--ex-drop-indicator-color, rgba(60, 120, 216, 0.9)); }\n/* The sort indicator is painted from the same attribute the accessibility tree reads\n (ADR-0033), so the two cannot disagree. A glyph, not a class: the stable class list\n is closed (ADR-0029) and this earns no entry in it. */\n/* The sort mark stands in a box C# sizes, as the menu button does: the header estimate\n charges exactly this width, so a sorted label is never cut by its own mark (ADR-0016). */\n.ex-header-cell[aria-sort=\"ascending\"]::after,\n.ex-header-cell[aria-sort=\"descending\"]::after { display: inline-block; width: var(--ex-sort-mark-width, 20px); text-align: right; opacity: 0.6; }\n.ex-header-cell[aria-sort=\"ascending\"]::after { content: \"▲\"; }\n.ex-header-cell[aria-sort=\"descending\"]::after { content: \"▼\"; }\n.ex-cell-numeric { text-align: right; }\n/* A cell that shows a number may use one Device Pixel of its right padding (ADR-0090, decided\n 2026-10-11; VZ-19). Its column's edges lie on Device Pixels, so it can be painted up to one\n narrower than declared, while the #### decision, General's fit and Auto width read the declared\n width, and the estimate can leave less than that pixel to spare: 0.35px over a bold 12% in DejaVu\n Sans, Linux's system-ui. With the pixel, the content box is never narrower than the declared\n content, however the edges round, at every scale and zoom. Both lengths are Geometry Tokens C#\n writes inline: the padding from the Grid Metrics, and the Device Pixel once the browser has told\n it (its resolution steps below stand until then), so the stylesheet adds no pixel of its own\n (ADR-0027/0028). A number aligned right sits that pixel further right; aligned left it gains the\n room at its end. Text is not given it: an ellipsis is its decided overflow, and the pixel would\n only move where. --ex-number-dp is what a cell gives: a Device Pixel on a number's, nothing on any\n other, set on every cell so that a grid inside a cell inherits none. A right border's rule gives\n its width back out of what is left (AppearanceStyles). */\n.ex-cell { --ex-number-dp: 0px; }\n.ex-cell-numeric { --ex-number-dp: var(--ex-dp); padding-right: calc(var(--ex-cell-padding-x, 8px) - var(--ex-number-dp)); }\n/* A Header Group's rectangle (ADR-0032): a caption over its members, centred, on the\n header's own ground. Absolutely positioned from the geometry, so it stands whether\n or not its leaves are in the DOM; cost is per rectangle (ADR-0008's economy). Its\n label gets the Text treatment — ellipsis, never #### — and it is transparent to the\n mouse like every other header cell, so a click on it sorts nothing. */\n.ex-header-group {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n padding: 0 var(--ex-cell-padding-x, 8px);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: center;\n background: var(--ex-header-background, Canvas);\n pointer-events: none;\n}\n/* The pinned rectangles' zero-size sticky anchor — the pinned selection layer's trick,\n one tier up: a group is entirely pinned or entirely scrollable (ADR-0032). */\n.ex-header-groups-pinned { position: sticky; left: 0; width: 0; height: 0; z-index: 6; }\n.ex-header-groups-pinned .ex-header-group { pointer-events: none; }\n/* A Header Group's toggle (ADR-0400 section 7): a button of the grid's own at the rectangle's\n left, as tall as the tier, its box the --ex-header-group-toggle-width Geometry Token the core\n emits, so the label's room is the rectangle less it. Its picture is a token: a CSS image\n painted as a mask in --ex-header-group-toggle-color, the collapsed icon while aria-expanded\n is false and the expanded one while it is true, so a Wrapper draws its design system's\n chevron by setting two tokens and renders nothing. It takes its own press: the rectangle\n around it stays transparent to the mouse, where a press is the group's drag. */\n.ex-header-group:has(> .ex-header-group-toggle) { padding-left: var(--ex-header-group-toggle-width, 20px); }\n.ex-header-group-toggle {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: var(--ex-header-group-toggle-width, 20px);\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n pointer-events: auto;\n}\n.ex-header-group-toggle::before {\n content: \"\";\n position: absolute;\n inset: 0;\n margin: auto;\n width: 1em;\n height: 1em;\n background-color: var(--ex-header-group-toggle-color, currentColor);\n -webkit-mask: var(--ex-header-group-collapsed-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3.5 10.5 8 6 12.5' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\")) center / contain no-repeat;\n mask: var(--ex-header-group-collapsed-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3.5 10.5 8 6 12.5' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\")) center / contain no-repeat;\n}\n.ex-header-group-toggle[aria-expanded=\"true\"]::before {\n -webkit-mask-image: var(--ex-header-group-expanded-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 6 8 10.5 12.5 6' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\"));\n mask-image: var(--ex-header-group-expanded-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 6 8 10.5 12.5 6' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\"));\n}\n/* The Hidden Mark (ADR-0400 section 6): the corner a modified cell wears, in the group's top\n right corner, painted with the token of the Cell State the hidden columns hold, so a reader\n who knows what a modified cell looks like knows what the mark says. It takes the pointer\n for itself alone, so its reason shows as its tooltip. */\n.ex-hidden-mark {\n position: absolute;\n top: 0;\n right: 0;\n width: 6px;\n height: 6px;\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n pointer-events: auto;\n}\n.ex-hidden-mark-modified { background: var(--ex-state-modified-mark, rgba(106, 68, 166, 0.9)); }\n.ex-hidden-mark-error { background: var(--ex-state-error-color, #b3261e); }\n.ex-hidden-mark-stale { background: var(--ex-state-stale-color, #8a6d1f); }\n/* A missing cell's token is a faint tint, which on a 6px corner of the header cannot be seen: the\n mark takes the token's colour at full strength, so a closed group never looks like one hiding\n nothing (principle 1). */\n.ex-hidden-mark-missing { background: rgb(from var(--ex-state-missing-background, rgba(128, 128, 128, 0.10)) r g b); }\n/* The seam an Action or Template cell crosses (ADR-0020). Everything under .ex-row is\n pointer-events: none so the Viewport can hit-test by arithmetic; a control that wants\n its own click turns them back on for itself alone. The inert parts of the cell stay\n transparent, so clicking beside a button still selects the cell as any other does —\n and the cell element carries the stopPropagation, because an event bubbling out of a\n button would otherwise reach the Viewport handler carrying offsets measured from the\n button. `ex-interactive` is the class a Consumer puts on its own control inside a\n Template Column; the grid owns the buttons in an Action Column. */\n.ex-action, .ex-interactive, .ex-mark { pointer-events: auto; }\n/* The Mark Column's checkbox (ADR-0043), on a Detail row and in the header. Its state is\n aria-checked — the one attribute assistive technology reads — so the stylesheet reads it\n too rather than a second, class-borne copy that could disagree. Sized in em, from the\n font-size Geometry Token the core already writes, so it scales with the Density and adds\n no length of its own; the tick is painted, not laid out. */\n.ex-mark {\n appearance: none;\n box-sizing: border-box;\n width: 1em;\n height: 1em;\n padding: 0;\n margin: 0;\n font: inherit;\n line-height: 1;\n border: var(--ex-action-border-width, 1px) solid var(--ex-mark-border-color, currentColor);\n background: var(--ex-mark-background, Canvas);\n color: var(--ex-mark-checked-color, HighlightText);\n cursor: pointer;\n}\n.ex-mark[aria-checked=\"true\"], .ex-mark[aria-checked=\"mixed\"] { background: var(--ex-mark-checked-background, Highlight); }\n.ex-mark[aria-checked=\"true\"]::after { content: \"\\2713\"; }\n.ex-mark[aria-checked=\"mixed\"]::after { content: \"\\2013\"; }\n.ex-header .ex-mark { pointer-events: auto; }\n/* The button's own box comes from the action Geometry Tokens, which are what an Auto\n Action Column's width is measured from (ADR-0016/0028) — the pairing is structural,\n so the column cannot stop fitting its own buttons. */\n.ex-action { font: inherit; line-height: normal; margin: 0 var(--ex-action-gap, 4px) 0 0; padding: 0 var(--ex-action-padding-x, 6px); border-width: var(--ex-action-border-width, 1px); cursor: pointer; }\n/* The chosen action of an Interactive cell (ADR-0029/0037). The keyboard never leaves the\n root, so :focus-visible has nothing to match; the row paints this one button instead,\n with the Focus outline's token — it is where the keyboard is. Drawn inside the button's\n own box, because the cell clips anything that reaches past its edge: its width and inward\n offset are the Focus outline's, set with it in the selection's rules below. */\n.ex-action-chosen { outline-style: solid; outline-color: var(--ex-focus-outline, CanvasText); }\n/* Borders (ADR-0050 item 15; ADR-0071, \"What the measurement chose\"): each cell draws its own share\n of Excel's centred line — the upper (left) cell the gridline's pixel and what lies above (left\n of) it, the lower (right) cell the pixel a thick or double line reaches past it — so nothing is\n painted outside a row and no row changes height. A solid line on the gridline is the cell's own\n bottom or right border (its generated class gives a right border's width back out of the\n padding); everything else is a background layer over the Fill and under the text. The grid's\n generated stylesheet names each layer in custom properties (an image, its size, where it stands;\n per side t, r, b, l), one class per side, line style and colour, and this one rule reads them, so\n the sheet grows with the lines and never with their combinations. Beneath the lines, the cell's\n tint (--ex-tint: a Row Stripe's, a Row Kind's or a Missing state's, as the cascade picked it),\n which the lines never take away (ADR-0038, ADR-0024, ADR-0006). It covers the whole cell, as on\n a cell without lines, so it also lies over a neighbour's Fill covering the gridline this cell\n holds (--ex-cover-r, --ex-cover-b: the right or lower cell's, over this cell's own Fill too, and\n beneath any line on that gridline) — in a group or total row that neighbour wears the same\n tint, and a total row's rule runs on across the gridline — and beneath those the column rule,\n an inset shadow everywhere else, which would lie over the lines. Last, the row's rule, where a\n cell whose own ground hides the row's names it in --ex-row-rule (a Pinned Column's cell does,\n above): beneath the covers too, as a Fill covers a gridline. All of it lies over the cell's\n own Fill, its background colour. Declared after Row Kind, whose rules paint the tint alone, and\n before the Cell States, so Missing's rule leaves a lined cell's layers to this one. */\n.ex-cell.ex-lined {\n background-image: var(--ex-line-t, none), var(--ex-line-r, none), var(--ex-line-b, none), var(--ex-line-l, none),\n var(--ex-tint, none), var(--ex-cover-r, none), var(--ex-cover-b, none),\n linear-gradient(to left, var(--ex-column-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent 0),\n var(--ex-row-rule, none);\n background-size: var(--ex-line-t-size, 0 0), var(--ex-line-r-size, 0 0), var(--ex-line-b-size, 0 0), var(--ex-line-l-size, 0 0),\n 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%;\n background-position: var(--ex-line-t-at, 0 0), var(--ex-line-r-at, 0 0), var(--ex-line-b-at, 0 0), var(--ex-line-l-at, 0 0),\n 0 0, 0 0, 0 0, 0 0, 0 0;\n background-repeat: no-repeat;\n background-origin: border-box;\n box-shadow: none;\n}\n/* One device pixel: a line's lengths are the screen's, as Excel's are — at 150% a thin line is\n still one pixel and thick three (the eleventh Windows run, case 9), and a dash pattern is the same\n number of pixels at every scale, its long dash 9 (the fourteenth, case 18). The resolution follows\n browser zoom and display scale alike; a resolution between two steps draws a little under a\n pixel, which the browser blends. Paint only: nothing in C# computes with it.\n\n --ex-rule-dp is a gridline — a row's rule and a column's — in whole device pixels: --ex-rule-width\n rounded down to the device pixel, and never thinner than the token where the token is under one.\n So 1px is one device pixel at 150%, as Excel's gridline is (ADR-0071, Part C of the eleventh run).\n Left at 1.5 device pixels, the band was one row under Chrome's GPU rasteriser and two under its\n software one — CI's, headed under xvfb on Linux — and so was the Fill over it (ticket 99). At a\n whole scale it is the token, as before. A column's rule joined it when column edges were put on\n device pixels (ADR-0090): on an edge between two, no width was exact.\n\n These steps are the fallback. Once the browser has told the grid its device pixel (ADR-0090,\n ADR-0021's eighth entry), C# writes --ex-dp inline on the root, exact at any resolution. */\n.ex-grid {\n --ex-dp: 1px;\n --ex-rule-dp: max(min(var(--ex-rule-width, 1px), var(--ex-dp)), round(down, var(--ex-rule-width, 1px), var(--ex-dp)));\n}\n@media (min-resolution: 1.1dppx) { .ex-grid { --ex-dp: calc(1px / 1.1); } }\n@media (min-resolution: 1.25dppx) { .ex-grid { --ex-dp: 0.8px; } }\n@media (min-resolution: 1.5dppx) { .ex-grid { --ex-dp: calc(1px / 1.5); } }\n@media (min-resolution: 1.75dppx) { .ex-grid { --ex-dp: calc(1px / 1.75); } }\n@media (min-resolution: 2dppx) { .ex-grid { --ex-dp: 0.5px; } }\n@media (min-resolution: 2.5dppx) { .ex-grid { --ex-dp: 0.4px; } }\n@media (min-resolution: 3dppx) { .ex-grid { --ex-dp: calc(1px / 3); } }\n/* Tone (ADR-0006/0029): the meaning a column's rule attached to the value — a gain, a\n loss — as the theme's tokens paint it. No default colour: the bare grid paints a\n toned cell as an ordinary one until a token says otherwise, which is Excel's default\n number format too. Declared before the Cell State block, at the same specificity, so a\n state the Consumer named outranks a tone its rule derived, whatever colours a theme\n gives the two. */\n.ex-cell.ex-tone-positive { color: var(--ex-tone-positive-color, inherit); }\n.ex-cell.ex-tone-negative { color: var(--ex-tone-negative-color, inherit); }\n/* Cell State (ADR-0006): the grid says which of the five states a cell is in, the theme\n says what that looks like — hence a variable per state with a default that only has to\n be legible. Every one of them decorates; none replaces the text. Missing in particular\n paints no substitute glyph: what is missing is the metadata's claim, not the value, and\n a Blank cell that really is Blank must stay distinguishable from one nobody could\n answer for (ADR-0023). The accompanying data — an as-of stamp, a failure message —\n stays with the Consumer and is not on the cell.\n\n Written as `.ex-cell.ex-state-x`, and declared after the Row Kind block and the Tone\n block, so that a state the Consumer named outranks the role of the row it happens to sit\n in, and the tone of its value. A state is something the grid was explicitly told; a role\n is something about its neighbours, a tone something a rule derived, and it is the state\n that must never be the one that disappears. */\n.ex-cell.ex-state-stale { color: var(--ex-state-stale-color, #8a6d1f); font-style: var(--ex-state-stale-style, italic); }\n/* Missing's tint is a cell's tint like a stripe's or a role's: named here, after them, so it\n wins, and painted beneath the lines by .ex-lined, which is declared before this block and\n would otherwise lose every layer it paints to this one. Over the row's rule a Pinned Column's\n cell paints (above), as a scrollable cell's tint lies over the rule its row paints. */\n.ex-cell.ex-state-missing {\n --ex-tint: linear-gradient(var(--ex-state-missing-background, rgba(128, 128, 128, 0.10)), var(--ex-state-missing-background, rgba(128, 128, 128, 0.10)));\n}\n.ex-cell.ex-state-missing:not(.ex-lined) { background-image: var(--ex-tint), var(--ex-row-rule, none); }\n.ex-cell.ex-state-error { color: var(--ex-state-error-color, #b3261e); text-decoration: var(--ex-state-error-decoration, underline wavy); text-decoration-skip-ink: none; }\n/* A corner mark rather than a fill: the value has been overridden, and the number itself\n is what the reader is here for. A triangle in the top right corner, where Excel marks a\n cell that carries a note: the cell's ::after, out of flow, so it costs no element in the\n markup and takes no room from the text or the row's flow. --ex-state-modified-mark is its\n colour (ADR-0029). The cell is made its containing block at no specificity, so a Pinned\n Column's cell stays sticky; nothing in the overlay is beneath it, since every layer there\n carries a z-index. The cell keeps its column rule.\n\n Until 2026-10-07 the mark was an inset box-shadow, which cannot paint a corner: it drew a\n band along the whole top and the whole right edge, and a Wrapper that set the token to a\n colour, as ExGrid.MudBlazor's did, turned it into no mark at all. */\n:where(.ex-cell.ex-state-modified) { position: relative; }\n.ex-cell.ex-state-modified::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n width: 6px;\n height: 6px;\n background: var(--ex-state-modified-mark, rgba(106, 68, 166, 0.9));\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n pointer-events: none;\n}\n/* The Change Highlight (ADR-0068): the Consumer said the cell's shown value changed less than\n ChangeHighlightDuration ago. One colour, whichever way the value moved: by default a 40%\n tint of the system colour Mark over the cell's own ground (ADR-0029). Mark itself stays pure\n yellow on a dark page while the text turns light, which leaves the value unreadable\n (measured in Chromium, 2026-10-01); the tint reads at about 5:1 there and 20:1 on a light\n page. The class comes and goes in one step and nothing here transitions or animates: rows\n are recycled, and a fade would run from another row's colour to this one's (ADR-0027 P8).\n\n A tint, so a background IMAGE over the Pinned Column's opaque ground, as every tint is\n (ADR-0006): a translucent mark never makes a pinned cell see-through. It is laid over exactly\n the layers the cell paints without it, and takes none of them away. Over the row's rule that\n a Pinned Column's cell paints (--ex-row-rule), as the scrollable cells beside it lie over the\n rule their row paints beneath them. Over a stripe's or a role's tint (--ex-tint), so the mark\n wins the cell over a stripe and a role, and their grounds stay beneath it. Beneath a total\n row's rule, a line and not a ground, and beneath a Missing state's tint: a state must never be\n the thing that disappears (ADR-0006). Beneath a cell's lines (.ex-lined, ADR-0050 item 15),\n which lie above every ground, as above a Fill (DC-59). A Fill is the cell's colour, beneath\n every image, so the mark lies over it. Declared after the stripes, Row Kind and Cell State,\n and after .ex-lined, so at equal specificity each rule here wins the cell it names. The\n overlays paint above every cell, so no mark hides a selection, the Focus or a band. */\n.ex-cell.ex-changed {\n background-image: linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-row-rule, none);\n}\n.ex-row-stripe .ex-pinned.ex-changed {\n background-image: linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-row-rule, none), var(--ex-tint);\n}\n.ex-row-group .ex-cell.ex-changed {\n background-image: linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-tint);\n}\n.ex-row-total .ex-cell.ex-changed {\n background-image: var(--ex-tint), linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)));\n}\n.ex-cell.ex-state-missing.ex-changed:not(.ex-lined) {\n background-image: var(--ex-tint), linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-row-rule, none);\n}\n/* A marked cell with lines paints .ex-lined's layers with the mark among them: one more layer,\n so one more size and position, whole and at the origin as the grounds are. */\n.ex-cell.ex-lined.ex-changed {\n background-image: var(--ex-line-t, none), var(--ex-line-r, none), var(--ex-line-b, none), var(--ex-line-l, none),\n linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))),\n var(--ex-tint, none), var(--ex-cover-r, none), var(--ex-cover-b, none),\n linear-gradient(to left, var(--ex-column-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent 0),\n var(--ex-row-rule, none);\n background-size: var(--ex-line-t-size, 0 0), var(--ex-line-r-size, 0 0), var(--ex-line-b-size, 0 0), var(--ex-line-l-size, 0 0),\n 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%;\n background-position: var(--ex-line-t-at, 0 0), var(--ex-line-r-at, 0 0), var(--ex-line-b-at, 0 0), var(--ex-line-l-at, 0 0),\n 0 0, 0 0, 0 0, 0 0, 0 0, 0 0;\n}\n.ex-row-total .ex-cell.ex-lined.ex-changed, .ex-cell.ex-lined.ex-state-missing.ex-changed {\n background-image: var(--ex-line-t, none), var(--ex-line-r, none), var(--ex-line-b, none), var(--ex-line-l, none),\n var(--ex-tint, none),\n linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))),\n var(--ex-cover-r, none), var(--ex-cover-b, none),\n linear-gradient(to left, var(--ex-column-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent 0),\n var(--ex-row-rule, none);\n background-size: var(--ex-line-t-size, 0 0), var(--ex-line-r-size, 0 0), var(--ex-line-b-size, 0 0), var(--ex-line-l-size, 0 0),\n 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%;\n background-position: var(--ex-line-t-at, 0 0), var(--ex-line-r-at, 0 0), var(--ex-line-b-at, 0 0), var(--ex-line-l-at, 0 0),\n 0 0, 0 0, 0 0, 0 0, 0 0, 0 0;\n}\n/* The Match Mark (ADR-0332 §4): while the find panel holds a search, every painted cell that\n matches it, and the current match apart, the Focus a found step moved to. Two Visual Tokens\n (ADR-0027/0029), both tints of the orange a browser marks its current match with:\n --ex-match-mark-fill a light one, 25%, and --ex-match-mark-current-fill a strong one, 55%, so the\n current match reads apart from the rest. Neither is the Change Highlight's tint of Mark, so a\n match never reads as a changed value, nor the selection's blue.\n\n Painted by the cell's ::before, not as a ground: a cell's grounds are a stack of images that\n each combination of stripe, Row Kind, state, lines and Change Highlight restates (above), and a\n mark that joined them would have to be restated in every one. The cell isolates, so the mark at\n z-index -1 lies over all of them, the cell's own Fill included, and beneath the text, which keeps\n its colour; a Pinned Column's cell already makes its own stacking context, and stays sticky,\n since the position here has no specificity. Out of flow, so it costs no element and takes no\n room. The overlays paint above every cell, so no mark hides a selection, the Focus or a band. */\n:where(.ex-cell.ex-match-mark) { position: relative; isolation: isolate; }\n.ex-cell.ex-match-mark::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: -1;\n background: var(--ex-match-mark-fill, color-mix(in srgb, #ff9632 25%, transparent));\n pointer-events: none;\n}\n.ex-cell.ex-match-mark-current::before {\n background: var(--ex-match-mark-current-fill, color-mix(in srgb, #ff9632 55%, transparent));\n}\n/* A header Find stops on (ADR-0333 §1) wears the same mark, the current one apart: a column header\n or a Header Group label, painted by its ::before over its own ground and beneath its text, as a\n cell's is. Both are positioned already (relative, sticky when pinned, absolute for a group), and\n their boxes are the columns' own, so the mark's edges lie on the Device Pixels the cells' do\n (ADR-0090). The sort mark keeps ::after. */\n:where(.ex-header-cell.ex-match-mark, .ex-header-group.ex-match-mark) { isolation: isolate; }\n.ex-header-cell.ex-match-mark::before,\n.ex-header-group.ex-match-mark::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: -1;\n background: var(--ex-match-mark-fill, color-mix(in srgb, #ff9632 25%, transparent));\n pointer-events: none;\n}\n.ex-header-cell.ex-match-mark-current::before,\n.ex-header-group.ex-match-mark-current::before {\n background: var(--ex-match-mark-current-fill, color-mix(in srgb, #ff9632 55%, transparent));\n}\n/* What stands in for the columns left out to the left of the first painted one. It must\n not be allowed to shrink: a flex-shrunk spacer would slide every painted column left\n of where the arithmetic put it, and the header and the body would disagree. */\n.ex-gap { flex: 0 0 auto; }\n/* A Pinned Column stays against the Viewport's left edge while the rest pans under it\n (ADR-0004). `left` is the column's own offset, set inline from C#: sticky keeps an\n element in its normal flow position until the content scrolls past that offset. Opaque\n for the same reason the header is — the columns underneath pass beneath it. */\n/* background-COLOR, not the shorthand: Cell State and Row Kind paint their tints as\n background images on the same cell, and the shorthand would reset them. The colour is\n the ground underneath; the tints layer on top, and a cell's lines on top of them. */\n.ex-pinned { position: sticky; z-index: 2; background-color: var(--ex-pinned-background, Canvas); }\n.ex-header .ex-pinned { z-index: 5; background-color: var(--ex-header-background, Canvas); }\n/* The Row Headings and their corner (ADR-0050): first in each row's flow and in the\n header's, held at the Viewport's left edge over everything that scrolls or is pinned —\n a selection passing sideways goes under them, as it goes under a Pinned Column. Their\n width is geometry and arrives inline from the resolved metrics (ADR-0027/0028); nothing\n here sizes them. Paint only: the Viewport's and the header's delegated handlers read\n the press from the offsets. */\n.ex-row-heading, .ex-headings-corner {\n position: sticky;\n left: 0;\n flex: 0 0 auto;\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-align: center;\n pointer-events: none;\n background: var(--ex-heading-background, var(--ex-header-background, Canvas));\n color: var(--ex-heading-color, var(--ex-header-color, inherit));\n box-shadow: inset calc(0px - var(--ex-rule-dp, 1px)) 0 var(--ex-heading-rule-color, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)));\n}\n/* The header's rule runs under every header cell (UX-17). A pinned header cell and the\n Headings' corner stand on the band with an opaque ground of their own, which covers the\n band's bottom pixel, so each paints the same rule again on itself. */\n.ex-header .ex-pinned, .ex-headings-corner {\n background-image: linear-gradient(to top, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)) 0 var(--ex-rule-width, 1px), transparent var(--ex-rule-width, 1px));\n}\n/* The Formula Bar (ADR-0051): a band in the room the root leaves at its top. Its height,\n its width and the Name Box's width are geometry and arrive inline from the resolved\n metrics (ADR-0027/0028); what is here only lays the two fields side by side. */\n.ex-formula-bar {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n box-sizing: border-box;\n line-height: var(--ex-header-height);\n background: var(--ex-formula-bar-background, var(--ex-header-background, Canvas));\n color: var(--ex-formula-bar-color, inherit);\n background-image: linear-gradient(to top, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)) 0 var(--ex-rule-width, 1px), transparent var(--ex-rule-width, 1px));\n}\n.ex-name-box, .ex-formula-bar-text {\n box-sizing: border-box;\n height: 100%;\n margin: 0;\n font: inherit;\n line-height: inherit;\n color: inherit;\n background: transparent;\n border: none;\n outline: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ex-name-box {\n flex: 0 0 auto;\n box-shadow: inset calc(0px - var(--ex-rule-width, 1px)) 0 var(--ex-header-rule-color, rgba(128, 128, 128, 0.45));\n}\n.ex-formula-bar-text { flex: 1 1 auto; min-width: 0; }\n/* The text field's padding is the coloured text's beside it too (ADR-0057): one rule, so the\n two cannot drift. */\n.ex-name-box, .ex-formula-bar-text, .ex-reference-text.ex-reference-text-bar { padding: 0 var(--ex-cell-padding-x, 8px); }\n/* The bar's text field wears the Cell Editor's class — it is the editor's second surface,\n and the key listener knows an editor by it (ADR-0051/0018) — but it is laid out in the\n band, not floated over a cell. */\n.ex-formula-bar > .ex-editor {\n position: static;\n z-index: auto;\n outline: none;\n line-height: inherit;\n background: transparent;\n color: inherit;\n}\n/* Text that is not the Focus cell's own, such as the Anchor's Formula over a spilled cell\n (ADR-0125): dimmed, as Excel's is. After the rule above, and narrower, so its colour wins. */\n.ex-formula-bar > .ex-formula-bar-text.ex-formula-bar-borrowed { color: var(--ex-formula-bar-borrowed-color, GrayText); }\n.ex-formula-bar > .ex-editor:focus,\n.ex-formula-bar > .ex-editor:focus-within { outline: var(--ex-editor-outline, 2px solid Highlight); outline-offset: -2px; }\n.ex-name-box-form { display: contents; }\n.ex-row-heading { z-index: 4; }\n.ex-headings-corner { z-index: 7; }\n/* Selection is painted as overlay rectangles, never as a class on the selected cells\n (ADR-0008): a tint and a box per range in each layer it reaches (ADR-0206), so what it costs\n depends on how many rectangles there are and not on how many cells they cover — and no row\n parameter carries selection, which keeps \"the row changed\" meaning the data changed (ADR-0003).\n\n The layers sit inside .ex-viewport deliberately. Its transform makes it a stacking\n context, so the Pinned Columns' z-index counts only in there: a rectangle outside would\n paint over the pinned block rather than sliding beneath it. The price is that the\n coordinates are relative to the painted slice rather than to the content.\n Order in here: cells, selection (1), Pinned Columns (2), the pinned shade and then the pinned\n selection (both 3, in that order by tree order); the header (4, 5) is outside and covers the lot. */\n.ex-selection { position: absolute; top: 0; left: 0; z-index: 1; }\n/* The pinned part of a range travels with the Pinned Columns. Zero-sized and ahead of the rows\n in the flow — after the Keyboard Field, and after the pinned shade while that stands — so it\n displaces no row; `left` with no `top` sticks it to the Viewport's left edge and to nothing\n else. The pinned shade (ADR-0206) is the same kind of layer, placed\n immediately before it: the pinned bands and tints, the washes, in a layer of their own, so a\n stylesheet can blend that layer as one group with the pinned cells it lies over (ExSheet's Paper\n does; the core blends nothing). Everything drawn on top — boxes and outlines, the Focus, the\n Copied Range, the fill handle, the Reference Outlines — stays in the pinned selection layer. */\n.ex-selection-pinned, .ex-shade-pinned { position: sticky; left: 0; width: 0; height: 0; z-index: 3; }\n/* No layer may take a click — .ex-viewport underneath is where the mouse handlers read their\n offsets from. */\n.ex-selection, .ex-selection-pinned, .ex-shade-pinned { pointer-events: none; }\n/* A range is a tint and a box (ADR-0206). The tint is translucent, so the value reads through it:\n geometry is the only kind of effect an overlay can paint, and this is also what Excel looks like\n (ADR-0008). It is clipped by the hole the Focus makes in it: the selection's tint never covers\n the Focus cell, as Excel's never covers the active cell (ADR-0008, 2026-09-29; the Focus band and\n the hover band are other overlays and keep theirs). The hole is geometry and arrives inline on\n the tint, as the polygon it names, only on a tint that holds the Focus; declared here so an\n ancestor's value can never reach a tint that has none. The box, `ex-range`, draws the outline,\n unclipped by the hole, so an outline drawn inside it passes the Focus's cell without a gap. In\n each layer every tint comes before every box, so the outlines lie over the tints by tree order\n alone, and nothing isolates its own painting. */\n.ex-range-tint {\n position: absolute;\n --ex-range-hole: none;\n background: var(--ex-selection-fill, rgba(60, 120, 216, 0.18));\n clip-path: var(--ex-range-hole);\n}\n.ex-range { position: absolute; }\n/* The Focus band (ADR-0008): one more overlay rectangle, first in its layer so every\n range stays readable over it. Enabling it is a parameter; this is only its colour. */\n.ex-focus-row { position: absolute; background: var(--ex-focus-row-fill, rgba(128, 128, 128, 0.10)); }\n/* The hover band (ADR-0029): the row under the pointer, told to the grid only when it\n changes (ADR-0021's fifth entry) and painted as the Focus band is. Enabling it is a\n parameter; this is only its colour, and the default is a shade lighter than the\n Focus band so the two read apart when they coincide. */\n.ex-hover-row { position: absolute; background: var(--ex-row-hover-background, rgba(128, 128, 128, 0.06)); }\n/* The Focus outline's width, and every outline drawn in it: the pointing outline, the chosen\n action, and under forced colors the Focus's own and a range's. A range's is only drawn where its\n style is given. Each lies wholly inside its box: an outline straddling the edge lost its outer\n pixel beneath whatever is painted above the selection layer — a Pinned Column, the Headings, the\n header — and was thinner on that side than on the others (UX-18). Inside, nothing above the\n layer covers any of it, and a cell scrolled beneath the pinned block still goes beneath it. */\n.ex-focus, .ex-range, .ex-point, .ex-action-chosen { outline-width: 2px; outline-offset: -2px; }\n/* CanvasText, not Highlight: measured in the browser suite, Chrome's Highlight against\n Canvas is ~2:1 and UX-9 requires 3:1 — the ink colour contrasts by construction in\n both schemes, which is also roughly what Excel's own dark focus border does. */\n.ex-focus { position: absolute; outline-color: var(--ex-focus-outline, CanvasText); }\n/* The Selection's outline — the Focus's, and the one a Selection of a single range carries\n round the whole range — lies where Excel's does (ADR-0008, 2026-10-01; the eleventh Windows\n run, case 11): on the gridline and one pixel outside the range, so it covers a Border on every\n outer edge. That is the outline's width outside the top and the left edges, and on the bottom\n and the right the gridline's pixel, which is the range's own last, and the outline's width less\n it past the edge. The Heading Mark replaces a side covered by the header or Row Headings\n (ADR-0008, D2, 2026-10-14). At an unheaded grid edge or a pinned block's boundary there is no\n replacing mark, so that side stays inside: the core marks it with --ex-outline-in-t or\n --ex-outline-in-l from the geometry it already holds. The\n outline is a box of its own, so a side can move without moving the range's tint, and its width\n is --ex-outline-width, two Device Pixels by default so every side matches the Heading Mark\n at every scale (ADR-0008 D2 / ADR-0090). Paint only: nothing in C# reads the width. */\n.ex-focus::after, .ex-range-single::after {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: calc((var(--ex-outline-in-t, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n left: calc((var(--ex-outline-in-l, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n right: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n bottom: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n border: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) solid var(--ex-focus-outline, CanvasText);\n}\n/* The single range's outline has the token ADR-0029 reserved for it, the border Excel draws round\n the range's perimeter. It defaults to the Focus outline's colour, so a Theme that sets only that\n one colours both. */\n.ex-range-single::after { border-color: var(--ex-selection-outline, var(--ex-focus-outline, CanvasText)); }\n/* The Focus inside a single range has no outline of its own; the range's tint leaves its\n cell out. Its element stays, because under forced colors no tint is painted to mark it, and the\n forced-colors block below outlines it again. */\n.ex-range-single ~ .ex-focus::after { content: none; }\n/* The Focus among several ranges (ADR-0008, 2026-10-12). (2026-10-12, decided with the user: no\n range carries an outline there, and the Focus takes a thin border of one Device Pixel in a token\n of its own, --ex-focus-among-ranges-outline; where nothing names that token it is the Focus\n outline's colour.) So a Theme or a Wrapper that colours the Focus colours this border too, with no\n mapping of its own. The core marks that Focus with a class of its own, decided from the Selection.\n The first decision followed the seventeenth Windows run's h2, which read neither of Excel's ranges\n as carrying a single range's outline (observed: run 17, h2); the line of one device pixel the\n readings of 2026-10-12 read round each of Excel's areas (observed: R4) is not drawn here\n (2026-10-13, decided with the user: recorded as observed and not followed). The border lies inside the cell, a Device Pixel in from its top and left edges\n and from its own gridline (this stylesheet's choice), where Excel's active cell among several areas\n lay at Excel's 100% and 150% zoom on a 150% display (observed: the readings of 2026-10-12, R4; at a\n 100% display by generalisation). Inside, nothing above the selection layer covers any side of it,\n beside the Headings, a Pinned Column or under the header, so it needs none of the sides the core\n marks (UX-18); and every side is a whole Device Pixel from an edge that lies on one, so it lies on\n Device Pixels as the other lines do (ADR-0090). Paint only: nothing in C# reads its width. */\n.ex-focus.ex-focus-among-ranges::after {\n top: var(--ex-dp, 1px);\n left: var(--ex-dp, 1px);\n right: calc(var(--ex-rule-dp, 1px) + var(--ex-dp, 1px));\n bottom: calc(var(--ex-rule-dp, 1px) + var(--ex-dp, 1px));\n border: var(--ex-dp, 1px) solid var(--ex-focus-among-ranges-outline, var(--ex-focus-outline, CanvasText));\n}\n/* The Heading Mark (ADR-0008, 2026-10-13). For every Selection, the Headings of the columns and the\n rows that hold part of it carry a line of two Device Pixels on their edge toward the cells, where\n Excel's lay: under a column's Heading and down a row's right edge, over the Heading's own rule and\n the Device Pixel beside it (observed: the readings of 2026-10-12, R4 and R5). Wherever a header or\n Row Headings stand: a plain grid's header is marked as a Sheet's Headings are. The core places one\n box per run of marked Headings, the Headings' own, inline (ADR-0027/0028); the line is its border\n on that edge, so it lies on Device Pixels wherever the band's edge does (ADR-0090), and nothing in\n C# reads its width. Its colour is --ex-heading-mark, and where nothing names that token it is the\n Focus outline's (2026-10-13, decided with the user), so a Theme or a Wrapper that colours the Focus\n colours the mark too, with no mapping of its own.\n A column's box stands in the header band above its cells, beneath the pinned header cells (5) and\n the Headings' corner (7), as the columns pass beneath them; a Pinned Column's part rides a sticky\n layer above the pinned cells (6) at the band's left edge, as a pinned Header Group does. A row's box\n stands in a sticky layer of the Viewport above the Row Headings (4); the header covers it as it\n covers them. Paint only: no part of it takes the pointer. */\n.ex-heading-marks-pinned, .ex-heading-marks-rows { position: sticky; left: 0; width: 0; height: 0; pointer-events: none; }\n.ex-heading-marks-pinned { z-index: 6; }\n.ex-heading-marks-rows { z-index: 6; }\n.ex-heading-mark {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n pointer-events: none;\n border-style: solid;\n border-width: 0;\n border-color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText));\n}\n.ex-heading-mark-column { border-bottom-width: calc(2 * var(--ex-dp, 1px)); }\n.ex-heading-mark-row { border-right-width: calc(2 * var(--ex-dp, 1px)); }\n/* D1 (ADR-0008, 2026-10-14): headers belong to the root render; a hidden state marker\n follows every painted row with a Row Heading, so selection size does not change the DOM.\n CSS paints the original Heading without rendering its row or replacing its typography.\n The state conditions add no specificity; Sheet defaults can win in either load order.\n The line remains one overlay rectangle per run, above the Headings. */\n.ex-heading-state { display: none; }\n.ex-header-cell.ex-heading-marked {\n background-color: var(--ex-heading-mark-background, color-mix(in srgb, CanvasText 12%, var(--ex-header-background, Canvas)));\n color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText));\n}\n.ex-row:where(:has(+ .ex-heading-state.ex-heading-marked)) > .ex-row-heading {\n background-color: var(--ex-heading-mark-background, color-mix(in srgb, CanvasText 12%, var(--ex-heading-background, var(--ex-header-background, Canvas))));\n color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText));\n}\n.ex-header-cell.ex-heading-whole {\n background-color: var(--ex-heading-mark-whole-background, color-mix(in srgb, var(--ex-heading-mark, var(--ex-focus-outline, CanvasText)) 20%, var(--ex-header-background, Canvas)));\n}\n.ex-row:where(:has(+ .ex-heading-state.ex-heading-whole)) > .ex-row-heading {\n background-color: var(--ex-heading-mark-whole-background, color-mix(in srgb, var(--ex-heading-mark, var(--ex-focus-outline, CanvasText)) 20%, var(--ex-heading-background, var(--ex-header-background, Canvas))));\n}\n.ex-headings-corner::after {\n content: \"\";\n position: absolute;\n inset: 25%;\n background-color: GrayText;\n clip-path: polygon(100% 0, 100% 100%, 0 100%);\n}\n.ex-headings-corner-marked::after { background-color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText)); }\n/* The Copied Range (ADR-0170): dashes round a rectangle the clipboard holds as the grid copied it,\n Excel's moving border standing still (ADR-0027 P8). They lie where the Selection's outline lies,\n and are painted after it, because a copy usually shares its range: a band of the grid's ground\n is laid over that outline, and the dashes over the band, so the line reads as dashed rather than\n as the solid one beneath. The dashes take the Focus outline's colour, as the dashes of a grid\n pointed at do (ADR-0058). Paint only, like every rectangle here. */\n.ex-copied-range { position: absolute; }\n.ex-copied-range::after {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: calc((var(--ex-outline-in-t, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n left: calc((var(--ex-outline-in-l, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n right: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n bottom: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n border: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) solid var(--ex-background, Canvas);\n outline: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) dashed var(--ex-focus-outline, CanvasText);\n outline-offset: calc(0px - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n}\n/* The fill handle and a fill drag's target outline (ADR-0050, item 5): two more overlay\n rectangles, painted only when a Consumer declares fill. The handle's size and place are\n geometry and arrive inline from the resolved metrics (ADR-0027/0028) — the press that\n grabs it reads the same numbers. Paint only, like every rectangle here. */\n.ex-fill-handle { position: absolute; box-sizing: border-box; background: var(--ex-fill-handle-color, var(--ex-focus-outline, CanvasText)); border: var(--ex-rule-width, 1px) solid Canvas; }\n.ex-fill-target { position: absolute; outline: 1px dashed var(--ex-fill-outline, var(--ex-focus-outline, CanvasText)); outline-offset: -1px; }\n/* The pointing outline (ADR-0051): the range a Formula's Reference is being pointed at, while\n the Selection and the Focus stay where they are — dashed and heavier, so it reads as neither.\n Paint only, like every rectangle here. */\n.ex-point { position: absolute; outline-style: dashed; outline-color: var(--ex-focus-outline, CanvasText); }\n/* Reference Outlines (ADR-0057): the cells each Reference in an edited Formula names, in the\n colour its text wears. The palette's length is behaviour and lives in C# (seven, as Excel's);\n its colours are --ex-reference-1 to --ex-reference-7, which a Theme sets, never how many there\n are (ADR-0027/0029). The defaults are Excel's, as the eighth Windows run read them, over a light\n ground; over a dark one they are lifted a third of the way to white, which Excel was not seen\n to do, so that each reads at 3:1 or more there too. Carried as the element's own color, which it\n has no text to spend on. A solid line over a pale wash of the colour, as Excel's (#ebf0f9 is\n the first's), with a 1px gap of the cell's own ground between them, as Excel's white gap.\n The line lies inside the cells, where Excel's lies over the gridline, so that nothing drawn\n above the overlay can cover part of it (ADR-0057, \"deliberately unlike Excel\"). The padding is\n the line and the gap, and it only clips the wash. Paint only, like every rectangle here. */\n.ex-reference-outline { position: absolute; box-sizing: border-box; padding: 3px; outline: 2px solid currentColor; outline-offset: -2px; background: color-mix(in srgb, currentColor 10%, transparent) content-box; }\n/* Point's dashes over the outline of the Reference it writes: in the Focus outline's colour, as\n Excel lays its active-cell green over the pointed Reference's own line, just inside that line\n so both show (the eighth Windows run). */\n.ex-point.ex-point-on-reference { outline-offset: -4px; }\n/* The dashes a grid pointed at from outside draws where its Consumer asks (ADR-0058): over the\n cell, or down the body of the column, whose press was handed on. In the Focus outline's colour,\n as Point's dashes over its Reference's outline are, and as far inside the box, so that the line\n of a column outline beneath them still shows. No outline of their own, and no token of their own\n (ADR-0029's note of 2026-09-30). Paint only, like every rectangle here. */\n.ex-point-dashes { position: absolute; outline: 2px dashed var(--ex-focus-outline, CanvasText); outline-offset: -4px; }\n/* A grid pointed at from outside (ADR-0058, ADR-0029's note of 2026-09-30): a press on its rows or\n its column headers is handed on, and the pointer over them is `cell`. The controls that take\n their own presses there — the column menu's button, a resize grip, a checkbox, an action, a\n Template's control — let the press through to the rows or the header, which hand it on as the\n cell or the column it landed on. Nothing else marks the grid. */\n.ex-pointed-at > .ex-scroller > .ex-spacer > :is(.ex-viewport, .ex-header) { cursor: cell; }\n.ex-pointed-at > .ex-scroller > .ex-spacer > :is(.ex-viewport, .ex-header) :is(.ex-menu-button, .ex-resize-grip, .ex-mark, .ex-action, .ex-interactive, .ex-header-group-toggle, .ex-hidden-mark) { pointer-events: none; }\n.ex-reference-1 { color: var(--ex-reference-1, light-dark(#326ac7, color-mix(in srgb, #326ac7 67%, white))); }\n.ex-reference-2 { color: var(--ex-reference-2, light-dark(#c0353e, color-mix(in srgb, #c0353e 67%, white))); }\n.ex-reference-3 { color: var(--ex-reference-3, light-dark(#8157b7, color-mix(in srgb, #8157b7 67%, white))); }\n.ex-reference-4 { color: var(--ex-reference-4, light-dark(#007c20, color-mix(in srgb, #007c20 67%, white))); }\n.ex-reference-5 { color: var(--ex-reference-5, light-dark(#b03e84, color-mix(in srgb, #b03e84 67%, white))); }\n.ex-reference-6 { color: var(--ex-reference-6, light-dark(#b64900, color-mix(in srgb, #b64900 67%, white))); }\n.ex-reference-7 { color: var(--ex-reference-7, light-dark(#267392, color-mix(in srgb, #267392 67%, white))); }\n/* A row not yet painted with real data — waiting for the Consumer's Window, or\n deliberately skipped while scrolling fast. One mechanism, so one appearance\n (ADR-0004). It carries no scrollable cells at all: painting them is the cost being\n avoided. The Pinned Columns do stay, so the bar fills whatever is left beside them. */\n.ex-placeholder::after { content: \"\"; margin: calc(var(--ex-row-height) / 4) var(--ex-cell-padding-x, 8px); flex: 1 1 auto; border-radius: 2px; background: var(--ex-placeholder-background, currentColor); opacity: 0.08; }\n.ex-loading { opacity: var(--ex-loading-opacity, 0.7); }\n/* A paste under way (ADR-0240 section 12): from its start until it lands or is refused, a bar\n across the root's top edge and a progress pointer say the grid is busy with it, and that an\n Escape now cancels it. Nothing is dimmed: the rows are still the ones being pasted over. The\n root's aria-busy says the same to a screen reader. */\n/* Work a Consumer runs in the order that Escape cancels — ExSheet opening a file, still being read\n (ADR-0330 section 10) — is painted the same way while the root names it (data-ex-work): it, too,\n holds every input behind it, and an Escape cancels it. */\n.ex-pasting, .ex-grid[data-ex-work] { cursor: var(--ex-pasting-cursor, progress); }\n.ex-pasting::after, .ex-grid[data-ex-work]::after { content: \"\"; position: absolute; inset: 0 0 auto 0; height: var(--ex-pasting-bar-height, 3px); background: var(--ex-pasting-bar, Highlight); pointer-events: none; z-index: 10; }\n/* The scrollbar's look, by token rather than by reaching the internal element\n (ADR-0029). The grid always draws its own bar: in Chrome and Edge any rule on\n ::-webkit-scrollbar makes the bar a custom one, and a custom bar paints no native\n parts, so \"leave the native bar alone when the token is unset\" painted an empty\n gutter (the fourth Windows run, 2026-09-29). The defaults read in both schemes.\n Narrowing changes the gutter, the browser reports it, and the geometry follows\n (ADR-0021). Firefox has no ::-webkit-scrollbar and takes the colour only. */\n.ex-scroller::-webkit-scrollbar { width: var(--ex-scrollbar-width, 12px); height: var(--ex-scrollbar-width, 12px); background: transparent; }\n.ex-scroller::-webkit-scrollbar-thumb { background: var(--ex-scrollbar-color, color-mix(in srgb, CanvasText 32%, transparent)); background-clip: padding-box; border: 2px solid transparent; border-radius: calc(var(--ex-scrollbar-width, 12px) / 2); }\n.ex-scroller::-webkit-scrollbar-corner { background: transparent; }\n@supports not selector(::-webkit-scrollbar) {\n .ex-scroller { scrollbar-color: var(--ex-scrollbar-color, color-mix(in srgb, CanvasText 32%, transparent)) transparent; }\n}\n/* The column menu's button in the header cell (ADR-0010): the glyph is CSS content,\n so the header's own text stays exactly the label. It takes its own pointer — a\n click on it opens the menu, never sorts. */\n.ex-menu-button {\n position: absolute;\n top: 0;\n /* Geometry Tokens from the resolved metrics (ADR-0028): the same numbers the\n Auto header estimate adds, so the label and the button cannot overlap. */\n right: var(--ex-menu-button-inset, 6px);\n width: var(--ex-menu-button-width, 16px);\n height: 100%;\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n cursor: pointer;\n pointer-events: auto;\n}\n.ex-menu-button::after { content: \"▾\"; opacity: 0.55; }\n/* A header cell that carries the button keeps its label out from under it: the\n button's band is added to the right padding, the same band the Auto header estimate\n adds. A left-aligned label does not move; a right-aligned one ends where the button\n begins instead of beneath it. */\n.ex-header-cell:has(> .ex-menu-button) {\n padding-right: calc(var(--ex-cell-padding-x, 8px) + var(--ex-menu-button-width, 16px) + var(--ex-menu-button-inset, 6px));\n}\n/* A popover (ADR-0009/0010/0018/0040): anchored to the instance root, outside the scroll\n container, and bounded by the grid's box — its max-height arrives inline from the core's\n geometry — so no ancestor that shows the grid can cut it, and it never tangles across\n instances. Contents taller than the room scroll inside it. border-box, so the bound and\n the min-width are the box the browser draws. */\n.ex-popover {\n position: absolute;\n z-index: 10;\n box-sizing: border-box;\n overflow-y: auto;\n /* min-width and max-width arrive inline from the core (ADR-0027/0040): the numbers it\n clamps the popover inside the grid with are the numbers the box is laid out from. */\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n background: var(--ex-header-background, Canvas);\n color: inherit;\n outline: var(--ex-grid-focus-outline, 1px solid Highlight);\n}\n/* A cell's message (ADR-0034): the same popover machinery, carrying a sentence rather\n than commands. Never an element in the row — the row's height does not move\n (ADR-0013) — and outside the scroll container like every other popover. The error\n token names it, so a theme recolours it without the core knowing (ADR-0027). */\n.ex-message {\n position: absolute;\n z-index: 11;\n /* It describes a cell; it must not intercept the pointer aimed at one. Without this\n a click on a flagged cell lands on the message and neither selects nor reaches the\n Viewport, and a mouse-up ending a drag goes the same way. */\n pointer-events: none;\n /* No max-width here: the widest the box may be is emitted inline by the core, the\n same number its clamp keeps on screen (ADR-0027). */\n padding: 4px;\n background: var(--ex-header-background, Canvas);\n color: var(--ex-state-error-color, #b3261e);\n outline: 1px solid var(--ex-state-error-color, #b3261e);\n}\n/* The notices a page holding another version's files calls for (ADR-0123): the script refused,\n shown in place of the rows, and a stylesheet that is not the one a product's root was built\n with, shown at the top of that root. Every product's notice wears this one look, in the tokens\n a cell's error and the ground already are, so no colour comes from C# (ADR-0027/0028); ExSheet's\n and ExPivot's stand outside a grid's root, so the rule is not scoped under one. An attribute, not\n a class: a stylesheet of any version shows the notice a root of any other version renders, so its\n selector cannot change between versions, and the stamp it carries is an attribute's value. The\n two rules that show a stylesheet's notice and hide it for its own stamp are appended to each\n shipped stylesheet by tools/assets/minify.mjs; until a stylesheet arrives, the notice's inline\n display keeps it out of the way, so a cold load shows nothing. The text is selectable, to be\n quoted in a report. */\n[data-ex-notice] {\n box-sizing: border-box;\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height, 28px);\n background: var(--ex-background, Canvas);\n color: var(--ex-state-error-color, #b3261e);\n outline: 1px solid var(--ex-state-error-color, #b3261e);\n outline-offset: -1px;\n user-select: text;\n}\n/* The Size Tip (ADR-0052, 2026-09-29): how many rows and columns a drag across Headings covers,\n at the Heading the Extent is on. Placed and sized by the core, inline: its width is the Cell\n Metrics' estimate of its text, so the padding is the cell's own token and the text never\n wraps (ADR-0027/0028). Outside the scroll container like a popover, painted inside the grid's\n box — its outline too — and it takes no pointer, which is dragging across it (ADR-0040). Its\n look is its own Visual Tokens (ADR-0029). */\n.ex-size-tip {\n position: absolute;\n z-index: 9;\n box-sizing: border-box;\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n background: var(--ex-size-tip-background, Canvas);\n color: var(--ex-size-tip-color, CanvasText);\n outline: var(--ex-size-tip-outline, 1px solid color-mix(in srgb, CanvasText 45%, transparent));\n outline-offset: -1px;\n}\n/* The column's one popover (ADR-0044): its commands, and below them its filter, set off by a\n rule. Each half is a column of the popover's column; the filter is what gives when the\n room is short, through its value list (ADR-0040). */\n.ex-popover-commands { display: flex; flex-direction: column; flex-shrink: 0; }\n.ex-popover-filter {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1 1 auto;\n min-height: 0;\n padding-top: 4px;\n border-top: var(--ex-rule-width, 1px) solid var(--ex-header-rule-color, rgba(128, 128, 128, 0.45));\n}\n.ex-popover button { font: inherit; text-align: left; padding: 2px var(--ex-action-padding-x, 6px); cursor: pointer; }\n.ex-popover button:disabled { cursor: default; opacity: 0.5; }\n/* In a bounded popover the value list is what gives (ADR-0040): it shrinks, to a floor\n that still shows a couple of entries, and scrolls, so the search above it and the\n actions below stay in view. The floor is the panel's own layout, not the grid's geometry:\n nothing in C# computes with it. */\n.ex-popover-list { max-height: 240px; min-height: 48px; flex: 1 1 auto; overflow-y: auto; display: flex; flex-direction: column; }\n.ex-popover-actions { display: flex; gap: 4px; justify-content: flex-end; flex-shrink: 0; }\n/* \"(Select All)\" is a button with the checkbox role, because a native checkbox's mixed state\n is a property only script can set (ADR-0009/0021). Its box is drawn from aria-checked. */\n.ex-popover .ex-select-all { padding-left: 0; background: none; border: 0; }\n.ex-select-all::before { display: inline-block; width: 1.2em; }\n.ex-select-all[aria-checked=\"true\"]::before { content: \"\\2611\"; }\n.ex-select-all[aria-checked=\"false\"]::before { content: \"\\2610\"; }\n.ex-select-all[aria-checked=\"mixed\"]::before { content: \"\\25A3\"; }\n.ex-popover-join { display: flex; gap: 12px; }\n/* The popover's Tab-wrap sentinels (ADR-0039/0044): focusable, and nothing else. Absolute,\n so they take no place in the popover's flex column and add no gap to it. */\n.ex-focus-wrap { position: absolute; width: 0; height: 0; overflow: hidden; outline: none; }\n/* The panel's form exists for Enter's implicit submission (ADR-0039) and has no box of its\n own: its controls stay the popover's flex items. */\n.ex-popover-form { display: contents; }\n/* The find panel (ADR-0055): its contents a column like the other popovers'. The outcome line\n keeps its height when empty, so the panel does not jump when a step says \"no match\". */\n.ex-popover-find-body { display: flex; flex-direction: column; gap: 4px; min-height: 0; }\n.ex-find-outcome { min-height: 1.2em; }\n/* The Cell Editor (ADR-0010): one input floated over the focused cell, never inside a\n row. Its box is the cell's exactly (ADR-0028); font and line height come from the\n same tokens the cells read, so the text does not jump when editing starts. The coloured\n text beneath the core's own input (ADR-0057) takes the same box, padding, line and colours,\n from the same rule, so its characters stand where the input's do; it paints the editor's\n ground, over which the input turns see-through while it shows (below). */\n.ex-key-field,\n.ex-editor,\n.ex-reference-text.ex-reference-text-cell {\n position: absolute;\n z-index: 3;\n box-sizing: border-box;\n margin: 0;\n padding: 0 var(--ex-cell-padding-x, 8px);\n border: none;\n font: inherit;\n line-height: var(--ex-row-height);\n background: var(--ex-editor-background, Canvas);\n color: var(--ex-editor-color, CanvasText);\n}\n/* An editor whose row moved out of view under it (ADR-0011's note of 2026-10-07): the grid does not\n scroll to follow the row, so the editor stays open, holding the keyboard, at its column on the\n first painted row — and neither seen nor pressed there, over a cell that is not its own. */\n.ex-editor.ex-editor-away,\n.ex-reference-text.ex-editor-away { opacity: 0; pointer-events: none; }\n.ex-editor {\n outline: var(--ex-editor-outline, 2px solid Highlight);\n outline-offset: -1px;\n}\n/* An edit whose keyboard is elsewhere is told apart (ADR-0018 section 6, ED-27): while DOM focus\n is outside the grid's root, the Cell Editor's outline is 1px wide, in the style and colour\n --ex-editor-outline gives it, and at that token's full width again once the keyboard is back.\n Two grids can each hold an open edit, and only one of them has the keyboard. The width alone\n is overridden, so a Wrapper's token keeps its colour; no script is involved. The Formula Bar's\n field is outlined only while it has focus, and needs nothing. */\n.ex-grid:not(:focus-within) .ex-viewport .ex-editor { outline-width: 1px; }\n/* A Pending Commit (ADR-0380 section 3): while the Consumer's answer to a commit is out, the root\n carries data-ex-pending-commit and the pointer says the grid is busy; the editor, read-only and\n aria-busy, keeps its text and the keyboard, its outline dashed. The style alone is overridden, so a\n Wrapper's --ex-editor-outline keeps its colour and width. */\n.ex-grid[data-ex-pending-commit] { cursor: progress; }\n.ex-viewport .ex-editor[aria-busy=\"true\"] { outline-style: dashed; }\n/* The pinned editor's zero-size sticky anchor — the pinned selection layer's trick. */\n.ex-editor-pinned { position: sticky; left: 0; width: 0; height: 0; z-index: 3; }\n/* The Keyboard Field (ADR-0080), which holds the keyboard on a grid that edits while no edit is\n open, so that an IME has a text field to start in. Its box is the Cell Editor's, written inline\n from the same arithmetic, in a zero-size layer that rides the pinned editor's sticky anchor over\n a Pinned Column (and while it waits, with the Focus not painted). Never seen, and never in the\n pointer's way, until an IME composes in it: then it is drawn as the Cell Editor is, over the\n Focus cell, with the composition in it. The script marks it composing, and keeps the mark until\n the keyboard leaves it for the editor the composition opened. Its own focus ring is never drawn:\n the root's says the grid holds the keyboard (above). */\n.ex-key-field-layer { position: absolute; left: 0; top: 0; width: 0; height: 0; z-index: 3; pointer-events: none; }\n.ex-key-field-layer.ex-key-field-held { position: sticky; }\n.ex-key-field { opacity: 0; caret-color: transparent; outline: none; pointer-events: none; }\n.ex-key-field.ex-key-field-composing {\n opacity: 1;\n caret-color: auto;\n outline: var(--ex-editor-outline, 2px solid Highlight);\n outline-offset: -1px;\n}\n/* The coloured text (ADR-0057): beneath each editor surface, a layer the core renders with the\n field's text, as one run of text as the field's is, so its characters stand where the field's\n do (ADR-0057's note of 2026-10-01: a run per Reference drifted 1/64 px a run). It stands\n immediately before its field, in the field's box, font and line, and keeps every space the field\n keeps; the rest is what the browser gives an input and not a div. Paint only: it takes no\n pointer, and assistive technology reads the field. Hidden unless the field after it wears\n ex-reference-text-shown, which the editor listener sets only in the surface the edit is in — the\n field holding DOM focus, as Excel colours only that one — only while the layer's text\n (data-ex-text) is the field's value, and never during an IME composition (ADR-0021's note of\n ADR-0057): uncoloured for a moment rather than coloured on the wrong characters. Its References\n are coloured then, by highlights of the grid's own (below). Its line scrolls sideways with the\n field, and has room to scroll as far. It is painted beneath the field, caret and selection\n included, whether or not the field is positioned: at -1 it goes under everything its stacking\n context lays out, and over only that context's own ground — the Cell Editor's box, or the\n Formula Bar, made one for it here. */\n.ex-reference-text {\n position: absolute;\n z-index: -1;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: none;\n font: inherit;\n line-height: inherit;\n color: inherit;\n letter-spacing: normal;\n word-spacing: normal;\n text-transform: none;\n text-indent: 0;\n text-shadow: none;\n /* Physical, as all the grid's geometry is: the root is dir=\"ltr\" (ADR-0031, DIR-4). */\n text-align: left;\n white-space: pre;\n pointer-events: none;\n visibility: hidden;\n}\n.ex-reference-text-line { height: 100%; overflow: hidden; }\n.ex-reference-text-line::after { content: \"\"; display: inline-block; width: 100%; }\n/* The colours of the layer's References (ADR-0057, note of 2026-10-01). The editor listener colours\n them with the CSS Custom Highlight API, over the layer's one run: one highlight per colour, per\n pointed shade and for the pointed ground, each named for its grid, and the grid's own generated\n stylesheet paints each of its names with the property here of the same place, so the colours are\n still the Visual Tokens, read on the layer as the spans read them: a Theme, the scheme and forced\n colours reach them as before. The palette's colours are --ex-reference-1 to -7, with the defaults\n of the Reference Outlines above.\n The Reference Point is writing is shown selected (ADR-0051/0057; the eighth Windows run, cases 19\n to 32): on a grey ground, its text a darker shade of its colour. A look on the layer, never a\n selection of the field's text, so a key typed next follows the Reference; and only where the\n core marks it, which it does not for a Reference straight after the text's first character.\n Excel's ground is #c6c6c6. The shade is one Visual Token per place in the palette,\n --ex-reference-1-pointed to --ex-reference-7-pointed, which a Theme sets (ADR-0029). Their light\n defaults are Excel's, in the palette's order: #0401a2, #630101 (Part B of the eighth Windows\n run), #44007c, #003600, #550059, #531c00 and #00323f (the tenth run). Excel keeps its cells white\n under its Black theme, with the same shades, so it has no dark ground to take them from; over a\n dark ground the grey stands as far from the dark Canvas as #c6c6c6 does from white, and all seven\n shades are the Reference's colour mixed 55% toward white. Text a press on another grid wrote,\n such as XLOOKUP(\"R-4471\", Positions[Id], Positions[PV]), is shown selected as a whole (ADR-0058):\n one stretch on the grey, and the References inside it take the shade of their place in the\n palette. */\n.ex-reference-text {\n --ex-reference-text-1: var(--ex-reference-1, light-dark(#326ac7, color-mix(in srgb, #326ac7 67%, white)));\n --ex-reference-text-2: var(--ex-reference-2, light-dark(#c0353e, color-mix(in srgb, #c0353e 67%, white)));\n --ex-reference-text-3: var(--ex-reference-3, light-dark(#8157b7, color-mix(in srgb, #8157b7 67%, white)));\n --ex-reference-text-4: var(--ex-reference-4, light-dark(#007c20, color-mix(in srgb, #007c20 67%, white)));\n --ex-reference-text-5: var(--ex-reference-5, light-dark(#b03e84, color-mix(in srgb, #b03e84 67%, white)));\n --ex-reference-text-6: var(--ex-reference-6, light-dark(#b64900, color-mix(in srgb, #b64900 67%, white)));\n --ex-reference-text-7: var(--ex-reference-7, light-dark(#267392, color-mix(in srgb, #267392 67%, white)));\n --ex-reference-text-1-pointed: var(--ex-reference-1-pointed, light-dark(#0401a2, color-mix(in srgb, var(--ex-reference-text-1) 55%, white)));\n --ex-reference-text-2-pointed: var(--ex-reference-2-pointed, light-dark(#630101, color-mix(in srgb, var(--ex-reference-text-2) 55%, white)));\n --ex-reference-text-3-pointed: var(--ex-reference-3-pointed, light-dark(#44007c, color-mix(in srgb, var(--ex-reference-text-3) 55%, white)));\n --ex-reference-text-4-pointed: var(--ex-reference-4-pointed, light-dark(#003600, color-mix(in srgb, var(--ex-reference-text-4) 55%, white)));\n --ex-reference-text-5-pointed: var(--ex-reference-5-pointed, light-dark(#550059, color-mix(in srgb, var(--ex-reference-text-5) 55%, white)));\n --ex-reference-text-6-pointed: var(--ex-reference-6-pointed, light-dark(#531c00, color-mix(in srgb, var(--ex-reference-text-6) 55%, white)));\n --ex-reference-text-7-pointed: var(--ex-reference-7-pointed, light-dark(#00323f, color-mix(in srgb, var(--ex-reference-text-7) 55%, white)));\n --ex-reference-text-pointed: var(--ex-reference-pointed-background, light-dark(#c6c6c6, #4b4b4b));\n}\n/* A Chrome places the layer inside the core's box, before its control, which fills the box's\n content (IGridChrome): the layer stands over that content, inside the padding the box has from\n .ex-editor and .ex-formula-bar-text, with none of its own, as the control has none. The bar's\n box is laid out in the band, so it is made the layer's containing block, and the band the\n stacking context both bar layers are painted in; nothing moves. */\n.ex-editor > .ex-reference-text { left: var(--ex-cell-padding-x, 8px); right: var(--ex-cell-padding-x, 8px); }\n.ex-formula-bar > div.ex-editor { position: relative; }\n.ex-formula-bar { isolation: isolate; }\n.ex-reference-text:has(+ .ex-reference-text-shown) { visibility: visible; }\n/* While it shows, the field's own text is transparent: its fill, so its color — and the caret,\n drawn in it — stay, and a Chrome's own color does not outrank it. Selected text is drawn by\n the field, in the selection's own colours, so it stays readable. A word the browser's spelling\n or grammar check marks is the field's own text too: Chrome paints it again through a highlight,\n in the highlight's color, which neither inherits the field's fill nor takes one of its own, so\n it stood over the layer's text a second time (DC-48, measured 2026-09-30). Its color is taken\n away; its underline is not drawn in that color, and stays. Every field turns see-through while\n its layer shows, a Chrome's control included, whose contract is to have no ground of its own\n anyway: a page that loses the Chrome's stylesheet then shows the layer's text rather than\n nothing (ADR-0057, \"The Wrapper's shape is required…\"). The ground is still painted beneath the\n layer: by the core's own Cell Editor layer, by the core's box a Chrome's control stands in, and\n by the Formula Bar. The adjacency is part of each rule: a field whose layer has gone shows its\n own text whatever it still wears. */\n.ex-reference-text + .ex-reference-text-shown { -webkit-text-fill-color: transparent; caret-color: currentColor; background: transparent; }\n.ex-reference-text + .ex-reference-text-shown::selection { color: HighlightText; -webkit-text-fill-color: HighlightText; background-color: Highlight; }\n.ex-reference-text + .ex-reference-text-shown::spelling-error, .ex-reference-text + .ex-reference-text-shown::grammar-error { color: transparent; }\n/* The completion list and the argument hint (ADR-0051): the editor's Inner Popup, in a box the\n core stands beneath the editor surface, inside the grid's box — its place, its width's clamp\n and its max-height arrive inline (ADR-0027/0040), and contents taller than the room scroll.\n Each candidate is a row's height, the same token the cells read. */\n.ex-completion {\n position: absolute;\n z-index: 12;\n box-sizing: border-box;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n background: var(--ex-header-background, Canvas);\n color: inherit;\n outline: var(--ex-grid-focus-outline, 1px solid Highlight);\n}\n.ex-completion-list { display: flex; flex-direction: column; }\n.ex-completion-item {\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: default;\n}\n.ex-completion-selected { background: var(--ex-selection-fill, rgba(60, 120, 216, 0.18)); }\n.ex-completion-hint {\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n opacity: 0.8;\n}\n.ex-completion-list + .ex-completion-hint {\n border-top: var(--ex-rule-width, 1px) solid var(--ex-header-rule-color, rgba(128, 128, 128, 0.45));\n}\n/* The pager and the status line (ADR-0015): the pager exists when PageSize is passed\n and rides the same Range Request machinery as scrolling; the status line closes the\n invisible-selection hole — for paging and scrolling alike. */\n.ex-pager, .ex-status {\n display: flex;\n align-items: center;\n gap: var(--ex-cell-padding-x, 8px);\n padding: 4px var(--ex-cell-padding-x, 8px);\n}\n.ex-pager button, .ex-status button {\n font: inherit;\n padding: 0 var(--ex-action-padding-x, 6px);\n border-width: var(--ex-action-border-width, 1px);\n cursor: pointer;\n}\n.ex-pager button:disabled { cursor: default; }\n/* The Selection Summary (ADR-0130): Excel's status-bar figures, at the line's far end. The box\n keeps one line's height while it says nothing, so the strip does not change height as figures\n come and go. Its figures menu is a list of ticked items in the popover frame. */\n.ex-summary {\n display: flex;\n gap: calc(2 * var(--ex-cell-padding-x, 8px));\n min-height: 1lh;\n /* The rest of the line, figures at its far end: the right-click that opens the figures menu\n lands anywhere there, figures or none, as on Excel's status bar. */\n flex: 1 1 auto;\n justify-content: flex-end;\n white-space: nowrap;\n}\n/* The Error Count (ADR-0381 section 3's note of 2026-11-01): a button in the status line, pressed\n to step to the next error, in the error colour while it counts any. */\n.ex-error-count { white-space: nowrap; }\n.ex-error-count-some { color: var(--ex-state-error-color, #b3261e); }\n.ex-summary-menu { display: flex; flex-direction: column; align-items: stretch; min-width: 12em; }\n.ex-summary-menu-item {\n font: inherit;\n width: 100%;\n /* Laid out here, whatever a page's own stylesheet does to buttons: a design system's reset\n that centres a flex button would centre every item. */\n display: flex;\n justify-content: flex-start;\n align-items: center;\n text-align: left;\n background: none;\n border: 0;\n padding: 2px var(--ex-cell-padding-x, 8px) 2px 0;\n cursor: pointer;\n}\n.ex-summary-menu-tick { display: inline-block; width: 1.4em; text-align: center; }\n/* The live region (ADR-0033): visually hidden, present to assistive technology. The\n classic clip recipe rather than display:none, which would silence it entirely. */\n.ex-announce {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n/* The Layout Ceiling's probe (ADR-0053): a zero-size box that clips an element declared\n taller than any browser lays out. Nothing is painted and nothing overflows; the child's\n laid-out height, which the script is told, is the ceiling. Its height is inline. */\n.ex-ceiling-probe {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n}\n/* The column rule, transparent by default (ADR-0029): an inset shadow on the cell's\n right edge — painted, never a border. A Modified cell's mark is its ::after, so it\n takes nothing from the rule and the rule nothing from it (ADR-0006). */\n.ex-cell { box-shadow: inset calc(0px - var(--ex-rule-dp, 1px)) 0 var(--ex-column-rule-color, transparent); }\n/* Alignment is a closed enum painted as interned classes (ADR-0016/0029). Last in the\n file, so an explicit alignment beats the numeric derivation and a Header Group's\n centred default at equal specificity. */\n.ex-align-left { text-align: left; }\n.ex-align-center { text-align: center; }\n.ex-align-right { text-align: right; }\n/* Forced colors (ADR-0027/0029): every Cell State and Row Kind restated in painted\n system colours, because the browser discards the background images and tints above.\n No state may rely on a discarded layer alone, and no two may collapse together. */\n@media (forced-colors: active) {\n /* The Change Highlight (ADR-0068): its ground is an image, which forced colours discard, so\n it is restated as an outline. That is painted and not laid out, as the states' outlines\n are, and dashed, which no state's is. Declared before the states: on a cell that carries a\n state as well, the state's own restatement is the one kept, because a state must never be\n the thing that disappears (ADR-0006). */\n .ex-cell.ex-changed { outline: 2px dashed Highlight; outline-offset: -2px; }\n /* The Match Mark (ADR-0332 §4): forced colours discard its ground, so a match is restated as\n a dotted frame, and the current match as a solid one, drawn by the ::before's border on a band\n of its own inside the cell: three pixels in, clear of the two-pixel band at the cell's edge\n where the Change Highlight's dashed outline, the states' outlines and the Focus's lie. It is\n not an outline, which the cell has one of: on a cell both changed and matching, one would\n replace the other and two meanings would read as one. Not a box-shadow either, which forced\n colours discard. */\n .ex-cell.ex-match-mark::before { background: none; inset: 3px; border: 2px dotted Highlight; }\n .ex-cell.ex-match-mark-current::before { background: none; border-style: solid; }\n .ex-header-cell.ex-match-mark::before, .ex-header-group.ex-match-mark::before { background: none; inset: 3px; border: 2px dotted Highlight; }\n .ex-header-cell.ex-match-mark-current::before, .ex-header-group.ex-match-mark-current::before { background: none; border-style: solid; }\n .ex-cell.ex-state-stale { color: GrayText; }\n .ex-cell.ex-state-missing { outline: 1px dotted GrayText; outline-offset: -2px; }\n .ex-cell.ex-state-error { color: LinkText; }\n .ex-cell.ex-state-modified { outline: 1px solid Highlight; outline-offset: -2px; }\n /* A Header Group's toggle and its Hidden Mark keep their pictures (ADR-0400 section 7): the\n toggle's icon in ButtonText and the mark's shape in Highlight, so neither disappears. */\n .ex-header-group-toggle::before { forced-color-adjust: none; background-color: ButtonText; }\n .ex-hidden-mark { forced-color-adjust: none; background: Highlight; }\n /* A group row keeps its weight; a total row's rule becomes an overline — a text\n decoration survives where the gradient does not. */\n .ex-row-total .ex-cell { text-decoration: overline; }\n /* A Row Stripe is restated as nothing: it carries no meaning, and forced colours are\n kept for the things that do (ADR-0038). The discarded gradient is the whole of it. */\n /* The selection and the Focus stay visible: outlines, which forced colors keeps, drawn\n inside the range on every side, so none is covered (UX-18). The Focus inside a single\n range is marked only by its missing tint, and no tint is painted here, so it takes its\n outline back. The Focus among several ranges is restated as the Focus is everywhere here:\n its outline, in place of its thin border (ADR-0008, 2026-10-12), beside ranges that are\n each outlined. */\n .ex-range { outline-style: solid; outline-color: Highlight; }\n /* The Heading Mark keeps its line, a border, which forced colors keep, restated in the system\n colour a range's outline is restated in (ADR-0008, 2026-10-13). */\n .ex-heading-mark { border-color: Highlight; }\n .ex-header-cell.ex-heading-marked, .ex-row:where(:has(+ .ex-heading-state.ex-heading-marked)) > .ex-row-heading { background-color: Canvas; color: Highlight; }\n .ex-headings-corner-marked::after { background-color: Highlight; }\n /* The tints are not painted at all (ADR-0206): stated here rather than left to how a browser\n forces a translucent background. Each range keeps its box, whose outline is above. */\n .ex-range-tint { display: none; }\n /* D2 applies to the restored Focus too. Its own border retains the inside placement\n except at a Heading, where that Heading Mark replaces the covered side. */\n .ex-focus, .ex-range-single { outline-style: none; }\n .ex-focus::after, .ex-focus.ex-focus-among-ranges::after, .ex-range-single ~ .ex-focus::after, .ex-range-single::after {\n content: \"\";\n top: calc(0px - var(--ex-outline-heading-t, 0) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n left: calc(0px - var(--ex-outline-heading-l, 0) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n right: 0;\n bottom: 0;\n border: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) solid Highlight;\n box-shadow: none;\n }\n /* The Copied Range keeps its dashes, in system colours, over a band of the system ground\n (ADR-0170): dashed, where the Selection's restated outlines are solid. */\n .ex-copied-range::after { border-color: Canvas; outline-color: Highlight; }\n .ex-focus-row { outline: 1px dotted Highlight; outline-offset: -1px; }\n .ex-hover-row { outline: 1px dotted GrayText; outline-offset: -1px; }\n /* The chosen action stays tellable from its neighbours, which keep their own\n ButtonBorder (ADR-0037). */\n .ex-action-chosen { outline-color: Highlight; }\n /* The coloured text's References come out as the rest of the text does, as ADR-0057 says\n of forced colours (\"Not done\"), and the pointed ground goes, as a ground does. Chrome\n paints a custom highlight in the system's Highlight and HighlightText under forced\n colours, whatever its rule says, which would set each Reference in a dark block; the\n spans the highlights replaced (2026-10-01, ticket 86) were forced to the text's own\n colour. So the layer's line is left as authored, and its colours are the system's. */\n .ex-reference-text-line { forced-color-adjust: none; color: CanvasText; }\n .ex-reference-text {\n --ex-reference-text-1: CanvasText; --ex-reference-text-2: CanvasText; --ex-reference-text-3: CanvasText;\n --ex-reference-text-4: CanvasText; --ex-reference-text-5: CanvasText; --ex-reference-text-6: CanvasText;\n --ex-reference-text-7: CanvasText;\n --ex-reference-text-1-pointed: CanvasText; --ex-reference-text-2-pointed: CanvasText;\n --ex-reference-text-3-pointed: CanvasText; --ex-reference-text-4-pointed: CanvasText;\n --ex-reference-text-5-pointed: CanvasText; --ex-reference-text-6-pointed: CanvasText;\n --ex-reference-text-7-pointed: CanvasText;\n --ex-reference-text-pointed: transparent;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["ex-grid.css"],"sourcesContent":["/* Instance-scoped styling: every class is ex- prefixed and every variable lives on the\n instance root, never :root (ADR-0018). The inline --ex-row-height set from the C#\n RowHeight parameter wins over any stylesheet value (ADR-0013). */\n/* The font size is a Geometry Token from the resolved Grid Metrics (ADR-0028): the\n digit width is stated against it, and inheriting the host's would silently break\n the >= any-glyph contract (ADR-0016). A theme changing the font supplies its own\n CellMetrics. */\n/* Dragging across cells is a selection gesture, not a text selection: without this the\n browser paints its own highlight over the top of the grid's (ADR-0008). Copying goes\n through the clipboard path, not through a native text selection (ADR-0005). */\n/* The family carries a default so the metric defaults are true of each other\n (ADR-0016): the character-class widths were measured against system-ui at this\n size. --ex-font-family is metrics-bearing — whoever sets it owes new CellMetrics\n (ADR-0027). */\n/* position: relative carries no offsets — it exists so the popovers can anchor to the\n instance root, outside the scroll container (ADR-0017/0018). The ground defaults to\n system colours, so the bare grid follows the host's colour scheme and forced-colors\n settings (ADR-0027/0029). */\n/* The one rule outside an instance (ADR-0018's exception of 2026-10-27). A bundler that\n lowers light-dark() for older browsers (Vite's default target, through lightningcss)\n writes var(--lightningcss-light, A) var(--lightningcss-dark, B), and defines the two\n only in rules it lowered that declare color-scheme. On a page whose bundled CSS\n declares none, both stay undefined and every light-dark() colour here (the reference\n colours, the Formula Bar's ground) is silently lost: a text falls back to the inherited\n colour, a ground to none. This says light, as the\n browser does when nothing is declared; it holds no colour and no theme, and :where()\n gives it no specificity, so any declaration of the page's wins. The core declares no\n color-scheme of its own (UX-8). */\n:where(html) { --lightningcss-light: initial; --lightningcss-dark: ; }\n.ex-grid {\n position: relative;\n font-family: var(--ex-font-family, system-ui, sans-serif);\n font-size: var(--ex-font-size, 14px);\n font-weight: var(--ex-font-weight, 400);\n font-variant-numeric: tabular-nums;\n background: var(--ex-background, Canvas);\n color: var(--ex-color, CanvasText);\n user-select: none;\n}\n/* The root is the tab stop and where keys are captured (ADR-0018), so it needs to say\n when it holds the keyboard. :focus-visible rather than :focus — a click already shows\n itself by moving the selection, and a permanent ring around a clicked grid is noise.\n Distinct from the selection's own Focus outline: this one says \"keys come here\", that\n one says \"and they start from this cell\".\n On a grid that edits, the keyboard is held by its Keyboard Field inside the root (ADR-0080),\n and a text field matches :focus-visible on every focus, a click's too, so it cannot say how the\n keyboard arrived. The script marks the root (data-ex-focus-visible) while its field holds the\n keyboard that did not come from a press on the grid, and the same ring is drawn from the mark.\n An attribute, not a class: the root's class is the core's render, rewritten whole whenever it\n changes (an edit ending, rows loading), which would take a class the script added with it. */\n.ex-grid:focus { outline: none; }\n.ex-grid:focus-visible,\n.ex-grid[data-ex-focus-visible] { outline: var(--ex-grid-focus-outline, 2px solid Highlight); outline-offset: 1px; }\n/* One scroll container for both axes. The header and the Pinned Columns are held in\n place inside it with `position: sticky`, which is why there can only be one: a nested\n container with a non-visible overflow on one axis computes `auto` on the other (CSS\n Overflow 3), becomes the scrollport itself, and the sticky offsets then measure\n against the wrong box. Width and height both come from C#, where the geometry's truth\n lives (ADR-0013). */\n.ex-scroller { overflow: auto; position: relative; box-sizing: border-box; }\n/* Total columns wide by header + total rows tall — the scrollbars are as long as the\n whole result on both axes, whatever fraction of it the Window holds (ADR-0013). */\n.ex-spacer { position: relative; min-width: 100%; }\n/* The header occupies the content's first row height and covers the Viewport's first\n row height; the C# arithmetic assumes exactly that, so the height is stated here and\n not left to the line box. Sticky elements are transparent by default and rows would\n scroll through it, hence the explicit background — a theme overrides the variable on\n the instance root rather than the class. */\n.ex-header {\n display: flex;\n position: sticky;\n top: 0;\n z-index: 4;\n height: var(--ex-header-height);\n line-height: var(--ex-header-height);\n background: var(--ex-header-background, Canvas);\n color: var(--ex-header-color, inherit);\n font-weight: var(--ex-header-font-weight, 600);\n /* The band's own rule, painted as a gradient on its bottom pixel — never a\n border, which would add to the box (ADR-0028/0029). */\n background-image: linear-gradient(to top, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)) 0 var(--ex-rule-width, 1px), transparent var(--ex-rule-width, 1px));\n}\n/* The rows' layer. Its transform (inline, ADR-0053) makes it a stacking context, which the\n selection layers inside it rely on (ADR-0008). It is not composited on its own: as a layer\n (will-change: transform) it was rasterised at the fraction of a device pixel where the page\n happened to put the grid, and every line a cell draws in device pixels blended across two (a\n Sheet's dotted Border read 2, 1, 3, 1 where Excel's is 2, 2, 2, 2; CI, Linux, 150%, ticket 49).\n Painted with its parent, it is snapped to the device pixels as any box is. Scrolling measured\n the same either way: frame intervals on /wide and /sheet, slow and flung, at 100% and 150%,\n headless, within 0.2 ms of each other at the median. */\n.ex-viewport { position: absolute; top: var(--ex-header-height); left: 0; right: 0; }\n/* pointer-events is inherited, so this one declaration makes every cell, spacer and\n Placeholder bar transparent to the mouse and leaves .ex-viewport as the target of every\n event in the body. The grid then reads the cell from the event's own offsets and its\n own geometry, instead of a handler on each of a couple of hundred cells (ADR-0004) or a\n layout read through JavaScript (ADR-0021). A Template or Action cell turns it back on\n for itself and stops the event there (ADR-0020). */\n.ex-row { display: flex; height: var(--ex-row-height); line-height: var(--ex-row-height); pointer-events: none; }\n/* The row rule, transparent by default: a Theme turns it on by setting the token —\n painted, never a border, so the row's box never grows (ADR-0028/0029). The Row Kind\n blocks below override it on group and total rows, whose grounds carry their own. Its\n width is --ex-rule-width in whole device pixels (--ex-rule-dp, below), here and wherever\n else the row's rule is painted. */\n.ex-row {\n background-image: linear-gradient(to top, var(--ex-row-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent var(--ex-rule-dp, 1px));\n}\n/* The same rule on a Pinned Column's cell (ticket 92). Its opaque ground hides the rule its row\n paints beneath it, so the cell paints the rule itself — transparent until a theme turns it on,\n as the row's is, so a grid without one paints as before. It is named in --ex-row-rule, and each\n ground that paints over the cell keeps it where the scrollable cells show it: above a Row\n Stripe, which the row paints beneath its rule, and beneath a Missing state's tint and a cell's\n lines (.ex-lined), which a scrollable cell paints over its row's. A Fill covers it, as a Fill\n covers its gridlines (the generated rule names none), and a group or total row names none, as\n its row paints none. One class's specificity, so each of those wins whatever its order. */\n.ex-pinned:where(.ex-cell) {\n --ex-row-rule: linear-gradient(to top, var(--ex-row-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent var(--ex-rule-dp, 1px));\n background-image: var(--ex-row-rule);\n}\n/* Row Stripes (ADR-0038): the class comes from the row's absolute position, so the pattern\n stays with its row however the Viewport scrolls — :nth-child() would count painted\n siblings and crawl. Painted on the row, under its rule, and on the Pinned Columns' cells,\n whose opaque ground would otherwise stop the band at the pinned block. Not on the\n scrollable cells: they are transparent over the row already, and a second layer there\n would make them darker than the pinned ones. Declared before Row Kind and Cell State, so\n that at equal specificity the grounds that carry meaning paint over the one that does not.\n A cell's tint — this one, Row Kind's and a Missing state's — is named in --ex-tint and\n painted from it, so that a cell carrying lines can paint the same tint beneath them\n (.ex-lined, ADR-0050 item 15); the cascade that picks the winning tint is unchanged. */\n.ex-row-stripe {\n background-image:\n linear-gradient(to top, var(--ex-row-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent var(--ex-rule-dp, 1px)),\n linear-gradient(var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)), var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)));\n}\n.ex-row-stripe .ex-pinned {\n --ex-tint: linear-gradient(var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)), var(--ex-row-stripe-background, rgba(128, 128, 128, 0.05)));\n background-image: var(--ex-row-rule, none), var(--ex-tint);\n}\n/* Row Kind (ADR-0024): the role of a row, painted without touching its geometry. Height\n stays exactly the detail row's — the virtualisation arithmetic, the selection overlay\n and the editor position are all one row height (ADR-0013), and a group row that were\n taller would drift all three out of alignment. No indentation either: Row Kind is the\n role, not the depth, and the grid is told neither how deep a group sits nor what it\n contains (ADR-0001). Weight and ground only. */\n.ex-row-group { font-weight: var(--ex-row-group-weight, 600); }\n.ex-row-total { font-weight: var(--ex-row-total-weight, 600); }\n/* Painted on its cells, as a background IMAGE layer, and on the row only where no cell\n is. A Pinned Column carries its own opaque background-color (it has to: the columns\n underneath pass beneath it), and so does a cell with a Fill, so a tint on the row alone\n stops at the pinned block and the role of the row is visible everywhere except the\n column its name is in. An image layer sits above that colour on the cell itself. A\n scrollable cell without a Fill is transparent, so a tint on the row as well would lie\n beneath it, and the cell would be two tints deep where its pinned neighbour is one\n (ticket 85): the row paints none beneath its cells. Its ::after, after the last of them,\n grows into the space beyond the last column and paints it there, and the gap standing in\n for the columns virtualised away paints it too, so no part of the row goes untinted while\n a sideways scroll waits for its cells. A Placeholder paints no scrollable cell, only its\n pinned ones and its bar, which is its ::after, so it keeps the tint on the row. Every\n part of the row is then one tint deep over its own ground, which is what the token says.\n The separating rule is likewise a 1px gradient, not a border: .ex-row's height is\n content-box, so a border would make every total row one pixel taller than the\n arithmetic says — the drift ADR-0013 warns about, and invisible on screen. */\n.ex-row-group, .ex-row-group .ex-cell {\n --ex-tint: linear-gradient(var(--ex-row-group-background, rgba(128, 128, 128, 0.08)), var(--ex-row-group-background, rgba(128, 128, 128, 0.08)));\n --ex-row-rule: none;\n}\n.ex-row-total, .ex-row-total .ex-cell {\n --ex-tint: linear-gradient(var(--ex-row-total-rule-color, rgba(128, 128, 128, 0.45)) 0 1px, transparent 1px);\n --ex-row-rule: none;\n}\n.ex-row-group, .ex-row-total { background-image: none; }\n.ex-row-group .ex-cell, .ex-row-group .ex-gap, .ex-row-group.ex-placeholder,\n.ex-row-total .ex-cell, .ex-row-total .ex-gap, .ex-row-total.ex-placeholder { background-image: var(--ex-tint); }\n.ex-row-group:not(.ex-placeholder)::after, .ex-row-total:not(.ex-placeholder)::after {\n content: \"\";\n flex: 1 1 auto;\n background-image: var(--ex-tint);\n}\n/* Widths come from the C#-resolved per-column widths as inline styles (ADR-0016);\n the padding is a Geometry Token from the same Grid Metrics the width estimates read,\n so the pairing is structural rather than a comment (ADR-0028). The ellipsis only\n ever shows on Text/Boolean: a number that does not fit is painted as #### by the\n core, never clipped. */\n.ex-cell, .ex-header-cell { flex: 0 0 auto; box-sizing: border-box; padding: 0 var(--ex-cell-padding-x, 8px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n/* A #### run (ADR-0016, 2026-10-02) is longer than its cell, and may break between any two #: the\n cell is one line tall, so the line it shows is exactly the # that fit in the face and weight it is\n painted in, and the rest fall to a line the cell hides. No # is cut and no ellipsis is drawn, and\n nothing is measured. A shown number keeps the cell's nowrap, so it never wraps out of sight. */\n.ex-hashes { white-space: normal; word-break: break-all; }\n/* The header is the delegated click target the way .ex-viewport is for the rows: its\n cells and gap spacer are transparent to the mouse, so the sort click's offsets are\n measured from the header's own left edge and the column is read from the geometry\n (ADR-0012). position: relative carries no offsets — it exists so the resize grip\n can anchor to the cell's own right edge. */\n.ex-header-cell, .ex-header .ex-gap { pointer-events: none; }\n.ex-header-cell { position: relative; }\n/* The grip in the header cell's right-hand edge (ADR-0016): the one part of a header\n cell that takes its own pointer, because it starts a different gesture. Its width is a\n hit target, a Geometry Token from Grid Metrics (ADR-0027/0028; UX-1). */\n.ex-resize-grip { position: absolute; top: 0; right: 0; width: var(--ex-resize-grip-width); height: 100%; cursor: col-resize; pointer-events: auto; }\n/* The guide a resize drags (ADR-0016) and the reorder drop indicator (ADR-0011):\n painted, never laid out — their colours are Visual Tokens (ADR-0029). Their width is a\n Geometry Token, drawn as a rule is (--ex-rule-dp, ADR-0090): rounded down to the Device\n Pixel and never under one, so whole Device Pixels at every scale and zoom. C# puts their\n left edge on a Device Pixel (UX-1). */\n.ex-resize-guide, .ex-drop-indicator { position: absolute; top: 0; bottom: 0; width: max(var(--ex-dp), round(down, var(--ex-column-guide-width), var(--ex-dp))); z-index: 7; pointer-events: none; }\n.ex-resize-guide { background: var(--ex-resize-guide-color, rgba(60, 120, 216, 0.7)); }\n.ex-drop-indicator { background: var(--ex-drop-indicator-color, rgba(60, 120, 216, 0.9)); }\n/* The sort indicator is painted from the same attribute the accessibility tree reads\n (ADR-0033), so the two cannot disagree. A glyph, not a class: the stable class list\n is closed (ADR-0029) and this earns no entry in it. */\n/* The sort mark stands in a box C# sizes, as the menu button does: the header estimate\n charges exactly this width, so a sorted label is never cut by its own mark (ADR-0016). */\n.ex-header-cell[aria-sort=\"ascending\"]::after,\n.ex-header-cell[aria-sort=\"descending\"]::after { display: inline-block; width: var(--ex-sort-mark-width, 20px); text-align: right; opacity: 0.6; }\n.ex-header-cell[aria-sort=\"ascending\"]::after { content: \"▲\"; }\n.ex-header-cell[aria-sort=\"descending\"]::after { content: \"▼\"; }\n.ex-cell-numeric { text-align: right; }\n/* A cell that shows a number may use one Device Pixel of its right padding (ADR-0090, decided\n 2026-10-11; VZ-19). Its column's edges lie on Device Pixels, so it can be painted up to one\n narrower than declared, while the #### decision, General's fit and Auto width read the declared\n width, and the estimate can leave less than that pixel to spare: 0.35px over a bold 12% in DejaVu\n Sans, Linux's system-ui. With the pixel, the content box is never narrower than the declared\n content, however the edges round, at every scale and zoom. Both lengths are Geometry Tokens C#\n writes inline: the padding from the Grid Metrics, and the Device Pixel once the browser has told\n it (its resolution steps below stand until then), so the stylesheet adds no pixel of its own\n (ADR-0027/0028). A number aligned right sits that pixel further right; aligned left it gains the\n room at its end. Text is not given it: an ellipsis is its decided overflow, and the pixel would\n only move where. --ex-number-dp is what a cell gives: a Device Pixel on a number's, nothing on any\n other, set on every cell so that a grid inside a cell inherits none. A right border's rule gives\n its width back out of what is left (AppearanceStyles). */\n.ex-cell { --ex-number-dp: 0px; }\n.ex-cell-numeric { --ex-number-dp: var(--ex-dp); padding-right: calc(var(--ex-cell-padding-x, 8px) - var(--ex-number-dp)); }\n/* A Header Group's rectangle (ADR-0032): a caption over its members, centred, on the\n header's own ground. Absolutely positioned from the geometry, so it stands whether\n or not its leaves are in the DOM; cost is per rectangle (ADR-0008's economy). Its\n label gets the Text treatment — ellipsis, never #### — and it is transparent to the\n mouse like every other header cell, so a click on it sorts nothing. */\n.ex-header-group {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n padding: 0 var(--ex-cell-padding-x, 8px);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: center;\n background: var(--ex-header-background, Canvas);\n pointer-events: none;\n}\n/* The pinned rectangles' zero-size sticky anchor — the pinned selection layer's trick,\n one tier up: a group is entirely pinned or entirely scrollable (ADR-0032). */\n.ex-header-groups-pinned { position: sticky; left: 0; width: 0; height: 0; z-index: 6; }\n.ex-header-groups-pinned .ex-header-group { pointer-events: none; }\n/* A Header Group's toggle (ADR-0400 section 7): a button of the grid's own at the rectangle's\n left, as tall as the tier, its box the --ex-header-group-toggle-width Geometry Token the core\n emits, so the label's room is the rectangle less it. Its picture is a token: a CSS image\n painted as a mask in --ex-header-group-toggle-color, the collapsed icon while aria-expanded\n is false and the expanded one while it is true, so a Wrapper draws its design system's\n chevron by setting two tokens and renders nothing. It takes its own press: the rectangle\n around it stays transparent to the mouse, where a press is the group's drag. */\n.ex-header-group:has(> .ex-header-group-toggle) { padding-left: var(--ex-header-group-toggle-width, 20px); }\n.ex-header-group-toggle {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: var(--ex-header-group-toggle-width, 20px);\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n pointer-events: auto;\n}\n.ex-header-group-toggle::before {\n content: \"\";\n position: absolute;\n inset: 0;\n margin: auto;\n width: 1em;\n height: 1em;\n background-color: var(--ex-header-group-toggle-color, currentColor);\n -webkit-mask: var(--ex-header-group-collapsed-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3.5 10.5 8 6 12.5' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\")) center / contain no-repeat;\n mask: var(--ex-header-group-collapsed-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 3.5 10.5 8 6 12.5' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\")) center / contain no-repeat;\n}\n.ex-header-group-toggle[aria-expanded=\"true\"]::before {\n -webkit-mask-image: var(--ex-header-group-expanded-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 6 8 10.5 12.5 6' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\"));\n mask-image: var(--ex-header-group-expanded-icon, url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 6 8 10.5 12.5 6' fill='none' stroke='%23000' stroke-width='1.6'/%3E%3C/svg%3E\"));\n}\n/* The Hidden Mark (ADR-0400 section 6): the corner a modified cell wears, in the group's top\n right corner, painted with the token of the Cell State the hidden columns hold, so a reader\n who knows what a modified cell looks like knows what the mark says. It takes the pointer\n for itself alone, so its reason shows as its tooltip. */\n.ex-hidden-mark {\n position: absolute;\n top: 0;\n right: 0;\n width: 6px;\n height: 6px;\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n pointer-events: auto;\n}\n.ex-hidden-mark-modified { background: var(--ex-state-modified-mark, rgba(106, 68, 166, 0.9)); }\n.ex-hidden-mark-error { background: var(--ex-state-error-color, #b3261e); }\n.ex-hidden-mark-stale { background: var(--ex-state-stale-color, #8a6d1f); }\n/* A missing cell's token is a faint tint, which on a 6px corner of the header cannot be seen: the\n mark takes the token's colour at full strength, so a closed group never looks like one hiding\n nothing (principle 1). */\n.ex-hidden-mark-missing { background: rgb(from var(--ex-state-missing-background, rgba(128, 128, 128, 0.10)) r g b); }\n/* The seam an Action or Template cell crosses (ADR-0020). Everything under .ex-row is\n pointer-events: none so the Viewport can hit-test by arithmetic; a control that wants\n its own click turns them back on for itself alone. The inert parts of the cell stay\n transparent, so clicking beside a button still selects the cell as any other does —\n and the cell element carries the stopPropagation, because an event bubbling out of a\n button would otherwise reach the Viewport handler carrying offsets measured from the\n button. `ex-interactive` is the class a Consumer puts on its own control inside a\n Template Column; the grid owns the buttons in an Action Column. */\n.ex-action, .ex-interactive, .ex-mark { pointer-events: auto; }\n/* The Mark Column's checkbox (ADR-0043), on a Detail row and in the header. Its state is\n aria-checked — the one attribute assistive technology reads — so the stylesheet reads it\n too rather than a second, class-borne copy that could disagree. Sized in em, from the\n font-size Geometry Token the core already writes, so it scales with the Density and adds\n no length of its own; the tick is painted, not laid out. */\n.ex-mark {\n appearance: none;\n box-sizing: border-box;\n width: 1em;\n height: 1em;\n padding: 0;\n margin: 0;\n font: inherit;\n line-height: 1;\n border: var(--ex-action-border-width, 1px) solid var(--ex-mark-border-color, currentColor);\n background: var(--ex-mark-background, Canvas);\n color: var(--ex-mark-checked-color, HighlightText);\n cursor: pointer;\n}\n.ex-mark[aria-checked=\"true\"], .ex-mark[aria-checked=\"mixed\"] { background: var(--ex-mark-checked-background, Highlight); }\n.ex-mark[aria-checked=\"true\"]::after { content: \"\\2713\"; }\n.ex-mark[aria-checked=\"mixed\"]::after { content: \"\\2013\"; }\n.ex-header .ex-mark { pointer-events: auto; }\n/* The button's own box comes from the action Geometry Tokens, which are what an Auto\n Action Column's width is measured from (ADR-0016/0028) — the pairing is structural,\n so the column cannot stop fitting its own buttons. */\n.ex-action { font: inherit; line-height: normal; margin: 0 var(--ex-action-gap, 4px) 0 0; padding: 0 var(--ex-action-padding-x, 6px); border-width: var(--ex-action-border-width, 1px); cursor: pointer; }\n/* The chosen action of an Interactive cell (ADR-0029/0037). The keyboard never leaves the\n root, so :focus-visible has nothing to match; the row paints this one button instead,\n with the Focus outline's token — it is where the keyboard is. Drawn inside the button's\n own box, because the cell clips anything that reaches past its edge: its width and inward\n offset are the Focus outline's, set with it in the selection's rules below. */\n.ex-action-chosen { outline-style: solid; outline-color: var(--ex-focus-outline, CanvasText); }\n/* Borders (ADR-0050 item 15; ADR-0071, \"What the measurement chose\"): each cell draws its own share\n of Excel's centred line — the upper (left) cell the gridline's pixel and what lies above (left\n of) it, the lower (right) cell the pixel a thick or double line reaches past it — so nothing is\n painted outside a row and no row changes height. A solid line on the gridline is the cell's own\n bottom or right border (its generated class gives a right border's width back out of the\n padding); everything else is a background layer over the Fill and under the text. The grid's\n generated stylesheet names each layer in custom properties (an image, its size, where it stands;\n per side t, r, b, l), one class per side, line style and colour, and this one rule reads them, so\n the sheet grows with the lines and never with their combinations. Beneath the lines, the cell's\n tint (--ex-tint: a Row Stripe's, a Row Kind's or a Missing state's, as the cascade picked it),\n which the lines never take away (ADR-0038, ADR-0024, ADR-0006). It covers the whole cell, as on\n a cell without lines, so it also lies over a neighbour's Fill covering the gridline this cell\n holds (--ex-cover-r, --ex-cover-b: the right or lower cell's, over this cell's own Fill too, and\n beneath any line on that gridline) — in a group or total row that neighbour wears the same\n tint, and a total row's rule runs on across the gridline — and beneath those the column rule,\n an inset shadow everywhere else, which would lie over the lines. Last, the row's rule, where a\n cell whose own ground hides the row's names it in --ex-row-rule (a Pinned Column's cell does,\n above): beneath the covers too, as a Fill covers a gridline. All of it lies over the cell's\n own Fill, its background colour. Declared after Row Kind, whose rules paint the tint alone, and\n before the Cell States, so Missing's rule leaves a lined cell's layers to this one. */\n.ex-cell.ex-lined {\n background-image: var(--ex-line-t, none), var(--ex-line-r, none), var(--ex-line-b, none), var(--ex-line-l, none),\n var(--ex-tint, none), var(--ex-cover-r, none), var(--ex-cover-b, none),\n linear-gradient(to left, var(--ex-column-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent 0),\n var(--ex-row-rule, none);\n background-size: var(--ex-line-t-size, 0 0), var(--ex-line-r-size, 0 0), var(--ex-line-b-size, 0 0), var(--ex-line-l-size, 0 0),\n 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%;\n background-position: var(--ex-line-t-at, 0 0), var(--ex-line-r-at, 0 0), var(--ex-line-b-at, 0 0), var(--ex-line-l-at, 0 0),\n 0 0, 0 0, 0 0, 0 0, 0 0;\n background-repeat: no-repeat;\n background-origin: border-box;\n box-shadow: none;\n}\n/* One device pixel: a line's lengths are the screen's, as Excel's are — at 150% a thin line is\n still one pixel and thick three (the eleventh Windows run, case 9), and a dash pattern is the same\n number of pixels at every scale, its long dash 9 (the fourteenth, case 18). The resolution follows\n browser zoom and display scale alike; a resolution between two steps draws a little under a\n pixel, which the browser blends. Paint only: nothing in C# computes with it.\n\n --ex-rule-dp is a gridline — a row's rule and a column's — in whole device pixels: --ex-rule-width\n rounded down to the device pixel, and never thinner than the token where the token is under one.\n So 1px is one device pixel at 150%, as Excel's gridline is (ADR-0071, Part C of the eleventh run).\n Left at 1.5 device pixels, the band was one row under Chrome's GPU rasteriser and two under its\n software one — CI's, headed under xvfb on Linux — and so was the Fill over it (ticket 99). At a\n whole scale it is the token, as before. A column's rule joined it when column edges were put on\n device pixels (ADR-0090): on an edge between two, no width was exact.\n\n These steps are the fallback. Once the browser has told the grid its device pixel (ADR-0090,\n ADR-0021's eighth entry), C# writes --ex-dp inline on the root, exact at any resolution. */\n.ex-grid {\n --ex-dp: 1px;\n --ex-rule-dp: max(min(var(--ex-rule-width, 1px), var(--ex-dp)), round(down, var(--ex-rule-width, 1px), var(--ex-dp)));\n}\n@media (min-resolution: 1.1dppx) { .ex-grid { --ex-dp: calc(1px / 1.1); } }\n@media (min-resolution: 1.25dppx) { .ex-grid { --ex-dp: 0.8px; } }\n@media (min-resolution: 1.5dppx) { .ex-grid { --ex-dp: calc(1px / 1.5); } }\n@media (min-resolution: 1.75dppx) { .ex-grid { --ex-dp: calc(1px / 1.75); } }\n@media (min-resolution: 2dppx) { .ex-grid { --ex-dp: 0.5px; } }\n@media (min-resolution: 2.5dppx) { .ex-grid { --ex-dp: 0.4px; } }\n@media (min-resolution: 3dppx) { .ex-grid { --ex-dp: calc(1px / 3); } }\n/* Tone (ADR-0006/0029): the meaning a column's rule attached to the value — a gain, a\n loss — as the theme's tokens paint it. No default colour: the bare grid paints a\n toned cell as an ordinary one until a token says otherwise, which is Excel's default\n number format too. Declared before the Cell State block, at the same specificity, so a\n state the Consumer named outranks a tone its rule derived, whatever colours a theme\n gives the two. */\n.ex-cell.ex-tone-positive { color: var(--ex-tone-positive-color, inherit); }\n.ex-cell.ex-tone-negative { color: var(--ex-tone-negative-color, inherit); }\n/* Cell State (ADR-0006): the grid says which of the five states a cell is in, the theme\n says what that looks like — hence a variable per state with a default that only has to\n be legible. Every one of them decorates; none replaces the text. Missing in particular\n paints no substitute glyph: what is missing is the metadata's claim, not the value, and\n a Blank cell that really is Blank must stay distinguishable from one nobody could\n answer for (ADR-0023). The accompanying data — an as-of stamp, a failure message —\n stays with the Consumer and is not on the cell.\n\n Written as `.ex-cell.ex-state-x`, and declared after the Row Kind block and the Tone\n block, so that a state the Consumer named outranks the role of the row it happens to sit\n in, and the tone of its value. A state is something the grid was explicitly told; a role\n is something about its neighbours, a tone something a rule derived, and it is the state\n that must never be the one that disappears. */\n.ex-cell.ex-state-stale { color: var(--ex-state-stale-color, #8a6d1f); font-style: var(--ex-state-stale-style, italic); }\n/* Missing's tint is a cell's tint like a stripe's or a role's: named here, after them, so it\n wins, and painted beneath the lines by .ex-lined, which is declared before this block and\n would otherwise lose every layer it paints to this one. Over the row's rule a Pinned Column's\n cell paints (above), as a scrollable cell's tint lies over the rule its row paints. */\n.ex-cell.ex-state-missing {\n --ex-tint: linear-gradient(var(--ex-state-missing-background, rgba(128, 128, 128, 0.10)), var(--ex-state-missing-background, rgba(128, 128, 128, 0.10)));\n}\n.ex-cell.ex-state-missing:not(.ex-lined) { background-image: var(--ex-tint), var(--ex-row-rule, none); }\n.ex-cell.ex-state-error { color: var(--ex-state-error-color, #b3261e); text-decoration: var(--ex-state-error-decoration, underline wavy); text-decoration-skip-ink: none; }\n/* A corner mark rather than a fill: the value has been overridden, and the number itself\n is what the reader is here for. A triangle in the top right corner, where Excel marks a\n cell that carries a note: the cell's ::after, out of flow, so it costs no element in the\n markup and takes no room from the text or the row's flow. --ex-state-modified-mark is its\n colour (ADR-0029). The cell is made its containing block at no specificity, so a Pinned\n Column's cell stays sticky; nothing in the overlay is beneath it, since every layer there\n carries a z-index. The cell keeps its column rule.\n\n Until 2026-10-07 the mark was an inset box-shadow, which cannot paint a corner: it drew a\n band along the whole top and the whole right edge, and a Wrapper that set the token to a\n colour, as ExGrid.MudBlazor's did, turned it into no mark at all. */\n:where(.ex-cell.ex-state-modified) { position: relative; }\n.ex-cell.ex-state-modified::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n width: 6px;\n height: 6px;\n background: var(--ex-state-modified-mark, rgba(106, 68, 166, 0.9));\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n pointer-events: none;\n}\n/* The Change Highlight (ADR-0068): the Consumer said the cell's shown value changed less than\n ChangeHighlightDuration ago. One colour, whichever way the value moved: by default a 40%\n tint of the system colour Mark over the cell's own ground (ADR-0029). Mark itself stays pure\n yellow on a dark page while the text turns light, which leaves the value unreadable\n (measured in Chromium, 2026-10-01); the tint reads at about 5:1 there and 20:1 on a light\n page. The class comes and goes in one step and nothing here transitions or animates: rows\n are recycled, and a fade would run from another row's colour to this one's (ADR-0027 P8).\n\n A tint, so a background IMAGE over the Pinned Column's opaque ground, as every tint is\n (ADR-0006): a translucent mark never makes a pinned cell see-through. It is laid over exactly\n the layers the cell paints without it, and takes none of them away. Over the row's rule that\n a Pinned Column's cell paints (--ex-row-rule), as the scrollable cells beside it lie over the\n rule their row paints beneath them. Over a stripe's or a role's tint (--ex-tint), so the mark\n wins the cell over a stripe and a role, and their grounds stay beneath it. Beneath a total\n row's rule, a line and not a ground, and beneath a Missing state's tint: a state must never be\n the thing that disappears (ADR-0006). Beneath a cell's lines (.ex-lined, ADR-0050 item 15),\n which lie above every ground, as above a Fill (DC-59). A Fill is the cell's colour, beneath\n every image, so the mark lies over it. Declared after the stripes, Row Kind and Cell State,\n and after .ex-lined, so at equal specificity each rule here wins the cell it names. The\n overlays paint above every cell, so no mark hides a selection, the Focus or a band. */\n.ex-cell.ex-changed {\n background-image: linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-row-rule, none);\n}\n.ex-row-stripe .ex-pinned.ex-changed {\n background-image: linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-row-rule, none), var(--ex-tint);\n}\n.ex-row-group .ex-cell.ex-changed {\n background-image: linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-tint);\n}\n.ex-row-total .ex-cell.ex-changed {\n background-image: var(--ex-tint), linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)));\n}\n.ex-cell.ex-state-missing.ex-changed:not(.ex-lined) {\n background-image: var(--ex-tint), linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))), var(--ex-row-rule, none);\n}\n/* A marked cell with lines paints .ex-lined's layers with the mark among them: one more layer,\n so one more size and position, whole and at the origin as the grounds are. */\n.ex-cell.ex-lined.ex-changed {\n background-image: var(--ex-line-t, none), var(--ex-line-r, none), var(--ex-line-b, none), var(--ex-line-l, none),\n linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))),\n var(--ex-tint, none), var(--ex-cover-r, none), var(--ex-cover-b, none),\n linear-gradient(to left, var(--ex-column-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent 0),\n var(--ex-row-rule, none);\n background-size: var(--ex-line-t-size, 0 0), var(--ex-line-r-size, 0 0), var(--ex-line-b-size, 0 0), var(--ex-line-l-size, 0 0),\n 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%;\n background-position: var(--ex-line-t-at, 0 0), var(--ex-line-r-at, 0 0), var(--ex-line-b-at, 0 0), var(--ex-line-l-at, 0 0),\n 0 0, 0 0, 0 0, 0 0, 0 0, 0 0;\n}\n.ex-row-total .ex-cell.ex-lined.ex-changed, .ex-cell.ex-lined.ex-state-missing.ex-changed {\n background-image: var(--ex-line-t, none), var(--ex-line-r, none), var(--ex-line-b, none), var(--ex-line-l, none),\n var(--ex-tint, none),\n linear-gradient(var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent)), var(--ex-change-highlight-background, color-mix(in srgb, Mark 40%, transparent))),\n var(--ex-cover-r, none), var(--ex-cover-b, none),\n linear-gradient(to left, var(--ex-column-rule-color, transparent) 0 var(--ex-rule-dp, 1px), transparent 0),\n var(--ex-row-rule, none);\n background-size: var(--ex-line-t-size, 0 0), var(--ex-line-r-size, 0 0), var(--ex-line-b-size, 0 0), var(--ex-line-l-size, 0 0),\n 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%;\n background-position: var(--ex-line-t-at, 0 0), var(--ex-line-r-at, 0 0), var(--ex-line-b-at, 0 0), var(--ex-line-l-at, 0 0),\n 0 0, 0 0, 0 0, 0 0, 0 0, 0 0;\n}\n/* The Match Mark (ADR-0332 §4): while the find panel holds a search, every painted cell that\n matches it, and the current match apart, the Focus a found step moved to. Two Visual Tokens\n (ADR-0027/0029), both tints of the orange a browser marks its current match with:\n --ex-match-mark-fill a light one, 25%, and --ex-match-mark-current-fill a strong one, 55%, so the\n current match reads apart from the rest. Neither is the Change Highlight's tint of Mark, so a\n match never reads as a changed value, nor the selection's blue.\n\n Painted by the cell's ::before, not as a ground: a cell's grounds are a stack of images that\n each combination of stripe, Row Kind, state, lines and Change Highlight restates (above), and a\n mark that joined them would have to be restated in every one. The cell isolates, so the mark at\n z-index -1 lies over all of them, the cell's own Fill included, and beneath the text, which keeps\n its colour; a Pinned Column's cell already makes its own stacking context, and stays sticky,\n since the position here has no specificity. Out of flow, so it costs no element and takes no\n room. The overlays paint above every cell, so no mark hides a selection, the Focus or a band. */\n:where(.ex-cell.ex-match-mark) { position: relative; isolation: isolate; }\n.ex-cell.ex-match-mark::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: -1;\n background: var(--ex-match-mark-fill, color-mix(in srgb, #ff9632 25%, transparent));\n pointer-events: none;\n}\n.ex-cell.ex-match-mark-current::before {\n background: var(--ex-match-mark-current-fill, color-mix(in srgb, #ff9632 55%, transparent));\n}\n/* A header Find stops on (ADR-0333 §1) wears the same mark, the current one apart: a column header\n or a Header Group label, painted by its ::before over its own ground and beneath its text, as a\n cell's is. Both are positioned already (relative, sticky when pinned, absolute for a group), and\n their boxes are the columns' own, so the mark's edges lie on the Device Pixels the cells' do\n (ADR-0090). The sort mark keeps ::after. */\n:where(.ex-header-cell.ex-match-mark, .ex-header-group.ex-match-mark) { isolation: isolate; }\n.ex-header-cell.ex-match-mark::before,\n.ex-header-group.ex-match-mark::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: -1;\n background: var(--ex-match-mark-fill, color-mix(in srgb, #ff9632 25%, transparent));\n pointer-events: none;\n}\n.ex-header-cell.ex-match-mark-current::before,\n.ex-header-group.ex-match-mark-current::before {\n background: var(--ex-match-mark-current-fill, color-mix(in srgb, #ff9632 55%, transparent));\n}\n/* What stands in for the columns left out to the left of the first painted one. It must\n not be allowed to shrink: a flex-shrunk spacer would slide every painted column left\n of where the arithmetic put it, and the header and the body would disagree. */\n.ex-gap { flex: 0 0 auto; }\n/* A Pinned Column stays against the Viewport's left edge while the rest pans under it\n (ADR-0004). `left` is the column's own offset, set inline from C#: sticky keeps an\n element in its normal flow position until the content scrolls past that offset. Opaque\n for the same reason the header is — the columns underneath pass beneath it. */\n/* background-COLOR, not the shorthand: Cell State and Row Kind paint their tints as\n background images on the same cell, and the shorthand would reset them. The colour is\n the ground underneath; the tints layer on top, and a cell's lines on top of them. */\n.ex-pinned { position: sticky; z-index: 2; background-color: var(--ex-pinned-background, Canvas); }\n.ex-header .ex-pinned { z-index: 5; background-color: var(--ex-header-background, Canvas); }\n/* The Row Headings and their corner (ADR-0050): first in each row's flow and in the\n header's, held at the Viewport's left edge over everything that scrolls or is pinned —\n a selection passing sideways goes under them, as it goes under a Pinned Column. Their\n width is geometry and arrives inline from the resolved metrics (ADR-0027/0028); nothing\n here sizes them. Paint only: the Viewport's and the header's delegated handlers read\n the press from the offsets. */\n.ex-row-heading, .ex-headings-corner {\n position: sticky;\n left: 0;\n flex: 0 0 auto;\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n text-align: center;\n pointer-events: none;\n background: var(--ex-heading-background, var(--ex-header-background, Canvas));\n color: var(--ex-heading-color, var(--ex-header-color, inherit));\n box-shadow: inset calc(0px - var(--ex-rule-dp, 1px)) 0 var(--ex-heading-rule-color, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)));\n}\n/* The header's rule runs under every header cell (UX-17). A pinned header cell and the\n Headings' corner stand on the band with an opaque ground of their own, which covers the\n band's bottom pixel, so each paints the same rule again on itself. */\n.ex-header .ex-pinned, .ex-headings-corner {\n background-image: linear-gradient(to top, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)) 0 var(--ex-rule-width, 1px), transparent var(--ex-rule-width, 1px));\n}\n/* The Formula Bar (ADR-0051): a band in the room the root leaves at its top. Its height,\n its width and the Name Box's width are geometry and arrive inline from the resolved\n metrics (ADR-0027/0028); what is here only lays the two fields side by side. */\n.ex-formula-bar {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n box-sizing: border-box;\n line-height: var(--ex-header-height);\n background: var(--ex-formula-bar-background, var(--ex-header-background, Canvas));\n color: var(--ex-formula-bar-color, inherit);\n background-image: linear-gradient(to top, var(--ex-header-rule-color, rgba(128, 128, 128, 0.45)) 0 var(--ex-rule-width, 1px), transparent var(--ex-rule-width, 1px));\n}\n.ex-name-box, .ex-formula-bar-text {\n box-sizing: border-box;\n height: 100%;\n margin: 0;\n font: inherit;\n line-height: inherit;\n color: inherit;\n background: transparent;\n border: none;\n outline: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ex-name-box {\n flex: 0 0 auto;\n box-shadow: inset calc(0px - var(--ex-rule-width, 1px)) 0 var(--ex-header-rule-color, rgba(128, 128, 128, 0.45));\n}\n.ex-formula-bar-text { flex: 1 1 auto; min-width: 0; }\n/* The text field's padding is the coloured text's beside it too (ADR-0057): one rule, so the\n two cannot drift. */\n.ex-name-box, .ex-formula-bar-text, .ex-reference-text.ex-reference-text-bar { padding: 0 var(--ex-cell-padding-x, 8px); }\n/* The bar's text field wears the Cell Editor's class — it is the editor's second surface,\n and the key listener knows an editor by it (ADR-0051/0018) — but it is laid out in the\n band, not floated over a cell. */\n.ex-formula-bar > .ex-editor {\n position: static;\n z-index: auto;\n outline: none;\n line-height: inherit;\n background: transparent;\n color: inherit;\n}\n/* Text that is not the Focus cell's own, such as the Anchor's Formula over a spilled cell\n (ADR-0125): dimmed, as Excel's is. After the rule above, and narrower, so its colour wins. */\n.ex-formula-bar > .ex-formula-bar-text.ex-formula-bar-borrowed { color: var(--ex-formula-bar-borrowed-color, GrayText); }\n.ex-formula-bar > .ex-editor:focus,\n.ex-formula-bar > .ex-editor:focus-within { outline: var(--ex-editor-outline, 2px solid Highlight); outline-offset: -2px; }\n.ex-name-box-form { display: contents; }\n.ex-row-heading { z-index: 4; }\n.ex-headings-corner { z-index: 7; }\n/* Selection is painted as overlay rectangles, never as a class on the selected cells\n (ADR-0008): a tint and a box per range in each layer it reaches (ADR-0206), so what it costs\n depends on how many rectangles there are and not on how many cells they cover — and no row\n parameter carries selection, which keeps \"the row changed\" meaning the data changed (ADR-0003).\n\n The layers sit inside .ex-viewport deliberately. Its transform makes it a stacking\n context, so the Pinned Columns' z-index counts only in there: a rectangle outside would\n paint over the pinned block rather than sliding beneath it. The price is that the\n coordinates are relative to the painted slice rather than to the content.\n Order in here: cells, selection (1), Pinned Columns (2), the pinned shade and then the pinned\n selection (both 3, in that order by tree order); the header (4, 5) is outside and covers the lot. */\n.ex-selection { position: absolute; top: 0; left: 0; z-index: 1; }\n/* The pinned part of a range travels with the Pinned Columns. Zero-sized and ahead of the rows\n in the flow — after the Keyboard Field, and after the pinned shade while that stands — so it\n displaces no row; `left` with no `top` sticks it to the Viewport's left edge and to nothing\n else. The pinned shade (ADR-0206) is the same kind of layer, placed\n immediately before it: the pinned bands and tints, the washes, in a layer of their own, so a\n stylesheet can blend that layer as one group with the pinned cells it lies over (ExSheet's Paper\n does; the core blends nothing). Everything drawn on top — boxes and outlines, the Focus, the\n Copied Range, the fill handle, the Reference Outlines — stays in the pinned selection layer. */\n.ex-selection-pinned, .ex-shade-pinned { position: sticky; left: 0; width: 0; height: 0; z-index: 3; }\n/* No layer may take a click — .ex-viewport underneath is where the mouse handlers read their\n offsets from. */\n.ex-selection, .ex-selection-pinned, .ex-shade-pinned { pointer-events: none; }\n/* A range is a tint and a box (ADR-0206). The tint is translucent, so the value reads through it:\n geometry is the only kind of effect an overlay can paint, and this is also what Excel looks like\n (ADR-0008). It is clipped by the hole the Focus makes in it: the selection's tint never covers\n the Focus cell, as Excel's never covers the active cell (ADR-0008, 2026-09-29; the Focus band and\n the hover band are other overlays and keep theirs). The hole is geometry and arrives inline on\n the tint, as the polygon it names, only on a tint that holds the Focus; declared here so an\n ancestor's value can never reach a tint that has none. The box, `ex-range`, draws the outline,\n unclipped by the hole, so an outline drawn inside it passes the Focus's cell without a gap. In\n each layer every tint comes before every box, so the outlines lie over the tints by tree order\n alone, and nothing isolates its own painting. */\n.ex-range-tint {\n position: absolute;\n --ex-range-hole: none;\n background: var(--ex-selection-fill, rgba(60, 120, 216, 0.18));\n clip-path: var(--ex-range-hole);\n}\n.ex-range { position: absolute; }\n/* The Focus band (ADR-0008): one more overlay rectangle, first in its layer so every\n range stays readable over it. Enabling it is a parameter; this is only its colour. */\n.ex-focus-row { position: absolute; background: var(--ex-focus-row-fill, rgba(128, 128, 128, 0.10)); }\n/* The Focus column band (ADR-0008, 2026-11-03): the Focus band turned sideways, down the\n column's cells. Its colour is the row band's unless set, so a Wrapper that tints one tints both. */\n.ex-focus-column { position: absolute; background: var(--ex-focus-column-fill, var(--ex-focus-row-fill, rgba(128, 128, 128, 0.10))); }\n/* The hover band (ADR-0029): the row under the pointer, told to the grid only when it\n changes (ADR-0021's fifth entry) and painted as the Focus band is. Enabling it is a\n parameter; this is only its colour, and the default is a shade lighter than the\n Focus band so the two read apart when they coincide. */\n.ex-hover-row { position: absolute; background: var(--ex-row-hover-background, rgba(128, 128, 128, 0.06)); }\n/* The Focus outline's width, and every outline drawn in it: the pointing outline, the chosen\n action, and under forced colors the Focus's own and a range's. A range's is only drawn where its\n style is given. Each lies wholly inside its box: an outline straddling the edge lost its outer\n pixel beneath whatever is painted above the selection layer — a Pinned Column, the Headings, the\n header — and was thinner on that side than on the others (UX-18). Inside, nothing above the\n layer covers any of it, and a cell scrolled beneath the pinned block still goes beneath it. */\n.ex-focus, .ex-range, .ex-point, .ex-action-chosen { outline-width: 2px; outline-offset: -2px; }\n/* CanvasText, not Highlight: measured in the browser suite, Chrome's Highlight against\n Canvas is ~2:1 and UX-9 requires 3:1 — the ink colour contrasts by construction in\n both schemes, which is also roughly what Excel's own dark focus border does. */\n.ex-focus { position: absolute; outline-color: var(--ex-focus-outline, CanvasText); }\n/* The Selection's outline — the Focus's, and the one a Selection of a single range carries\n round the whole range — lies where Excel's does (ADR-0008, 2026-10-01; the eleventh Windows\n run, case 11): on the gridline and one pixel outside the range, so it covers a Border on every\n outer edge. That is the outline's width outside the top and the left edges, and on the bottom\n and the right the gridline's pixel, which is the range's own last, and the outline's width less\n it past the edge. The Heading Mark replaces a side covered by the header or Row Headings\n (ADR-0008, D2, 2026-10-14). At an unheaded grid edge or a pinned block's boundary there is no\n replacing mark, so that side stays inside: the core marks it with --ex-outline-in-t or\n --ex-outline-in-l from the geometry it already holds. The\n outline is a box of its own, so a side can move without moving the range's tint, and its width\n is --ex-outline-width, two Device Pixels by default so every side matches the Heading Mark\n at every scale (ADR-0008 D2 / ADR-0090). Paint only: nothing in C# reads the width. */\n.ex-focus::after, .ex-range-single::after {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: calc((var(--ex-outline-in-t, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n left: calc((var(--ex-outline-in-l, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n right: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n bottom: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n border: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) solid var(--ex-focus-outline, CanvasText);\n}\n/* The single range's outline has the token ADR-0029 reserved for it, the border Excel draws round\n the range's perimeter. It defaults to the Focus outline's colour, so a Theme that sets only that\n one colours both. */\n.ex-range-single::after { border-color: var(--ex-selection-outline, var(--ex-focus-outline, CanvasText)); }\n/* The Focus inside a single range has no outline of its own; the range's tint leaves its\n cell out. Its element stays, because under forced colors no tint is painted to mark it, and the\n forced-colors block below outlines it again. */\n.ex-range-single ~ .ex-focus::after { content: none; }\n/* The Focus among several ranges (ADR-0008, 2026-10-12). (2026-10-12, decided with the user: no\n range carries an outline there, and the Focus takes a thin border of one Device Pixel in a token\n of its own, --ex-focus-among-ranges-outline; where nothing names that token it is the Focus\n outline's colour.) So a Theme or a Wrapper that colours the Focus colours this border too, with no\n mapping of its own. The core marks that Focus with a class of its own, decided from the Selection.\n The first decision followed the seventeenth Windows run's h2, which read neither of Excel's ranges\n as carrying a single range's outline (observed: run 17, h2); the line of one device pixel the\n readings of 2026-10-12 read round each of Excel's areas (observed: R4) is not drawn here\n (2026-10-13, decided with the user: recorded as observed and not followed). The border lies inside the cell, a Device Pixel in from its top and left edges\n and from its own gridline (this stylesheet's choice), where Excel's active cell among several areas\n lay at Excel's 100% and 150% zoom on a 150% display (observed: the readings of 2026-10-12, R4; at a\n 100% display by generalisation). Inside, nothing above the selection layer covers any side of it,\n beside the Headings, a Pinned Column or under the header, so it needs none of the sides the core\n marks (UX-18); and every side is a whole Device Pixel from an edge that lies on one, so it lies on\n Device Pixels as the other lines do (ADR-0090). Paint only: nothing in C# reads its width. */\n.ex-focus.ex-focus-among-ranges::after {\n top: var(--ex-dp, 1px);\n left: var(--ex-dp, 1px);\n right: calc(var(--ex-rule-dp, 1px) + var(--ex-dp, 1px));\n bottom: calc(var(--ex-rule-dp, 1px) + var(--ex-dp, 1px));\n border: var(--ex-dp, 1px) solid var(--ex-focus-among-ranges-outline, var(--ex-focus-outline, CanvasText));\n}\n/* The Heading Mark (ADR-0008, 2026-10-13). For every Selection, the Headings of the columns and the\n rows that hold part of it carry a line of two Device Pixels on their edge toward the cells, where\n Excel's lay: under a column's Heading and down a row's right edge, over the Heading's own rule and\n the Device Pixel beside it (observed: the readings of 2026-10-12, R4 and R5). Wherever a header or\n Row Headings stand: a plain grid's header is marked as a Sheet's Headings are. The core places one\n box per run of marked Headings, the Headings' own, inline (ADR-0027/0028); the line is its border\n on that edge, so it lies on Device Pixels wherever the band's edge does (ADR-0090), and nothing in\n C# reads its width. Its colour is --ex-heading-mark, and where nothing names that token it is the\n Focus outline's (2026-10-13, decided with the user), so a Theme or a Wrapper that colours the Focus\n colours the mark too, with no mapping of its own.\n A column's box stands in the header band above its cells, beneath the pinned header cells (5) and\n the Headings' corner (7), as the columns pass beneath them; a Pinned Column's part rides a sticky\n layer above the pinned cells (6) at the band's left edge, as a pinned Header Group does. A row's box\n stands in a sticky layer of the Viewport above the Row Headings (4); the header covers it as it\n covers them. Paint only: no part of it takes the pointer. */\n.ex-heading-marks-pinned, .ex-heading-marks-rows { position: sticky; left: 0; width: 0; height: 0; pointer-events: none; }\n.ex-heading-marks-pinned { z-index: 6; }\n.ex-heading-marks-rows { z-index: 6; }\n.ex-heading-mark {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n pointer-events: none;\n border-style: solid;\n border-width: 0;\n border-color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText));\n}\n.ex-heading-mark-column { border-bottom-width: calc(2 * var(--ex-dp, 1px)); }\n.ex-heading-mark-row { border-right-width: calc(2 * var(--ex-dp, 1px)); }\n/* D1 (ADR-0008, 2026-10-14): headers belong to the root render; a hidden state marker\n follows every painted row with a Row Heading, so selection size does not change the DOM.\n CSS paints the original Heading without rendering its row or replacing its typography.\n The state conditions add no specificity; Sheet defaults can win in either load order.\n The line remains one overlay rectangle per run, above the Headings. */\n.ex-heading-state { display: none; }\n.ex-header-cell.ex-heading-marked {\n background-color: var(--ex-heading-mark-background, color-mix(in srgb, CanvasText 12%, var(--ex-header-background, Canvas)));\n color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText));\n}\n.ex-row:where(:has(+ .ex-heading-state.ex-heading-marked)) > .ex-row-heading {\n background-color: var(--ex-heading-mark-background, color-mix(in srgb, CanvasText 12%, var(--ex-heading-background, var(--ex-header-background, Canvas))));\n color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText));\n}\n.ex-header-cell.ex-heading-whole {\n background-color: var(--ex-heading-mark-whole-background, color-mix(in srgb, var(--ex-heading-mark, var(--ex-focus-outline, CanvasText)) 20%, var(--ex-header-background, Canvas)));\n}\n.ex-row:where(:has(+ .ex-heading-state.ex-heading-whole)) > .ex-row-heading {\n background-color: var(--ex-heading-mark-whole-background, color-mix(in srgb, var(--ex-heading-mark, var(--ex-focus-outline, CanvasText)) 20%, var(--ex-heading-background, var(--ex-header-background, Canvas))));\n}\n.ex-headings-corner::after {\n content: \"\";\n position: absolute;\n inset: 25%;\n background-color: GrayText;\n clip-path: polygon(100% 0, 100% 100%, 0 100%);\n}\n.ex-headings-corner-marked::after { background-color: var(--ex-heading-mark, var(--ex-focus-outline, CanvasText)); }\n/* The Copied Range (ADR-0170): dashes round a rectangle the clipboard holds as the grid copied it,\n Excel's moving border standing still (ADR-0027 P8). They lie where the Selection's outline lies,\n and are painted after it, because a copy usually shares its range: a band of the grid's ground\n is laid over that outline, and the dashes over the band, so the line reads as dashed rather than\n as the solid one beneath. The dashes take the Focus outline's colour, as the dashes of a grid\n pointed at do (ADR-0058). Paint only, like every rectangle here. */\n.ex-copied-range { position: absolute; }\n.ex-copied-range::after {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: calc((var(--ex-outline-in-t, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n left: calc((var(--ex-outline-in-l, 0) - 1) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n right: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n bottom: calc(var(--ex-rule-dp, 1px) - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n border: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) solid var(--ex-background, Canvas);\n outline: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) dashed var(--ex-focus-outline, CanvasText);\n outline-offset: calc(0px - var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n}\n/* The fill handle and a fill drag's target outline (ADR-0050, item 5): two more overlay\n rectangles, painted only when a Consumer declares fill. The handle's size and place are\n geometry and arrive inline from the resolved metrics (ADR-0027/0028) — the press that\n grabs it reads the same numbers. Paint only, like every rectangle here. */\n.ex-fill-handle { position: absolute; box-sizing: border-box; background: var(--ex-fill-handle-color, var(--ex-focus-outline, CanvasText)); border: var(--ex-rule-width, 1px) solid Canvas; }\n.ex-fill-target { position: absolute; outline: 1px dashed var(--ex-fill-outline, var(--ex-focus-outline, CanvasText)); outline-offset: -1px; }\n/* The pointing outline (ADR-0051): the range a Formula's Reference is being pointed at, while\n the Selection and the Focus stay where they are — dashed and heavier, so it reads as neither.\n Paint only, like every rectangle here. */\n.ex-point { position: absolute; outline-style: dashed; outline-color: var(--ex-focus-outline, CanvasText); }\n/* Reference Outlines (ADR-0057): the cells each Reference in an edited Formula names, in the\n colour its text wears. The palette's length is behaviour and lives in C# (seven, as Excel's);\n its colours are --ex-reference-1 to --ex-reference-7, which a Theme sets, never how many there\n are (ADR-0027/0029). The defaults are Excel's, as the eighth Windows run read them, over a light\n ground; over a dark one they are lifted a third of the way to white, which Excel was not seen\n to do, so that each reads at 3:1 or more there too. Carried as the element's own color, which it\n has no text to spend on. A solid line over a pale wash of the colour, as Excel's (#ebf0f9 is\n the first's), with a 1px gap of the cell's own ground between them, as Excel's white gap.\n The line lies inside the cells, where Excel's lies over the gridline, so that nothing drawn\n above the overlay can cover part of it (ADR-0057, \"deliberately unlike Excel\"). The padding is\n the line and the gap, and it only clips the wash. Paint only, like every rectangle here. */\n.ex-reference-outline { position: absolute; box-sizing: border-box; padding: 3px; outline: 2px solid currentColor; outline-offset: -2px; background: color-mix(in srgb, currentColor 10%, transparent) content-box; }\n/* A Reference Outline's grips (ADR-0480), drawn while a Consumer rewrites a dragged Reference: a\n strip along each edge, which moves the Reference, and a square at each corner, which resizes it.\n The strips are not seen; the squares are the Reference's colour with a margin of the grid's\n ground, as Excel draws them. Their boxes and the margin's width come inline from the Grid Metrics. They are the overlay's\n only rectangles that take the pointer, so that the browser shows their cursor where the pointer\n is, and nothing is heard for it. During a drag they let the pointer through to the rows, which\n read the drag's moves, and the cursor stays the drag's. */\n.ex-reference-grip { position: absolute; box-sizing: border-box; pointer-events: auto; cursor: move; }\n.ex-reference-square { background: currentColor; border: 0 solid var(--ex-background, Canvas); }\n.ex-reference-grip-topLeft, .ex-reference-grip-bottomRight { cursor: nwse-resize; }\n.ex-reference-grip-topRight, .ex-reference-grip-bottomLeft { cursor: nesw-resize; }\n.ex-grid[data-ex-reference-drag] .ex-reference-grip { pointer-events: none; }\n.ex-grid[data-ex-reference-drag=move] .ex-viewport { cursor: move; }\n.ex-grid[data-ex-reference-drag=nwse] .ex-viewport { cursor: nwse-resize; }\n.ex-grid[data-ex-reference-drag=nesw] .ex-viewport { cursor: nesw-resize; }\n/* Point's dashes over the outline of the Reference it writes: in the Focus outline's colour, as\n Excel lays its active-cell green over the pointed Reference's own line, just inside that line\n so both show (the eighth Windows run). */\n.ex-point.ex-point-on-reference { outline-offset: -4px; }\n/* The dashes a grid pointed at from outside draws where its Consumer asks (ADR-0058): over the\n cell, or down the body of the column, whose press was handed on. In the Focus outline's colour,\n as Point's dashes over its Reference's outline are, and as far inside the box, so that the line\n of a column outline beneath them still shows. No outline of their own, and no token of their own\n (ADR-0029's note of 2026-09-30). Paint only, like every rectangle here. */\n.ex-point-dashes { position: absolute; outline: 2px dashed var(--ex-focus-outline, CanvasText); outline-offset: -4px; }\n/* A grid pointed at from outside (ADR-0058, ADR-0029's note of 2026-09-30): a press on its rows or\n its column headers is handed on, and the pointer over them is `cell`. The controls that take\n their own presses there — the column menu's button, a resize grip, a checkbox, an action, a\n Template's control — let the press through to the rows or the header, which hand it on as the\n cell or the column it landed on. Nothing else marks the grid. */\n.ex-pointed-at > .ex-scroller > .ex-spacer > :is(.ex-viewport, .ex-header) { cursor: cell; }\n.ex-pointed-at > .ex-scroller > .ex-spacer > :is(.ex-viewport, .ex-header) :is(.ex-menu-button, .ex-resize-grip, .ex-mark, .ex-action, .ex-interactive, .ex-header-group-toggle, .ex-hidden-mark, .ex-reference-grip) { pointer-events: none; }\n.ex-reference-1 { color: var(--ex-reference-1, light-dark(#326ac7, color-mix(in srgb, #326ac7 67%, white))); }\n.ex-reference-2 { color: var(--ex-reference-2, light-dark(#c0353e, color-mix(in srgb, #c0353e 67%, white))); }\n.ex-reference-3 { color: var(--ex-reference-3, light-dark(#8157b7, color-mix(in srgb, #8157b7 67%, white))); }\n.ex-reference-4 { color: var(--ex-reference-4, light-dark(#007c20, color-mix(in srgb, #007c20 67%, white))); }\n.ex-reference-5 { color: var(--ex-reference-5, light-dark(#b03e84, color-mix(in srgb, #b03e84 67%, white))); }\n.ex-reference-6 { color: var(--ex-reference-6, light-dark(#b64900, color-mix(in srgb, #b64900 67%, white))); }\n.ex-reference-7 { color: var(--ex-reference-7, light-dark(#267392, color-mix(in srgb, #267392 67%, white))); }\n/* A row not yet painted with real data — waiting for the Consumer's Window, or\n deliberately skipped while scrolling fast. One mechanism, so one appearance\n (ADR-0004). It carries no scrollable cells at all: painting them is the cost being\n avoided. The Pinned Columns do stay, so the bar fills whatever is left beside them. */\n.ex-placeholder::after { content: \"\"; margin: calc(var(--ex-row-height) / 4) var(--ex-cell-padding-x, 8px); flex: 1 1 auto; border-radius: 2px; background: var(--ex-placeholder-background, currentColor); opacity: 0.08; }\n.ex-loading { opacity: var(--ex-loading-opacity, 0.7); }\n/* A paste under way (ADR-0240 section 12): from its start until it lands or is refused, a bar\n across the root's top edge and a progress pointer say the grid is busy with it, and that an\n Escape now cancels it. Nothing is dimmed: the rows are still the ones being pasted over. The\n root's aria-busy says the same to a screen reader. */\n/* Work a Consumer runs in the order that Escape cancels — ExSheet opening a file, still being read\n (ADR-0330 section 10) — is painted the same way while the root names it (data-ex-work): it, too,\n holds every input behind it, and an Escape cancels it. */\n.ex-pasting, .ex-grid[data-ex-work] { cursor: var(--ex-pasting-cursor, progress); }\n.ex-pasting::after, .ex-grid[data-ex-work]::after { content: \"\"; position: absolute; inset: 0 0 auto 0; height: var(--ex-pasting-bar-height, 3px); background: var(--ex-pasting-bar, Highlight); pointer-events: none; z-index: 10; }\n/* The scrollbar's look, by token rather than by reaching the internal element\n (ADR-0029). The grid always draws its own bar: in Chrome and Edge any rule on\n ::-webkit-scrollbar makes the bar a custom one, and a custom bar paints no native\n parts, so \"leave the native bar alone when the token is unset\" painted an empty\n gutter (the fourth Windows run, 2026-09-29). The defaults read in both schemes.\n Narrowing changes the gutter, the browser reports it, and the geometry follows\n (ADR-0021). Firefox has no ::-webkit-scrollbar and takes the colour only. */\n.ex-scroller::-webkit-scrollbar { width: var(--ex-scrollbar-width, 12px); height: var(--ex-scrollbar-width, 12px); background: transparent; }\n.ex-scroller::-webkit-scrollbar-thumb { background: var(--ex-scrollbar-color, color-mix(in srgb, CanvasText 32%, transparent)); background-clip: padding-box; border: 2px solid transparent; border-radius: calc(var(--ex-scrollbar-width, 12px) / 2); }\n.ex-scroller::-webkit-scrollbar-corner { background: transparent; }\n@supports not selector(::-webkit-scrollbar) {\n .ex-scroller { scrollbar-color: var(--ex-scrollbar-color, color-mix(in srgb, CanvasText 32%, transparent)) transparent; }\n}\n/* The column menu's button in the header cell (ADR-0010): the glyph is CSS content,\n so the header's own text stays exactly the label. It takes its own pointer — a\n click on it opens the menu, never sorts. */\n.ex-menu-button {\n position: absolute;\n top: 0;\n /* Geometry Tokens from the resolved metrics (ADR-0028): the same numbers the\n Auto header estimate adds, so the label and the button cannot overlap. */\n right: var(--ex-menu-button-inset, 6px);\n width: var(--ex-menu-button-width, 16px);\n height: 100%;\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n cursor: pointer;\n pointer-events: auto;\n}\n.ex-menu-button::after { content: \"▾\"; opacity: 0.55; }\n/* A header cell that carries the button keeps its label out from under it: the\n button's band is added to the right padding, the same band the Auto header estimate\n adds. A left-aligned label does not move; a right-aligned one ends where the button\n begins instead of beneath it. */\n.ex-header-cell:has(> .ex-menu-button) {\n padding-right: calc(var(--ex-cell-padding-x, 8px) + var(--ex-menu-button-width, 16px) + var(--ex-menu-button-inset, 6px));\n}\n/* A popover (ADR-0009/0010/0018/0040): anchored to the instance root, outside the scroll\n container, and bounded by the grid's box — its max-height arrives inline from the core's\n geometry — so no ancestor that shows the grid can cut it, and it never tangles across\n instances. Contents taller than the room scroll inside it. border-box, so the bound and\n the min-width are the box the browser draws. */\n.ex-popover {\n position: absolute;\n z-index: 10;\n box-sizing: border-box;\n overflow-y: auto;\n /* min-width and max-width arrive inline from the core (ADR-0027/0040): the numbers it\n clamps the popover inside the grid with are the numbers the box is laid out from. */\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n background: var(--ex-header-background, Canvas);\n color: inherit;\n outline: var(--ex-grid-focus-outline, 1px solid Highlight);\n}\n/* A cell's message (ADR-0034): the same popover machinery, carrying a sentence rather\n than commands. Never an element in the row — the row's height does not move\n (ADR-0013) — and outside the scroll container like every other popover. The error\n token names it, so a theme recolours it without the core knowing (ADR-0027). */\n.ex-message {\n position: absolute;\n z-index: 11;\n /* It describes a cell; it must not intercept the pointer aimed at one. Without this\n a click on a flagged cell lands on the message and neither selects nor reaches the\n Viewport, and a mouse-up ending a drag goes the same way. */\n pointer-events: none;\n /* No max-width here: the widest the box may be is emitted inline by the core, the\n same number its clamp keeps on screen (ADR-0027). */\n padding: 4px;\n background: var(--ex-header-background, Canvas);\n color: var(--ex-state-error-color, #b3261e);\n outline: 1px solid var(--ex-state-error-color, #b3261e);\n}\n/* The notices a page holding another version's files calls for (ADR-0123): the script refused,\n shown in place of the rows, and a stylesheet that is not the one a product's root was built\n with, shown at the top of that root. Every product's notice wears this one look, in the tokens\n a cell's error and the ground already are, so no colour comes from C# (ADR-0027/0028); ExSheet's\n and ExPivot's stand outside a grid's root, so the rule is not scoped under one. An attribute, not\n a class: a stylesheet of any version shows the notice a root of any other version renders, so its\n selector cannot change between versions, and the stamp it carries is an attribute's value. The\n two rules that show a stylesheet's notice and hide it for its own stamp are appended to each\n shipped stylesheet by tools/assets/minify.mjs; until a stylesheet arrives, the notice's inline\n display keeps it out of the way, so a cold load shows nothing. The text is selectable, to be\n quoted in a report. */\n[data-ex-notice] {\n box-sizing: border-box;\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height, 28px);\n background: var(--ex-background, Canvas);\n color: var(--ex-state-error-color, #b3261e);\n outline: 1px solid var(--ex-state-error-color, #b3261e);\n outline-offset: -1px;\n user-select: text;\n}\n/* The Size Tip (ADR-0052, 2026-09-29): how many rows and columns a drag across Headings covers,\n at the Heading the Extent is on. Placed and sized by the core, inline: its width is the Cell\n Metrics' estimate of its text, so the padding is the cell's own token and the text never\n wraps (ADR-0027/0028). Outside the scroll container like a popover, painted inside the grid's\n box — its outline too — and it takes no pointer, which is dragging across it (ADR-0040). Its\n look is its own Visual Tokens (ADR-0029). */\n.ex-size-tip {\n position: absolute;\n z-index: 9;\n box-sizing: border-box;\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n background: var(--ex-size-tip-background, Canvas);\n color: var(--ex-size-tip-color, CanvasText);\n outline: var(--ex-size-tip-outline, 1px solid color-mix(in srgb, CanvasText 45%, transparent));\n outline-offset: -1px;\n}\n/* The column's one popover (ADR-0044): its commands, and below them its filter, set off by a\n rule. Each half is a column of the popover's column; the filter is what gives when the\n room is short, through its value list (ADR-0040). */\n.ex-popover-commands { display: flex; flex-direction: column; flex-shrink: 0; }\n.ex-popover-filter {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1 1 auto;\n min-height: 0;\n padding-top: 4px;\n border-top: var(--ex-rule-width, 1px) solid var(--ex-header-rule-color, rgba(128, 128, 128, 0.45));\n}\n.ex-popover button { font: inherit; text-align: left; padding: 2px var(--ex-action-padding-x, 6px); cursor: pointer; }\n.ex-popover button:disabled { cursor: default; opacity: 0.5; }\n/* In a bounded popover the value list is what gives (ADR-0040): it shrinks, to a floor\n that still shows a couple of entries, and scrolls, so the search above it and the\n actions below stay in view. The floor is the panel's own layout, not the grid's geometry:\n nothing in C# computes with it. */\n.ex-popover-list { max-height: 240px; min-height: 48px; flex: 1 1 auto; overflow-y: auto; display: flex; flex-direction: column; }\n.ex-popover-actions { display: flex; gap: 4px; justify-content: flex-end; flex-shrink: 0; }\n/* \"(Select All)\" is a button with the checkbox role, because a native checkbox's mixed state\n is a property only script can set (ADR-0009/0021). Its box is drawn from aria-checked. */\n.ex-popover .ex-select-all { padding-left: 0; background: none; border: 0; }\n.ex-select-all::before { display: inline-block; width: 1.2em; }\n.ex-select-all[aria-checked=\"true\"]::before { content: \"\\2611\"; }\n.ex-select-all[aria-checked=\"false\"]::before { content: \"\\2610\"; }\n.ex-select-all[aria-checked=\"mixed\"]::before { content: \"\\25A3\"; }\n.ex-popover-join { display: flex; gap: 12px; }\n/* The popover's Tab-wrap sentinels (ADR-0039/0044): focusable, and nothing else. Absolute,\n so they take no place in the popover's flex column and add no gap to it. */\n.ex-focus-wrap { position: absolute; width: 0; height: 0; overflow: hidden; outline: none; }\n/* The panel's form exists for Enter's implicit submission (ADR-0039) and has no box of its\n own: its controls stay the popover's flex items. */\n.ex-popover-form { display: contents; }\n/* The find panel (ADR-0055): its contents a column like the other popovers'. The outcome line\n keeps its height when empty, so the panel does not jump when a step says \"no match\". */\n.ex-popover-find-body { display: flex; flex-direction: column; gap: 4px; min-height: 0; }\n.ex-find-outcome { min-height: 1.2em; }\n/* Find All's list (ADR-0470 §3): the count line, then a listbox of a fixed number of lines, each a row's height,\n placed by the core from the Grid Metrics so nothing is measured; only the lines in view stand in it. The\n active line is painted as the completion list's chosen candidate is, from the selection's token. */\n.ex-find-all { display: flex; flex-direction: column; gap: 2px; min-height: 0; }\n.ex-find-all-count { min-height: 1.2em; }\n.ex-find-all-list {\n position: relative;\n overflow-y: auto;\n /* Never shrunk below its lines: the core reveals the active line by the count it shows, so in a short grid\n the panel scrolls rather than the list hiding lines the core counts as shown. */\n flex-shrink: 0;\n outline-offset: -1px;\n border: 1px solid var(--ex-header-rule-color, rgba(0, 0, 0, 0.12));\n}\n.ex-find-all-spacer { position: relative; }\n.ex-find-all-line {\n position: absolute;\n left: 0;\n right: 0;\n box-sizing: border-box;\n display: flex;\n gap: var(--ex-cell-padding-x, 8px);\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height);\n white-space: nowrap;\n cursor: default;\n}\n.ex-find-all-where { flex: 0 0 auto; }\n.ex-find-all-text { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; }\n.ex-find-all-active { background: var(--ex-selection-fill, rgba(60, 120, 216, 0.18)); }\n/* The Cell Editor (ADR-0010): one input floated over the focused cell, never inside a\n row. Its box is the cell's exactly (ADR-0028); font and line height come from the\n same tokens the cells read, so the text does not jump when editing starts. The coloured\n text beneath the core's own input (ADR-0057) takes the same box, padding, line and colours,\n from the same rule, so its characters stand where the input's do; it paints the editor's\n ground, over which the input turns see-through while it shows (below). */\n.ex-key-field,\n.ex-editor,\n.ex-reference-text.ex-reference-text-cell {\n position: absolute;\n z-index: 3;\n box-sizing: border-box;\n margin: 0;\n padding: 0 var(--ex-cell-padding-x, 8px);\n border: none;\n font: inherit;\n line-height: var(--ex-row-height);\n background: var(--ex-editor-background, Canvas);\n color: var(--ex-editor-color, CanvasText);\n}\n/* An editor whose row moved out of view under it (ADR-0011's note of 2026-10-07): the grid does not\n scroll to follow the row, so the editor stays open, holding the keyboard, at its column on the\n first painted row — and neither seen nor pressed there, over a cell that is not its own. */\n.ex-editor.ex-editor-away,\n.ex-reference-text.ex-editor-away { opacity: 0; pointer-events: none; }\n.ex-editor {\n outline: var(--ex-editor-outline, 2px solid Highlight);\n outline-offset: -1px;\n}\n/* An edit whose keyboard is elsewhere is told apart (ADR-0018 section 6, ED-27): while DOM focus\n is outside the grid's root, the Cell Editor's outline is 1px wide, in the style and colour\n --ex-editor-outline gives it, and at that token's full width again once the keyboard is back.\n Two grids can each hold an open edit, and only one of them has the keyboard. The width alone\n is overridden, so a Wrapper's token keeps its colour; no script is involved. The Formula Bar's\n field is outlined only while it has focus, and needs nothing. */\n.ex-grid:not(:focus-within) .ex-viewport .ex-editor { outline-width: 1px; }\n/* A Pending Commit (ADR-0380 section 3): while the Consumer's answer to a commit is out, the root\n carries data-ex-pending-commit and the pointer says the grid is busy; the editor, read-only and\n aria-busy, keeps its text and the keyboard, its outline dashed. The style alone is overridden, so a\n Wrapper's --ex-editor-outline keeps its colour and width. */\n.ex-grid[data-ex-pending-commit] { cursor: progress; }\n.ex-viewport .ex-editor[aria-busy=\"true\"] { outline-style: dashed; }\n/* The pinned editor's zero-size sticky anchor — the pinned selection layer's trick. */\n.ex-editor-pinned { position: sticky; left: 0; width: 0; height: 0; z-index: 3; }\n/* The Keyboard Field (ADR-0080), which holds the keyboard on a grid that edits while no edit is\n open, so that an IME has a text field to start in. Its box is the Cell Editor's, written inline\n from the same arithmetic, in a zero-size layer that rides the pinned editor's sticky anchor over\n a Pinned Column (and while it waits, with the Focus not painted). Never seen, and never in the\n pointer's way, until an IME composes in it: then it is drawn as the Cell Editor is, over the\n Focus cell, with the composition in it. The script marks it composing, and keeps the mark until\n the keyboard leaves it for the editor the composition opened. Its own focus ring is never drawn:\n the root's says the grid holds the keyboard (above). */\n.ex-key-field-layer { position: absolute; left: 0; top: 0; width: 0; height: 0; z-index: 3; pointer-events: none; }\n.ex-key-field-layer.ex-key-field-held { position: sticky; }\n.ex-key-field { opacity: 0; caret-color: transparent; outline: none; pointer-events: none; }\n.ex-key-field.ex-key-field-composing {\n opacity: 1;\n caret-color: auto;\n outline: var(--ex-editor-outline, 2px solid Highlight);\n outline-offset: -1px;\n}\n/* The coloured text (ADR-0057): beneath each editor surface, a layer the core renders with the\n field's text, as one run of text as the field's is, so its characters stand where the field's\n do (ADR-0057's note of 2026-10-01: a run per Reference drifted 1/64 px a run). It stands\n immediately before its field, in the field's box, font and line, and keeps every space the field\n keeps; the rest is what the browser gives an input and not a div. Paint only: it takes no\n pointer, and assistive technology reads the field. Hidden unless the field after it wears\n ex-reference-text-shown, which the editor listener sets only in the surface the edit is in — the\n field holding DOM focus, as Excel colours only that one — only while the layer's text\n (data-ex-text) is the field's value, and never during an IME composition (ADR-0021's note of\n ADR-0057): uncoloured for a moment rather than coloured on the wrong characters. Its References\n are coloured then, by highlights of the grid's own (below). Its line scrolls sideways with the\n field, and has room to scroll as far. It is painted beneath the field, caret and selection\n included, whether or not the field is positioned: at -1 it goes under everything its stacking\n context lays out, and over only that context's own ground — the Cell Editor's box, or the\n Formula Bar, made one for it here. */\n.ex-reference-text {\n position: absolute;\n z-index: -1;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: none;\n font: inherit;\n line-height: inherit;\n color: inherit;\n letter-spacing: normal;\n word-spacing: normal;\n text-transform: none;\n text-indent: 0;\n text-shadow: none;\n /* Physical, as all the grid's geometry is: the root is dir=\"ltr\" (ADR-0031, DIR-4). */\n text-align: left;\n white-space: pre;\n pointer-events: none;\n visibility: hidden;\n}\n.ex-reference-text-line { height: 100%; overflow: hidden; }\n.ex-reference-text-line::after { content: \"\"; display: inline-block; width: 100%; }\n/* The colours of the layer's References (ADR-0057, note of 2026-10-01). The editor listener colours\n them with the CSS Custom Highlight API, over the layer's one run: one highlight per colour, per\n pointed shade and for the pointed ground, each named for its grid, and the grid's own generated\n stylesheet paints each of its names with the property here of the same place, so the colours are\n still the Visual Tokens, read on the layer as the spans read them: a Theme, the scheme and forced\n colours reach them as before. The palette's colours are --ex-reference-1 to -7, with the defaults\n of the Reference Outlines above.\n The Reference Point is writing is shown selected (ADR-0051/0057; the eighth Windows run, cases 19\n to 32): on a grey ground, its text a darker shade of its colour. A look on the layer, never a\n selection of the field's text, so a key typed next follows the Reference; and only where the\n core marks it, which it does not for a Reference straight after the text's first character.\n Excel's ground is #c6c6c6. The shade is one Visual Token per place in the palette,\n --ex-reference-1-pointed to --ex-reference-7-pointed, which a Theme sets (ADR-0029). Their light\n defaults are Excel's, in the palette's order: #0401a2, #630101 (Part B of the eighth Windows\n run), #44007c, #003600, #550059, #531c00 and #00323f (the tenth run). Excel keeps its cells white\n under its Black theme, with the same shades, so it has no dark ground to take them from; over a\n dark ground the grey stands as far from the dark Canvas as #c6c6c6 does from white, and all seven\n shades are the Reference's colour mixed 55% toward white. Text a press on another grid wrote,\n such as XLOOKUP(\"R-4471\", Positions[Id], Positions[PV]), is shown selected as a whole (ADR-0058):\n one stretch on the grey, and the References inside it take the shade of their place in the\n palette. */\n.ex-reference-text {\n --ex-reference-text-1: var(--ex-reference-1, light-dark(#326ac7, color-mix(in srgb, #326ac7 67%, white)));\n --ex-reference-text-2: var(--ex-reference-2, light-dark(#c0353e, color-mix(in srgb, #c0353e 67%, white)));\n --ex-reference-text-3: var(--ex-reference-3, light-dark(#8157b7, color-mix(in srgb, #8157b7 67%, white)));\n --ex-reference-text-4: var(--ex-reference-4, light-dark(#007c20, color-mix(in srgb, #007c20 67%, white)));\n --ex-reference-text-5: var(--ex-reference-5, light-dark(#b03e84, color-mix(in srgb, #b03e84 67%, white)));\n --ex-reference-text-6: var(--ex-reference-6, light-dark(#b64900, color-mix(in srgb, #b64900 67%, white)));\n --ex-reference-text-7: var(--ex-reference-7, light-dark(#267392, color-mix(in srgb, #267392 67%, white)));\n --ex-reference-text-1-pointed: var(--ex-reference-1-pointed, light-dark(#0401a2, color-mix(in srgb, var(--ex-reference-text-1) 55%, white)));\n --ex-reference-text-2-pointed: var(--ex-reference-2-pointed, light-dark(#630101, color-mix(in srgb, var(--ex-reference-text-2) 55%, white)));\n --ex-reference-text-3-pointed: var(--ex-reference-3-pointed, light-dark(#44007c, color-mix(in srgb, var(--ex-reference-text-3) 55%, white)));\n --ex-reference-text-4-pointed: var(--ex-reference-4-pointed, light-dark(#003600, color-mix(in srgb, var(--ex-reference-text-4) 55%, white)));\n --ex-reference-text-5-pointed: var(--ex-reference-5-pointed, light-dark(#550059, color-mix(in srgb, var(--ex-reference-text-5) 55%, white)));\n --ex-reference-text-6-pointed: var(--ex-reference-6-pointed, light-dark(#531c00, color-mix(in srgb, var(--ex-reference-text-6) 55%, white)));\n --ex-reference-text-7-pointed: var(--ex-reference-7-pointed, light-dark(#00323f, color-mix(in srgb, var(--ex-reference-text-7) 55%, white)));\n --ex-reference-text-pointed: var(--ex-reference-pointed-background, light-dark(#c6c6c6, #4b4b4b));\n}\n/* A Chrome places the layer inside the core's box, before its control, which fills the box's\n content (IGridChrome): the layer stands over that content, inside the padding the box has from\n .ex-editor and .ex-formula-bar-text, with none of its own, as the control has none. The bar's\n box is laid out in the band, so it is made the layer's containing block, and the band the\n stacking context both bar layers are painted in; nothing moves. */\n.ex-editor > .ex-reference-text { left: var(--ex-cell-padding-x, 8px); right: var(--ex-cell-padding-x, 8px); }\n.ex-formula-bar > div.ex-editor { position: relative; }\n.ex-formula-bar { isolation: isolate; }\n.ex-reference-text:has(+ .ex-reference-text-shown) { visibility: visible; }\n/* While it shows, the field's own text is transparent: its fill, so its color — and the caret,\n drawn in it — stay, and a Chrome's own color does not outrank it. Selected text is drawn by\n the field, in the selection's own colours, so it stays readable. A word the browser's spelling\n or grammar check marks is the field's own text too: Chrome paints it again through a highlight,\n in the highlight's color, which neither inherits the field's fill nor takes one of its own, so\n it stood over the layer's text a second time (DC-48, measured 2026-09-30). Its color is taken\n away; its underline is not drawn in that color, and stays. Every field turns see-through while\n its layer shows, a Chrome's control included, whose contract is to have no ground of its own\n anyway: a page that loses the Chrome's stylesheet then shows the layer's text rather than\n nothing (ADR-0057, \"The Wrapper's shape is required…\"). The ground is still painted beneath the\n layer: by the core's own Cell Editor layer, by the core's box a Chrome's control stands in, and\n by the Formula Bar. The adjacency is part of each rule: a field whose layer has gone shows its\n own text whatever it still wears. */\n.ex-reference-text + .ex-reference-text-shown { -webkit-text-fill-color: transparent; caret-color: currentColor; background: transparent; }\n.ex-reference-text + .ex-reference-text-shown::selection { color: HighlightText; -webkit-text-fill-color: HighlightText; background-color: Highlight; }\n.ex-reference-text + .ex-reference-text-shown::spelling-error, .ex-reference-text + .ex-reference-text-shown::grammar-error { color: transparent; }\n/* The completion list and the argument hint (ADR-0051): the editor's Inner Popup, in a box the\n core stands beneath the editor surface, inside the grid's box — its place, its width's clamp\n and its max-height arrive inline (ADR-0027/0040), and contents taller than the room scroll.\n Each candidate is a row's height, the same token the cells read. */\n.ex-completion {\n position: absolute;\n z-index: 12;\n box-sizing: border-box;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n background: var(--ex-header-background, Canvas);\n color: inherit;\n outline: var(--ex-grid-focus-outline, 1px solid Highlight);\n}\n.ex-completion-list { display: flex; flex-direction: column; }\n.ex-completion-item {\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: default;\n}\n.ex-completion-selected { background: var(--ex-selection-fill, rgba(60, 120, 216, 0.18)); }\n.ex-completion-hint {\n padding: 0 var(--ex-cell-padding-x, 8px);\n line-height: var(--ex-row-height);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n opacity: 0.8;\n}\n.ex-completion-list + .ex-completion-hint {\n border-top: var(--ex-rule-width, 1px) solid var(--ex-header-rule-color, rgba(128, 128, 128, 0.45));\n}\n/* The pager and the status line (ADR-0015): the pager exists when PageSize is passed\n and rides the same Range Request machinery as scrolling; the status line closes the\n invisible-selection hole — for paging and scrolling alike. */\n.ex-pager, .ex-status {\n display: flex;\n align-items: center;\n gap: var(--ex-cell-padding-x, 8px);\n padding: 4px var(--ex-cell-padding-x, 8px);\n}\n.ex-pager button, .ex-status button {\n font: inherit;\n padding: 0 var(--ex-action-padding-x, 6px);\n border-width: var(--ex-action-border-width, 1px);\n cursor: pointer;\n}\n.ex-pager button:disabled { cursor: default; }\n/* The Selection Summary (ADR-0130): Excel's status-bar figures, at the line's far end. The box\n keeps one line's height while it says nothing, so the strip does not change height as figures\n come and go. Its figures menu is a list of ticked items in the popover frame. */\n.ex-summary {\n display: flex;\n gap: calc(2 * var(--ex-cell-padding-x, 8px));\n min-height: 1lh;\n /* The rest of the line, figures at its far end: the right-click that opens the figures menu\n lands anywhere there, figures or none, as on Excel's status bar. */\n flex: 1 1 auto;\n justify-content: flex-end;\n white-space: nowrap;\n}\n/* The Error Count (ADR-0381 section 3's note of 2026-11-01): a button in the status line, pressed\n to step to the next error, in the error colour while it counts any. */\n.ex-error-count { white-space: nowrap; }\n.ex-error-count-some { color: var(--ex-state-error-color, #b3261e); }\n.ex-summary-menu { display: flex; flex-direction: column; align-items: stretch; min-width: 12em; }\n.ex-summary-menu-item {\n font: inherit;\n width: 100%;\n /* Laid out here, whatever a page's own stylesheet does to buttons: a design system's reset\n that centres a flex button would centre every item. */\n display: flex;\n justify-content: flex-start;\n align-items: center;\n text-align: left;\n background: none;\n border: 0;\n padding: 2px var(--ex-cell-padding-x, 8px) 2px 0;\n cursor: pointer;\n}\n.ex-summary-menu-tick { display: inline-block; width: 1.4em; text-align: center; }\n/* The live region (ADR-0033): visually hidden, present to assistive technology. The\n classic clip recipe rather than display:none, which would silence it entirely. */\n.ex-announce {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n/* The Layout Ceiling's probe (ADR-0053): a zero-size box that clips an element declared\n taller than any browser lays out. Nothing is painted and nothing overflows; the child's\n laid-out height, which the script is told, is the ceiling. Its height is inline. */\n.ex-ceiling-probe {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n}\n/* The column rule, transparent by default (ADR-0029): an inset shadow on the cell's\n right edge — painted, never a border. A Modified cell's mark is its ::after, so it\n takes nothing from the rule and the rule nothing from it (ADR-0006). */\n.ex-cell { box-shadow: inset calc(0px - var(--ex-rule-dp, 1px)) 0 var(--ex-column-rule-color, transparent); }\n/* Alignment is a closed enum painted as interned classes (ADR-0016/0029). Last in the\n file, so an explicit alignment beats the numeric derivation and a Header Group's\n centred default at equal specificity. */\n.ex-align-left { text-align: left; }\n.ex-align-center { text-align: center; }\n.ex-align-right { text-align: right; }\n/* Forced colors (ADR-0027/0029): every Cell State and Row Kind restated in painted\n system colours, because the browser discards the background images and tints above.\n No state may rely on a discarded layer alone, and no two may collapse together. */\n@media (forced-colors: active) {\n /* The Change Highlight (ADR-0068): its ground is an image, which forced colours discard, so\n it is restated as an outline. That is painted and not laid out, as the states' outlines\n are, and dashed, which no state's is. Declared before the states: on a cell that carries a\n state as well, the state's own restatement is the one kept, because a state must never be\n the thing that disappears (ADR-0006). */\n .ex-cell.ex-changed { outline: 2px dashed Highlight; outline-offset: -2px; }\n /* The Match Mark (ADR-0332 §4): forced colours discard its ground, so a match is restated as\n a dotted frame, and the current match as a solid one, drawn by the ::before's border on a band\n of its own inside the cell: three pixels in, clear of the two-pixel band at the cell's edge\n where the Change Highlight's dashed outline, the states' outlines and the Focus's lie. It is\n not an outline, which the cell has one of: on a cell both changed and matching, one would\n replace the other and two meanings would read as one. Not a box-shadow either, which forced\n colours discard. */\n .ex-cell.ex-match-mark::before { background: none; inset: 3px; border: 2px dotted Highlight; }\n .ex-cell.ex-match-mark-current::before { background: none; border-style: solid; }\n .ex-header-cell.ex-match-mark::before, .ex-header-group.ex-match-mark::before { background: none; inset: 3px; border: 2px dotted Highlight; }\n .ex-header-cell.ex-match-mark-current::before, .ex-header-group.ex-match-mark-current::before { background: none; border-style: solid; }\n .ex-cell.ex-state-stale { color: GrayText; }\n .ex-cell.ex-state-missing { outline: 1px dotted GrayText; outline-offset: -2px; }\n .ex-cell.ex-state-error { color: LinkText; }\n .ex-cell.ex-state-modified { outline: 1px solid Highlight; outline-offset: -2px; }\n /* A Header Group's toggle and its Hidden Mark keep their pictures (ADR-0400 section 7): the\n toggle's icon in ButtonText and the mark's shape in Highlight, so neither disappears. */\n .ex-header-group-toggle::before { forced-color-adjust: none; background-color: ButtonText; }\n .ex-hidden-mark { forced-color-adjust: none; background: Highlight; }\n /* A group row keeps its weight; a total row's rule becomes an overline — a text\n decoration survives where the gradient does not. */\n .ex-row-total .ex-cell { text-decoration: overline; }\n /* A Row Stripe is restated as nothing: it carries no meaning, and forced colours are\n kept for the things that do (ADR-0038). The discarded gradient is the whole of it. */\n /* The selection and the Focus stay visible: outlines, which forced colors keeps, drawn\n inside the range on every side, so none is covered (UX-18). The Focus inside a single\n range is marked only by its missing tint, and no tint is painted here, so it takes its\n outline back. The Focus among several ranges is restated as the Focus is everywhere here:\n its outline, in place of its thin border (ADR-0008, 2026-10-12), beside ranges that are\n each outlined. */\n .ex-range { outline-style: solid; outline-color: Highlight; }\n /* The Heading Mark keeps its line, a border, which forced colors keep, restated in the system\n colour a range's outline is restated in (ADR-0008, 2026-10-13). */\n .ex-heading-mark { border-color: Highlight; }\n .ex-header-cell.ex-heading-marked, .ex-row:where(:has(+ .ex-heading-state.ex-heading-marked)) > .ex-row-heading { background-color: Canvas; color: Highlight; }\n .ex-headings-corner-marked::after { background-color: Highlight; }\n /* The tints are not painted at all (ADR-0206): stated here rather than left to how a browser\n forces a translucent background. Each range keeps its box, whose outline is above. */\n .ex-range-tint { display: none; }\n /* D2 applies to the restored Focus too. Its own border retains the inside placement\n except at a Heading, where that Heading Mark replaces the covered side. */\n .ex-focus, .ex-range-single { outline-style: none; }\n .ex-focus::after, .ex-focus.ex-focus-among-ranges::after, .ex-range-single ~ .ex-focus::after, .ex-range-single::after {\n content: \"\";\n top: calc(0px - var(--ex-outline-heading-t, 0) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n left: calc(0px - var(--ex-outline-heading-l, 0) * var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))));\n right: 0;\n bottom: 0;\n border: var(--ex-outline-width, calc(2 * var(--ex-dp, 1px))) solid Highlight;\n box-shadow: none;\n }\n /* The Copied Range keeps its dashes, in system colours, over a band of the system ground\n (ADR-0170): dashed, where the Selection's restated outlines are solid. */\n .ex-copied-range::after { border-color: Canvas; outline-color: Highlight; }\n .ex-focus-row { outline: 1px dotted Highlight; outline-offset: -1px; }\n .ex-focus-column { outline: 1px dotted Highlight; outline-offset: -1px; }\n .ex-hover-row { outline: 1px dotted GrayText; outline-offset: -1px; }\n /* The chosen action stays tellable from its neighbours, which keep their own\n ButtonBorder (ADR-0037). */\n .ex-action-chosen { outline-color: Highlight; }\n /* The coloured text's References come out as the rest of the text does, as ADR-0057 says\n of forced colours (\"Not done\"), and the pointed ground goes, as a ground does. Chrome\n paints a custom highlight in the system's Highlight and HighlightText under forced\n colours, whatever its rule says, which would set each Reference in a dark block; the\n spans the highlights replaced (2026-10-01, ticket 86) were forced to the text's own\n colour. So the layer's line is left as authored, and its colours are the system's. */\n .ex-reference-text-line { forced-color-adjust: none; color: CanvasText; }\n .ex-reference-text {\n --ex-reference-text-1: CanvasText; --ex-reference-text-2: CanvasText; --ex-reference-text-3: CanvasText;\n --ex-reference-text-4: CanvasText; --ex-reference-text-5: CanvasText; --ex-reference-text-6: CanvasText;\n --ex-reference-text-7: CanvasText;\n --ex-reference-text-1-pointed: CanvasText; --ex-reference-text-2-pointed: CanvasText;\n --ex-reference-text-3-pointed: CanvasText; --ex-reference-text-4-pointed: CanvasText;\n --ex-reference-text-5-pointed: CanvasText; --ex-reference-text-6-pointed: CanvasText;\n --ex-reference-text-7-pointed: CanvasText;\n --ex-reference-text-pointed: transparent;\n }\n}\n"],"mappings":";AA4BA,OAAO,MAAQ,sBAAsB,QAAS,qBAAuB,CACrE,CAAC,QACG,SAAU,SACV,YAAa,IAAI,gBAAgB,EAAE,SAAS,EAAE,YAC9C,UAAW,IAAI,cAAc,EAAE,MAC/B,YAAa,IAAI,gBAAgB,EAAE,KACnC,qBAAsB,aACtB,WAAY,IAAI,eAAe,EAAE,QACjC,MAAO,IAAI,UAAU,EAAE,YACvB,YAAa,IACjB,CAYA,CArBC,OAqBO,OAAS,QAAS,IAAM,CAChC,CAtBC,OAsBO,eACR,CAvBC,OAuBO,CAAC,uBAAyB,QAAS,IAAI,uBAAuB,EAAE,IAAI,MAAM,WAAY,eAAgB,GAAK,CAOnH,CAAC,YAAc,SAAU,KAAM,SAAU,SAAU,WAAY,UAAY,CAG3E,CAAC,UAAY,SAAU,SAAU,UAAW,IAAM,CAMlD,CAAC,UACG,QAAS,KACT,SAAU,OACV,IAAK,EACL,QAAS,EACT,OAAQ,IAAI,oBACZ,YAAa,IAAI,oBACjB,WAAY,IAAI,sBAAsB,EAAE,QACxC,MAAO,IAAI,iBAAiB,EAAE,SAC9B,YAAa,IAAI,uBAAuB,EAAE,KAG1C,iBAAkB,gBAAgB,GAAG,GAAG,CAAE,IAAI,sBAAsB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,IAAI,eAAe,EAAE,IAAI,CAAE,YAAY,IAAI,eAAe,EAAE,KACnK,CASA,CAAC,YAAc,SAAU,SAAU,IAAK,IAAI,oBAAqB,KAAM,EAAG,MAAO,CAAG,CAOpF,CAAC,OAAS,QAAS,KAAM,OAAQ,IAAI,iBAAkB,YAAa,IAAI,iBAAkB,eAAgB,IAAM,CAMhH,CANC,OAOG,iBAAkB,gBAAgB,GAAG,GAAG,CAAE,IAAI,mBAAmB,EAAE,aAAa,EAAE,IAAI,YAAY,EAAE,IAAI,CAAE,YAAY,IAAI,YAAY,EAAE,KAC5I,CASA,CAAC,SAAS,OAAO,CAAC,SACd,eAAe,gBAAgB,GAAG,GAAG,EAAE,IAAI,mBAAmB,EAAE,aAAa,EAAE,IAAI,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,YAAY,EAAE,MACrI,iBAAkB,IAAI,cAC1B,CAWA,CAAC,cACG,iBACI,gBAAgB,GAAG,GAAG,CAAE,IAAI,mBAAmB,EAAE,aAAa,EAAE,IAAI,YAAY,EAAE,IAAI,CAAE,YAAY,IAAI,YAAY,EAAE,KAAK,CAC3H,gBAAgB,IAAI,0BAA0B,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,CAAE,IAAI,0BAA0B,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MACxI,CACA,CALC,cAKc,CAnBd,UAoBG,WAAW,gBAAgB,IAAI,0BAA0B,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,EAAE,IAAI,0BAA0B,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAC3I,iBAAkB,IAAI,aAAa,EAAE,KAAK,CAAE,IAAI,UACpD,CAOA,CAAC,aAAe,YAAa,IAAI,qBAAqB,EAAE,IAAM,CAC9D,CAAC,aAAe,YAAa,IAAI,qBAAqB,EAAE,IAAM,CAiB9D,CAlBC,aAkBc,CAlBd,aAkB4B,CA/CX,QAgDd,WAAW,gBAAgB,IAAI,yBAAyB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,EAAE,IAAI,yBAAyB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OACzI,eAAe,IACnB,CACA,CArBC,aAqBc,CArBd,aAqB4B,CAnDX,QAoDd,WAAW,gBAAgB,IAAI,yBAAyB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,GAAG,EAAE,YAAY,KACxG,eAAe,IACnB,CACA,CA1BC,aA0Bc,CAzBd,aAyB8B,iBAAkB,IAAM,CACvD,CA3BC,aA2Ba,CAxDI,QAwDM,CA3BvB,aA2BqC,CAAC,OAAQ,CA3B9C,YA2B2D,CAAC,eAC7D,CA3BC,aA2Ba,CAzDI,QAyDM,CA3BvB,aA2BqC,CADC,OACQ,CA3B9C,YA2B2D,CADC,eACiB,iBAAkB,IAAI,UAAY,CAChH,CA7BC,YA6BY,KAAK,CAF2C,eAE3B,OAAS,CA5B1C,YA4BuD,KAAK,CAFA,eAEgB,OACzE,QAAS,GACT,KAAM,EAAE,EAAE,KACV,iBAAkB,IAAI,UAC1B,CAMA,CApEkB,QAoER,CAAC,eAAiB,KAAM,EAAE,EAAE,KAAM,WAAY,WAAY,QAAS,EAAE,IAAI,mBAAmB,EAAE,KAAM,YAAa,OAAQ,SAAU,OAAQ,cAAe,QAAU,CAK9K,CAAC,UAAY,YAAa,OAAQ,WAAY,SAAW,CAMzD,CAXW,eAWM,CA7HhB,UA6H2B,CAvBW,OAuBD,eAAgB,IAAM,CAC5D,CAZW,eAYO,SAAU,QAAU,CAItC,CAAC,eAAiB,SAAU,SAAU,IAAK,EAAG,MAAO,EAAG,MAAO,IAAI,wBAAyB,OAAQ,KAAM,OAAQ,WAAY,eAAgB,IAAM,CAMpJ,CAAC,gBAAiB,CAAC,kBAAoB,SAAU,SAAU,IAAK,EAAG,OAAQ,EAAG,MAAO,IAAI,IAAI,QAAQ,CAAE,MAAM,IAAI,CAAE,IAAI,wBAAwB,CAAE,IAAI,WAAY,QAAS,EAAG,eAAgB,IAAM,CACnM,CADC,gBACkB,WAAY,IAAI,uBAAuB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAO,CACtF,CAFmB,kBAEE,WAAY,IAAI,yBAAyB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAO,CAM1F,CA9BW,cA8BI,CAAC,oBAAsB,OACtC,CA/BW,cA+BI,CAAC,qBAAuB,OAAU,QAAS,aAAc,MAAO,IAAI,oBAAoB,EAAE,MAAO,WAAY,MAAO,QAAS,EAAK,CACjJ,CAhCW,cAgCI,CAAC,oBAAsB,OAAU,QAAS,GAAK,CAC9D,CAjCW,cAiCI,CAAC,qBAAuB,OAAU,QAAS,GAAK,CAC/D,CAAC,gBAAkB,WAAY,KAAO,CActC,CApHkB,QAoHP,gBAAgB,GAAK,CAChC,CAfC,gBAekB,gBAAgB,IAAI,SAAU,cAAe,KAAK,IAAI,mBAAmB,EAAE,KAAK,EAAE,IAAI,gBAAkB,CAM3H,CAAC,gBACG,SAAU,SACV,QAAS,EACT,WAAY,WACZ,QAAS,EAAE,IAAI,mBAAmB,EAAE,KACpC,YAAa,OACb,SAAU,OACV,cAAe,SACf,WAAY,OACZ,WAAY,IAAI,sBAAsB,EAAE,QACxC,eAAgB,IACpB,CAGA,CAAC,wBAA0B,SAAU,OAAQ,KAAM,EAAG,MAAO,EAAG,OAAQ,EAAG,QAAS,CAAG,CACvF,CADC,wBACwB,CAfxB,gBAe2C,eAAgB,IAAM,CAQlE,CAvBC,eAuBe,KAAK,CAAE,CAAC,wBAA0B,aAAc,IAAI,8BAA8B,EAAE,KAAO,CAC3G,CADwB,uBAEpB,SAAU,SACV,KAAM,EACN,IAAK,EACL,OAAQ,EACR,MAAO,IAAI,8BAA8B,EAAE,MA1Q/C,OA2QY,EA3QZ,QA4Qa,EACT,OAAQ,EACR,WAAY,YACZ,MAAO,QACP,OAAQ,QACR,eAAgB,IACpB,CACA,CAfwB,sBAeD,QACnB,QAAS,GACT,SAAU,SArRd,MAsRW,EAtRX,OAuRY,KACR,MAAO,IACP,OAAQ,IACR,iBAAkB,IAAI,8BAA8B,EAAE,cACtD,aAAc,IAAI,gCAAgC,EAAE,yLAAyL,OAAO,EAAE,QAAQ,UAC9P,KAAM,IAAI,gCAAgC,EAAE,yLAAyL,OAAO,EAAE,QAAQ,SAC1P,CACA,CA1BwB,sBA0BD,CAAC,mBAAqB,QACzC,mBAAoB,IAAI,+BAA+B,EAAE,yLACzD,WAAY,IAAI,+BAA+B,EAAE,wLACrD,CAKA,CAAC,eACG,SAAU,SACV,IAAK,EACL,MAAO,EACP,MAAO,IACP,OAAQ,IACR,UAAW,QAAQ,EAAE,CAAC,CAAE,KAAK,CAAC,CAAE,KAAK,MACrC,eAAgB,IACpB,CACA,CAAC,wBAA0B,WAAY,IAAI,wBAAwB,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAO,CAC/F,CAAC,qBAAuB,WAAY,IAAI,sBAAsB,EAAE,QAAU,CAC1E,CAAC,qBAAuB,WAAY,IAAI,sBAAsB,EAAE,QAAU,CAI1E,CAAC,uBAAyB,WAAY,IAAI,KAAK,IAAI,6BAA6B,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAO,EAAE,EAAE,EAAI,CASrH,CAAC,UAAW,CAAC,eAAgB,CAAC,QAAU,eAAgB,IAAM,CAM9D,CAN8B,QAO1B,WAAY,KACZ,WAAY,WACZ,MAAO,IACP,OAAQ,IAxUZ,QAyUa,EAzUb,OA0UY,EACR,KAAM,QACN,YAAa,EACb,OAAQ,IAAI,wBAAwB,EAAE,KAAK,MAAM,IAAI,sBAAsB,EAAE,cAC7E,WAAY,IAAI,oBAAoB,EAAE,QACtC,MAAO,IAAI,uBAAuB,EAAE,eACpC,OAAQ,OACZ,CACA,CApB8B,OAoBtB,CAAC,mBAAsB,CApBD,OAoBS,CAAC,oBAAwB,WAAY,IAAI,4BAA4B,EAAE,UAAY,CAC1H,CArB8B,OAqBtB,CAAC,kBAAoB,OAAU,QAAS,GAAS,CACzD,CAtB8B,OAsBtB,CAAC,mBAAqB,OAAU,QAAS,GAAS,CAC1D,CAjRC,UAiRU,CAvBmB,QAuBR,eAAgB,IAAM,CAI5C,CA3BC,UA2BY,KAAM,QAAS,YAAa,OAAQ,OAAQ,EAAE,IAAI,eAAe,EAAE,KAAK,EAAE,EAAG,QAAS,EAAE,IAAI,qBAAqB,EAAE,KAAM,aAAc,IAAI,wBAAwB,EAAE,KAAM,OAAQ,OAAS,CAMzM,CAAC,iBAAmB,cAAe,MAAO,cAAe,IAAI,kBAAkB,EAAE,WAAa,CAqB9F,CAlQkB,OAkQV,CAAC,SACL,iBAAkB,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAC5G,IAAI,SAAS,EAAE,KAAK,CAAE,IAAI,YAAY,EAAE,KAAK,CAAE,IAAI,YAAY,EAAE,KAAK,CACtE,gBAAgB,GAAG,IAAI,CAAE,IAAI,sBAAsB,EAAE,aAAa,EAAE,IAAI,YAAY,EAAE,IAAI,CAAE,YAAY,EAAE,CAC1G,IAAI,aAAa,EAAE,MACvB,gBAAiB,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAC3H,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,KACrD,oBAAqB,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CACvH,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,EAC1B,kBAAmB,UACnB,kBAAmB,WACnB,WAAY,IAChB,CAiBA,CApXC,QAqXG,SAAS,IACT,cAAc,IAAI,IAAI,IAAI,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,MAAM,IAAI,EAAE,IAAI,eAAe,EAAE,IAAI,EAAE,IAAI,UAC/G,CACA,OAAO,CAAC,cAAc,EAAE,SAAW,CAxXlC,QAwX6C,SAAS,KAAK,IAAI,EAAE,IAAM,CAAE,CAC1E,OAAO,CAAC,cAAc,EAAE,UAAY,CAzXnC,QAyX8C,SAAS,IAAO,CAAE,CACjE,OAAO,CAAC,cAAc,EAAE,SAAW,CA1XlC,QA0X6C,SAAS,KAAK,IAAI,EAAE,IAAM,CAAE,CAC1E,OAAO,CAAC,cAAc,EAAE,UAAY,CA3XnC,QA2X8C,SAAS,KAAK,IAAI,EAAE,KAAO,CAAE,CAC5E,OAAO,CAAC,cAAc,EAAE,OAAS,CA5XhC,QA4X2C,SAAS,IAAO,CAAE,CAC9D,OAAO,CAAC,cAAc,EAAE,SAAW,CA7XlC,QA6X6C,SAAS,IAAO,CAAE,CAChE,OAAO,CAAC,cAAc,EAAE,OAAS,CA9XhC,QA8X2C,SAAS,KAAK,IAAI,EAAE,EAAI,CAAE,CAOtE,CAhTkB,OAgTV,CAAC,iBAAmB,MAAO,IAAI,wBAAwB,EAAE,QAAU,CAC3E,CAjTkB,OAiTV,CAAC,iBAAmB,MAAO,IAAI,wBAAwB,EAAE,QAAU,CAc3E,CA/TkB,OA+TV,CAAC,eAAiB,MAAO,IAAI,sBAAsB,EAAE,SAAU,WAAY,IAAI,sBAAsB,EAAE,OAAS,CAKxH,CApUkB,OAoUV,CAAC,iBACL,WAAW,gBAAgB,IAAI,6BAA6B,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAM,EAAE,IAAI,6BAA6B,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KACrJ,CACA,CAvUkB,OAuUV,CAHC,gBAGgB,KAAK,CArErB,UAqEkC,iBAAkB,IAAI,UAAU,CAAE,IAAI,aAAa,EAAE,KAAO,CACvG,CAxUkB,OAwUV,CAAC,eAAiB,MAAO,IAAI,sBAAsB,EAAE,SAAU,gBAAiB,IAAI,2BAA2B,EAAE,UAAU,MAAO,yBAA0B,IAAM,CAY1K,OAAO,CApVW,OAoVH,CAAC,mBAAqB,SAAU,QAAU,CACzD,CArVkB,OAqVV,CADQ,iBACU,OACtB,QAAS,GACT,SAAU,SACV,IAAK,EACL,MAAO,EACP,MAAO,IACP,OAAQ,IACR,WAAY,IAAI,wBAAwB,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAC7D,UAAW,QAAQ,EAAE,CAAC,CAAE,KAAK,CAAC,CAAE,KAAK,MACrC,eAAgB,IACpB,CAqBA,CApXkB,OAoXV,CAAC,WACL,iBAAkB,gBAAgB,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAE,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,cAAc,CAAE,IAAI,aAAa,EAAE,KAC9N,CACA,CAzWC,cAyWc,CAvXd,SAuXwB,CAHhB,WAIL,iBAAkB,gBAAgB,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAE,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,cAAc,CAAE,IAAI,aAAa,EAAE,KAAK,CAAE,IAAI,UACzO,CACA,CA7VC,aA6Va,CA1XI,OA0XI,CANb,WAOL,iBAAkB,gBAAgB,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAE,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,cAAc,CAAE,IAAI,UAC/M,CACA,CA/VC,aA+Va,CA7XI,OA6XI,CATb,WAUL,iBAAkB,IAAI,UAAU,CAAE,gBAAgB,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAE,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,cAC3M,CACA,CAhYkB,OAgYV,CA5DC,gBA4DgB,CAZhB,UAY2B,KAAK,CA9HhC,UA+HL,iBAAkB,IAAI,UAAU,CAAE,gBAAgB,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAE,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,cAAc,CAAE,IAAI,aAAa,EAAE,KAC9O,CAGA,CArYkB,OAqYV,CAnIC,QAmIQ,CAjBR,WAkBL,iBAAkB,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAC5G,gBAAgB,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAE,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,cAAc,CACnL,IAAI,SAAS,EAAE,KAAK,CAAE,IAAI,YAAY,EAAE,KAAK,CAAE,IAAI,YAAY,EAAE,KAAK,CACtE,gBAAgB,GAAG,IAAI,CAAE,IAAI,sBAAsB,EAAE,aAAa,EAAE,IAAI,YAAY,EAAE,IAAI,CAAE,YAAY,EAAE,CAC1G,IAAI,aAAa,EAAE,MACvB,gBAAiB,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAC3H,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,KAChE,oBAAqB,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CACvH,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CACnC,CACA,CAlXC,aAkXa,CAhZI,OAgZI,CA9Ib,QA8IsB,CA5BtB,WA4BmC,CAhZ1B,OAgZkC,CA9I3C,QA8IoD,CA5EpD,gBA4EqE,CA5BrE,WA6BL,iBAAkB,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAAE,IAAI,WAAW,EAAE,KAAK,CAC5G,IAAI,SAAS,EAAE,KAAK,CACpB,gBAAgB,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,aAAa,CAAE,IAAI,gCAAgC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,cAAc,CACnL,IAAI,YAAY,EAAE,KAAK,CAAE,IAAI,YAAY,EAAE,KAAK,CAChD,gBAAgB,GAAG,IAAI,CAAE,IAAI,sBAAsB,EAAE,aAAa,EAAE,IAAI,YAAY,EAAE,IAAI,CAAE,YAAY,EAAE,CAC1G,IAAI,aAAa,EAAE,MACvB,gBAAiB,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAAE,IAAI,gBAAgB,EAAE,EAAE,EAAE,CAC3H,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,IAAI,CAAE,KAAK,KAChE,oBAAqB,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CAAE,IAAI,cAAc,EAAE,EAAE,EAAE,CACvH,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAE,EAAE,CACnC,CAeA,OAAO,CA1aW,OA0aH,CAAC,eAAiB,SAAU,SAAU,UAAW,OAAS,CACzE,CA3akB,OA2aV,CADQ,aACM,QAClB,QAAS,GACT,SAAU,SA/hBd,MAgiBW,EACP,QAAS,GACT,WAAY,IAAI,oBAAoB,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,cACtE,eAAgB,IACpB,CACA,CAnbkB,OAmbV,CAAC,qBAAqB,QAC1B,WAAY,IAAI,4BAA4B,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,aAClF,CAMA,OAAO,CAvXI,cAuXW,CAjBN,cAiBsB,CAhUrC,eAgUqD,CAjBtC,eAiBwD,UAAW,OAAS,CAC5F,CAxXW,cAwXI,CAlBC,aAkBa,QAC7B,CAlUC,eAkUe,CAnBA,aAmBc,QAC1B,QAAS,GACT,SAAU,SAjjBd,MAkjBW,EACP,QAAS,GACT,WAAY,IAAI,oBAAoB,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,cACtE,eAAgB,IACpB,CACA,CAjYW,cAiYI,CAlBN,qBAkB4B,QACrC,CA3UC,eA2Ue,CAnBP,qBAmB6B,QAClC,WAAY,IAAI,4BAA4B,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,aAClF,CAIA,CApZuC,OAoZ7B,KAAM,EAAE,EAAE,IAAM,CAQ1B,CApdC,UAodY,SAAU,OAAQ,QAAS,EAAG,iBAAkB,IAAI,sBAAsB,EAAE,OAAS,CAClG,CAngBC,UAmgBU,CArdV,UAqduB,QAAS,EAAG,iBAAkB,IAAI,sBAAsB,EAAE,OAAS,CAO3F,CAAC,eAAgB,CAAC,mBACd,SAAU,OACV,KAAM,EACN,KAAM,EAAE,EAAE,KACV,WAAY,WACZ,SAAU,OACV,YAAa,OACb,WAAY,OACZ,eAAgB,KAChB,WAAY,IAAI,uBAAuB,EAAE,IAAI,sBAAsB,EAAE,SACrE,MAAO,IAAI,kBAAkB,EAAE,IAAI,iBAAiB,EAAE,UACtD,WAAY,MAAM,KAAK,IAAI,EAAE,IAAI,YAAY,EAAE,MAAM,EAAE,IAAI,uBAAuB,EAAE,IAAI,sBAAsB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MACxI,CAIA,CA1hBC,UA0hBU,CA5eV,UA4esB,CAhBL,mBAiBd,iBAAkB,gBAAgB,GAAG,GAAG,CAAE,IAAI,sBAAsB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,IAAI,eAAe,EAAE,IAAI,CAAE,YAAY,IAAI,eAAe,EAAE,KACnK,CAIA,CAAC,eACG,SAAU,SACV,IAAK,EACL,KAAM,EACN,QAAS,KACT,WAAY,WACZ,YAAa,IAAI,oBACjB,WAAY,IAAI,2BAA2B,EAAE,IAAI,sBAAsB,EAAE,SACzE,MAAO,IAAI,sBAAsB,EAAE,SACnC,iBAAkB,gBAAgB,GAAG,GAAG,CAAE,IAAI,sBAAsB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,IAAI,eAAe,EAAE,IAAI,CAAE,YAAY,IAAI,eAAe,EAAE,KACnK,CACA,CAAC,YAAa,CAAC,oBACX,WAAY,WACZ,OAAQ,KAjnBZ,OAknBY,EACR,KAAM,QACN,YAAa,QACb,MAAO,QACP,WAAY,YACZ,OAAQ,KACR,QAAS,KACT,YAAa,OACb,SAAU,OACV,cAAe,QACnB,CACA,CAdC,YAeG,KAAM,EAAE,EAAE,KACV,WAAY,MAAM,KAAK,IAAI,EAAE,IAAI,eAAe,EAAE,MAAM,EAAE,IAAI,sBAAsB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAC9G,CACA,CAlBe,oBAkBQ,KAAM,EAAE,EAAE,KAAM,UAAW,CAAG,CAGrD,CArBC,YAqBa,CArBC,oBAqBqB,CAAC,iBAAiB,CAAC,sBAAwB,QAAS,EAAE,IAAI,mBAAmB,EAAE,IAAM,CAIzH,CApCC,cAoCe,CAAE,CAAC,UACf,SAAU,OACV,QAAS,KACT,QAAS,KACT,YAAa,QACb,WAAY,YACZ,MAAO,OACX,CAGA,CA9CC,cA8Ce,CAAE,CAnCH,mBAmCuB,CAAC,wBAA0B,MAAO,IAAI,+BAA+B,EAAE,SAAW,CACxH,CA/CC,cA+Ce,CAAE,CAXC,SAWS,OAC5B,CAhDC,cAgDe,CAAE,CAZC,SAYS,cAAgB,QAAS,IAAI,mBAAmB,EAAE,IAAI,MAAM,WAAY,eAAgB,IAAM,CAC1H,CAAC,iBAAmB,QAAS,QAAU,CACvC,CAxEC,eAwEiB,QAAS,CAAG,CAC9B,CAzEkB,mBAyEI,QAAS,CAAG,CAYlC,CAAC,aAAe,SAAU,SAAU,IAAK,EAAG,KAAM,EAAG,QAAS,CAAG,CASjE,CAAC,oBAAqB,CAAC,gBAAkB,SAAU,OAAQ,KAAM,EAAG,MAAO,EAAG,OAAQ,EAAG,QAAS,CAAG,CAGrG,CAZC,aAYc,CAHd,oBAGoC,CAHd,gBAGiC,eAAgB,IAAM,CAW9E,CAAC,cACG,SAAU,SACV,iBAAiB,KACjB,WAAY,IAAI,mBAAmB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MACxD,UAAW,IAAI,gBACnB,CACA,CAAC,SAAW,SAAU,QAAU,CAGhC,CAAC,aAAe,SAAU,SAAU,WAAY,IAAI,mBAAmB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAQ,CAGrG,CAAC,gBAAkB,SAAU,SAAU,WAAY,IAAI,sBAAsB,EAAE,IAAI,mBAAmB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAS,CAKrI,CAAC,aAAe,SAAU,SAAU,WAAY,IAAI,yBAAyB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAQ,CAO3G,CAAC,SAAU,CAlBV,SAkBqB,CAAC,SAAU,CAnXhC,iBAmXoD,cAAe,IAAK,eAAgB,IAAM,CAI/F,CAJC,SAIW,SAAU,SAAU,cAAe,IAAI,kBAAkB,EAAE,WAAa,CAapF,CAjBC,QAiBQ,OAAS,CAAC,eAAe,OAC9B,QAAS,GACT,SAAU,SACV,WAAY,WACZ,IAAK,KAAK,CAAC,IAAI,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QAC1F,KAAM,KAAK,CAAC,IAAI,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QAC3F,MAAO,KAAK,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QACnF,OAAQ,KAAK,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QACpF,OAAQ,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,OAAO,MAAM,IAAI,kBAAkB,EAAE,WAC/F,CAIA,CAbmB,eAaH,OAAU,aAAc,IAAI,sBAAsB,EAAE,IAAI,kBAAkB,EAAE,YAAc,CAI1G,CAjBmB,eAiBF,CAAE,CAlClB,QAkC2B,OAAU,QAAS,IAAM,CAgBrD,CAlDC,QAkDQ,CAAC,qBAAqB,OAC3B,IAAK,IAAI,OAAO,EAAE,KAClB,KAAM,IAAI,OAAO,EAAE,KACnB,MAAO,KAAK,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,MAClD,OAAQ,KAAK,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,MACnD,OAAQ,IAAI,OAAO,EAAE,KAAK,MAAM,IAAI,+BAA+B,EAAE,IAAI,kBAAkB,EAAE,YACjG,CAgBA,CAAC,wBAAyB,CAAC,sBAAwB,SAAU,OAAQ,KAAM,EAAG,MAAO,EAAG,OAAQ,EAAG,eAAgB,IAAM,CACzH,CADC,wBAED,CAF2B,sBACA,QAAS,CAAG,CAEvC,CAAC,gBACG,SAAU,SACV,QAAS,EACT,WAAY,WACZ,eAAgB,KAChB,aAAc,MACd,aAAc,EACd,aAAc,IAAI,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,YACjE,CACA,CAAC,uBAAyB,oBAAqB,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,KAAO,CAC5E,CAAC,oBAAsB,mBAAoB,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,KAAO,CAMxE,CAAC,iBAAmB,QAAS,IAAM,CACnC,CAxnBW,cAwnBI,CAAC,kBACZ,iBAAkB,IAAI,4BAA4B,EAAE,UAAU,GAAG,IAAI,EAAE,WAAW,GAAG,EAAE,IAAI,sBAAsB,EAAE,UACnH,MAAO,IAAI,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,YAC1D,CACA,CAjtBC,MAitBM,OAAO,KAAK,CAAE,CALpB,gBAKqC,CAJtB,mBAI2C,CAAE,CApO5D,eAqOG,iBAAkB,IAAI,4BAA4B,EAAE,UAAU,GAAG,IAAI,EAAE,WAAW,GAAG,EAAE,IAAI,uBAAuB,EAAE,IAAI,sBAAsB,EAAE,WAChJ,MAAO,IAAI,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,YAC1D,CACA,CAhoBW,cAgoBI,CAAC,iBACZ,iBAAkB,IAAI,kCAAkC,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,aAAa,GAAG,EAAE,IAAI,sBAAsB,EAAE,SAC9K,CACA,CAxtBC,MAwtBM,OAAO,KAAK,CAAE,CAZpB,gBAYqC,CAHtB,kBAG0C,CAAE,CA3O3D,eA4OG,iBAAkB,IAAI,kCAAkC,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,aAAa,GAAG,EAAE,IAAI,uBAAuB,EAAE,IAAI,sBAAsB,EAAE,UAC3M,CACA,CA9OkB,kBA8OC,OACf,QAAS,GACT,SAAU,SA9zBd,MA+zBW,IACP,iBAAkB,SAClB,UAAW,QAAQ,KAAK,CAAC,CAAE,KAAK,IAAI,CAAE,EAAE,KAC5C,CACA,CAAC,yBAAyB,OAAU,iBAAkB,IAAI,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,YAAc,CAOnH,CAAC,gBAAkB,SAAU,QAAU,CACvC,CADC,eACe,OACZ,QAAS,GACT,SAAU,SACV,WAAY,WACZ,IAAK,KAAK,CAAC,IAAI,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QAC1F,KAAM,KAAK,CAAC,IAAI,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QAC3F,MAAO,KAAK,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QACnF,OAAQ,KAAK,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QACpF,OAAQ,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,OAAO,MAAM,IAAI,eAAe,EAAE,QACxF,QAAS,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,OAAO,OAAO,IAAI,kBAAkB,EAAE,YAC7F,eAAgB,KAAK,IAAI,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,OAC7E,CAKA,CAAC,eAAiB,SAAU,SAAU,WAAY,WAAY,WAAY,IAAI,sBAAsB,EAAE,IAAI,kBAAkB,EAAE,aAAc,OAAQ,IAAI,eAAe,EAAE,KAAK,MAAM,MAAQ,CAC5L,CAAC,eAAiB,SAAU,SAAU,QAAS,IAAI,OAAO,IAAI,iBAAiB,EAAE,IAAI,kBAAkB,EAAE,aAAc,eAAgB,IAAM,CAI7I,CA9IuB,SA8IX,SAAU,SAAU,cAAe,OAAQ,cAAe,IAAI,kBAAkB,EAAE,WAAa,CAY3G,CAAC,qBAAuB,SAAU,SAAU,WAAY,WA52BxD,QA42B6E,IAAK,QAAS,IAAI,MAAM,aAAc,eAAgB,KAAM,WAAY,UAAU,GAAG,IAAI,CAAE,aAAa,GAAG,CAAE,aAAa,WAAa,CAQpN,CAAC,kBAAoB,SAAU,SAAU,WAAY,WAAY,eAAgB,KAAM,OAAQ,IAAM,CACrG,CAAC,oBAAsB,WAAY,aAAc,OAAQ,EAAE,MAAM,IAAI,eAAe,EAAE,OAAS,CAC/F,CAAC,0BAA2B,CAAC,8BAAgC,OAAQ,WAAa,CAClF,CAAC,2BAA4B,CAAC,6BAA+B,OAAQ,WAAa,CAClF,CA31BC,OA21BO,CAAC,wBAAwB,CAJhC,kBAIqD,eAAgB,IAAM,CAC5E,CA51BC,OA41BO,CAAC,6BAA6B,CA/xBrC,YA+xBoD,OAAQ,IAAM,CACnE,CA71BC,OA61BO,CAAC,6BAA6B,CAhyBrC,YAgyBoD,OAAQ,WAAa,CAC1E,CA91BC,OA81BO,CAAC,6BAA6B,CAjyBrC,YAiyBoD,OAAQ,WAAa,CAI1E,CA7KuB,QA6Kd,CAAC,sBAAwB,eAAgB,IAAM,CAMxD,CAAC,gBAAkB,SAAU,SAAU,QAAS,IAAI,OAAO,IAAI,kBAAkB,EAAE,YAAa,eAAgB,IAAM,CAMtH,CAAC,aAAc,CAAE,CAh1BhB,WAg1B6B,CAAE,CA70B/B,SA60B0C,CAAE,IAAI,CAjzBhD,YAizB8D,CAv0B9D,WAu0B4E,OAAQ,IAAM,CAC3F,CADC,aACc,CAAE,CAj1BhB,WAi1B6B,CAAE,CA90B/B,SA80B0C,CAAE,IAAI,CAlzBhD,YAkzB8D,CAx0B9D,WAw0B0E,IAAI,CAAC,eAAgB,CAtsB/F,eAssBgH,CA9kBnF,QA8kB6F,CA9kB1H,UA8kBsI,CA9kB1H,eA8kB2I,CAxoBhI,uBAwoByJ,CAtmBhL,eAsmBiM,CAxBjM,mBAwBuN,eAAgB,IAAM,CAC9O,CAAC,eAAiB,MAAO,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAU,CAC7G,CAAC,eAAiB,MAAO,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAU,CAC7G,CAAC,eAAiB,MAAO,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAU,CAC7G,CAAC,eAAiB,MAAO,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAU,CAC7G,CAAC,eAAiB,MAAO,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAU,CAC7G,CAAC,eAAiB,MAAO,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAU,CAC7G,CAAC,eAAiB,MAAO,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAU,CAK7G,CA9uB6D,cA8uB9C,OAAU,QAAS,GAAI,OAAQ,KAAK,IAAI,iBAAiB,EAAE,GAAG,IAAI,mBAAmB,EAAE,KAAM,KAAM,EAAE,EAAE,KAx5BtH,cAw5B2I,IAAK,WAAY,IAAI,2BAA2B,EAAE,cAAe,QAAS,GAAM,CAC3N,CAAC,WAAa,QAAS,IAAI,oBAAoB,EAAE,GAAM,CAQvD,CAAC,WAAY,CAp4BZ,OAo4BoB,CAAC,cAAgB,OAAQ,IAAI,mBAAmB,EAAE,SAAW,CAClF,CADC,UACU,OAAS,CAr4BnB,OAq4B2B,CAAC,aAAa,OAAU,QAAS,GAAI,SAAU,SAl6B3E,MAk6B4F,EAAE,EAAE,KAAQ,OAAQ,IAAI,uBAAuB,EAAE,KAAM,WAAY,IAAI,gBAAgB,EAAE,WAAY,eAAgB,KAAM,QAAS,EAAI,CAQpO,CA/2BC,WA+2BW,oBAAsB,MAAO,IAAI,oBAAoB,EAAE,MAAO,OAAQ,IAAI,oBAAoB,EAAE,MAAO,WAAY,WAAa,CAC5I,CAh3BC,WAg3BW,0BAA4B,WAAY,IAAI,oBAAoB,EAAE,UAAU,GAAG,IAAI,EAAE,WAAW,GAAG,EAAE,cAAe,gBAAiB,YAAa,OAAQ,IAAI,MAAM,YAAa,cAAe,KAAK,IAAI,oBAAoB,EAAE,MAAM,EAAE,EAAI,CACvP,CAj3BC,WAi3BW,2BAA6B,WAAY,WAAa,CAClE,UAAU,IAAI,SAAS,CAAC,CAAC,mBACrB,CAn3BH,YAm3BkB,gBAAiB,IAAI,oBAAoB,EAAE,UAAU,GAAG,IAAI,EAAE,WAAW,GAAG,EAAE,cAAc,WAAa,CAC5H,CAIA,CAvCgF,eAwC5E,SAAU,SACV,IAAK,EAGL,MAAO,IAAI,sBAAsB,EAAE,KACnC,MAAO,IAAI,sBAAsB,EAAE,MACnC,OAAQ,KA17BZ,QA27Ba,EACT,OAAQ,KACR,WAAY,KACZ,MAAO,QACP,OAAQ,QACR,eAAgB,IACpB,CACA,CAtDgF,cAsDjE,OAAU,QAAS,IAAK,QAAS,GAAM,CAKtD,CAjxBW,cAixBI,KAAK,CAAE,CA3D0D,gBA4D5E,cAAe,KAAK,IAAI,mBAAmB,EAAE,KAAK,EAAE,IAAI,sBAAsB,EAAE,MAAM,EAAE,IAAI,sBAAsB,EAAE,KACxH,CAMA,CAAC,WACG,SAAU,SACV,QAAS,GACT,WAAY,WACZ,WAAY,KAn9BhB,QAs9Ba,IACT,QAAS,KACT,eAAgB,OAChB,IAAK,IACL,WAAY,IAAI,sBAAsB,EAAE,QACxC,MAAO,QACP,QAAS,IAAI,uBAAuB,EAAE,IAAI,MAAM,UACpD,CAKA,CAAC,WACG,SAAU,SACV,QAAS,GAIT,eAAgB,KAx+BpB,QA2+Ba,IACT,WAAY,IAAI,sBAAsB,EAAE,QACxC,MAAO,IAAI,sBAAsB,EAAE,SACnC,QAAS,IAAI,MAAM,IAAI,sBAAsB,EAAE,QACnD,CAYA,CAAC,gBACG,WAAY,WACZ,QAAS,EAAE,IAAI,mBAAmB,EAAE,KACpC,YAAa,IAAI,eAAe,EAAE,MAClC,WAAY,IAAI,eAAe,EAAE,QACjC,MAAO,IAAI,sBAAsB,EAAE,SACnC,QAAS,IAAI,MAAM,IAAI,sBAAsB,EAAE,SAC/C,eAAgB,KAChB,YAAa,IACjB,CAOA,CAAC,YACG,SAAU,SACV,QAAS,EACT,WAAY,WACZ,QAAS,EAAE,IAAI,mBAAmB,EAAE,KACpC,YAAa,IAAI,iBACjB,YAAa,OACb,SAAU,OACV,cAAe,SACf,eAAgB,KAChB,WAAY,IAAI,wBAAwB,EAAE,QAC1C,MAAO,IAAI,mBAAmB,EAAE,YAChC,QAAS,IAAI,qBAAqB,EAAE,IAAI,MAAM,UAAU,GAAG,IAAI,EAAE,WAAW,GAAG,EAAE,cACjF,eAAgB,IACpB,CAIA,CAAC,oBAAsB,QAAS,KAAM,eAAgB,OAAQ,YAAa,CAAG,CAC9E,CAAC,kBACG,QAAS,KACT,eAAgB,OAChB,IAAK,IACL,KAAM,EAAE,EAAE,KACV,WAAY,EACZ,YAAa,IACb,WAAY,IAAI,eAAe,EAAE,KAAK,MAAM,IAAI,sBAAsB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAChG,CACA,CAxFC,WAwFW,OAAS,KAAM,QAAS,WAAY,KAAM,QAAS,IAAI,IAAI,qBAAqB,EAAE,KAAM,OAAQ,OAAS,CACrH,CAzFC,WAyFW,MAAM,UAAY,OAAQ,QAAS,QAAS,EAAK,CAK7D,CAAC,gBAAkB,WAAY,MAAO,WAAY,KAAM,KAAM,EAAE,EAAE,KAAM,WAAY,KAAM,QAAS,KAAM,eAAgB,MAAQ,CACjI,CAAC,mBAAqB,QAAS,KAAM,IAAK,IAAK,gBAAiB,SAAU,YAAa,CAAG,CAG1F,CAlGC,WAkGW,CAAC,cAAgB,aAAc,EAAG,WAAY,KAAM,OAAQ,CAAG,CAC3E,CADa,aACC,QAAW,QAAS,aAAc,MAAO,KAAO,CAC9D,CAFa,aAEC,CAAC,kBAAoB,QAAW,QAAS,GAAS,CAChE,CAHa,aAGC,CAAC,mBAAqB,QAAW,QAAS,GAAS,CACjE,CAJa,aAIC,CAAC,mBAAqB,QAAW,QAAS,GAAS,CACjE,CAAC,gBAAkB,QAAS,KAAM,IAAK,IAAM,CAG7C,CAAC,cAAgB,SAAU,SAAU,MAAO,EAAG,OAAQ,EAAG,SAAU,OAAQ,QAAS,IAAM,CAG3F,CAAC,gBAAkB,QAAS,QAAU,CAGtC,CAAC,qBAAuB,QAAS,KAAM,eAAgB,OAAQ,IAAK,IAAK,WAAY,CAAG,CACxF,CAAC,gBAAkB,WAAY,KAAO,CAItC,CAAC,YAAc,QAAS,KAAM,eAAgB,OAAQ,IAAK,IAAK,WAAY,CAAG,CAC/E,CAAC,kBAAoB,WAAY,KAAO,CACxC,CAAC,iBACG,SAAU,SACV,WAAY,KAGZ,YAAa,EACb,eAAgB,KAChB,OAAQ,IAAI,MAAM,IAAI,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAChE,CACA,CAAC,mBAAqB,SAAU,QAAU,CAC1C,CAAC,iBACG,SAAU,SACV,KAAM,EACN,MAAO,EACP,WAAY,WACZ,QAAS,KACT,IAAK,IAAI,mBAAmB,EAAE,KAC9B,QAAS,EAAE,IAAI,mBAAmB,EAAE,KACpC,YAAa,IAAI,iBACjB,YAAa,OACb,OAAQ,OACZ,CACA,CAAC,kBAAoB,KAAM,EAAE,EAAE,IAAM,CACrC,CAAC,iBAAmB,KAAM,EAAE,EAAE,KAAM,SAAU,OAAQ,cAAe,QAAU,CAC/E,CAAC,mBAAqB,WAAY,IAAI,mBAAmB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAQ,CAOtF,CAAC,aACD,CA9dmB,UA+dnB,CAneqC,iBAmenB,CAAC,uBACf,SAAU,SACV,QAAS,EACT,WAAY,WA1mChB,OA2mCY,EACR,QAAS,EAAE,IAAI,mBAAmB,EAAE,KACpC,OAAQ,KACR,KAAM,QACN,YAAa,IAAI,iBACjB,WAAY,IAAI,sBAAsB,EAAE,QACxC,MAAO,IAAI,iBAAiB,EAAE,WAClC,CAIA,CA9emB,SA8eT,CAAC,eACX,CAnfqC,iBAmfnB,CADP,eACyB,QAAS,EAAG,eAAgB,IAAM,CACtE,CAhfmB,UAiff,QAAS,IAAI,mBAAmB,EAAE,IAAI,MAAM,WAC5C,eAAgB,IACpB,CAOA,CArmCC,OAqmCO,KAAK,eAAe,CAxiC3B,YAwiCwC,CA1ftB,UA0fmC,cAAe,GAAK,CAK1E,CA1mCC,OA0mCO,CAAC,wBAA0B,OAAQ,QAAU,CACrD,CA9iCC,YA8iCY,CAhgBM,SAggBI,CAAC,gBAAoB,cAAe,MAAQ,CAEnE,CAAC,iBAAmB,SAAU,OAAQ,KAAM,EAAG,MAAO,EAAG,OAAQ,EAAG,QAAS,CAAG,CAShF,CAAC,mBAAqB,SAAU,SAAU,KAAM,EAAG,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,QAAS,EAAG,eAAgB,IAAM,CAClH,CADC,kBACkB,CAAC,kBAAoB,SAAU,MAAQ,CAC1D,CAhDC,aAgDe,QAAS,EAAG,YAAa,YAAa,QAAS,KAAM,eAAgB,IAAM,CAC3F,CAjDC,YAiDY,CAAC,uBACV,QAAS,EACT,YAAa,KACb,QAAS,IAAI,mBAAmB,EAAE,IAAI,MAAM,WAC5C,eAAgB,IACpB,CAgBA,CAviBqC,kBAwiBjC,SAAU,SACV,QAAS,GACT,MAAK,EAIL,WAAY,WAlrChB,OAmrCY,EAnrCZ,QAorCa,EACT,OAAQ,KACR,KAAM,QACN,YAAa,QACb,MAAO,QACP,eAAgB,OAChB,aAAc,OACd,eAAgB,KAChB,YAAa,EACb,YAAa,KAEb,WAAY,KACZ,YAAa,IACb,eAAgB,KAChB,WAAY,MAChB,CACA,CAAC,uBAAyB,OAAQ,KAAM,SAAU,MAAQ,CAC1D,CADC,sBACsB,OAAU,QAAS,GAAI,QAAS,aAAc,MAAO,IAAM,CAsBlF,CAvlBqC,kBAwlBjC,uBAAuB,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,SACjG,uBAAuB,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,SACjG,uBAAuB,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,SACjG,uBAAuB,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,SACjG,uBAAuB,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,SACjG,uBAAuB,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,SACjG,uBAAuB,IAAI,gBAAgB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,SACjG,+BAA+B,IAAI,wBAAwB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,uBAAuB,GAAG,EAAE,SACpI,+BAA+B,IAAI,wBAAwB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,uBAAuB,GAAG,EAAE,SACpI,+BAA+B,IAAI,wBAAwB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,uBAAuB,GAAG,EAAE,SACpI,+BAA+B,IAAI,wBAAwB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,uBAAuB,GAAG,EAAE,SACpI,+BAA+B,IAAI,wBAAwB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,uBAAuB,GAAG,EAAE,SACpI,+BAA+B,IAAI,wBAAwB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,uBAAuB,GAAG,EAAE,SACpI,+BAA+B,IAAI,wBAAwB,EAAE,WAAW,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,IAAI,uBAAuB,GAAG,EAAE,SACpI,6BAA6B,IAAI,iCAAiC,EAAE,WAAW,OAAO,EAAE,SAC5F,CAMA,CAzmBmB,SAymBR,CAAE,CA7mBwB,kBA6mBH,KAAM,IAAI,mBAAmB,EAAE,KAAM,MAAO,IAAI,mBAAmB,EAAE,IAAM,CAC7G,CA9oBC,cA8oBe,CAAE,GAAG,CA1mBF,UA0mBe,SAAU,QAAU,CACtD,CA/oBC,eA+oBiB,UAAW,OAAS,CACtC,CAhnBqC,iBAgnBnB,KAAK,CAAE,CAAC,yBAA2B,WAAY,OAAS,CAc1E,CA9nBqC,iBA8nBlB,CAAE,CAdK,wBAcsB,wBAAyB,YAAa,YAAa,aAAc,WAAY,WAAa,CAC1I,CA/nBqC,iBA+nBlB,CAAE,CAfK,uBAemB,YAAc,MAAO,cAAe,wBAAyB,cAAe,iBAAkB,SAAW,CACtJ,CAhoBqC,iBAgoBlB,CAAE,CAhBK,uBAgBmB,iBAAkB,CAhoB1B,iBAgoB6C,CAAE,CAhB1D,uBAgBkF,gBAAkB,MAAO,WAAa,CAKlJ,CAAC,cACG,SAAU,SACV,QAAS,GACT,WAAY,WACZ,WAAY,KACZ,QAAS,KACT,eAAgB,OAChB,WAAY,IAAI,sBAAsB,EAAE,QACxC,MAAO,QACP,QAAS,IAAI,uBAAuB,EAAE,IAAI,MAAM,UACpD,CACA,CAAC,mBAAqB,QAAS,KAAM,eAAgB,MAAQ,CAC7D,CAAC,mBACG,QAAS,EAAE,IAAI,mBAAmB,EAAE,KACpC,YAAa,IAAI,iBACjB,YAAa,OACb,SAAU,OACV,cAAe,SACf,OAAQ,OACZ,CACA,CAAC,uBAAyB,WAAY,IAAI,mBAAmB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAQ,CAC1F,CAAC,mBACG,QAAS,EAAE,IAAI,mBAAmB,EAAE,KACpC,YAAa,IAAI,iBACjB,YAAa,OACb,SAAU,OACV,cAAe,SACf,QAAS,EACb,CACA,CAlBC,kBAkBmB,CAAE,CARrB,mBASG,WAAY,IAAI,eAAe,EAAE,KAAK,MAAM,IAAI,sBAAsB,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAChG,CAIA,CAAC,SAAU,CAAC,UACR,QAAS,KACT,YAAa,OACb,IAAK,IAAI,mBAAmB,EAAE,KAC9B,QAAS,IAAI,IAAI,mBAAmB,EAAE,IAC1C,CACA,CANC,SAMS,OAAQ,CANN,UAMiB,OACzB,KAAM,QACN,QAAS,EAAE,IAAI,qBAAqB,EAAE,KACtC,aAAc,IAAI,wBAAwB,EAAE,KAC5C,OAAQ,OACZ,CACA,CAZC,SAYS,MAAM,UAAY,OAAQ,OAAS,CAI7C,CAAC,WACG,QAAS,KACT,IAAK,KAAK,EAAE,EAAE,IAAI,mBAAmB,EAAE,MACvC,WAAY,IAGZ,KAAM,EAAE,EAAE,KACV,gBAAiB,SACjB,YAAa,MACjB,CAGA,CAAC,eAAiB,YAAa,MAAQ,CACvC,CAAC,oBAAsB,MAAO,IAAI,sBAAsB,EAAE,QAAU,CACpE,CAAC,gBAAkB,QAAS,KAAM,eAAgB,OAAQ,YAAa,QAAS,UAAW,IAAM,CACjG,CAAC,qBACG,KAAM,QACN,MAAO,KAGP,QAAS,KACT,gBAAiB,WACjB,YAAa,OACb,WAAY,KACZ,WAAY,KACZ,OAAQ,EACR,QAAS,IAAI,IAAI,mBAAmB,EAAE,KAAK,IAAI,EAC/C,OAAQ,OACZ,CACA,CAAC,qBAAuB,QAAS,aAAc,MAAO,MAAO,WAAY,MAAQ,CAGjF,CAAC,YACG,SAAU,SACV,MAAO,IACP,OAAQ,IA/1CZ,OAg2CY,KAh2CZ,QAi2Ca,EACT,SAAU,OACV,UAAW,MAAM,KACjB,YAAa,MACjB,CAIA,CAAC,iBACG,SAAU,SACV,IAAK,EACL,KAAM,EACN,MAAO,EACP,OAAQ,EACR,SAAU,OACV,WAAY,OACZ,eAAgB,IACpB,CAIA,CApwCkB,QAowCP,WAAY,MAAM,KAAK,IAAI,EAAE,IAAI,YAAY,EAAE,MAAM,EAAE,IAAI,sBAAsB,EAAE,YAAc,CAI5G,CAAC,cAAgB,WAAY,IAAM,CACnC,CAAC,gBAAkB,WAAY,MAAQ,CACvC,CAAC,eAAiB,WAAY,KAAO,CAIrC,OAAO,CAAC,aAAa,EAAE,QAMnB,CApxCc,OAoxCN,CAh6BH,WAg6BiB,QAAS,IAAI,OAAO,UAAW,eAAgB,IAAM,CAQ3E,CA5xCc,OA4xCN,CAl3BI,aAk3BU,QAAW,WAAY,KA94CjD,MA84C8D,IAAK,OAAQ,IAAI,OAAO,SAAW,CAC7F,CA7xCc,OA6xCN,CA12BH,qBA02ByB,QAAW,WAAY,KAAM,aAAc,KAAO,CAChF,CA1tCO,cA0tCQ,CAp3BH,aAo3BiB,QAAU,CAnqC1C,eAmqC0D,CAp3B3C,aAo3ByD,QAAW,WAAY,KAh5ChG,MAg5C6G,IAAK,OAAQ,IAAI,OAAO,SAAW,CAC5I,CA3tCO,cA2tCQ,CA52BV,qBA42BgC,QAAU,CApqClD,eAoqCkE,CA52B1D,qBA42BgF,QAAW,WAAY,KAAM,aAAc,KAAO,CACvI,CAhyCc,OAgyCN,CAj+BH,eAi+BqB,MAAO,QAAU,CAC3C,CAjyCc,OAiyCN,CA79BH,iBA69BuB,QAAS,IAAI,OAAO,SAAU,eAAgB,IAAM,CAChF,CAlyCc,OAkyCN,CA19BH,eA09BqB,MAAO,QAAU,CAC3C,CAnyCc,OAmyCN,CA/8BI,kBA+8BiB,QAAS,IAAI,MAAM,UAAW,eAAgB,IAAM,CAGjF,CAppCoB,sBAopCG,QAAW,oBAAqB,KAAM,iBAAkB,UAAY,CAC3F,CAnnCH,eAmnCqB,oBAAqB,KAAM,WAAY,SAAW,CAGpE,CA5wCH,aA4wCiB,CA1yCA,QA0yCW,gBAAiB,QAAU,CASpD,CAruBH,SAquBe,cAAe,MAAO,cAAe,SAAW,CAG5D,CA3oBH,gBA2oBsB,aAAc,SAAW,CAC5C,CAnvCO,cAmvCQ,CA3nBH,kBA2nBuB,CAx0CtC,MAw0C6C,OAAO,KAAK,CAAE,CA5nB3D,gBA4nB4E,CA3nB7D,mBA2nBkF,CAAE,CA31BnG,eA21BqH,iBAAkB,OAAQ,MAAO,SAAW,CAC9J,CAvmBH,yBAumB6B,OAAU,iBAAkB,SAAW,CAGjE,CAnvBH,cAmvBoB,QAAS,IAAM,CAGhC,CA9tBH,SA8tBc,CA7sBI,gBA6sBe,cAAe,IAAM,CACnD,CA/tBH,QA+tBY,OAAS,CA/tBrB,QA+tB8B,CA7qBrB,qBA6qB2C,OAAS,CA9sB3C,eA8sB4D,CAAE,CA/tBhF,QA+tByF,OAAS,CA9sBhF,eA8sBgG,OAC3G,QAAS,GACT,IAAK,KAAK,IAAI,EAAE,IAAI,sBAAsB,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QAC/F,KAAM,KAAK,IAAI,EAAE,IAAI,sBAAsB,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,QAChG,MAAO,EACP,OAAQ,EACR,OAAQ,IAAI,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,OAAO,EAAE,OAAO,MAAM,UACnE,WAAY,IAChB,CAGA,CAlnBH,eAknBmB,OAAU,aAAc,OAAQ,cAAe,SAAW,CAC1E,CA1vBH,aA2vBG,CAxvBH,gBAuvBmB,QAAS,IAAI,OAAO,UAAW,eAAgB,IAAM,CAErE,CApvBH,aAovBmB,QAAS,IAAI,OAAO,SAAU,eAAgB,IAAM,CAGpE,CAnmCH,iBAmmCuB,cAAe,SAAW,CAO9C,CArQH,uBAqQ6B,oBAAqB,KAAM,MAAO,UAAY,CACxE,CAt0BiC,kBAu0B7B,uBAAuB,WAAY,uBAAuB,WAAY,uBAAuB,WAC7F,uBAAuB,WAAY,uBAAuB,WAAY,uBAAuB,WAC7F,uBAAuB,WACvB,+BAA+B,WAAY,+BAA+B,WAC1E,+BAA+B,WAAY,+BAA+B,WAC1E,+BAA+B,WAAY,+BAA+B,WAC1E,+BAA+B,WAC/B,6BAA6B,WACjC,CACJ","names":[]}