@opencorestack/opengridx 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +10 -6
  3. package/dist/index.d.ts +51 -8
  4. package/dist/opengridx.css +1 -1
  5. package/dist/opengridx.es.js +4056 -3957
  6. package/dist/opengridx.es.js.map +1 -1
  7. package/dist/opengridx.umd.js +14 -14
  8. package/dist/opengridx.umd.js.map +1 -1
  9. package/docs/API_REFERENCE.md +15 -8
  10. package/docs/architecture/datagrid-orchestration.md +1 -0
  11. package/docs/components/column-resize.md +14 -2
  12. package/docs/components/datagrid.md +1 -1
  13. package/docs/customization/theming.md +1 -1
  14. package/docs/features/list-view.md +1 -1
  15. package/docs/features/pdf-export.md +16 -0
  16. package/docs/features/pinning.md +1 -0
  17. package/docs/features/sorting-pagination.md +26 -0
  18. package/docs/features/virtualization.md +11 -9
  19. package/docs/migration/v2-to-v3.md +13 -2
  20. package/docs/roadmap.md +1 -1
  21. package/lib/components/Cell/Cell.css +4 -0
  22. package/lib/components/ColumnResizeHandle/ColumnResizeHandle.css +5 -3
  23. package/lib/components/ColumnResizeHandle/ColumnResizeHandle.tsx +12 -3
  24. package/lib/components/DataGrid/DataGrid.css +8 -0
  25. package/lib/components/DataGrid/DataGrid.tsx +9 -2
  26. package/lib/components/DataGrid/GridListView.tsx +2 -1
  27. package/lib/components/Header/Header.css +3 -0
  28. package/lib/components/Header/Header.tsx +7 -1
  29. package/lib/hooks/core/gridApiPlaceholder.ts +4 -2
  30. package/lib/hooks/core/useGridApiRef.ts +7 -4
  31. package/lib/hooks/core/useGridColumnAutosize.ts +52 -0
  32. package/lib/hooks/core/useGridDevWarnings.ts +23 -5
  33. package/lib/hooks/core/useGridRowPipeline.ts +2 -2
  34. package/lib/hooks/useRowGrouping.ts +20 -3
  35. package/lib/hooks/useTreeData.ts +8 -1
  36. package/lib/index.ts +1 -0
  37. package/lib/types/index.ts +46 -7
  38. package/lib/utils/columnAutosize.ts +56 -0
  39. package/lib/utils/pivot/index.ts +11 -2
  40. package/lib/utils/sorting/index.ts +77 -24
  41. package/llms.txt +12 -7
  42. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,56 @@
5
5
 
6
6
  ---
7
7
 
8
+ ## [3.1.0] — 2026-09-29
9
+
10
+ ### Added
11
+
12
+ - **`GridColDef.sortComparator(v1, v2, params1, params2)`** — a per-column ascending comparator for client-side sorting, used instead of the built-in type-aware comparison. `v1` / `v2` are the cell values after `valueGetter`, **including `null` / `undefined`** (the comparator decides where empty values go); `params` are the new exported `GridSortCellParams` `{ id, field, row, value }`. The grid negates the result for `desc`. It is used for flat sorting, as one key in a multi-sort chain, to order row-grouping groups by their grouping value (the grouping column's comparator), for tree-data siblings and for pivot row-label columns, so `getAllFilteredRows()`, exports and clipboard follow the same order. A comparator that throws or returns `NaN` reads as `0` with a one-time dev warning. Ignored with `sortingMode="server"`.
13
+ - **Auto-size a column to its content** — double-click a column's resize handle (or press Enter with the handle focused) to fit the column to its header and the cells in the current render window (pinned rows included), measured in the DOM and clamped to `minWidth` (default 50px) / `maxWidth`. A flex column gets a fixed width, like after a drag; `resizable: false` columns are never auto-sized; the double-click never sorts. Works for left/right-pinned columns and under column groups. The width goes to `columnWidths` state, so `onStateChange` reports it.
14
+ - **`apiRef.current.autosizeColumn(field)`** and **`apiRef.current.autosizeColumns(fields?)`** — the same measurement, programmatically (every column when `fields` is omitted).
15
+
16
+ ### Changed
17
+
18
+ - Double-clicking a resize handle used to do nothing; it now auto-sizes the column.
19
+
20
+ ---
21
+
22
+ ## [3.0.1] — 2026-09-29
23
+
24
+ Fixes from a smoke test in a real application (Chromium, Firefox and WebKit).
25
+
26
+ ### Fixed
27
+
28
+ - **A grid without a `height` prop now fills its container.** Its root was auto-height, so inside a bounded flex layout (a wrapper with `flex: 1; min-height: 0`, with or without `DataGridThemeProvider`) it grew to fit every row and rendered all of them; 50,000 rows froze the tab. The root now gets `height: 100%` and, as a flex item, `flex: 1 1 auto; min-height: 0` (class `ogx--fill`) when neither `height`, `style.height` nor `autoHeight` is set. In an auto-height container it still grows to fit, as before. An explicit `height` is never stretched.
29
+ - **The unbounded-container development warning** is only logged when the viewport is at least as tall as the rows it renders, and names the fixes: a definite container height, `min-height: 0` on every flex or grid ancestor up to the sized one, a `height` prop, or `autoHeight`.
30
+ - **The list view warns in development when it renders more than 2,000 items.** It does not virtualize; README and the list-view guide now say so and recommend pagination.
31
+ - **The whole column resize handle can be grabbed.** The 8px handle straddled the header cell border and the cell's `overflow: hidden` clipped half of it, leaving 3–4px in every engine. It now lies inside its column against the resizing edge (also in the column-group header layout and for right-pinned columns).
32
+ - **Right-pinned columns sit at the right edge** when the columns are narrower than the grid, in the header, column-group rows, body, pinned rows and aggregation footer. They used to follow the last unpinned column, leaving a gap on their right.
33
+ - **List view, Firefox:** the rows container was a Tab stop of its own (Firefox makes scroll containers focusable), so Tab landed on it instead of the focused row. It now has `tabIndex={-1}`.
34
+
35
+ ### Added
36
+
37
+ - **Typed `apiRef` row getters.** `GridApi<R>` (default `GridRowModel`) and `useGridApiRef<R>()` type `getRow`, `getAllRows`, `getVisibleRows` and `getAllFilteredRows` as your row type. `DataGridProps.apiRef` accepts a typed or an untyped ref, so existing code compiles unchanged.
38
+
39
+ ### Styling and DOM (check custom CSS)
40
+
41
+ - New root class `ogx--fill` (`height: 100%; flex: 1 1 auto; min-height: 0`) when no `height`, `style.height` or `autoHeight` is set. CSS that sets the grid's height on `.ogx` still wins only if it is more specific or passed as `style.height` / `height`.
42
+ - `.ogx-column-resize-handle` is `right: 0` (was `-4px`) with `justify-content: flex-end`; `.ogx-column-resize-handle--start` is `left: 0` (was `-4px`) with `flex-start`. The visible line stays on the column border.
43
+ - `.ogx__header-cell--pinned-right-first`, `.ogx__cell--pinned-right-first`, `.ogx__aggregation-cell--pinned-right-first` and the first right-pinned column-group cell get `margin-left: auto`; with right-pinned columns, `.ogx__content` is `max(100%, <total>px)` wide instead of the column total.
44
+ - `.ogx-list-view__rows` has `tabIndex="-1"`.
45
+
46
+ ### Testing
47
+
48
+ - The browser test suite and CI (deploy and publish workflows) run in Chromium, Firefox and WebKit.
49
+
50
+ ### Documentation
51
+
52
+ - README `height` row, Getting Started, virtualization, theming, datagrid and pinning docs describe how the grid fills its container.
53
+ - PDF export: the `font` option is shown up front with a `₹` example, and the size and time of very large exports are documented (50,000 grouped rows ≈ 120 MB, 10–16 s on the main thread); use CSV or `.xlsx` for large exports.
54
+ - README: a rejected `processRowUpdate` keeps the cell in edit mode with the typed value and calls `onProcessRowUpdateError`.
55
+
56
+ ---
57
+
8
58
  ## [3.0.0] — 2026-09-24
9
59
 
10
60
  A correctness release: every feature area was audited against its documentation and the grid's own behaviour. Most changes are bug fixes, but many of them change observable output (formatted text, exported files, callback indices, request ranges), which is why this is a major version.
package/README.md CHANGED
@@ -62,7 +62,7 @@ export default function App() {
62
62
  }
63
63
  ```
64
64
 
65
- Give the grid a bounded height (`height`, or a parent with a definite height; a flex child needs `min-height: 0`). In an unbounded container every row is rendered.
65
+ Without a `height` prop the grid fills its container (`height: 100%`, or the free space as a flex item), so put it in a container with a bounded height: a definite `height`, and `min-height: 0` on every flex or grid item up to that element. In an unbounded container the grid grows to fit and every row is rendered (a development warning says so). See [Virtualization](docs/features/virtualization.md#the-grid-needs-a-bounded-height).
66
66
 
67
67
  ---
68
68
 
@@ -103,7 +103,7 @@ This means that **Cursor**, **GitHub Copilot**, **Windsurf**, and other AI agent
103
103
  | :--- | :--- | :--- | :--- |
104
104
  | `rows` | `GridRowModel[]` | — | **Required.** Array of data rows. The grid never modifies or copies them. |
105
105
  | `columns` | `GridColDef[]` | — | **Required.** Column definitions. |
106
- | `height` | `number \| string` | — | Grid height in pixels or a CSS string (e.g. `'100%'`). No default: without it the grid takes its container's height, and needs a bounded container to virtualize. |
106
+ | `height` | `number \| string` | — | Grid height in pixels or a CSS string (e.g. `'100%'`). No default: fills its container's height (`height: 100%`, or `flex: 1` with `min-height: 0` as a flex item); in an auto-height container it grows to fit every row. |
107
107
  | `autoHeight` | `boolean` | `false` | Grows the grid to fit all rows (renders every row). |
108
108
  | `loading` | `boolean` | `false` | With no rows, shows skeleton rows (or `slots.loadingOverlay`). With rows shown, keeps them and runs a progress bar along the top (or shows `slots.loadingOverlay` over them). Works in list view too. |
109
109
  | `density` | `'compact' \| 'standard' \| 'comfortable'` | `'standard'` | Row height preset: 32 px, `rowHeight`, 72 px. |
@@ -121,7 +121,7 @@ This means that **Cursor**, **GitHub Copilot**, **Windsurf**, and other AI agent
121
121
  | `ariaLabel` | `string` | — | Accessible name for the grid. |
122
122
  | `initialState` | `GridInitialState` | — | Starting sort, filter, pagination, column and density state (uncontrolled). |
123
123
  | `onStateChange` | `(state: GridState) => void` | — | Fires when sort, filter, pagination, columns or density change. |
124
- | `apiRef` | `MutableRefObject<GridApi>` | — | Imperative API; create it with `useGridApiRef()`. |
124
+ | `apiRef` | `MutableRefObject<GridApi<R>> \| MutableRefObject<GridApi>` | — | Imperative API; create it with `useGridApiRef<R>()` so the row getters return your row type (or `useGridApiRef()` for `GridRowModel`). |
125
125
  | `className` | `string` | — | Custom CSS class on the grid container. |
126
126
  | `style` | `React.CSSProperties` | — | Custom inline styles on the grid container. |
127
127
 
@@ -153,8 +153,9 @@ This means that **Cursor**, **GitHub Copilot**, **Windsurf**, and other AI agent
153
153
  | `colSpan` | `number \| ((params) => number)` | — | Merge cells horizontally. |
154
154
  | `rowSpan` | `number \| ((params) => number)` | — | Merge cells vertically. |
155
155
  | `sortable` | `boolean` | `true` | Enable/disable column sorting. |
156
+ | `sortComparator` | `(v1, v2, p1, p2) => number` | — | Custom ascending comparator (sees nulls; negated for desc). v3.1.0+ |
156
157
  | `filterable` | `boolean` | `true` | Enable/disable column filtering. |
157
- | `resizable` | `boolean` | `true` | Allow drag-resize. |
158
+ | `resizable` | `boolean` | `true` | Allow drag-resize; double-click the handle to auto-size to content (v3.1.0+). |
158
159
  | `hideable` | `boolean` | `true` | Allow hiding via the column panel. |
159
160
  | `pinnable` | `boolean` | `true` | Allow pinning via the UI. |
160
161
  | `disableColumnMenu` | `boolean` | `false` | Hide the column header context menu. |
@@ -228,7 +229,7 @@ This means that **Cursor**, **GitHub Copilot**, **Windsurf**, and other AI agent
228
229
  | :--- | :--- | :--- |
229
230
  | `isCellEditable` | `(params: GridCellParams) => boolean` | Per-cell editability predicate. |
230
231
  | `processRowUpdate` | `(newRow, oldRow) => R \| Promise<R>` | Handles row save; supports async validation. |
231
- | `onProcessRowUpdateError` | `(error: unknown) => void` | Fires if `processRowUpdate` throws, rejects or returns no row. |
232
+ | `onProcessRowUpdateError` | `(error: unknown) => void` | Fires if `processRowUpdate` throws, rejects or returns no row. The cell then stays in edit mode with the typed value, so the user can correct it or press Escape to cancel. |
232
233
 
233
234
  ### Row Reordering
234
235
 
@@ -268,7 +269,7 @@ This means that **Cursor**, **GitHub Copilot**, **Windsurf**, and other AI agent
268
269
  | :--- | :--- | :--- |
269
270
  | `slots` | `GridSlots` | Replace built-in components (toolbar, pagination, overlays, footer). |
270
271
  | `slotProps` | `object` | Pass custom props to slot components. |
271
- | `listView` / `listViewColumn` | `boolean` / `GridListViewColDef` | Render rows as cards (mobile layouts). Honours loading, overlays and `slots.footer`; keyboard navigable; tree/group parents get an expand chevron. |
272
+ | `listView` / `listViewColumn` | `boolean` / `GridListViewColDef` | Render rows as cards (mobile layouts). Honours loading, overlays and `slots.footer`; keyboard navigable; tree/group parents get an expand chevron. **Not virtualized:** every row of the page is rendered, so use `pagination` or server-side loading for more than a few thousand rows (development builds warn above 2,000). |
272
273
  | `columnGroupingModel` | `GridColumnGroupingModel` | Multi-level column group headers. |
273
274
 
274
275
  Per-cell styling uses `GridColDef.cellClassName` / `headerClassName`; themes are applied with `<DataGridThemeProvider theme={…}>` (see Theming below).
@@ -310,6 +311,7 @@ apiRef.current.setPageSize(50)
310
311
 
311
312
  // Scroll
312
313
  apiRef.current.scrollToIndexes({ rowIndex: 100, colIndex: 3 })
314
+ apiRef.current.autosizeColumn('name') // fit to content (v3.1.0+)
313
315
 
314
316
  // Clipboard
315
317
  apiRef.current.copySelectedRows() // → Promise<void>, rejects if the clipboard write fails
@@ -435,6 +437,8 @@ printGrid(rows, columns, 'Report Title');
435
437
 
436
438
  > **Optional peer dependencies:** `exportToExcelAdvanced` requires ExcelJS (`npm install exceljs`); `exportToPdf` requires `npm install jspdf jspdf-autotable`.
437
439
 
440
+ > **Large exports:** PDF generation runs on the main thread and grows fast (about 120 MB and 10–16 s for 50,000 grouped rows, with the page blocked meanwhile). For more than a few thousand rows export CSV or `.xlsx`. PDF's built-in font only covers Latin-1: pass the `font` option (a Unicode `.ttf`) for characters such as `₹`, otherwise they print as `?`. See [PDF Export](docs/features/pdf-export.md).
441
+
438
442
  CSV and HTML-Excel exports neutralise spreadsheet formulas (text starting with `=`, `+`, `-`, `@`, a tab or a carriage return gets a leading `'`; opt out with `escapeFormulas: false`), and CSV starts with a UTF-8 BOM (`bom: false` omits it). `exportToExcel` writes an HTML table, so a `.xlsx` file name is saved as `.xls`. To export what the grid shows, pass `apiRef.current.getAllFilteredRows()` and `apiRef.current.getVisibleColumns()`; with a custom `getRowId`, also pass `getRowId` in the options so `selectedRows` match. See the [Export Guide](docs/features/export-guide.md).
439
443
 
440
444
  ### State Persistence
package/dist/index.d.ts CHANGED
@@ -345,8 +345,11 @@ export declare interface DataGridProps<R extends GridValidRowModel = GridRowMode
345
345
  dataSource?: GridDataSource<R>;
346
346
  /** Callback fired when scrolling reaches the bottom of the grid viewport. */
347
347
  onRowsScrollEnd?: (params: GridRowScrollEndParams) => void;
348
- /** Advanced: Reactive reference to the internal API for imperative control. */
349
- apiRef?: React.MutableRefObject<GridApi>;
348
+ /**
349
+ * Advanced: reactive reference to the internal API for imperative control. Pass
350
+ * `useGridApiRef<MyRow>()` to have the row getters typed as `MyRow`; a plain `useGridApiRef()` also works.
351
+ */
352
+ apiRef?: React.MutableRefObject<GridApi<R>> | React.MutableRefObject<GridApi>;
350
353
  /** Custom components to replace internal grid parts. */
351
354
  slots?: {
352
355
  /**
@@ -600,18 +603,22 @@ export declare type GridAlignment = 'left' | 'center' | 'right';
600
603
  * The Imperative API for interacting with the DataGrid.
601
604
  * Access this via the `apiRef` prop or a ref passed to the component.
602
605
  */
603
- export declare interface GridApi {
606
+ /**
607
+ * The imperative grid API. `R` types the row getters (`getRow`, `getAllRows`, `getVisibleRows`,
608
+ * `getAllFilteredRows`); it defaults to `GridRowModel`, so `GridApi` alone keeps working.
609
+ */
610
+ export declare interface GridApi<R extends GridValidRowModel = GridRowModel> {
604
611
  /**
605
612
  * Returns the row model with the given ID.
606
613
  * @param id The row unique ID.
607
614
  */
608
- getRow: (id: GridRowId) => GridRowModel | null;
615
+ getRow: (id: GridRowId) => R | null;
609
616
  /** Returns all rows currently loaded into the grid. */
610
- getAllRows: () => GridRowModel[];
617
+ getAllRows: () => R[];
611
618
  /** Returns all rows currently visible after filtering and sorting. */
612
- getVisibleRows: () => GridRowModel[];
619
+ getVisibleRows: () => R[];
613
620
  /** Returns all filtered and sorted rows, ignoring pagination. Use this for full-dataset exports. */
614
- getAllFilteredRows: () => GridRowModel[];
621
+ getAllFilteredRows: () => R[];
615
622
  /**
616
623
  * Returns an ordered flat list of `GridGroupedExportRow` entries that mirrors the
617
624
  * on-screen grouping tree: group-headers, leaf rows, per-group subtotals, and a
@@ -664,6 +671,15 @@ export declare interface GridApi {
664
671
  rowIndex?: number;
665
672
  colIndex?: number;
666
673
  }) => void;
674
+ /**
675
+ * Sizes a column to fit its header and the cells rendered right now (the virtualization window),
676
+ * clamped to `minWidth` (default 50px) / `maxWidth`, like double-clicking its resize handle.
677
+ * Does nothing for `resizable: false` columns or a column that is not rendered.
678
+ * A flex column gets a fixed width. @since v3.1
679
+ */
680
+ autosizeColumn: (field: string) => void;
681
+ /** `autosizeColumn` for several columns (default: every column). @since v3.1 */
682
+ autosizeColumns: (fields?: readonly string[]) => void;
667
683
  /**
668
684
  * Programmatically copies all currently selected rows to the clipboard as TSV: every selected
669
685
  * row that passes the filter (other pages, collapsed groups and pinned rows included), with the
@@ -749,6 +765,16 @@ export declare interface GridColDef<R extends GridValidRowModel = GridRowModel>
749
765
  * @since v3.0
750
766
  */
751
767
  valueSetter?(params: GridValueSetterParams<R>): R;
768
+ /**
769
+ * Custom ascending comparator for client-side sorting by this column, used instead of the built-in
770
+ * type-aware comparison. `v1` / `v2` are the cell values (`valueGetter` applied) and **include
771
+ * `null` / `undefined`**, so the comparator decides where empty values go. The grid reverses the
772
+ * result for 'desc' and chains it with the other sort keys in a multi-sort. Row grouping uses the
773
+ * grouping column's comparator to order groups by their grouping value. A comparator that throws
774
+ * or returns NaN is read as 0 (with a one-time dev warning). Ignored with `sortingMode="server"`.
775
+ * @since v3.1
776
+ */
777
+ sortComparator?(v1: unknown, v2: unknown, params1: GridSortCellParams<R>, params2: GridSortCellParams<R>): number;
752
778
  /** Function to format a value into a human-readable string. */
753
779
  valueFormatter?(params: GridValueFormatterParams<R>): string;
754
780
  /** Custom component or element to render in the cell. */
@@ -1193,6 +1219,18 @@ export declare type GridSlotProps = NonNullable<DataGridProps['slotProps']>;
1193
1219
  /** The `slots` prop of `DataGrid`: components that replace built-in parts of the grid. */
1194
1220
  export declare type GridSlots = NonNullable<DataGridProps['slots']>;
1195
1221
 
1222
+ /**
1223
+ * Parameters passed to `GridColDef.sortComparator` for each side of a comparison. For a row-grouping
1224
+ * group row, `row` is the synthetic group row and `value` its grouping value.
1225
+ * @since v3.1
1226
+ */
1227
+ export declare interface GridSortCellParams<R extends GridValidRowModel = GridRowModel> {
1228
+ id: GridRowId;
1229
+ field: string;
1230
+ row: R;
1231
+ value: unknown;
1232
+ }
1233
+
1196
1234
  export declare type GridSortDirection = 'asc' | 'desc' | null;
1197
1235
 
1198
1236
  export declare interface GridSortingState {
@@ -1569,6 +1607,8 @@ export declare interface HeaderProps<R extends GridRowModel = GridRowModel> {
1569
1607
  sort: 'asc' | 'desc';
1570
1608
  }>;
1571
1609
  onColumnResize?: (field: string, newWidth: number) => void;
1610
+ /** Fits a column to its content (double-click or Enter on its resize handle). */
1611
+ onColumnAutosize?: (field: string) => void;
1572
1612
  columnWidths?: Record<string, number>;
1573
1613
  pinnedColumns?: GridColumnPinning;
1574
1614
  hasDetailPanel?: boolean;
@@ -1904,8 +1944,11 @@ export declare interface UseAggregationReturn {
1904
1944
  * which matches `DataGridProps.apiRef` under both @types/react 18 and 19. Left to inference,
1905
1945
  * React 19's types emit `RefObject<GridApi>`, which React 18's types treat as read-only and
1906
1946
  * nullable, so `apiRef={useGridApiRef()}` failed to type-check on React 18.
1947
+ *
1948
+ * Pass your row type to have the row getters typed: `useGridApiRef<Invoice>().current.getRow(id)`
1949
+ * returns `Invoice | null`.
1907
1950
  */
1908
- export declare function useGridApiRef(): MutableRefObject<GridApi>;
1951
+ export declare function useGridApiRef<R extends GridValidRowModel = GridRowModel>(): MutableRefObject<GridApi<R>>;
1909
1952
 
1910
1953
  export declare function useGridStateStorage(options: UseGridStateStorageOptions | string): UseGridStateStorageReturn;
1911
1954
 
@@ -1 +1 @@
1
- :root{--ogx-row-height: 52px;--ogx-header-height: 56px;--ogx-cell-padding: 16px;--ogx-color-primary: #3b82f6;--ogx-color-primary-dark: #2563eb;--ogx-color-primary-light: #eff6ff;--ogx-color-primary-focus: rgba(59, 130, 246, .5);--ogx-color-secondary: #8b5cf6;--ogx-color-secondary-dark: #7c3aed;--ogx-color-secondary-light: #f5f3ff;--ogx-color-white: #ffffff;--ogx-color-black: #0f172a;--ogx-color-gray-50: #f8fafc;--ogx-color-gray-100: #f1f5f9;--ogx-color-gray-200: #e2e8f0;--ogx-color-gray-300: #cbd5e1;--ogx-color-gray-400: #94a3b8;--ogx-color-gray-500: #64748b;--ogx-color-gray-600: #475569;--ogx-color-gray-700: #334155;--ogx-color-gray-800: #1e293b;--ogx-color-gray-900: #0f172a;--ogx-color-success: #10b981;--ogx-color-warning: #f59e0b;--ogx-color-error: #ef4444;--ogx-color-info: #0ea5e9;--ogx-font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--ogx-font-family-mono: "JetBrains Mono", "Fira Code", "Courier New", Courier, monospace;--ogx-font-size-xs: .75rem;--ogx-font-size-sm: .875rem;--ogx-font-size-md: 1rem;--ogx-font-size-lg: 1.125rem;--ogx-font-size-xl: 1.25rem;--ogx-font-weight-light: 300;--ogx-font-weight-regular: 400;--ogx-font-weight-medium: 500;--ogx-font-weight-semibold: 600;--ogx-font-weight-bold: 700;--ogx-line-height-tight: 1.2;--ogx-line-height-normal: 1.5;--ogx-line-height-relaxed: 1.75;--ogx-spacing-xs: .25rem;--ogx-spacing-sm: .5rem;--ogx-spacing-md: 1rem;--ogx-spacing-lg: 1.5rem;--ogx-spacing-xl: 2rem;--ogx-spacing-xxl: 3rem;--ogx-border-width-thin: 1px;--ogx-border-width-medium: 2px;--ogx-border-width-thick: 3px;--ogx-border-radius-sm: 4px;--ogx-border-radius-md: 8px;--ogx-border-radius-lg: 12px;--ogx-border-radius-xl: 16px;--ogx-border-radius-round: 50%;--ogx-border-color: var(--ogx-color-gray-200);--ogx-border-color-hover: var(--ogx-color-gray-300);--ogx-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--ogx-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .05), 0 2px 4px -1px rgba(0, 0, 0, .03);--ogx-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .05), 0 4px 6px -2px rgba(0, 0, 0, .02);--ogx-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .05), 0 10px 10px -5px rgba(0, 0, 0, .02);--ogx-z-index-base: 0;--ogx-z-index-dropdown: 1000;--ogx-z-index-sticky: 1020;--ogx-z-index-fixed: 1030;--ogx-z-index-modal-backdrop: 1040;--ogx-z-index-modal: 1050;--ogx-z-index-popover: 1060;--ogx-z-index-tooltip: 1070;--ogx-transition-duration-fast: .15s;--ogx-transition-duration-normal: .25s;--ogx-transition-duration-slow: .35s;--ogx-transition-easing: cubic-bezier(.4, 0, .2, 1);--ogx-grid-row-height-compact: 32px;--ogx-grid-row-height-standard: 52px;--ogx-grid-row-height-comfortable: 72px;--ogx-grid-header-height: 56px;--ogx-grid-cell-padding-x: 10px;--ogx-grid-cell-padding-y: 8px;--ogx-grid-cell-font-size: 13px;--ogx-grid-header-font-size: 13px;--ogx-grid-line-height: var(--ogx-line-height-normal);--ogx-grid-background: var(--ogx-color-white);--ogx-grid-border-color: var(--ogx-color-gray-200);--ogx-grid-header-background: var(--ogx-color-gray-50);--ogx-grid-header-text: var(--ogx-color-gray-700);--ogx-grid-header-hover-background: var(--ogx-color-gray-100);--ogx-grid-header-sorted-background: var(--ogx-color-gray-50);--ogx-grid-row-text: var(--ogx-color-gray-800);--ogx-grid-row-hover-background: var(--ogx-color-gray-50);--ogx-grid-row-alternate-background: var(--ogx-grid-background);--ogx-grid-row-selected-background: var(--ogx-color-primary-light);--ogx-grid-row-selected-hover-background: #dbeafe;--ogx-grid-cell-focus-border: var(--ogx-color-primary);--ogx-grid-pinned-left-shadow: 4px 0 24px -4px rgba(0, 0, 0, .05);--ogx-grid-pinned-right-shadow: -4px 0 24px -4px rgba(0, 0, 0, .05);--ogx-skeleton-base: #f0f0f0;--ogx-skeleton-highlight: #f8f8f8;--ogx-overlay-background: #ffffff;--ogx-overlay-border: #e2e8f0;--ogx-overlay-text: #334155;--ogx-overlay-shadow: 0 4px 6px -1px rgba(0,0,0,.08), 0 2px 4px -1px rgba(0,0,0,.06), 0 0 0 1px rgba(0,0,0,.06);--ogx-overlay-item-hover-bg: #f8fafc;--ogx-overlay-item-hover-text: #0f172a;--ogx-overlay-item-selected-text: var(--ogx-color-primary);--ogx-overlay-item-selected-bg: var(--ogx-color-primary-light)}@media(prefers-color-scheme:dark){:root{--ogx-color-primary: #60a5fa;--ogx-color-primary-dark: #3b82f6;--ogx-color-primary-light: #1e3a5f;--ogx-color-primary-focus: rgba(96, 165, 250, .4);--ogx-color-white: #0f172a;--ogx-color-black: #f8fafc;--ogx-color-gray-50: #1e293b;--ogx-color-gray-100: #334155;--ogx-color-gray-200: #475569;--ogx-color-gray-300: #64748b;--ogx-color-gray-400: #94a3b8;--ogx-color-gray-500: #cbd5e1;--ogx-color-gray-600: #e2e8f0;--ogx-color-gray-700: #e2e8f0;--ogx-color-gray-800: #f1f5f9;--ogx-color-gray-900: #f8fafc;--ogx-border-color: #334155;--ogx-border-color-hover: #475569;--ogx-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .3);--ogx-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3);--ogx-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .3);--ogx-grid-background: #0f172a;--ogx-grid-border-color: #334155;--ogx-grid-header-background: #1e293b;--ogx-grid-header-text: #e2e8f0;--ogx-grid-header-hover-background: #334155;--ogx-grid-header-sorted-background: #1e3a5f;--ogx-grid-row-text: #cbd5e1;--ogx-grid-row-hover-background: #1e293b;--ogx-grid-row-alternate-background: #162032;--ogx-grid-row-selected-background: #1e3a5f;--ogx-grid-row-selected-hover-background: #1d4ed8;--ogx-grid-cell-focus-border: #60a5fa;--ogx-checkbox-bg: #1e293b;--ogx-checkbox-border: #64748b;--ogx-grid-pinned-left-shadow: 4px 0 24px -4px rgba(0, 0, 0, .3);--ogx-grid-pinned-right-shadow: -4px 0 24px -4px rgba(0, 0, 0, .3);--ogx-skeleton-base: #2a2a2a;--ogx-skeleton-highlight: #333333;--ogx-overlay-background: #1e293b;--ogx-overlay-border: #334155;--ogx-overlay-text: #cbd5e1;--ogx-overlay-shadow: 0 4px 6px -1px rgba(0,0,0,.4), 0 2px 4px -1px rgba(0,0,0,.3), 0 0 0 1px rgba(0,0,0,.2);--ogx-overlay-item-hover-bg: #334155;--ogx-overlay-item-hover-text: #f1f5f9;--ogx-overlay-item-selected-text: var(--ogx-color-primary);--ogx-overlay-item-selected-bg: #1e3a5f}}*,*:before,*:after{box-sizing:border-box}.ogx--dragging{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.ogx *:focus{outline:none}.ogx button:not(.ogx-menu-item){background:none;border:none;cursor:pointer;font-family:inherit;font-size:inherit}.ogx{display:flex;flex-direction:column;width:100%;background:var(--ogx-grid-background);border:1px solid var(--ogx-grid-border-color);border-radius:var(--ogx-border-radius-lg);font-family:var(--ogx-font-family);position:relative;box-shadow:var(--ogx-shadow-sm);transition:box-shadow var(--ogx-transition-duration-normal);overflow:hidden}.ogx>:first-child{border-top-left-radius:calc(var(--ogx-border-radius-lg) - 1px);border-top-right-radius:calc(var(--ogx-border-radius-lg) - 1px)}.ogx>:last-child{border-bottom-left-radius:calc(var(--ogx-border-radius-lg) - 1px);border-bottom-right-radius:calc(var(--ogx-border-radius-lg) - 1px)}.ogx:hover{box-shadow:var(--ogx-shadow-md)}.ogx__viewport{flex:1;overflow:auto;position:relative;scrollbar-gutter:stable}.ogx__content{position:relative;min-width:fit-content;display:flex;flex-direction:column;min-height:100%}.ogx__virtual-container{position:relative;flex:1 0 auto}.ogx__rows{position:relative;will-change:transform}.ogx__pinned-rows{position:relative;z-index:3}.ogx__sticky-top{position:sticky;top:0;z-index:10;flex-shrink:0}.ogx__sticky-bottom{position:sticky;bottom:0;z-index:10;flex-shrink:0;margin-top:auto}.ogx__pinned-rows--top{background:var(--ogx-grid-background);box-shadow:0 4px 6px -1px #0000000d}.ogx__pinned-rows--bottom{background:var(--ogx-grid-background);box-shadow:0 -4px 6px -1px #0000000d}.ogx--loading{opacity:.6;pointer-events:none}.ogx--loading:after{content:"";position:absolute;inset:0;background:color-mix(in srgb,var(--ogx-grid-background) 60%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:var(--ogx-z-index-modal)}.ogx--auto-height{height:auto}.ogx--auto-height .ogx__viewport{overflow-y:visible}.ogx__viewport::-webkit-scrollbar{width:var(--ogx-scrollbar-size, 8px);height:var(--ogx-scrollbar-size, 8px)}.ogx__viewport::-webkit-scrollbar-track{background:var(--ogx-scrollbar-track, transparent)}.ogx__viewport::-webkit-scrollbar-thumb{background:var(--ogx-scrollbar-thumb, var(--ogx-color-gray-300));border-radius:4px;border:2px solid transparent;background-clip:content-box}.ogx__viewport::-webkit-scrollbar-thumb:hover{background-color:var(--ogx-border-color-hover)}.ogx__viewport{scrollbar-width:thin;scrollbar-color:var(--ogx-scrollbar-thumb, rgba(0, 0, 0, .2)) var(--ogx-scrollbar-track, transparent)}.ogx__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--ogx-spacing-xxl);color:var(--ogx-color-gray-500);font-size:var(--ogx-font-size-lg);text-align:center;gap:var(--ogx-spacing-md);min-height:200px}.ogx__empty svg{color:var(--ogx-color-gray-300)}.ogx__loading-overlay{display:flex;align-items:center;justify-content:center;min-height:200px}.ogx__loading-overlay--over-rows{position:absolute;inset:0;min-height:0;pointer-events:none;z-index:var(--ogx-z-index-modal);border-radius:var(--ogx-border-radius-lg);overflow:hidden}.ogx__loading-overlay--custom{background:color-mix(in srgb,var(--ogx-grid-background) 50%,transparent)}.ogx__loading-overlay--custom>*{pointer-events:auto}.ogx__loading-bar{position:absolute;top:0;left:0;width:100%;height:3px;background:color-mix(in srgb,var(--ogx-color-primary) 25%,transparent);overflow:hidden}.ogx__loading-bar:after{content:"";position:absolute;top:0;bottom:0;left:0;width:40%;background:var(--ogx-color-primary);animation:ogx-loading-bar 1.2s ease-in-out infinite}@keyframes ogx-loading-bar{0%{transform:translate(-100%)}to{transform:translate(250%)}}@media(prefers-reduced-motion:reduce){.ogx__loading-bar:after{animation:none;width:100%}}.ogx-error-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ogx-grid-background) 10%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:var(--ogx-z-index-modal);gap:var(--ogx-spacing-md);padding:var(--ogx-spacing-xl);text-align:center;border-radius:var(--ogx-border-radius-lg);overflow:hidden}.ogx-error-overlay>svg{flex-shrink:0;overflow:visible;display:block}.ogx-error-overlay__title{font-weight:600;color:var(--ogx-grid-row-text)}.ogx-error-overlay__message{font-size:var(--ogx-font-size-sm);color:var(--ogx-color-gray-500);max-width:400px}.ogx__aggregation-footer{display:flex;align-items:center;border-top:2px solid var(--ogx-grid-border-color);background:var(--ogx-grid-header-background);font-weight:600;font-size:.85em;position:sticky;bottom:0;z-index:2;width:100%}.ogx__aggregation-cell{flex-shrink:0;padding:0 var(--ogx-grid-cell-padding-x);display:flex;flex-direction:column;justify-content:center;overflow:hidden;box-sizing:border-box;border-right:1px solid var(--ogx-grid-border-color);position:relative}.ogx__aggregation-cell--pinned-left,.ogx__aggregation-cell--pinned-right{position:sticky;z-index:3;background:var(--ogx-grid-header-background)}.ogx__aggregation-spacer{width:48px;min-width:48px;flex-shrink:0;align-self:stretch}.ogx__aggregation-spacer--pinned{position:sticky;z-index:3;background:var(--ogx-grid-header-background)}.ogx__aggregation-cell--pinned-right{border-left:1px solid var(--ogx-grid-border-color)}.ogx__aggregation-cell--pinned-left-last{overflow:visible}.ogx__aggregation-cell--pinned-left-last:after{content:"";position:absolute;top:0;right:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset 10px 0 8px -8px #0000001a}.ogx__aggregation-cell--pinned-right-first{overflow:visible}.ogx__aggregation-cell--pinned-right-first:before{content:"";position:absolute;top:0;left:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset -10px 0 8px -8px #0000001a}.ogx__aggregation-label{font-size:.7em;text-transform:uppercase;letter-spacing:.05em;color:var(--ogx-color-gray-500);line-height:1.2}.ogx__aggregation-value{color:var(--ogx-color-primary);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ogx--density-compact .ogx__cell,.ogx--density-compact .ogx__header-cell{padding:var(--ogx-spacing-xs) var(--ogx-spacing-sm);font-size:var(--ogx-font-size-xs)}.ogx--density-comfortable .ogx__cell,.ogx--density-comfortable .ogx__header-cell{padding:var(--ogx-spacing-md) var(--ogx-spacing-lg);font-size:var(--ogx-font-size-md)}.ogx__group-cell-content{font-weight:500;text-align:left;display:flex;align-items:center;gap:4px}.ogx-aria-live-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.ogx__cell-error{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--ogx-color-error, #d32f2f);font-size:1rem;cursor:help}.ogx__header-wrap{display:flex;flex-direction:column;position:sticky;top:0;z-index:10;flex-shrink:0}.ogx__header{display:flex;align-items:stretch;background:var(--ogx-grid-header-background);border-bottom:1px solid var(--ogx-grid-border-color);min-height:var(--ogx-header-height);box-shadow:var(--ogx-shadow-sm, 0 1px 2px rgba(0, 0, 0, .03))}.ogx__header-cell--expand{width:48px;min-width:48px;flex-shrink:0;border-right:1px solid transparent}.ogx__header-cell{display:flex;align-items:center;padding:var(--ogx-grid-cell-padding-y) var(--ogx-grid-cell-padding-x);position:relative;font-size:var(--ogx-grid-header-font-size);font-weight:600;color:var(--ogx-grid-header-text);overflow:hidden;box-sizing:border-box;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:background-color .2s}.ogx__header-cell:not(:last-child):after{content:"";position:absolute;right:0;top:25%;height:50%;width:1px;background-color:var(--ogx-color-gray-300);opacity:.5}.ogx__header-cell-content{display:flex;align-items:center;gap:var(--ogx-spacing-xs);width:100%;overflow:hidden}.ogx__header-cell-title-wrapper{display:flex;flex-direction:column;align-items:flex-start;flex:1;overflow:hidden}.ogx__header-cell-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;font-weight:600;letter-spacing:-.01em}.ogx__header-cell-aggregation{font-size:.6rem;font-weight:500;color:var(--ogx-color-gray-500);text-transform:uppercase;letter-spacing:.05em;margin-top:2px}.ogx__header-cell--align-left{justify-content:flex-start}.ogx__header-cell--align-center{justify-content:center}.ogx__header-cell--align-right{justify-content:flex-start}.ogx__header-cell--align-center .ogx__header-cell-content{text-align:center}.ogx__header-cell--align-right .ogx__header-cell-content{flex-direction:row-reverse}.ogx__header-cell--align-right .ogx__header-cell-title-wrapper{align-items:flex-end;text-align:right}.ogx__header-cell--align-right .ogx__menu-icon-btn{margin-left:0;margin-right:auto}.ogx__header-cell--sortable{cursor:pointer}.ogx__header-cell--sortable:hover{background:var(--ogx-grid-header-hover-background)}.ogx__header-cell--sorted{background:var(--ogx-grid-header-sorted-background);color:var(--ogx-color-primary-dark)}.ogx__header-cell--sorted .ogx__header-cell-title{color:var(--ogx-color-primary-dark)}.ogx__sort-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:4px;flex-shrink:0;font-size:14px;line-height:1}.ogx__sort-icon:before{transition:all .2s}.ogx__sort-icon--asc:before{content:"↑"}.ogx__sort-icon--desc:before{content:"↓"}.ogx__header-cell--checkbox,.ogx__cell--checkbox{width:48px;min-width:48px;max-width:48px;flex:0 0 48px;justify-content:center;padding:0}.ogx__header-cell--pinned{background:var(--ogx-grid-header-background);z-index:12}.ogx__header-cell--pinned-left{box-shadow:var(--ogx-grid-pinned-left-shadow, 4px 0 12px -4px rgba(0, 0, 0, .05))}.ogx__header-cell--pinned-right{box-shadow:var(--ogx-grid-pinned-right-shadow, -4px 0 12px -4px rgba(0, 0, 0, .05))}.ogx__header-cell--pinned:after{display:none}.ogx__header-cell--dragging{cursor:move!important;opacity:.5;background:var(--ogx-color-gray-200)}.ogx__header-drag-icon{display:flex;align-items:center;justify-content:center;margin-right:8px;color:var(--ogx-color-primary);animation:ogx-pulse 1.5s infinite ease-in-out}@keyframes ogx-pulse{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.ogx__header-cell--drag-over{border-left:2px solid var(--ogx-color-primary)!important;background:var(--ogx-color-primary-light)}.ogx--kb .ogx__header-cell--focused{outline:2px solid var(--ogx-grid-cell-focus-border, var(--ogx-color-primary, #2563eb));outline-offset:-2px;background-color:var(--ogx-grid-header-hover-background);z-index:6}.ogx__header-cell--focus-visible{outline:2px solid var(--ogx-grid-cell-focus-border, var(--ogx-color-primary));outline-offset:-2px;background-color:var(--ogx-grid-header-hover-background);z-index:6}.ogx__header-cell:focus,.ogx__header-cell:focus-visible{outline:none!important}.ogx__menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:26px;height:26px;padding:0;border:none;background:transparent;border-radius:4px;color:var(--ogx-color-gray-500);cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease,color .15s ease;margin-left:auto}.ogx__header-cell:hover .ogx__menu-icon-btn,.ogx__header-cell--sorted .ogx__menu-icon-btn{opacity:1}.ogx__menu-icon-btn:hover{background:var(--ogx-grid-header-hover-background);color:var(--ogx-grid-header-text)}.ogx__menu-icon-btn--active{opacity:1;background:var(--ogx-color-primary-light);color:var(--ogx-color-primary)}.ogx__row{display:flex;align-items:stretch;border-bottom:1px solid var(--ogx-grid-border-color);background:var(--ogx-grid-background);position:relative;min-height:var(--ogx-row-height);transition:background-color .15s ease}.ogx__row--even{background:var(--ogx-grid-row-alternate-background, var(--ogx-grid-background))}.ogx__cell--expand{width:48px;min-width:48px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:inherit}.ogx:not(.ogx--row-spanning) .ogx__row:hover{background:var(--ogx-grid-row-hover-background)}.ogx__row--selected{background:var(--ogx-grid-row-selected-background)}.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover{background:var(--ogx-grid-row-selected-hover-background)}.ogx__row--pinned-top,.ogx__row--pinned-bottom{background:var(--ogx-grid-background)}.ogx:not(.ogx--row-spanning) .ogx__row--pinned-top:hover,.ogx:not(.ogx--row-spanning) .ogx__row--pinned-bottom:hover{background:var(--ogx-grid-row-hover-background)}.ogx__row--pinned-top.ogx__row--selected,.ogx__row--pinned-bottom.ogx__row--selected{background:var(--ogx-grid-row-selected-background)}.ogx__row--dragging{cursor:grabbing;opacity:.8;background:var(--ogx-color-primary-light);box-shadow:var(--ogx-shadow-lg);z-index:20}.ogx__row--drag-over{position:relative;z-index:10}.ogx__row--drag-over:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--ogx-color-primary);z-index:20}.ogx__cell--drag-handle{width:48px;min-width:48px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:inherit;cursor:grab;color:var(--ogx-grid-header-text)}.ogx__cell--drag-handle:active{cursor:grabbing;color:var(--ogx-grid-row-text)}.ogx__row--group{background:var(--ogx-color-gray-50);font-weight:500}.ogx:not(.ogx--row-spanning) .ogx__row--group:hover{background:var(--ogx-color-gray-100)}.ogx__row--group.ogx__row--selected{background:var(--ogx-grid-row-selected-background)}@keyframes ogx-skeleton-shimmer{0%{background-position:-600px 0}to{background-position:600px 0}}.ogx__row--skeleton{pointer-events:none;border-bottom:1px solid var(--ogx-grid-border-color);background-color:var(--ogx-grid-background)}.ogx__row--skeleton .ogx__skeleton-cell{flex:1;height:100%;display:flex;align-items:center;padding:0 16px}.ogx__row--skeleton .ogx__skeleton-bar{height:14px;border-radius:6px;width:80%;background:linear-gradient(90deg,var(--ogx-skeleton-base) 25%,var(--ogx-skeleton-highlight) 50%,var(--ogx-skeleton-base) 75%);background-size:600px 100%;animation:ogx-skeleton-shimmer 1.4s infinite linear}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(1) .ogx__skeleton-bar{width:40%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(2) .ogx__skeleton-bar{width:70%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(3) .ogx__skeleton-bar{width:85%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(4) .ogx__skeleton-bar{width:55%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(5) .ogx__skeleton-bar{width:65%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(n+6) .ogx__skeleton-bar{width:60%}.ogx__cell{position:relative;display:flex;align-items:center;padding:var(--ogx-grid-cell-padding-y) var(--ogx-grid-cell-padding-x);border-right:1px solid var(--ogx-grid-border-color);font-size:var(--ogx-grid-cell-font-size);color:var(--ogx-grid-row-text);line-height:var(--ogx-grid-line-height);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box;background-color:inherit}.ogx__cell:focus{outline:none}.ogx__cell--focused{z-index:10}.ogx--kb .ogx__cell--focused{outline:2px solid var(--ogx-grid-cell-focus-border, var(--ogx-color-primary, #2563eb));outline-offset:-2px}.ogx__cell--editable{cursor:text}.ogx__cell--editing{padding:0;overflow:visible;z-index:20;outline:2px solid var(--ogx-color-primary);outline-offset:-2px;background-color:var(--ogx-grid-background)}.ogx__cell--align-left{justify-content:flex-start;text-align:left}.ogx__cell--align-center{justify-content:center;text-align:center}.ogx__cell--align-right{justify-content:flex-end;text-align:right}.ogx__cell--pinned-left,.ogx__cell--pinned-right{position:sticky;z-index:2;background:inherit;background-color:var(--ogx-grid-background)}.ogx__cell--pinned-right{border-left:1px solid var(--ogx-grid-border-color)}.ogx:not(.ogx--row-spanning) .ogx__row:hover .ogx__cell--pinned-left,.ogx:not(.ogx--row-spanning) .ogx__row:hover .ogx__cell--pinned-right{background-color:var(--ogx-grid-row-hover-background)}.ogx__row--selected .ogx__cell--pinned-left,.ogx__row--selected .ogx__cell--pinned-right{background-color:var(--ogx-grid-row-selected-background)}.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover .ogx__cell--pinned-left,.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover .ogx__cell--pinned-right{background-color:var(--ogx-grid-row-selected-hover-background)}.ogx__cell--pinned-left-last,.ogx__cell--pinned-right-first{overflow:visible}.ogx__cell--pinned-left-last:after{content:"";position:absolute;top:0;right:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset 10px 0 8px -8px #0000001a}.ogx__cell--pinned-right-first:before{content:"";position:absolute;top:0;left:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset -10px 0 8px -8px #0000001a}.ogx__cell--hidden{visibility:hidden;border:none;background:transparent}.ogx__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.ogx__cell-image{display:block;max-width:100%;max-height:calc(var(--ogx-row-height) - 8px);object-fit:contain}.ogx__cell--spanned{background-color:var(--ogx-grid-background);z-index:10}.ogx__row--even .ogx__cell--spanned{background-color:var(--ogx-grid-row-alternate-background, var(--ogx-grid-background))}.ogx:not(.ogx--row-spanning) .ogx__row:hover .ogx__cell--spanned{background-color:var(--ogx-grid-row-hover-background)}.ogx__row--selected .ogx__cell--spanned{background-color:var(--ogx-grid-row-selected-background)}.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover .ogx__cell--spanned{background-color:var(--ogx-grid-row-selected-hover-background)}.ogx__edit-cell{width:100%;height:100%;display:flex;align-items:center;padding:0}.ogx__edit-input,.ogx__edit-select{width:100%;height:100%;padding:0 10px;border:none;border-radius:0;font-family:var(--ogx-font-family, inherit);font-size:var(--ogx-grid-cell-font-size, 14px);color:var(--ogx-grid-row-text, #1e293b);background:var(--ogx-grid-background, #fff);box-sizing:border-box;outline:none}.ogx__edit-input:focus,.ogx__edit-select:focus{outline:none}.ogx__edit-input--number::-webkit-inner-spin-button,.ogx__edit-input--number::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.ogx__edit-input--number{-moz-appearance:textfield;appearance:textfield}.ogx__edit-select{padding:0 6px;cursor:pointer;-webkit-appearance:auto;appearance:auto}.ogx__edit-boolean{width:100%;height:100%;display:flex;align-items:center;justify-content:center;outline:2px solid var(--ogx-color-primary, #2563eb);outline-offset:-2px}.ogx__edit-checkbox{width:18px;height:18px;cursor:pointer;accent-color:var(--ogx-color-primary, #2563eb)}.ogx-pagination{display:flex;align-items:center;justify-content:flex-end;gap:var(--ogx-spacing-lg);padding:12px 16px;border-top:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-background);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-row-text);min-height:52px;border-radius:0 0 var(--ogx-border-radius-lg) var(--ogx-border-radius-lg)}.ogx-pagination__page-size{display:flex;align-items:center;gap:8px}.ogx-pagination__label{font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);white-space:nowrap}.ogx-pagination__select{min-width:55px;padding:0 18px 0 4px!important;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);font-weight:500;color:var(--ogx-grid-row-text);background:var(--ogx-grid-background);border:1px solid var(--ogx-border-color);border-radius:4px;cursor:pointer;transition:all var(--ogx-transition-duration-fast) var(--ogx-transition-easing);appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%23666' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right -1px center;background-size:20px;line-height:1.5}.ogx-pagination__select:hover{border-color:var(--ogx-border-color-hover)}.ogx-pagination__select:focus{outline:none;border-color:var(--ogx-color-primary);box-shadow:0 0 0 2px var(--ogx-color-primary-focus)}.ogx-pagination__info{font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);white-space:nowrap}.ogx-pagination__actions{display:flex;align-items:center;gap:var(--ogx-spacing-xs)}.ogx-pagination__page-info{padding:0 var(--ogx-spacing-sm);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);white-space:nowrap}.ogx-pagination .ogx-button{min-width:32px;padding:var(--ogx-spacing-xs)}.ogx-pagination .ogx-button svg{display:block}@media(max-width:768px){.ogx-pagination{flex-wrap:wrap;gap:var(--ogx-spacing-md)}.ogx-pagination__page-size{order:3;width:100%;justify-content:center}.ogx-pagination__info{order:1;flex:1}.ogx-pagination__actions{order:2}}.ogx__skeleton-row{display:flex;align-items:center;border-bottom:1px solid var(--ogx-grid-border-color);background-color:var(--ogx-grid-background)}.ogx__skeleton-cell{display:flex;align-items:center;padding:0 16px;box-sizing:border-box;overflow:hidden}.ogx-skeleton-box{background:linear-gradient(90deg,var(--ogx-skeleton-base) 0%,var(--ogx-skeleton-highlight) 50%,var(--ogx-skeleton-base) 100%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.ogx__skeleton{display:flex;flex-direction:column;width:100%}.ogx__skeleton-row{display:flex;align-items:center;min-height:var(--ogx-row-height);border-bottom:1px solid var(--ogx-grid-border-color);padding:var(--ogx-grid-cell-padding-y) var(--ogx-grid-cell-padding-x);background-color:var(--ogx-grid-background)}.ogx__skeleton-cell{flex:1;margin-right:16px}.ogx__skeleton-cell:last-child{margin-right:0}.ogx__skeleton-content{height:16px;background:linear-gradient(90deg,var(--ogx-skeleton-base) 0%,var(--ogx-skeleton-highlight) 50%,var(--ogx-skeleton-base) 100%);background-size:200% 100%;border-radius:4px;animation:skeleton-loading 1.5s ease-in-out infinite}.ogx__skeleton-cell:nth-child(1) .ogx__skeleton-content{width:60%}.ogx__skeleton-cell:nth-child(2) .ogx__skeleton-content{width:80%}.ogx__skeleton-cell:nth-child(3) .ogx__skeleton-content{width:70%}.ogx__skeleton-cell:nth-child(4) .ogx__skeleton-content{width:90%}.ogx__skeleton-cell:nth-child(5) .ogx__skeleton-content{width:75%}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.ogx__detail-panel{display:flex;background:var(--ogx-color-gray-50);border-top:1px solid var(--ogx-border-color);border-bottom:1px solid var(--ogx-border-color);transition:height .2s ease-in-out;position:relative;min-width:fit-content;width:100%;box-sizing:border-box}.ogx__detail-panel-content{padding:var(--ogx-spacing-md);width:100%;min-width:100%;box-sizing:border-box}@keyframes detailPanelExpand{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.ogx__detail-panel{animation:detailPanelExpand .2s ease-out}.ogx-column-resize-handle{position:absolute;top:0;right:-4px;width:8px;height:100%;cursor:col-resize;z-index:10;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none}.ogx-column-resize-handle--start{right:auto;left:-4px}.ogx-column-resize-handle:focus-visible .ogx-column-resize-handle__line{background:var(--ogx-color-primary);opacity:1}.ogx-column-resize-handle:hover .ogx-column-resize-handle__line,.ogx-column-resize-handle--dragging .ogx-column-resize-handle__line{background:var(--ogx-color-primary);opacity:1}.ogx-column-resize-handle__line{width:2px;height:100%;background:var(--ogx-color-gray-300);opacity:0;transition:opacity var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-resize-handle--dragging{cursor:col-resize}.ogx__header-cell:hover .ogx-column-resize-handle__line{opacity:.5}.ogx-column-visibility-panel{background:var(--ogx-overlay-background, var(--ogx-color-white));border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));border-radius:var(--ogx-border-radius-sm);min-width:250px;max-width:350px;box-shadow:var(--ogx-shadow-lg);display:flex;flex-direction:column}.ogx-column-visibility-panel__search-section{padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color))}.ogx-column-visibility-panel__search-container{display:flex;align-items:center;padding:6px var(--ogx-spacing-sm);border:2px solid var(--ogx-overlay-border, var(--ogx-color-primary));border-radius:var(--ogx-border-radius-md);gap:var(--ogx-spacing-sm);color:var(--ogx-overlay-text, var(--ogx-color-gray-500));transition:border-color var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-visibility-panel__search-container:focus-within{border-color:var(--ogx-color-primary-dark)}.ogx-column-visibility-panel__search-input{border:none;background:none;outline:none;font-family:inherit;font-size:var(--ogx-font-size-md);color:var(--ogx-overlay-text, var(--ogx-color-gray-900));flex:1}.ogx-column-visibility-panel__search-input::placeholder{color:var(--ogx-overlay-text, var(--ogx-color-gray-400));opacity:.6}.ogx-column-visibility-panel__list{max-height:350px;overflow-y:auto;padding:var(--ogx-spacing-sm) 0}.ogx-column-visibility-panel__item{display:flex;align-items:center;gap:var(--ogx-spacing-sm);padding:var(--ogx-spacing-xs) var(--ogx-spacing-sm) var(--ogx-spacing-xs) var(--ogx-spacing-xs);transition:background var(--ogx-transition-duration-fast) var(--ogx-transition-easing);-webkit-user-select:none;user-select:none}.ogx-column-visibility-panel__item:hover:not(.ogx-column-visibility-panel__item--disabled){background:var(--ogx-overlay-item-hover-bg, var(--ogx-color-gray-50))}.ogx-column-visibility-panel__item--drag-over{background:var(--ogx-color-primary-light, rgba(59, 130, 246, .08));border-top:2px solid var(--ogx-color-primary)}.ogx-column-visibility-panel__item--disabled{opacity:.5}.ogx-column-visibility-panel__drag-handle-wrapper{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:100%;cursor:grab;color:var(--ogx-overlay-text, var(--ogx-color-gray-400));border-radius:3px;opacity:.6;transition:color var(--ogx-transition-duration-fast) var(--ogx-transition-easing),background var(--ogx-transition-duration-fast) var(--ogx-transition-easing),opacity var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-visibility-panel__drag-handle-wrapper:hover{opacity:1;color:var(--ogx-overlay-text, var(--ogx-color-gray-600));background:var(--ogx-overlay-item-hover-bg, var(--ogx-color-gray-100))}.ogx-column-visibility-panel__drag-handle-wrapper:active{cursor:grabbing;color:var(--ogx-color-primary)}.ogx-column-visibility-panel__drag-handle{display:block;pointer-events:none}.ogx-column-visibility-panel__label{font-size:var(--ogx-font-size-xs);color:var(--ogx-overlay-text, var(--ogx-color-gray-900));-webkit-user-select:none;user-select:none;cursor:inherit}.ogx-column-visibility-panel__item-label .ogx-column-visibility-panel__label{flex:1}.ogx-column-visibility-panel__footer{border-top:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));padding:var(--ogx-spacing-sm);display:flex;justify-content:space-between;align-items:center}.ogx-column-visibility-panel__reset-btn{color:var(--ogx-overlay-text, var(--ogx-color-gray-400));background:none;border:none;font-family:inherit;font-weight:600;font-size:13px;letter-spacing:.05em;text-transform:uppercase;cursor:pointer;transition:color var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-visibility-panel__reset-btn:hover{color:var(--ogx-color-primary, var(--ogx-color-gray-600))}.ogx-quick-filter{width:100%;max-width:400px}.ogx-quick-filter__clear{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ogx-color-gray-500);transition:color var(--ogx-transition-duration-fast) var(--ogx-transition-easing);border-radius:var(--ogx-border-radius-sm)}.ogx-quick-filter__clear:hover{color:var(--ogx-color-gray-700);background:var(--ogx-color-gray-100)}.ogx-quick-filter__clear:active{color:var(--ogx-color-gray-900)}.ogx-button{display:inline-flex;align-items:center;justify-content:center;font-family:var(--ogx-font-family);font-weight:var(--ogx-font-weight-medium);line-height:var(--ogx-line-height-normal);border-radius:var(--ogx-border-radius-md);transition:all var(--ogx-transition-duration-fast) var(--ogx-transition-easing);cursor:pointer;-webkit-user-select:none;user-select:none}.ogx-button--small{padding:var(--ogx-spacing-xs) var(--ogx-spacing-sm);font-size:var(--ogx-font-size-sm);min-height:28px}.ogx-button--medium{padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);font-size:var(--ogx-font-size-md);min-height:36px}.ogx-button--large{padding:var(--ogx-spacing-md) var(--ogx-spacing-lg);font-size:var(--ogx-font-size-lg);min-height:44px}.ogx-button--text{background:transparent;border:none;color:var(--ogx-grid-row-text)}.ogx-button--text.ogx-button--primary{color:var(--ogx-color-primary)}.ogx-button--text.ogx-button--secondary{color:var(--ogx-color-secondary)}.ogx-button--text:hover:not(.ogx-button--disabled){background:var(--ogx-grid-header-hover-background, var(--ogx-color-gray-100))}.ogx-button--text.ogx-button--primary:hover:not(.ogx-button--disabled){background:var(--ogx-color-primary-light)}.ogx-button--outlined{background:transparent;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);color:var(--ogx-grid-row-text)}.ogx-button--outlined.ogx-button--primary{border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-button--outlined.ogx-button--secondary{border-color:var(--ogx-color-secondary);color:var(--ogx-color-secondary)}.ogx-button--outlined:hover:not(.ogx-button--disabled){background:var(--ogx-grid-header-hover-background, var(--ogx-color-gray-100));border-color:var(--ogx-border-color-hover)}.ogx-button--contained{background:var(--ogx-color-gray-200);border:none;color:var(--ogx-grid-row-text)}.ogx-button--contained.ogx-button--primary{background:var(--ogx-color-primary);color:var(--ogx-color-white)}.ogx-button--contained.ogx-button--secondary{background:var(--ogx-color-secondary);color:var(--ogx-color-white)}.ogx-button--contained:hover:not(.ogx-button--disabled){background:var(--ogx-color-gray-300)}.ogx-button--contained.ogx-button--primary:hover:not(.ogx-button--disabled){background:var(--ogx-color-primary-dark)}.ogx-button--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ogx-button:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:2px}.ogx-checkbox-wrapper{display:inline-flex;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none;font-family:var(--ogx-font-family)}.ogx-checkbox-wrapper--disabled{opacity:.6;cursor:not-allowed}.ogx-checkbox__input{appearance:none;position:absolute;opacity:0;width:0;height:0}.ogx-checkbox__box{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1.5px solid var(--ogx-checkbox-border, var(--ogx-color-gray-400));border-radius:4px;background:var(--ogx-checkbox-bg, var(--ogx-color-white));transition:all .2s cubic-bezier(.4,0,.2,1);color:#fff;flex-shrink:0}.ogx-checkbox__icon{width:12px;height:12px;fill:currentColor;transform:scale(0);transition:transform .2s cubic-bezier(.4,0,.2,1)}.ogx-checkbox__label{margin-left:var(--ogx-spacing-sm);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-row-text, var(--ogx-color-gray-700));line-height:1}.ogx-checkbox__input:checked+.ogx-checkbox__box{background:var(--ogx-color-primary);border-color:var(--ogx-color-primary)}.ogx-checkbox__input:checked+.ogx-checkbox__box .ogx-checkbox__icon{transform:scale(1)}.ogx-checkbox__input:indeterminate+.ogx-checkbox__box{background:var(--ogx-color-primary);border-color:var(--ogx-color-primary)}.ogx-checkbox__input:indeterminate+.ogx-checkbox__box .ogx-checkbox__icon{transform:scale(1)}.ogx-checkbox-wrapper:hover:not(.ogx-checkbox-wrapper--disabled) .ogx-checkbox__box{border-color:var(--ogx-color-primary);box-shadow:0 0 0 4px var(--ogx-color-primary-light)}.ogx-checkbox__input:focus-visible+.ogx-checkbox__box{border-color:var(--ogx-color-primary);box-shadow:0 0 0 4px var(--ogx-color-primary-focus)}.ogx-checkbox-wrapper--disabled .ogx-checkbox__box{background:var(--ogx-color-gray-100);border-color:var(--ogx-color-gray-300);color:var(--ogx-color-gray-400)}.ogx-drag-handle{display:flex;align-items:center;justify-content:center;cursor:grab;color:var(--ogx-grid-header-text);padding:0 4px;opacity:.5;transition:opacity .2s,color .2s}.ogx-drag-handle:hover{opacity:1;color:var(--ogx-grid-row-text)}.ogx-drag-handle:active{cursor:grabbing;color:var(--ogx-color-primary);opacity:1}.ogx-expand-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;cursor:pointer;color:var(--ogx-grid-header-text);transition:color .2s ease;border-radius:4px}.ogx-expand-icon:hover{background:transparent;color:var(--ogx-grid-row-text)}.ogx-expand-icon:focus{outline:none}.ogx-expand-icon:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:2px}.ogx-expand-icon svg{display:block;transition:transform .2s ease}.ogx-input-wrapper{display:inline-flex;align-items:center;position:relative;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-md);background:var(--ogx-color-white);transition:all var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-input-wrapper--full-width{width:100%}.ogx-input{flex:1;padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-md);line-height:var(--ogx-line-height-normal);color:var(--ogx-color-gray-900);background:transparent;border:none;outline:none}.ogx-input::placeholder{color:var(--ogx-color-gray-400)}.ogx-input__adornment{display:flex;align-items:center;color:var(--ogx-color-gray-600)}.ogx-input__adornment--start{padding-left:var(--ogx-spacing-md)}.ogx-input__adornment--end{padding-right:var(--ogx-spacing-md)}.ogx-input-wrapper:hover:not(.ogx-input-wrapper--disabled){border-color:var(--ogx-border-color-hover)}.ogx-input-wrapper:focus-within:not(.ogx-input-wrapper--disabled){border-color:var(--ogx-color-primary);box-shadow:0 0 0 1px var(--ogx-color-primary)}.ogx-input-wrapper--error{border-color:var(--ogx-color-error)}.ogx-input-wrapper--error:focus-within{box-shadow:0 0 0 1px var(--ogx-color-error)}.ogx-input-wrapper--disabled{background:var(--ogx-color-gray-100);border-color:var(--ogx-color-gray-200);cursor:not-allowed;opacity:.6}.ogx-input-wrapper--disabled .ogx-input{cursor:not-allowed}.ogx-toolbar{display:flex;align-items:center;gap:var(--ogx-spacing-sm);padding:var(--ogx-spacing-sm) var(--ogx-spacing-sm);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-toolbar-border, var(--ogx-grid-border-color));background:var(--ogx-toolbar-background, var(--ogx-grid-header-background));color:var(--ogx-toolbar-text, var(--ogx-grid-header-text));min-height:44px;position:relative;z-index:100}.ogx-toolbar__left{display:flex;align-items:center;gap:var(--ogx-spacing-sm)}.ogx-toolbar__spacer{flex:1}.ogx-toolbar__actions{display:flex;align-items:center;gap:var(--ogx-spacing-xs);flex-wrap:nowrap;flex-shrink:0;padding-right:5px}.ogx-toolbar__dropdown-wrapper{position:relative}.ogx-toolbar__icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:none;border-radius:8px;background:var(--ogx-toolbar-btn-bg, transparent);color:var(--ogx-toolbar-btn-text, var(--ogx-grid-header-text));cursor:pointer;transition:background .15s,color .15s;position:relative}.ogx-toolbar__icon-btn:hover{background:var(--ogx-toolbar-btn-hover, var(--ogx-grid-header-hover-background))}.ogx-toolbar__icon-btn--active{background:var(--ogx-toolbar-btn-hover, var(--ogx-grid-header-hover-background));outline:none}.ogx-toolbar__icon-btn:focus{outline:none}.ogx-toolbar__icon-btn:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:1px}.ogx-toolbar__dot{position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;background:var(--ogx-color-success, #10b981);border:1.5px solid var(--ogx-grid-header-background, #fff);pointer-events:none}.ogx-toolbar__panel{position:fixed;width:380px;max-width:calc(100vw - 24px);background:var(--ogx-overlay-background, var(--ogx-grid-background));border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));border-radius:var(--ogx-border-radius-lg);box-shadow:var(--ogx-overlay-shadow, var(--ogx-shadow-lg));z-index:9999;overflow:hidden;animation:ogx-panel-in .15s ease-out}.ogx-toolbar__panel-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));background:var(--ogx-grid-header-background)}.ogx-toolbar__panel-title{display:flex;align-items:center;gap:var(--ogx-spacing-xs);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);font-weight:600;color:var(--ogx-grid-header-text)}.ogx-toolbar__clear-btn{padding:2px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;color:var(--ogx-toolbar-btn-danger-text, var(--ogx-color-error, #ef4444));font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;cursor:pointer;transition:background .15s,border-color .15s}.ogx-toolbar__clear-btn:hover{background:var(--ogx-toolbar-btn-danger-hover, rgba(239, 68, 68, .15));border-color:var(--ogx-toolbar-btn-danger-text, var(--ogx-color-error, #ef4444))}.ogx-toolbar__close-btn{padding:2px 10px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;color:var(--ogx-grid-header-text);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;cursor:pointer;transition:background .15s,border-color .15s}.ogx-toolbar__close-btn:hover{background:var(--ogx-grid-header-hover-background);border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-toolbar__panel-body{padding:var(--ogx-spacing-xs) 0;max-height:360px;overflow-y:auto}.ogx-toolbar__empty{padding:var(--ogx-spacing-md) var(--ogx-spacing-md);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);line-height:1.5;text-align:center}.ogx-toolbar__empty code{font-family:var(--ogx-font-family-mono);font-size:.9em;background:var(--ogx-grid-header-background);padding:1px 4px;border-radius:3px}.ogx-toolbar__agg-row{display:flex;align-items:center;gap:var(--ogx-spacing-md);padding:8px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));transition:background .1s}.ogx-toolbar__agg-row:last-child{border-bottom:none}.ogx-toolbar__agg-row:hover{background:var(--ogx-overlay-item-hover-bg, var(--ogx-grid-row-hover-background))}.ogx-toolbar__agg-label{flex:0 0 100px;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;color:var(--ogx-grid-row-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ogx-toolbar__agg-pills{display:flex;gap:4px;flex-wrap:wrap}.ogx-toolbar__pill{display:inline-flex;align-items:center;padding:3px 6px;border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));border-radius:999px;background:var(--ogx-toolbar-chip-bg, transparent);color:var(--ogx-toolbar-chip-text, var(--ogx-grid-row-text));font-family:var(--ogx-font-family-mono, monospace);font-size:10px;font-weight:500;cursor:pointer;text-transform:uppercase;letter-spacing:.03em;transition:background .15s,border-color .15s,color .15s;line-height:1;white-space:nowrap}.ogx-toolbar__pill:hover{background:var(--ogx-grid-header-hover-background);border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-toolbar__pill--active{background:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));border-color:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));color:var(--ogx-toolbar-chip-active-text, #fff);font-weight:700}.ogx-toolbar__pill--active:hover{background:var(--ogx-toolbar-btn-primary-hover, var(--ogx-color-primary-dark));border-color:var(--ogx-toolbar-btn-primary-hover, var(--ogx-color-primary-dark));color:var(--ogx-toolbar-btn-primary-text, #fff)}.ogx-pivot-panel{position:fixed;width:440px;max-width:calc(100vw - 24px);background:var(--ogx-overlay-background, var(--ogx-grid-background));border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));border-radius:var(--ogx-border-radius-lg);box-shadow:var(--ogx-overlay-shadow, var(--ogx-shadow-lg));z-index:9999;overflow:hidden;animation:ogx-panel-in .15s ease-out;font-family:var(--ogx-font-family)}@keyframes ogx-panel-in{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.ogx-pivot-panel__header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));background:var(--ogx-grid-header-background)}.ogx-pivot-panel__title{display:flex;align-items:center;gap:6px;font-size:var(--ogx-font-size-sm);font-weight:600;color:var(--ogx-grid-header-text)}.ogx-pivot-panel__reset-btn{padding:2px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;color:var(--ogx-color-error, #ef4444);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;cursor:pointer;transition:background .15s,border-color .15s}.ogx-pivot-panel__reset-btn:hover{background:var(--ogx-toolbar-btn-danger-bg, rgba(239, 68, 68, .08));color:var(--ogx-toolbar-btn-danger-text, #ef4444);border-color:var(--ogx-color-error, #ef4444)}.ogx-pivot-panel__body{padding:10px 14px;display:flex;flex-direction:column;gap:14px;max-height:300px;overflow-y:auto}.ogx-pivot-zone{display:flex;flex-direction:column;gap:6px}.ogx-pivot-zone__label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ogx-color-gray-400, #94a3b8)}.ogx-pivot-zone__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ogx-pivot-zone__dot--row{background:var(--ogx-color-primary, #3b82f6)}.ogx-pivot-zone__dot--col{background:var(--ogx-color-secondary, #8b5cf6)}.ogx-pivot-zone__dot--value{background:var(--ogx-color-success, #10b981)}.ogx-pivot-chips{display:flex;flex-wrap:wrap;gap:5px;min-height:30px;padding:5px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));border-radius:var(--ogx-border-radius-md);background:var(--ogx-grid-header-background)}.ogx-pivot-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px 3px 10px;border-radius:999px;font-size:12px;font-weight:500;line-height:1;white-space:nowrap}.ogx-pivot-chip--row{background:#3b82f61f;color:var(--ogx-color-primary-dark, #2563eb)}.ogx-pivot-chip--col{background:#8b5cf61f;color:var(--ogx-color-secondary-dark, #7c3aed)}.ogx-pivot-chip--value{background:var(--ogx-toolbar-chip-active-bg, rgba(16,185,129,.12));color:var(--ogx-toolbar-chip-active-text, #047857)}.ogx-pivot-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;border:none;background:transparent;cursor:pointer;opacity:.6;font-size:11px;font-weight:700;line-height:1;padding:0;color:inherit;transition:opacity .1s}.ogx-pivot-chip__remove:hover{opacity:1}.ogx-pivot-chip__fn-select{border:none;background:transparent;font-size:11px;font-weight:700;color:inherit;cursor:pointer;padding:0 2px;margin-left:2px;font-family:var(--ogx-font-family-mono, monospace)}.ogx-pivot-chips--empty:after{content:attr(data-placeholder);font-size:11px;color:var(--ogx-color-gray-400, #94a3b8);align-self:center;pointer-events:none}.ogx-pivot-panel__fields-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ogx-color-gray-400, #94a3b8);margin-bottom:4px}.ogx-pivot-fields{display:flex;flex-wrap:wrap;gap:5px}.ogx-pivot-field-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));border-radius:999px;background:var(--ogx-grid-header-background);color:var(--ogx-grid-row-text);font-family:var(--ogx-font-family);font-size:12px;font-weight:500;cursor:pointer;transition:background .12s,border-color .12s,color .12s;white-space:nowrap}.ogx-pivot-field-btn:hover{background:var(--ogx-color-primary-light, #eff6ff);border-color:var(--ogx-color-primary, #3b82f6);color:var(--ogx-color-primary, #3b82f6)}.ogx-pivot-field-btn--numeric:before{content:"#";font-family:var(--ogx-font-family-mono, monospace);font-size:10px;opacity:.5}.ogx-pivot-field-actions{display:flex;gap:3px}.ogx-pivot-add-btn{display:inline-flex;align-items:center;padding:2px 6px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;font-size:10px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s,color .1s}.ogx-pivot-add-btn--row{color:var(--ogx-color-primary, #3b82f6)}.ogx-pivot-add-btn--col{color:var(--ogx-color-secondary, #8b5cf6)}.ogx-pivot-add-btn--value{color:var(--ogx-toolbar-chip-active-text, #047857)}.ogx-pivot-add-btn:hover{background:var(--ogx-grid-header-hover-background);border-color:currentColor}.ogx-pivot-panel__divider{border:none;border-top:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));margin:0}.ogx-filter__logic-bar{display:flex;align-items:center;gap:6px;padding:8px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-header-background)}.ogx-filter__logic-label{font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;color:var(--ogx-grid-header-text);margin-right:2px}.ogx-filter__logic-pill{display:inline-flex;align-items:center;padding:3px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:999px;background:transparent;color:var(--ogx-grid-row-text);font-family:var(--ogx-font-family-mono, monospace);font-size:10px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:background .15s,border-color .15s,color .15s;line-height:1}.ogx-filter__logic-pill:hover{border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-filter__logic-pill--active{background:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));border-color:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));color:var(--ogx-toolbar-chip-active-text, #fff);font-weight:700}.ogx-filter__row{display:flex;align-items:center;gap:var(--ogx-spacing-sm);padding:8px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);transition:background .1s;min-height:44px}.ogx-filter__row:last-child{border-bottom:none}.ogx-filter__row:hover{background:var(--ogx-grid-row-hover-background)}.ogx-filter__row--active{background:var(--ogx-overlay-item-selected-bg, rgba(25, 118, 210, .04))}.ogx-filter__row--active:hover{background:var(--ogx-overlay-item-selected-bg, rgba(25, 118, 210, .07));opacity:.9}.ogx-filter__col-label{flex:0 0 140px;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;color:var(--ogx-grid-row-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ogx-filter__controls{display:flex;align-items:center;gap:6px;flex:1}.ogx-filter__op-select{padding:5px 24px 5px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);font-family:var(--ogx-font-family-mono, monospace);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:var(--ogx-grid-background);color:var(--ogx-grid-row-text);cursor:pointer;outline:none;transition:border-color .15s;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2394a3b8'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;min-width:130px}.ogx-filter__op-select:focus-visible{border-color:var(--ogx-color-primary)}.ogx-filter__op-select--active{border-color:var(--ogx-toolbar-input-focus-border, var(--ogx-color-primary));color:var(--ogx-color-primary);font-weight:700}.ogx-filter__value-input{flex:1;min-width:60px;padding:4px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);background:var(--ogx-grid-background);color:var(--ogx-grid-row-text);outline:none;transition:border-color .15s,box-shadow .15s}.ogx-filter__value-input::placeholder{color:var(--ogx-overlay-text, var(--ogx-color-gray-400));opacity:.6}.ogx-filter__value-input:focus{border-color:var(--ogx-toolbar-input-focus-border, var(--ogx-color-primary));box-shadow:var(--ogx-toolbar-input-focus-shadow, 0 0 0 2px rgba(25, 118, 210, .15))}.ogx-filter__value-input--active{border-color:var(--ogx-color-primary)}.ogx-filter__value-select{flex:1;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2394a3b8'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:28px;cursor:pointer}.ogx-filter__value-multiselect{padding:2px 4px;cursor:pointer}.ogx-filter__hidden-note{padding:6px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);color:var(--ogx-overlay-text, var(--ogx-color-gray-400))}.ogx-filter__row-clear{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:none;border-radius:50%;background:transparent;color:var(--ogx-overlay-text, var(--ogx-color-gray-400));font-size:16px;line-height:1;cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.ogx-filter__row-clear:hover{background:var(--ogx-overlay-item-danger-bg, rgba(239, 68, 68, .08));color:var(--ogx-overlay-item-danger-text, #ef4444)}.ogx-filter__empty{padding:var(--ogx-spacing-md);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-overlay-text, var(--ogx-color-gray-400));opacity:.7;text-align:center}.ogx-toolbar__panel--filter{width:640px;max-width:calc(100vw - 24px)}.ogx-toolbar__panel-body--filter{max-height:420px;overflow-y:auto;padding:0}.ogx-toolbar__panel-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--ogx-toolbar-btn-primary-bg, var(--ogx-color-primary));color:var(--ogx-toolbar-btn-primary-text, #fff);font-size:10px;font-weight:700;line-height:1;margin-left:4px}.ogx-global-search{display:inline-flex;align-items:center;border-radius:8px;border:1.5px solid transparent;background:transparent;width:34px;height:34px;flex-shrink:0;cursor:pointer;overflow:hidden;transition:width .25s cubic-bezier(.4,0,.2,1),background .2s ease,border-color .2s ease,box-shadow .2s ease}.ogx-global-search:not(.ogx-global-search--expanded):hover{background:var(--ogx-grid-header-hover-background, #f1f5f9)}.ogx-global-search--expanded{width:220px;border-color:var(--ogx-toolbar-input-border, var(--ogx-color-gray-300, #cbd5e1));background:var(--ogx-toolbar-input-bg, var(--ogx-grid-background, #fff));cursor:default;overflow:hidden}.ogx-global-search--expanded:focus-within{border-color:var(--ogx-toolbar-input-focus-border, var(--ogx-color-primary, #3b82f6));box-shadow:var(--ogx-toolbar-input-focus-shadow, 0 0 0 3px rgba(59, 130, 246, .12))}.ogx-global-search__icon-wrapper{flex:0 0 34px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:var(--ogx-grid-header-text, #64748b);pointer-events:none;flex-shrink:0;transition:color .15s}.ogx-global-search--expanded .ogx-global-search__icon-wrapper{color:var(--ogx-color-primary, #3b82f6)}.ogx-global-search:focus-within .ogx-global-search__icon-wrapper{color:var(--ogx-color-primary, #3b82f6)}.ogx-global-search__input{flex:1 1 auto;min-width:0;height:100%;padding:0 28px 0 0;border:none;background:transparent;font-family:var(--ogx-font-family, system-ui, sans-serif);font-size:var(--ogx-font-size-sm, 13px);color:var(--ogx-toolbar-input-text, var(--ogx-grid-row-text, #1e293b));outline:none;opacity:0;pointer-events:none;transition:opacity .18s ease}.ogx-global-search--expanded .ogx-global-search__input{opacity:1;pointer-events:auto}.ogx-global-search__input::placeholder{color:var(--ogx-color-gray-400, #94a3b8);font-size:var(--ogx-font-size-sm, 13px)}.ogx-global-search__clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:transparent;border:none;color:var(--ogx-grid-header-text, #94a3b8);cursor:pointer;padding:4px;border-radius:50%;display:flex;align-items:center;justify-content:center;z-index:3;line-height:0;transition:background .15s,color .15s}.ogx-global-search__clear:hover{background:#ef444414;color:#ef4444}.ogx-column-menu{position:fixed;background:var(--ogx-overlay-background, #fff);box-shadow:var(--ogx-overlay-shadow, 0 4px 6px -1px rgba(0,0,0,.08), 0 2px 4px -1px rgba(0,0,0,.06), 0 0 0 1px rgba(0,0,0,.06));border-radius:var(--ogx-border-radius-md, 8px);padding:4px 0;min-width:190px;z-index:1300}.ogx-menu-section-label{padding:6px 14px 2px;font-family:var(--ogx-font-family, system-ui, sans-serif);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ogx-color-gray-400, #94a3b8);-webkit-user-select:none;user-select:none}.ogx-menu-item{display:flex;align-items:center;width:100%;padding:7px 14px;border:none;background:transparent;cursor:pointer;font-family:var(--ogx-font-family, system-ui, sans-serif);font-size:var(--ogx-font-size-xs);color:var(--ogx-overlay-text, #334155);text-align:left;gap:6px;transition:background .1s}.ogx-menu-item:hover{background:var(--ogx-overlay-item-hover-bg, #f8fafc);color:var(--ogx-overlay-item-hover-text, #0f172a)}.ogx-menu-item--active{color:var(--ogx-overlay-item-selected-text, #1976d2);font-weight:600}.ogx-menu-item--active:hover{background:var(--ogx-overlay-item-selected-bg, rgba(25, 118, 210, .05))}.ogx-menu-item__indicator{flex:0 0 14px;display:flex;align-items:center;justify-content:center;color:var(--ogx-overlay-item-selected-text, #1976d2)}.ogx-menu-item__icon{flex:0 0 16px;display:flex;align-items:center;justify-content:center;color:var(--ogx-color-gray-400, #94a3b8);transition:color .1s}.ogx-menu-item--active .ogx-menu-item__icon{color:var(--ogx-color-primary, #1976d2)}.ogx-menu-divider{height:1px;background:var(--ogx-overlay-border, #e2e8f0);margin:4px 0}.ogx-list-view{display:flex;flex-direction:column;width:100%;flex:1;min-height:0;overflow:hidden}.ogx-list-view__rows{flex:1;overflow-y:auto;overflow-x:hidden;min-height:0}.ogx-list-view__row{display:flex;align-items:stretch;border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-background);cursor:pointer;transition:background .1s;min-height:72px}.ogx-list-view__row:hover{background:var(--ogx-color-gray-50, #f8fafc)}.ogx-list-view__row:focus{outline:none}.ogx-list-view__row:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:-2px}.ogx-list-view__row--selected{background:var(--ogx-selection-bg, rgba(59, 130, 246, .08))}.ogx-list-view__row--selected:hover{background:var(--ogx-selection-hover-bg, rgba(59, 130, 246, .13))}.ogx-list-view__expand{display:flex;align-items:center;flex-shrink:0;min-width:32px}.ogx-list-view__checkbox{display:flex;align-items:center;justify-content:center;width:48px;flex-shrink:0;border-right:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color)}.ogx-list-view__checkbox input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ogx-color-primary)}.ogx-list-view__cell{flex:1;padding:12px 16px;display:flex;align-items:center;min-width:0;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-cell-text)}.ogx-list-view__toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-header-background);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);color:var(--ogx-grid-header-text);flex-shrink:0}.ogx-list-view__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;gap:8px;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-text-secondary, #9ca3af)}@media(max-width:768px){.ogx--list-auto .ogx__viewport{display:none}.ogx--list-auto .ogx-list-view{display:flex}}@media(min-width:769px){.ogx--list-auto .ogx-list-view{display:none}}.ogx-list-view__loading{position:relative;display:flex;align-items:center;justify-content:center;min-height:120px}.ogx-col-group-row{display:flex;align-items:stretch;background:var(--ogx-grid-header-background);border-bottom:1px solid var(--ogx-grid-border-color);flex-shrink:0;min-height:var(--ogx-header-height, 48px)}.ogx-col-group-cell{display:flex;align-items:center;justify-content:center;flex-shrink:0;box-sizing:border-box;position:relative;overflow:hidden}.ogx-col-group-cell:not(:last-child):after{content:"";position:absolute;right:0;top:25%;height:50%;width:1px;background-color:var(--ogx-color-gray-300, #cbd5e1);opacity:.5}.ogx-col-group-cell--group,.ogx-col-group-cell--filler{background:transparent}.ogx-col-group-cell--pinned{background:var(--ogx-grid-header-background);z-index:12}.ogx-col-group-cell__label{font-size:.75rem;font-weight:600;color:var(--ogx-color-gray-700, #334155);padding:0 16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;text-align:center;width:100%}[data-theme=dark] .ogx-col-group-cell__label,.ogx--dark .ogx-col-group-cell__label{color:var(--ogx-color-gray-300, #cbd5e1)}.ogx-tooltip{pointer-events:none;background:var(--ogx-overlay-background, rgba(30, 41, 59, .92));color:var(--ogx-overlay-text, #fff);font-family:var(--ogx-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);font-size:10px;font-weight:500;line-height:1.4;padding:3px 6px;border-radius:6px;white-space:nowrap;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:99999}.ogx-tooltip--top{transform:translate(-50%,-100%);animation:ogx-tooltip-in-top .15s ease-out}.ogx-tooltip--bottom{transform:translate(-50%);animation:ogx-tooltip-in-bottom .15s ease-out}.ogx-tooltip--left{transform:translate(-100%,-50%);animation:ogx-tooltip-in-left .15s ease-out}.ogx-tooltip--right{transform:translateY(-50%);animation:ogx-tooltip-in-right .15s ease-out}@keyframes ogx-tooltip-in-left{0%{opacity:0;transform:translate(-95%,-50%) scale(.98)}to{opacity:1;transform:translate(-100%,-50%) scale(1)}}@keyframes ogx-tooltip-in-right{0%{opacity:0;transform:translate(4px,-50%) scale(.98)}to{opacity:1;transform:translateY(-50%) scale(1)}}@keyframes ogx-tooltip-in-top{0%{opacity:0;transform:translate(-50%,-95%) scale(.98)}to{opacity:1;transform:translate(-50%,-100%) scale(1)}}@keyframes ogx-tooltip-in-bottom{0%{opacity:0;transform:translate(-50%,-4px) scale(.98)}to{opacity:1;transform:translate(-50%) scale(1)}}
1
+ :root{--ogx-row-height: 52px;--ogx-header-height: 56px;--ogx-cell-padding: 16px;--ogx-color-primary: #3b82f6;--ogx-color-primary-dark: #2563eb;--ogx-color-primary-light: #eff6ff;--ogx-color-primary-focus: rgba(59, 130, 246, .5);--ogx-color-secondary: #8b5cf6;--ogx-color-secondary-dark: #7c3aed;--ogx-color-secondary-light: #f5f3ff;--ogx-color-white: #ffffff;--ogx-color-black: #0f172a;--ogx-color-gray-50: #f8fafc;--ogx-color-gray-100: #f1f5f9;--ogx-color-gray-200: #e2e8f0;--ogx-color-gray-300: #cbd5e1;--ogx-color-gray-400: #94a3b8;--ogx-color-gray-500: #64748b;--ogx-color-gray-600: #475569;--ogx-color-gray-700: #334155;--ogx-color-gray-800: #1e293b;--ogx-color-gray-900: #0f172a;--ogx-color-success: #10b981;--ogx-color-warning: #f59e0b;--ogx-color-error: #ef4444;--ogx-color-info: #0ea5e9;--ogx-font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--ogx-font-family-mono: "JetBrains Mono", "Fira Code", "Courier New", Courier, monospace;--ogx-font-size-xs: .75rem;--ogx-font-size-sm: .875rem;--ogx-font-size-md: 1rem;--ogx-font-size-lg: 1.125rem;--ogx-font-size-xl: 1.25rem;--ogx-font-weight-light: 300;--ogx-font-weight-regular: 400;--ogx-font-weight-medium: 500;--ogx-font-weight-semibold: 600;--ogx-font-weight-bold: 700;--ogx-line-height-tight: 1.2;--ogx-line-height-normal: 1.5;--ogx-line-height-relaxed: 1.75;--ogx-spacing-xs: .25rem;--ogx-spacing-sm: .5rem;--ogx-spacing-md: 1rem;--ogx-spacing-lg: 1.5rem;--ogx-spacing-xl: 2rem;--ogx-spacing-xxl: 3rem;--ogx-border-width-thin: 1px;--ogx-border-width-medium: 2px;--ogx-border-width-thick: 3px;--ogx-border-radius-sm: 4px;--ogx-border-radius-md: 8px;--ogx-border-radius-lg: 12px;--ogx-border-radius-xl: 16px;--ogx-border-radius-round: 50%;--ogx-border-color: var(--ogx-color-gray-200);--ogx-border-color-hover: var(--ogx-color-gray-300);--ogx-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--ogx-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .05), 0 2px 4px -1px rgba(0, 0, 0, .03);--ogx-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .05), 0 4px 6px -2px rgba(0, 0, 0, .02);--ogx-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .05), 0 10px 10px -5px rgba(0, 0, 0, .02);--ogx-z-index-base: 0;--ogx-z-index-dropdown: 1000;--ogx-z-index-sticky: 1020;--ogx-z-index-fixed: 1030;--ogx-z-index-modal-backdrop: 1040;--ogx-z-index-modal: 1050;--ogx-z-index-popover: 1060;--ogx-z-index-tooltip: 1070;--ogx-transition-duration-fast: .15s;--ogx-transition-duration-normal: .25s;--ogx-transition-duration-slow: .35s;--ogx-transition-easing: cubic-bezier(.4, 0, .2, 1);--ogx-grid-row-height-compact: 32px;--ogx-grid-row-height-standard: 52px;--ogx-grid-row-height-comfortable: 72px;--ogx-grid-header-height: 56px;--ogx-grid-cell-padding-x: 10px;--ogx-grid-cell-padding-y: 8px;--ogx-grid-cell-font-size: 13px;--ogx-grid-header-font-size: 13px;--ogx-grid-line-height: var(--ogx-line-height-normal);--ogx-grid-background: var(--ogx-color-white);--ogx-grid-border-color: var(--ogx-color-gray-200);--ogx-grid-header-background: var(--ogx-color-gray-50);--ogx-grid-header-text: var(--ogx-color-gray-700);--ogx-grid-header-hover-background: var(--ogx-color-gray-100);--ogx-grid-header-sorted-background: var(--ogx-color-gray-50);--ogx-grid-row-text: var(--ogx-color-gray-800);--ogx-grid-row-hover-background: var(--ogx-color-gray-50);--ogx-grid-row-alternate-background: var(--ogx-grid-background);--ogx-grid-row-selected-background: var(--ogx-color-primary-light);--ogx-grid-row-selected-hover-background: #dbeafe;--ogx-grid-cell-focus-border: var(--ogx-color-primary);--ogx-grid-pinned-left-shadow: 4px 0 24px -4px rgba(0, 0, 0, .05);--ogx-grid-pinned-right-shadow: -4px 0 24px -4px rgba(0, 0, 0, .05);--ogx-skeleton-base: #f0f0f0;--ogx-skeleton-highlight: #f8f8f8;--ogx-overlay-background: #ffffff;--ogx-overlay-border: #e2e8f0;--ogx-overlay-text: #334155;--ogx-overlay-shadow: 0 4px 6px -1px rgba(0,0,0,.08), 0 2px 4px -1px rgba(0,0,0,.06), 0 0 0 1px rgba(0,0,0,.06);--ogx-overlay-item-hover-bg: #f8fafc;--ogx-overlay-item-hover-text: #0f172a;--ogx-overlay-item-selected-text: var(--ogx-color-primary);--ogx-overlay-item-selected-bg: var(--ogx-color-primary-light)}@media(prefers-color-scheme:dark){:root{--ogx-color-primary: #60a5fa;--ogx-color-primary-dark: #3b82f6;--ogx-color-primary-light: #1e3a5f;--ogx-color-primary-focus: rgba(96, 165, 250, .4);--ogx-color-white: #0f172a;--ogx-color-black: #f8fafc;--ogx-color-gray-50: #1e293b;--ogx-color-gray-100: #334155;--ogx-color-gray-200: #475569;--ogx-color-gray-300: #64748b;--ogx-color-gray-400: #94a3b8;--ogx-color-gray-500: #cbd5e1;--ogx-color-gray-600: #e2e8f0;--ogx-color-gray-700: #e2e8f0;--ogx-color-gray-800: #f1f5f9;--ogx-color-gray-900: #f8fafc;--ogx-border-color: #334155;--ogx-border-color-hover: #475569;--ogx-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .3);--ogx-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3);--ogx-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .3);--ogx-grid-background: #0f172a;--ogx-grid-border-color: #334155;--ogx-grid-header-background: #1e293b;--ogx-grid-header-text: #e2e8f0;--ogx-grid-header-hover-background: #334155;--ogx-grid-header-sorted-background: #1e3a5f;--ogx-grid-row-text: #cbd5e1;--ogx-grid-row-hover-background: #1e293b;--ogx-grid-row-alternate-background: #162032;--ogx-grid-row-selected-background: #1e3a5f;--ogx-grid-row-selected-hover-background: #1d4ed8;--ogx-grid-cell-focus-border: #60a5fa;--ogx-checkbox-bg: #1e293b;--ogx-checkbox-border: #64748b;--ogx-grid-pinned-left-shadow: 4px 0 24px -4px rgba(0, 0, 0, .3);--ogx-grid-pinned-right-shadow: -4px 0 24px -4px rgba(0, 0, 0, .3);--ogx-skeleton-base: #2a2a2a;--ogx-skeleton-highlight: #333333;--ogx-overlay-background: #1e293b;--ogx-overlay-border: #334155;--ogx-overlay-text: #cbd5e1;--ogx-overlay-shadow: 0 4px 6px -1px rgba(0,0,0,.4), 0 2px 4px -1px rgba(0,0,0,.3), 0 0 0 1px rgba(0,0,0,.2);--ogx-overlay-item-hover-bg: #334155;--ogx-overlay-item-hover-text: #f1f5f9;--ogx-overlay-item-selected-text: var(--ogx-color-primary);--ogx-overlay-item-selected-bg: #1e3a5f}}*,*:before,*:after{box-sizing:border-box}.ogx--dragging{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.ogx *:focus{outline:none}.ogx button:not(.ogx-menu-item){background:none;border:none;cursor:pointer;font-family:inherit;font-size:inherit}.ogx{display:flex;flex-direction:column;width:100%;background:var(--ogx-grid-background);border:1px solid var(--ogx-grid-border-color);border-radius:var(--ogx-border-radius-lg);font-family:var(--ogx-font-family);position:relative;box-shadow:var(--ogx-shadow-sm);transition:box-shadow var(--ogx-transition-duration-normal);overflow:hidden}.ogx>:first-child{border-top-left-radius:calc(var(--ogx-border-radius-lg) - 1px);border-top-right-radius:calc(var(--ogx-border-radius-lg) - 1px)}.ogx>:last-child{border-bottom-left-radius:calc(var(--ogx-border-radius-lg) - 1px);border-bottom-right-radius:calc(var(--ogx-border-radius-lg) - 1px)}.ogx:hover{box-shadow:var(--ogx-shadow-md)}.ogx__viewport{flex:1;overflow:auto;position:relative;scrollbar-gutter:stable}.ogx__content{position:relative;min-width:fit-content;display:flex;flex-direction:column;min-height:100%}.ogx__virtual-container{position:relative;flex:1 0 auto}.ogx__rows{position:relative;will-change:transform}.ogx__pinned-rows{position:relative;z-index:3}.ogx__sticky-top{position:sticky;top:0;z-index:10;flex-shrink:0}.ogx__sticky-bottom{position:sticky;bottom:0;z-index:10;flex-shrink:0;margin-top:auto}.ogx__pinned-rows--top{background:var(--ogx-grid-background);box-shadow:0 4px 6px -1px #0000000d}.ogx__pinned-rows--bottom{background:var(--ogx-grid-background);box-shadow:0 -4px 6px -1px #0000000d}.ogx--loading{opacity:.6;pointer-events:none}.ogx--loading:after{content:"";position:absolute;inset:0;background:color-mix(in srgb,var(--ogx-grid-background) 60%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:var(--ogx-z-index-modal)}.ogx--fill{height:100%;flex:1 1 auto;min-height:0}.ogx--auto-height{height:auto}.ogx--auto-height .ogx__viewport{overflow-y:visible}.ogx__viewport::-webkit-scrollbar{width:var(--ogx-scrollbar-size, 8px);height:var(--ogx-scrollbar-size, 8px)}.ogx__viewport::-webkit-scrollbar-track{background:var(--ogx-scrollbar-track, transparent)}.ogx__viewport::-webkit-scrollbar-thumb{background:var(--ogx-scrollbar-thumb, var(--ogx-color-gray-300));border-radius:4px;border:2px solid transparent;background-clip:content-box}.ogx__viewport::-webkit-scrollbar-thumb:hover{background-color:var(--ogx-border-color-hover)}.ogx__viewport{scrollbar-width:thin;scrollbar-color:var(--ogx-scrollbar-thumb, rgba(0, 0, 0, .2)) var(--ogx-scrollbar-track, transparent)}.ogx__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--ogx-spacing-xxl);color:var(--ogx-color-gray-500);font-size:var(--ogx-font-size-lg);text-align:center;gap:var(--ogx-spacing-md);min-height:200px}.ogx__empty svg{color:var(--ogx-color-gray-300)}.ogx__loading-overlay{display:flex;align-items:center;justify-content:center;min-height:200px}.ogx__loading-overlay--over-rows{position:absolute;inset:0;min-height:0;pointer-events:none;z-index:var(--ogx-z-index-modal);border-radius:var(--ogx-border-radius-lg);overflow:hidden}.ogx__loading-overlay--custom{background:color-mix(in srgb,var(--ogx-grid-background) 50%,transparent)}.ogx__loading-overlay--custom>*{pointer-events:auto}.ogx__loading-bar{position:absolute;top:0;left:0;width:100%;height:3px;background:color-mix(in srgb,var(--ogx-color-primary) 25%,transparent);overflow:hidden}.ogx__loading-bar:after{content:"";position:absolute;top:0;bottom:0;left:0;width:40%;background:var(--ogx-color-primary);animation:ogx-loading-bar 1.2s ease-in-out infinite}@keyframes ogx-loading-bar{0%{transform:translate(-100%)}to{transform:translate(250%)}}@media(prefers-reduced-motion:reduce){.ogx__loading-bar:after{animation:none;width:100%}}.ogx-error-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ogx-grid-background) 10%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:var(--ogx-z-index-modal);gap:var(--ogx-spacing-md);padding:var(--ogx-spacing-xl);text-align:center;border-radius:var(--ogx-border-radius-lg);overflow:hidden}.ogx-error-overlay>svg{flex-shrink:0;overflow:visible;display:block}.ogx-error-overlay__title{font-weight:600;color:var(--ogx-grid-row-text)}.ogx-error-overlay__message{font-size:var(--ogx-font-size-sm);color:var(--ogx-color-gray-500);max-width:400px}.ogx__aggregation-footer{display:flex;align-items:center;border-top:2px solid var(--ogx-grid-border-color);background:var(--ogx-grid-header-background);font-weight:600;font-size:.85em;position:sticky;bottom:0;z-index:2;width:100%}.ogx__aggregation-cell{flex-shrink:0;padding:0 var(--ogx-grid-cell-padding-x);display:flex;flex-direction:column;justify-content:center;overflow:hidden;box-sizing:border-box;border-right:1px solid var(--ogx-grid-border-color);position:relative}.ogx__aggregation-cell--pinned-left,.ogx__aggregation-cell--pinned-right{position:sticky;z-index:3;background:var(--ogx-grid-header-background)}.ogx__aggregation-spacer{width:48px;min-width:48px;flex-shrink:0;align-self:stretch}.ogx__aggregation-spacer--pinned{position:sticky;z-index:3;background:var(--ogx-grid-header-background)}.ogx__aggregation-cell--pinned-right{border-left:1px solid var(--ogx-grid-border-color)}.ogx__aggregation-cell--pinned-left-last{overflow:visible}.ogx__aggregation-cell--pinned-left-last:after{content:"";position:absolute;top:0;right:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset 10px 0 8px -8px #0000001a}.ogx__aggregation-cell--pinned-right-first{margin-left:auto;overflow:visible}.ogx__aggregation-cell--pinned-right-first:before{content:"";position:absolute;top:0;left:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset -10px 0 8px -8px #0000001a}.ogx__aggregation-label{font-size:.7em;text-transform:uppercase;letter-spacing:.05em;color:var(--ogx-color-gray-500);line-height:1.2}.ogx__aggregation-value{color:var(--ogx-color-primary);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ogx--density-compact .ogx__cell,.ogx--density-compact .ogx__header-cell{padding:var(--ogx-spacing-xs) var(--ogx-spacing-sm);font-size:var(--ogx-font-size-xs)}.ogx--density-comfortable .ogx__cell,.ogx--density-comfortable .ogx__header-cell{padding:var(--ogx-spacing-md) var(--ogx-spacing-lg);font-size:var(--ogx-font-size-md)}.ogx__group-cell-content{font-weight:500;text-align:left;display:flex;align-items:center;gap:4px}.ogx-aria-live-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.ogx__cell-error{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--ogx-color-error, #d32f2f);font-size:1rem;cursor:help}.ogx__header-wrap{display:flex;flex-direction:column;position:sticky;top:0;z-index:10;flex-shrink:0}.ogx__header{display:flex;align-items:stretch;background:var(--ogx-grid-header-background);border-bottom:1px solid var(--ogx-grid-border-color);min-height:var(--ogx-header-height);box-shadow:var(--ogx-shadow-sm, 0 1px 2px rgba(0, 0, 0, .03))}.ogx__header-cell--expand{width:48px;min-width:48px;flex-shrink:0;border-right:1px solid transparent}.ogx__header-cell{display:flex;align-items:center;padding:var(--ogx-grid-cell-padding-y) var(--ogx-grid-cell-padding-x);position:relative;font-size:var(--ogx-grid-header-font-size);font-weight:600;color:var(--ogx-grid-header-text);overflow:hidden;box-sizing:border-box;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:background-color .2s}.ogx__header-cell:not(:last-child):after{content:"";position:absolute;right:0;top:25%;height:50%;width:1px;background-color:var(--ogx-color-gray-300);opacity:.5}.ogx__header-cell-content{display:flex;align-items:center;gap:var(--ogx-spacing-xs);width:100%;overflow:hidden}.ogx__header-cell-title-wrapper{display:flex;flex-direction:column;align-items:flex-start;flex:1;overflow:hidden}.ogx__header-cell-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;font-weight:600;letter-spacing:-.01em}.ogx__header-cell-aggregation{font-size:.6rem;font-weight:500;color:var(--ogx-color-gray-500);text-transform:uppercase;letter-spacing:.05em;margin-top:2px}.ogx__header-cell--align-left{justify-content:flex-start}.ogx__header-cell--align-center{justify-content:center}.ogx__header-cell--align-right{justify-content:flex-start}.ogx__header-cell--align-center .ogx__header-cell-content{text-align:center}.ogx__header-cell--align-right .ogx__header-cell-content{flex-direction:row-reverse}.ogx__header-cell--align-right .ogx__header-cell-title-wrapper{align-items:flex-end;text-align:right}.ogx__header-cell--align-right .ogx__menu-icon-btn{margin-left:0;margin-right:auto}.ogx__header-cell--sortable{cursor:pointer}.ogx__header-cell--sortable:hover{background:var(--ogx-grid-header-hover-background)}.ogx__header-cell--sorted{background:var(--ogx-grid-header-sorted-background);color:var(--ogx-color-primary-dark)}.ogx__header-cell--sorted .ogx__header-cell-title{color:var(--ogx-color-primary-dark)}.ogx__sort-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:4px;flex-shrink:0;font-size:14px;line-height:1}.ogx__sort-icon:before{transition:all .2s}.ogx__sort-icon--asc:before{content:"↑"}.ogx__sort-icon--desc:before{content:"↓"}.ogx__header-cell--checkbox,.ogx__cell--checkbox{width:48px;min-width:48px;max-width:48px;flex:0 0 48px;justify-content:center;padding:0}.ogx__header-cell--pinned{background:var(--ogx-grid-header-background);z-index:12}.ogx__header-cell--pinned-left{box-shadow:var(--ogx-grid-pinned-left-shadow, 4px 0 12px -4px rgba(0, 0, 0, .05))}.ogx__header-cell--pinned-right-first{margin-left:auto}.ogx__header-cell--pinned-right{box-shadow:var(--ogx-grid-pinned-right-shadow, -4px 0 12px -4px rgba(0, 0, 0, .05))}.ogx__header-cell--pinned:after{display:none}.ogx__header-cell--dragging{cursor:move!important;opacity:.5;background:var(--ogx-color-gray-200)}.ogx__header-drag-icon{display:flex;align-items:center;justify-content:center;margin-right:8px;color:var(--ogx-color-primary);animation:ogx-pulse 1.5s infinite ease-in-out}@keyframes ogx-pulse{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.ogx__header-cell--drag-over{border-left:2px solid var(--ogx-color-primary)!important;background:var(--ogx-color-primary-light)}.ogx--kb .ogx__header-cell--focused{outline:2px solid var(--ogx-grid-cell-focus-border, var(--ogx-color-primary, #2563eb));outline-offset:-2px;background-color:var(--ogx-grid-header-hover-background);z-index:6}.ogx__header-cell--focus-visible{outline:2px solid var(--ogx-grid-cell-focus-border, var(--ogx-color-primary));outline-offset:-2px;background-color:var(--ogx-grid-header-hover-background);z-index:6}.ogx__header-cell:focus,.ogx__header-cell:focus-visible{outline:none!important}.ogx__menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:26px;height:26px;padding:0;border:none;background:transparent;border-radius:4px;color:var(--ogx-color-gray-500);cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease,color .15s ease;margin-left:auto}.ogx__header-cell:hover .ogx__menu-icon-btn,.ogx__header-cell--sorted .ogx__menu-icon-btn{opacity:1}.ogx__menu-icon-btn:hover{background:var(--ogx-grid-header-hover-background);color:var(--ogx-grid-header-text)}.ogx__menu-icon-btn--active{opacity:1;background:var(--ogx-color-primary-light);color:var(--ogx-color-primary)}.ogx__row{display:flex;align-items:stretch;border-bottom:1px solid var(--ogx-grid-border-color);background:var(--ogx-grid-background);position:relative;min-height:var(--ogx-row-height);transition:background-color .15s ease}.ogx__row--even{background:var(--ogx-grid-row-alternate-background, var(--ogx-grid-background))}.ogx__cell--expand{width:48px;min-width:48px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:inherit}.ogx:not(.ogx--row-spanning) .ogx__row:hover{background:var(--ogx-grid-row-hover-background)}.ogx__row--selected{background:var(--ogx-grid-row-selected-background)}.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover{background:var(--ogx-grid-row-selected-hover-background)}.ogx__row--pinned-top,.ogx__row--pinned-bottom{background:var(--ogx-grid-background)}.ogx:not(.ogx--row-spanning) .ogx__row--pinned-top:hover,.ogx:not(.ogx--row-spanning) .ogx__row--pinned-bottom:hover{background:var(--ogx-grid-row-hover-background)}.ogx__row--pinned-top.ogx__row--selected,.ogx__row--pinned-bottom.ogx__row--selected{background:var(--ogx-grid-row-selected-background)}.ogx__row--dragging{cursor:grabbing;opacity:.8;background:var(--ogx-color-primary-light);box-shadow:var(--ogx-shadow-lg);z-index:20}.ogx__row--drag-over{position:relative;z-index:10}.ogx__row--drag-over:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--ogx-color-primary);z-index:20}.ogx__cell--drag-handle{width:48px;min-width:48px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:inherit;cursor:grab;color:var(--ogx-grid-header-text)}.ogx__cell--drag-handle:active{cursor:grabbing;color:var(--ogx-grid-row-text)}.ogx__row--group{background:var(--ogx-color-gray-50);font-weight:500}.ogx:not(.ogx--row-spanning) .ogx__row--group:hover{background:var(--ogx-color-gray-100)}.ogx__row--group.ogx__row--selected{background:var(--ogx-grid-row-selected-background)}@keyframes ogx-skeleton-shimmer{0%{background-position:-600px 0}to{background-position:600px 0}}.ogx__row--skeleton{pointer-events:none;border-bottom:1px solid var(--ogx-grid-border-color);background-color:var(--ogx-grid-background)}.ogx__row--skeleton .ogx__skeleton-cell{flex:1;height:100%;display:flex;align-items:center;padding:0 16px}.ogx__row--skeleton .ogx__skeleton-bar{height:14px;border-radius:6px;width:80%;background:linear-gradient(90deg,var(--ogx-skeleton-base) 25%,var(--ogx-skeleton-highlight) 50%,var(--ogx-skeleton-base) 75%);background-size:600px 100%;animation:ogx-skeleton-shimmer 1.4s infinite linear}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(1) .ogx__skeleton-bar{width:40%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(2) .ogx__skeleton-bar{width:70%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(3) .ogx__skeleton-bar{width:85%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(4) .ogx__skeleton-bar{width:55%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(5) .ogx__skeleton-bar{width:65%}.ogx__row--skeleton .ogx__skeleton-cell:nth-child(n+6) .ogx__skeleton-bar{width:60%}.ogx__cell{position:relative;display:flex;align-items:center;padding:var(--ogx-grid-cell-padding-y) var(--ogx-grid-cell-padding-x);border-right:1px solid var(--ogx-grid-border-color);font-size:var(--ogx-grid-cell-font-size);color:var(--ogx-grid-row-text);line-height:var(--ogx-grid-line-height);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box;background-color:inherit}.ogx__cell:focus{outline:none}.ogx__cell--focused{z-index:10}.ogx--kb .ogx__cell--focused{outline:2px solid var(--ogx-grid-cell-focus-border, var(--ogx-color-primary, #2563eb));outline-offset:-2px}.ogx__cell--editable{cursor:text}.ogx__cell--editing{padding:0;overflow:visible;z-index:20;outline:2px solid var(--ogx-color-primary);outline-offset:-2px;background-color:var(--ogx-grid-background)}.ogx__cell--align-left{justify-content:flex-start;text-align:left}.ogx__cell--align-center{justify-content:center;text-align:center}.ogx__cell--align-right{justify-content:flex-end;text-align:right}.ogx__cell--pinned-left,.ogx__cell--pinned-right{position:sticky;z-index:2;background:inherit;background-color:var(--ogx-grid-background)}.ogx__cell--pinned-right{border-left:1px solid var(--ogx-grid-border-color)}.ogx__cell--pinned-right-first{margin-left:auto}.ogx:not(.ogx--row-spanning) .ogx__row:hover .ogx__cell--pinned-left,.ogx:not(.ogx--row-spanning) .ogx__row:hover .ogx__cell--pinned-right{background-color:var(--ogx-grid-row-hover-background)}.ogx__row--selected .ogx__cell--pinned-left,.ogx__row--selected .ogx__cell--pinned-right{background-color:var(--ogx-grid-row-selected-background)}.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover .ogx__cell--pinned-left,.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover .ogx__cell--pinned-right{background-color:var(--ogx-grid-row-selected-hover-background)}.ogx__cell--pinned-left-last,.ogx__cell--pinned-right-first{overflow:visible}.ogx__cell--pinned-left-last:after{content:"";position:absolute;top:0;right:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset 10px 0 8px -8px #0000001a}.ogx__cell--pinned-right-first:before{content:"";position:absolute;top:0;left:-10px;bottom:0;width:10px;pointer-events:none;box-shadow:inset -10px 0 8px -8px #0000001a}.ogx__cell--hidden{visibility:hidden;border:none;background:transparent}.ogx__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.ogx__cell-image{display:block;max-width:100%;max-height:calc(var(--ogx-row-height) - 8px);object-fit:contain}.ogx__cell--spanned{background-color:var(--ogx-grid-background);z-index:10}.ogx__row--even .ogx__cell--spanned{background-color:var(--ogx-grid-row-alternate-background, var(--ogx-grid-background))}.ogx:not(.ogx--row-spanning) .ogx__row:hover .ogx__cell--spanned{background-color:var(--ogx-grid-row-hover-background)}.ogx__row--selected .ogx__cell--spanned{background-color:var(--ogx-grid-row-selected-background)}.ogx:not(.ogx--row-spanning) .ogx__row--selected:hover .ogx__cell--spanned{background-color:var(--ogx-grid-row-selected-hover-background)}.ogx__edit-cell{width:100%;height:100%;display:flex;align-items:center;padding:0}.ogx__edit-input,.ogx__edit-select{width:100%;height:100%;padding:0 10px;border:none;border-radius:0;font-family:var(--ogx-font-family, inherit);font-size:var(--ogx-grid-cell-font-size, 14px);color:var(--ogx-grid-row-text, #1e293b);background:var(--ogx-grid-background, #fff);box-sizing:border-box;outline:none}.ogx__edit-input:focus,.ogx__edit-select:focus{outline:none}.ogx__edit-input--number::-webkit-inner-spin-button,.ogx__edit-input--number::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.ogx__edit-input--number{-moz-appearance:textfield;appearance:textfield}.ogx__edit-select{padding:0 6px;cursor:pointer;-webkit-appearance:auto;appearance:auto}.ogx__edit-boolean{width:100%;height:100%;display:flex;align-items:center;justify-content:center;outline:2px solid var(--ogx-color-primary, #2563eb);outline-offset:-2px}.ogx__edit-checkbox{width:18px;height:18px;cursor:pointer;accent-color:var(--ogx-color-primary, #2563eb)}.ogx-pagination{display:flex;align-items:center;justify-content:flex-end;gap:var(--ogx-spacing-lg);padding:12px 16px;border-top:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-background);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-row-text);min-height:52px;border-radius:0 0 var(--ogx-border-radius-lg) var(--ogx-border-radius-lg)}.ogx-pagination__page-size{display:flex;align-items:center;gap:8px}.ogx-pagination__label{font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);white-space:nowrap}.ogx-pagination__select{min-width:55px;padding:0 18px 0 4px!important;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);font-weight:500;color:var(--ogx-grid-row-text);background:var(--ogx-grid-background);border:1px solid var(--ogx-border-color);border-radius:4px;cursor:pointer;transition:all var(--ogx-transition-duration-fast) var(--ogx-transition-easing);appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%23666' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right -1px center;background-size:20px;line-height:1.5}.ogx-pagination__select:hover{border-color:var(--ogx-border-color-hover)}.ogx-pagination__select:focus{outline:none;border-color:var(--ogx-color-primary);box-shadow:0 0 0 2px var(--ogx-color-primary-focus)}.ogx-pagination__info{font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);white-space:nowrap}.ogx-pagination__actions{display:flex;align-items:center;gap:var(--ogx-spacing-xs)}.ogx-pagination__page-info{padding:0 var(--ogx-spacing-sm);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);white-space:nowrap}.ogx-pagination .ogx-button{min-width:32px;padding:var(--ogx-spacing-xs)}.ogx-pagination .ogx-button svg{display:block}@media(max-width:768px){.ogx-pagination{flex-wrap:wrap;gap:var(--ogx-spacing-md)}.ogx-pagination__page-size{order:3;width:100%;justify-content:center}.ogx-pagination__info{order:1;flex:1}.ogx-pagination__actions{order:2}}.ogx__skeleton-row{display:flex;align-items:center;border-bottom:1px solid var(--ogx-grid-border-color);background-color:var(--ogx-grid-background)}.ogx__skeleton-cell{display:flex;align-items:center;padding:0 16px;box-sizing:border-box;overflow:hidden}.ogx-skeleton-box{background:linear-gradient(90deg,var(--ogx-skeleton-base) 0%,var(--ogx-skeleton-highlight) 50%,var(--ogx-skeleton-base) 100%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.ogx__skeleton{display:flex;flex-direction:column;width:100%}.ogx__skeleton-row{display:flex;align-items:center;min-height:var(--ogx-row-height);border-bottom:1px solid var(--ogx-grid-border-color);padding:var(--ogx-grid-cell-padding-y) var(--ogx-grid-cell-padding-x);background-color:var(--ogx-grid-background)}.ogx__skeleton-cell{flex:1;margin-right:16px}.ogx__skeleton-cell:last-child{margin-right:0}.ogx__skeleton-content{height:16px;background:linear-gradient(90deg,var(--ogx-skeleton-base) 0%,var(--ogx-skeleton-highlight) 50%,var(--ogx-skeleton-base) 100%);background-size:200% 100%;border-radius:4px;animation:skeleton-loading 1.5s ease-in-out infinite}.ogx__skeleton-cell:nth-child(1) .ogx__skeleton-content{width:60%}.ogx__skeleton-cell:nth-child(2) .ogx__skeleton-content{width:80%}.ogx__skeleton-cell:nth-child(3) .ogx__skeleton-content{width:70%}.ogx__skeleton-cell:nth-child(4) .ogx__skeleton-content{width:90%}.ogx__skeleton-cell:nth-child(5) .ogx__skeleton-content{width:75%}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}.ogx__detail-panel{display:flex;background:var(--ogx-color-gray-50);border-top:1px solid var(--ogx-border-color);border-bottom:1px solid var(--ogx-border-color);transition:height .2s ease-in-out;position:relative;min-width:fit-content;width:100%;box-sizing:border-box}.ogx__detail-panel-content{padding:var(--ogx-spacing-md);width:100%;min-width:100%;box-sizing:border-box}@keyframes detailPanelExpand{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.ogx__detail-panel{animation:detailPanelExpand .2s ease-out}.ogx-column-resize-handle{position:absolute;top:0;right:0;width:8px;height:100%;cursor:col-resize;z-index:10;display:flex;align-items:center;justify-content:flex-end;-webkit-user-select:none;user-select:none;touch-action:none}.ogx-column-resize-handle--start{right:auto;left:0;justify-content:flex-start}.ogx-column-resize-handle:focus-visible .ogx-column-resize-handle__line{background:var(--ogx-color-primary);opacity:1}.ogx-column-resize-handle:hover .ogx-column-resize-handle__line,.ogx-column-resize-handle--dragging .ogx-column-resize-handle__line{background:var(--ogx-color-primary);opacity:1}.ogx-column-resize-handle__line{width:2px;height:100%;background:var(--ogx-color-gray-300);opacity:0;transition:opacity var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-resize-handle--dragging{cursor:col-resize}.ogx__header-cell:hover .ogx-column-resize-handle__line{opacity:.5}.ogx-column-visibility-panel{background:var(--ogx-overlay-background, var(--ogx-color-white));border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));border-radius:var(--ogx-border-radius-sm);min-width:250px;max-width:350px;box-shadow:var(--ogx-shadow-lg);display:flex;flex-direction:column}.ogx-column-visibility-panel__search-section{padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color))}.ogx-column-visibility-panel__search-container{display:flex;align-items:center;padding:6px var(--ogx-spacing-sm);border:2px solid var(--ogx-overlay-border, var(--ogx-color-primary));border-radius:var(--ogx-border-radius-md);gap:var(--ogx-spacing-sm);color:var(--ogx-overlay-text, var(--ogx-color-gray-500));transition:border-color var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-visibility-panel__search-container:focus-within{border-color:var(--ogx-color-primary-dark)}.ogx-column-visibility-panel__search-input{border:none;background:none;outline:none;font-family:inherit;font-size:var(--ogx-font-size-md);color:var(--ogx-overlay-text, var(--ogx-color-gray-900));flex:1}.ogx-column-visibility-panel__search-input::placeholder{color:var(--ogx-overlay-text, var(--ogx-color-gray-400));opacity:.6}.ogx-column-visibility-panel__list{max-height:350px;overflow-y:auto;padding:var(--ogx-spacing-sm) 0}.ogx-column-visibility-panel__item{display:flex;align-items:center;gap:var(--ogx-spacing-sm);padding:var(--ogx-spacing-xs) var(--ogx-spacing-sm) var(--ogx-spacing-xs) var(--ogx-spacing-xs);transition:background var(--ogx-transition-duration-fast) var(--ogx-transition-easing);-webkit-user-select:none;user-select:none}.ogx-column-visibility-panel__item:hover:not(.ogx-column-visibility-panel__item--disabled){background:var(--ogx-overlay-item-hover-bg, var(--ogx-color-gray-50))}.ogx-column-visibility-panel__item--drag-over{background:var(--ogx-color-primary-light, rgba(59, 130, 246, .08));border-top:2px solid var(--ogx-color-primary)}.ogx-column-visibility-panel__item--disabled{opacity:.5}.ogx-column-visibility-panel__drag-handle-wrapper{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:100%;cursor:grab;color:var(--ogx-overlay-text, var(--ogx-color-gray-400));border-radius:3px;opacity:.6;transition:color var(--ogx-transition-duration-fast) var(--ogx-transition-easing),background var(--ogx-transition-duration-fast) var(--ogx-transition-easing),opacity var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-visibility-panel__drag-handle-wrapper:hover{opacity:1;color:var(--ogx-overlay-text, var(--ogx-color-gray-600));background:var(--ogx-overlay-item-hover-bg, var(--ogx-color-gray-100))}.ogx-column-visibility-panel__drag-handle-wrapper:active{cursor:grabbing;color:var(--ogx-color-primary)}.ogx-column-visibility-panel__drag-handle{display:block;pointer-events:none}.ogx-column-visibility-panel__label{font-size:var(--ogx-font-size-xs);color:var(--ogx-overlay-text, var(--ogx-color-gray-900));-webkit-user-select:none;user-select:none;cursor:inherit}.ogx-column-visibility-panel__item-label .ogx-column-visibility-panel__label{flex:1}.ogx-column-visibility-panel__footer{border-top:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));padding:var(--ogx-spacing-sm);display:flex;justify-content:space-between;align-items:center}.ogx-column-visibility-panel__reset-btn{color:var(--ogx-overlay-text, var(--ogx-color-gray-400));background:none;border:none;font-family:inherit;font-weight:600;font-size:13px;letter-spacing:.05em;text-transform:uppercase;cursor:pointer;transition:color var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-column-visibility-panel__reset-btn:hover{color:var(--ogx-color-primary, var(--ogx-color-gray-600))}.ogx-quick-filter{width:100%;max-width:400px}.ogx-quick-filter__clear{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ogx-color-gray-500);transition:color var(--ogx-transition-duration-fast) var(--ogx-transition-easing);border-radius:var(--ogx-border-radius-sm)}.ogx-quick-filter__clear:hover{color:var(--ogx-color-gray-700);background:var(--ogx-color-gray-100)}.ogx-quick-filter__clear:active{color:var(--ogx-color-gray-900)}.ogx-button{display:inline-flex;align-items:center;justify-content:center;font-family:var(--ogx-font-family);font-weight:var(--ogx-font-weight-medium);line-height:var(--ogx-line-height-normal);border-radius:var(--ogx-border-radius-md);transition:all var(--ogx-transition-duration-fast) var(--ogx-transition-easing);cursor:pointer;-webkit-user-select:none;user-select:none}.ogx-button--small{padding:var(--ogx-spacing-xs) var(--ogx-spacing-sm);font-size:var(--ogx-font-size-sm);min-height:28px}.ogx-button--medium{padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);font-size:var(--ogx-font-size-md);min-height:36px}.ogx-button--large{padding:var(--ogx-spacing-md) var(--ogx-spacing-lg);font-size:var(--ogx-font-size-lg);min-height:44px}.ogx-button--text{background:transparent;border:none;color:var(--ogx-grid-row-text)}.ogx-button--text.ogx-button--primary{color:var(--ogx-color-primary)}.ogx-button--text.ogx-button--secondary{color:var(--ogx-color-secondary)}.ogx-button--text:hover:not(.ogx-button--disabled){background:var(--ogx-grid-header-hover-background, var(--ogx-color-gray-100))}.ogx-button--text.ogx-button--primary:hover:not(.ogx-button--disabled){background:var(--ogx-color-primary-light)}.ogx-button--outlined{background:transparent;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);color:var(--ogx-grid-row-text)}.ogx-button--outlined.ogx-button--primary{border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-button--outlined.ogx-button--secondary{border-color:var(--ogx-color-secondary);color:var(--ogx-color-secondary)}.ogx-button--outlined:hover:not(.ogx-button--disabled){background:var(--ogx-grid-header-hover-background, var(--ogx-color-gray-100));border-color:var(--ogx-border-color-hover)}.ogx-button--contained{background:var(--ogx-color-gray-200);border:none;color:var(--ogx-grid-row-text)}.ogx-button--contained.ogx-button--primary{background:var(--ogx-color-primary);color:var(--ogx-color-white)}.ogx-button--contained.ogx-button--secondary{background:var(--ogx-color-secondary);color:var(--ogx-color-white)}.ogx-button--contained:hover:not(.ogx-button--disabled){background:var(--ogx-color-gray-300)}.ogx-button--contained.ogx-button--primary:hover:not(.ogx-button--disabled){background:var(--ogx-color-primary-dark)}.ogx-button--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ogx-button:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:2px}.ogx-checkbox-wrapper{display:inline-flex;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none;font-family:var(--ogx-font-family)}.ogx-checkbox-wrapper--disabled{opacity:.6;cursor:not-allowed}.ogx-checkbox__input{appearance:none;position:absolute;opacity:0;width:0;height:0}.ogx-checkbox__box{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1.5px solid var(--ogx-checkbox-border, var(--ogx-color-gray-400));border-radius:4px;background:var(--ogx-checkbox-bg, var(--ogx-color-white));transition:all .2s cubic-bezier(.4,0,.2,1);color:#fff;flex-shrink:0}.ogx-checkbox__icon{width:12px;height:12px;fill:currentColor;transform:scale(0);transition:transform .2s cubic-bezier(.4,0,.2,1)}.ogx-checkbox__label{margin-left:var(--ogx-spacing-sm);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-row-text, var(--ogx-color-gray-700));line-height:1}.ogx-checkbox__input:checked+.ogx-checkbox__box{background:var(--ogx-color-primary);border-color:var(--ogx-color-primary)}.ogx-checkbox__input:checked+.ogx-checkbox__box .ogx-checkbox__icon{transform:scale(1)}.ogx-checkbox__input:indeterminate+.ogx-checkbox__box{background:var(--ogx-color-primary);border-color:var(--ogx-color-primary)}.ogx-checkbox__input:indeterminate+.ogx-checkbox__box .ogx-checkbox__icon{transform:scale(1)}.ogx-checkbox-wrapper:hover:not(.ogx-checkbox-wrapper--disabled) .ogx-checkbox__box{border-color:var(--ogx-color-primary);box-shadow:0 0 0 4px var(--ogx-color-primary-light)}.ogx-checkbox__input:focus-visible+.ogx-checkbox__box{border-color:var(--ogx-color-primary);box-shadow:0 0 0 4px var(--ogx-color-primary-focus)}.ogx-checkbox-wrapper--disabled .ogx-checkbox__box{background:var(--ogx-color-gray-100);border-color:var(--ogx-color-gray-300);color:var(--ogx-color-gray-400)}.ogx-drag-handle{display:flex;align-items:center;justify-content:center;cursor:grab;color:var(--ogx-grid-header-text);padding:0 4px;opacity:.5;transition:opacity .2s,color .2s}.ogx-drag-handle:hover{opacity:1;color:var(--ogx-grid-row-text)}.ogx-drag-handle:active{cursor:grabbing;color:var(--ogx-color-primary);opacity:1}.ogx-expand-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;cursor:pointer;color:var(--ogx-grid-header-text);transition:color .2s ease;border-radius:4px}.ogx-expand-icon:hover{background:transparent;color:var(--ogx-grid-row-text)}.ogx-expand-icon:focus{outline:none}.ogx-expand-icon:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:2px}.ogx-expand-icon svg{display:block;transition:transform .2s ease}.ogx-input-wrapper{display:inline-flex;align-items:center;position:relative;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-md);background:var(--ogx-color-white);transition:all var(--ogx-transition-duration-fast) var(--ogx-transition-easing)}.ogx-input-wrapper--full-width{width:100%}.ogx-input{flex:1;padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-md);line-height:var(--ogx-line-height-normal);color:var(--ogx-color-gray-900);background:transparent;border:none;outline:none}.ogx-input::placeholder{color:var(--ogx-color-gray-400)}.ogx-input__adornment{display:flex;align-items:center;color:var(--ogx-color-gray-600)}.ogx-input__adornment--start{padding-left:var(--ogx-spacing-md)}.ogx-input__adornment--end{padding-right:var(--ogx-spacing-md)}.ogx-input-wrapper:hover:not(.ogx-input-wrapper--disabled){border-color:var(--ogx-border-color-hover)}.ogx-input-wrapper:focus-within:not(.ogx-input-wrapper--disabled){border-color:var(--ogx-color-primary);box-shadow:0 0 0 1px var(--ogx-color-primary)}.ogx-input-wrapper--error{border-color:var(--ogx-color-error)}.ogx-input-wrapper--error:focus-within{box-shadow:0 0 0 1px var(--ogx-color-error)}.ogx-input-wrapper--disabled{background:var(--ogx-color-gray-100);border-color:var(--ogx-color-gray-200);cursor:not-allowed;opacity:.6}.ogx-input-wrapper--disabled .ogx-input{cursor:not-allowed}.ogx-toolbar{display:flex;align-items:center;gap:var(--ogx-spacing-sm);padding:var(--ogx-spacing-sm) var(--ogx-spacing-sm);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-toolbar-border, var(--ogx-grid-border-color));background:var(--ogx-toolbar-background, var(--ogx-grid-header-background));color:var(--ogx-toolbar-text, var(--ogx-grid-header-text));min-height:44px;position:relative;z-index:100}.ogx-toolbar__left{display:flex;align-items:center;gap:var(--ogx-spacing-sm)}.ogx-toolbar__spacer{flex:1}.ogx-toolbar__actions{display:flex;align-items:center;gap:var(--ogx-spacing-xs);flex-wrap:nowrap;flex-shrink:0;padding-right:5px}.ogx-toolbar__dropdown-wrapper{position:relative}.ogx-toolbar__icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:none;border-radius:8px;background:var(--ogx-toolbar-btn-bg, transparent);color:var(--ogx-toolbar-btn-text, var(--ogx-grid-header-text));cursor:pointer;transition:background .15s,color .15s;position:relative}.ogx-toolbar__icon-btn:hover{background:var(--ogx-toolbar-btn-hover, var(--ogx-grid-header-hover-background))}.ogx-toolbar__icon-btn--active{background:var(--ogx-toolbar-btn-hover, var(--ogx-grid-header-hover-background));outline:none}.ogx-toolbar__icon-btn:focus{outline:none}.ogx-toolbar__icon-btn:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:1px}.ogx-toolbar__dot{position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;background:var(--ogx-color-success, #10b981);border:1.5px solid var(--ogx-grid-header-background, #fff);pointer-events:none}.ogx-toolbar__panel{position:fixed;width:380px;max-width:calc(100vw - 24px);background:var(--ogx-overlay-background, var(--ogx-grid-background));border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));border-radius:var(--ogx-border-radius-lg);box-shadow:var(--ogx-overlay-shadow, var(--ogx-shadow-lg));z-index:9999;overflow:hidden;animation:ogx-panel-in .15s ease-out}.ogx-toolbar__panel-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ogx-spacing-sm) var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));background:var(--ogx-grid-header-background)}.ogx-toolbar__panel-title{display:flex;align-items:center;gap:var(--ogx-spacing-xs);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);font-weight:600;color:var(--ogx-grid-header-text)}.ogx-toolbar__clear-btn{padding:2px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;color:var(--ogx-toolbar-btn-danger-text, var(--ogx-color-error, #ef4444));font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;cursor:pointer;transition:background .15s,border-color .15s}.ogx-toolbar__clear-btn:hover{background:var(--ogx-toolbar-btn-danger-hover, rgba(239, 68, 68, .15));border-color:var(--ogx-toolbar-btn-danger-text, var(--ogx-color-error, #ef4444))}.ogx-toolbar__close-btn{padding:2px 10px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;color:var(--ogx-grid-header-text);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;cursor:pointer;transition:background .15s,border-color .15s}.ogx-toolbar__close-btn:hover{background:var(--ogx-grid-header-hover-background);border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-toolbar__panel-body{padding:var(--ogx-spacing-xs) 0;max-height:360px;overflow-y:auto}.ogx-toolbar__empty{padding:var(--ogx-spacing-md) var(--ogx-spacing-md);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-header-text);line-height:1.5;text-align:center}.ogx-toolbar__empty code{font-family:var(--ogx-font-family-mono);font-size:.9em;background:var(--ogx-grid-header-background);padding:1px 4px;border-radius:3px}.ogx-toolbar__agg-row{display:flex;align-items:center;gap:var(--ogx-spacing-md);padding:8px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));transition:background .1s}.ogx-toolbar__agg-row:last-child{border-bottom:none}.ogx-toolbar__agg-row:hover{background:var(--ogx-overlay-item-hover-bg, var(--ogx-grid-row-hover-background))}.ogx-toolbar__agg-label{flex:0 0 100px;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;color:var(--ogx-grid-row-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ogx-toolbar__agg-pills{display:flex;gap:4px;flex-wrap:wrap}.ogx-toolbar__pill{display:inline-flex;align-items:center;padding:3px 6px;border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));border-radius:999px;background:var(--ogx-toolbar-chip-bg, transparent);color:var(--ogx-toolbar-chip-text, var(--ogx-grid-row-text));font-family:var(--ogx-font-family-mono, monospace);font-size:10px;font-weight:500;cursor:pointer;text-transform:uppercase;letter-spacing:.03em;transition:background .15s,border-color .15s,color .15s;line-height:1;white-space:nowrap}.ogx-toolbar__pill:hover{background:var(--ogx-grid-header-hover-background);border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-toolbar__pill--active{background:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));border-color:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));color:var(--ogx-toolbar-chip-active-text, #fff);font-weight:700}.ogx-toolbar__pill--active:hover{background:var(--ogx-toolbar-btn-primary-hover, var(--ogx-color-primary-dark));border-color:var(--ogx-toolbar-btn-primary-hover, var(--ogx-color-primary-dark));color:var(--ogx-toolbar-btn-primary-text, #fff)}.ogx-pivot-panel{position:fixed;width:440px;max-width:calc(100vw - 24px);background:var(--ogx-overlay-background, var(--ogx-grid-background));border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));border-radius:var(--ogx-border-radius-lg);box-shadow:var(--ogx-overlay-shadow, var(--ogx-shadow-lg));z-index:9999;overflow:hidden;animation:ogx-panel-in .15s ease-out;font-family:var(--ogx-font-family)}@keyframes ogx-panel-in{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.ogx-pivot-panel__header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));background:var(--ogx-grid-header-background)}.ogx-pivot-panel__title{display:flex;align-items:center;gap:6px;font-size:var(--ogx-font-size-sm);font-weight:600;color:var(--ogx-grid-header-text)}.ogx-pivot-panel__reset-btn{padding:2px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;color:var(--ogx-color-error, #ef4444);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;cursor:pointer;transition:background .15s,border-color .15s}.ogx-pivot-panel__reset-btn:hover{background:var(--ogx-toolbar-btn-danger-bg, rgba(239, 68, 68, .08));color:var(--ogx-toolbar-btn-danger-text, #ef4444);border-color:var(--ogx-color-error, #ef4444)}.ogx-pivot-panel__body{padding:10px 14px;display:flex;flex-direction:column;gap:14px;max-height:300px;overflow-y:auto}.ogx-pivot-zone{display:flex;flex-direction:column;gap:6px}.ogx-pivot-zone__label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ogx-color-gray-400, #94a3b8)}.ogx-pivot-zone__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ogx-pivot-zone__dot--row{background:var(--ogx-color-primary, #3b82f6)}.ogx-pivot-zone__dot--col{background:var(--ogx-color-secondary, #8b5cf6)}.ogx-pivot-zone__dot--value{background:var(--ogx-color-success, #10b981)}.ogx-pivot-chips{display:flex;flex-wrap:wrap;gap:5px;min-height:30px;padding:5px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));border-radius:var(--ogx-border-radius-md);background:var(--ogx-grid-header-background)}.ogx-pivot-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px 3px 10px;border-radius:999px;font-size:12px;font-weight:500;line-height:1;white-space:nowrap}.ogx-pivot-chip--row{background:#3b82f61f;color:var(--ogx-color-primary-dark, #2563eb)}.ogx-pivot-chip--col{background:#8b5cf61f;color:var(--ogx-color-secondary-dark, #7c3aed)}.ogx-pivot-chip--value{background:var(--ogx-toolbar-chip-active-bg, rgba(16,185,129,.12));color:var(--ogx-toolbar-chip-active-text, #047857)}.ogx-pivot-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;border:none;background:transparent;cursor:pointer;opacity:.6;font-size:11px;font-weight:700;line-height:1;padding:0;color:inherit;transition:opacity .1s}.ogx-pivot-chip__remove:hover{opacity:1}.ogx-pivot-chip__fn-select{border:none;background:transparent;font-size:11px;font-weight:700;color:inherit;cursor:pointer;padding:0 2px;margin-left:2px;font-family:var(--ogx-font-family-mono, monospace)}.ogx-pivot-chips--empty:after{content:attr(data-placeholder);font-size:11px;color:var(--ogx-color-gray-400, #94a3b8);align-self:center;pointer-events:none}.ogx-pivot-panel__fields-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ogx-color-gray-400, #94a3b8);margin-bottom:4px}.ogx-pivot-fields{display:flex;flex-wrap:wrap;gap:5px}.ogx-pivot-field-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-border-color));border-radius:999px;background:var(--ogx-grid-header-background);color:var(--ogx-grid-row-text);font-family:var(--ogx-font-family);font-size:12px;font-weight:500;cursor:pointer;transition:background .12s,border-color .12s,color .12s;white-space:nowrap}.ogx-pivot-field-btn:hover{background:var(--ogx-color-primary-light, #eff6ff);border-color:var(--ogx-color-primary, #3b82f6);color:var(--ogx-color-primary, #3b82f6)}.ogx-pivot-field-btn--numeric:before{content:"#";font-family:var(--ogx-font-family-mono, monospace);font-size:10px;opacity:.5}.ogx-pivot-field-actions{display:flex;gap:3px}.ogx-pivot-add-btn{display:inline-flex;align-items:center;padding:2px 6px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);background:transparent;font-size:10px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s,color .1s}.ogx-pivot-add-btn--row{color:var(--ogx-color-primary, #3b82f6)}.ogx-pivot-add-btn--col{color:var(--ogx-color-secondary, #8b5cf6)}.ogx-pivot-add-btn--value{color:var(--ogx-toolbar-chip-active-text, #047857)}.ogx-pivot-add-btn:hover{background:var(--ogx-grid-header-hover-background);border-color:currentColor}.ogx-pivot-panel__divider{border:none;border-top:var(--ogx-border-width-thin) solid var(--ogx-overlay-border, var(--ogx-grid-border-color));margin:0}.ogx-filter__logic-bar{display:flex;align-items:center;gap:6px;padding:8px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-header-background)}.ogx-filter__logic-label{font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;color:var(--ogx-grid-header-text);margin-right:2px}.ogx-filter__logic-pill{display:inline-flex;align-items:center;padding:3px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:999px;background:transparent;color:var(--ogx-grid-row-text);font-family:var(--ogx-font-family-mono, monospace);font-size:10px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;transition:background .15s,border-color .15s,color .15s;line-height:1}.ogx-filter__logic-pill:hover{border-color:var(--ogx-color-primary);color:var(--ogx-color-primary)}.ogx-filter__logic-pill--active{background:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));border-color:var(--ogx-toolbar-chip-active-bg, var(--ogx-color-primary));color:var(--ogx-toolbar-chip-active-text, #fff);font-weight:700}.ogx-filter__row{display:flex;align-items:center;gap:var(--ogx-spacing-sm);padding:8px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);transition:background .1s;min-height:44px}.ogx-filter__row:last-child{border-bottom:none}.ogx-filter__row:hover{background:var(--ogx-grid-row-hover-background)}.ogx-filter__row--active{background:var(--ogx-overlay-item-selected-bg, rgba(25, 118, 210, .04))}.ogx-filter__row--active:hover{background:var(--ogx-overlay-item-selected-bg, rgba(25, 118, 210, .07));opacity:.9}.ogx-filter__col-label{flex:0 0 140px;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);font-weight:500;color:var(--ogx-grid-row-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ogx-filter__controls{display:flex;align-items:center;gap:6px;flex:1}.ogx-filter__op-select{padding:5px 24px 5px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);font-family:var(--ogx-font-family-mono, monospace);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:var(--ogx-grid-background);color:var(--ogx-grid-row-text);cursor:pointer;outline:none;transition:border-color .15s;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2394a3b8'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;min-width:130px}.ogx-filter__op-select:focus-visible{border-color:var(--ogx-color-primary)}.ogx-filter__op-select--active{border-color:var(--ogx-toolbar-input-focus-border, var(--ogx-color-primary));color:var(--ogx-color-primary);font-weight:700}.ogx-filter__value-input{flex:1;min-width:60px;padding:4px 8px;border:var(--ogx-border-width-thin) solid var(--ogx-border-color);border-radius:var(--ogx-border-radius-sm);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);background:var(--ogx-grid-background);color:var(--ogx-grid-row-text);outline:none;transition:border-color .15s,box-shadow .15s}.ogx-filter__value-input::placeholder{color:var(--ogx-overlay-text, var(--ogx-color-gray-400));opacity:.6}.ogx-filter__value-input:focus{border-color:var(--ogx-toolbar-input-focus-border, var(--ogx-color-primary));box-shadow:var(--ogx-toolbar-input-focus-shadow, 0 0 0 2px rgba(25, 118, 210, .15))}.ogx-filter__value-input--active{border-color:var(--ogx-color-primary)}.ogx-filter__value-select{flex:1;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2394a3b8'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:28px;cursor:pointer}.ogx-filter__value-multiselect{padding:2px 4px;cursor:pointer}.ogx-filter__hidden-note{padding:6px var(--ogx-spacing-md);border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);color:var(--ogx-overlay-text, var(--ogx-color-gray-400))}.ogx-filter__row-clear{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:none;border-radius:50%;background:transparent;color:var(--ogx-overlay-text, var(--ogx-color-gray-400));font-size:16px;line-height:1;cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.ogx-filter__row-clear:hover{background:var(--ogx-overlay-item-danger-bg, rgba(239, 68, 68, .08));color:var(--ogx-overlay-item-danger-text, #ef4444)}.ogx-filter__empty{padding:var(--ogx-spacing-md);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-overlay-text, var(--ogx-color-gray-400));opacity:.7;text-align:center}.ogx-toolbar__panel--filter{width:640px;max-width:calc(100vw - 24px)}.ogx-toolbar__panel-body--filter{max-height:420px;overflow-y:auto;padding:0}.ogx-toolbar__panel-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--ogx-toolbar-btn-primary-bg, var(--ogx-color-primary));color:var(--ogx-toolbar-btn-primary-text, #fff);font-size:10px;font-weight:700;line-height:1;margin-left:4px}.ogx-global-search{display:inline-flex;align-items:center;border-radius:8px;border:1.5px solid transparent;background:transparent;width:34px;height:34px;flex-shrink:0;cursor:pointer;overflow:hidden;transition:width .25s cubic-bezier(.4,0,.2,1),background .2s ease,border-color .2s ease,box-shadow .2s ease}.ogx-global-search:not(.ogx-global-search--expanded):hover{background:var(--ogx-grid-header-hover-background, #f1f5f9)}.ogx-global-search--expanded{width:220px;border-color:var(--ogx-toolbar-input-border, var(--ogx-color-gray-300, #cbd5e1));background:var(--ogx-toolbar-input-bg, var(--ogx-grid-background, #fff));cursor:default;overflow:hidden}.ogx-global-search--expanded:focus-within{border-color:var(--ogx-toolbar-input-focus-border, var(--ogx-color-primary, #3b82f6));box-shadow:var(--ogx-toolbar-input-focus-shadow, 0 0 0 3px rgba(59, 130, 246, .12))}.ogx-global-search__icon-wrapper{flex:0 0 34px;width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:var(--ogx-grid-header-text, #64748b);pointer-events:none;flex-shrink:0;transition:color .15s}.ogx-global-search--expanded .ogx-global-search__icon-wrapper{color:var(--ogx-color-primary, #3b82f6)}.ogx-global-search:focus-within .ogx-global-search__icon-wrapper{color:var(--ogx-color-primary, #3b82f6)}.ogx-global-search__input{flex:1 1 auto;min-width:0;height:100%;padding:0 28px 0 0;border:none;background:transparent;font-family:var(--ogx-font-family, system-ui, sans-serif);font-size:var(--ogx-font-size-sm, 13px);color:var(--ogx-toolbar-input-text, var(--ogx-grid-row-text, #1e293b));outline:none;opacity:0;pointer-events:none;transition:opacity .18s ease}.ogx-global-search--expanded .ogx-global-search__input{opacity:1;pointer-events:auto}.ogx-global-search__input::placeholder{color:var(--ogx-color-gray-400, #94a3b8);font-size:var(--ogx-font-size-sm, 13px)}.ogx-global-search__clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:transparent;border:none;color:var(--ogx-grid-header-text, #94a3b8);cursor:pointer;padding:4px;border-radius:50%;display:flex;align-items:center;justify-content:center;z-index:3;line-height:0;transition:background .15s,color .15s}.ogx-global-search__clear:hover{background:#ef444414;color:#ef4444}.ogx-column-menu{position:fixed;background:var(--ogx-overlay-background, #fff);box-shadow:var(--ogx-overlay-shadow, 0 4px 6px -1px rgba(0,0,0,.08), 0 2px 4px -1px rgba(0,0,0,.06), 0 0 0 1px rgba(0,0,0,.06));border-radius:var(--ogx-border-radius-md, 8px);padding:4px 0;min-width:190px;z-index:1300}.ogx-menu-section-label{padding:6px 14px 2px;font-family:var(--ogx-font-family, system-ui, sans-serif);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ogx-color-gray-400, #94a3b8);-webkit-user-select:none;user-select:none}.ogx-menu-item{display:flex;align-items:center;width:100%;padding:7px 14px;border:none;background:transparent;cursor:pointer;font-family:var(--ogx-font-family, system-ui, sans-serif);font-size:var(--ogx-font-size-xs);color:var(--ogx-overlay-text, #334155);text-align:left;gap:6px;transition:background .1s}.ogx-menu-item:hover{background:var(--ogx-overlay-item-hover-bg, #f8fafc);color:var(--ogx-overlay-item-hover-text, #0f172a)}.ogx-menu-item--active{color:var(--ogx-overlay-item-selected-text, #1976d2);font-weight:600}.ogx-menu-item--active:hover{background:var(--ogx-overlay-item-selected-bg, rgba(25, 118, 210, .05))}.ogx-menu-item__indicator{flex:0 0 14px;display:flex;align-items:center;justify-content:center;color:var(--ogx-overlay-item-selected-text, #1976d2)}.ogx-menu-item__icon{flex:0 0 16px;display:flex;align-items:center;justify-content:center;color:var(--ogx-color-gray-400, #94a3b8);transition:color .1s}.ogx-menu-item--active .ogx-menu-item__icon{color:var(--ogx-color-primary, #1976d2)}.ogx-menu-divider{height:1px;background:var(--ogx-overlay-border, #e2e8f0);margin:4px 0}.ogx-list-view{display:flex;flex-direction:column;width:100%;flex:1;min-height:0;overflow:hidden}.ogx-list-view__rows{flex:1;overflow-y:auto;overflow-x:hidden;min-height:0}.ogx-list-view__row{display:flex;align-items:stretch;border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-background);cursor:pointer;transition:background .1s;min-height:72px}.ogx-list-view__row:hover{background:var(--ogx-color-gray-50, #f8fafc)}.ogx-list-view__row:focus{outline:none}.ogx-list-view__row:focus-visible{outline:2px solid var(--ogx-color-primary);outline-offset:-2px}.ogx-list-view__row--selected{background:var(--ogx-selection-bg, rgba(59, 130, 246, .08))}.ogx-list-view__row--selected:hover{background:var(--ogx-selection-hover-bg, rgba(59, 130, 246, .13))}.ogx-list-view__expand{display:flex;align-items:center;flex-shrink:0;min-width:32px}.ogx-list-view__checkbox{display:flex;align-items:center;justify-content:center;width:48px;flex-shrink:0;border-right:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color)}.ogx-list-view__checkbox input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ogx-color-primary)}.ogx-list-view__cell{flex:1;padding:12px 16px;display:flex;align-items:center;min-width:0;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-grid-cell-text)}.ogx-list-view__toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:var(--ogx-border-width-thin) solid var(--ogx-grid-border-color);background:var(--ogx-grid-header-background);font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-xs);color:var(--ogx-grid-header-text);flex-shrink:0}.ogx-list-view__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;gap:8px;font-family:var(--ogx-font-family);font-size:var(--ogx-font-size-sm);color:var(--ogx-text-secondary, #9ca3af)}@media(max-width:768px){.ogx--list-auto .ogx__viewport{display:none}.ogx--list-auto .ogx-list-view{display:flex}}@media(min-width:769px){.ogx--list-auto .ogx-list-view{display:none}}.ogx-list-view__loading{position:relative;display:flex;align-items:center;justify-content:center;min-height:120px}.ogx-col-group-row{display:flex;align-items:stretch;background:var(--ogx-grid-header-background);border-bottom:1px solid var(--ogx-grid-border-color);flex-shrink:0;min-height:var(--ogx-header-height, 48px)}.ogx-col-group-cell{display:flex;align-items:center;justify-content:center;flex-shrink:0;box-sizing:border-box;position:relative;overflow:hidden}.ogx-col-group-cell:not(:last-child):after{content:"";position:absolute;right:0;top:25%;height:50%;width:1px;background-color:var(--ogx-color-gray-300, #cbd5e1);opacity:.5}.ogx-col-group-cell--group,.ogx-col-group-cell--filler{background:transparent}.ogx-col-group-cell--pinned{background:var(--ogx-grid-header-background);z-index:12}.ogx-col-group-cell__label{font-size:.75rem;font-weight:600;color:var(--ogx-color-gray-700, #334155);padding:0 16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;text-align:center;width:100%}[data-theme=dark] .ogx-col-group-cell__label,.ogx--dark .ogx-col-group-cell__label{color:var(--ogx-color-gray-300, #cbd5e1)}.ogx-tooltip{pointer-events:none;background:var(--ogx-overlay-background, rgba(30, 41, 59, .92));color:var(--ogx-overlay-text, #fff);font-family:var(--ogx-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);font-size:10px;font-weight:500;line-height:1.4;padding:3px 6px;border-radius:6px;white-space:nowrap;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:99999}.ogx-tooltip--top{transform:translate(-50%,-100%);animation:ogx-tooltip-in-top .15s ease-out}.ogx-tooltip--bottom{transform:translate(-50%);animation:ogx-tooltip-in-bottom .15s ease-out}.ogx-tooltip--left{transform:translate(-100%,-50%);animation:ogx-tooltip-in-left .15s ease-out}.ogx-tooltip--right{transform:translateY(-50%);animation:ogx-tooltip-in-right .15s ease-out}@keyframes ogx-tooltip-in-left{0%{opacity:0;transform:translate(-95%,-50%) scale(.98)}to{opacity:1;transform:translate(-100%,-50%) scale(1)}}@keyframes ogx-tooltip-in-right{0%{opacity:0;transform:translate(4px,-50%) scale(.98)}to{opacity:1;transform:translateY(-50%) scale(1)}}@keyframes ogx-tooltip-in-top{0%{opacity:0;transform:translate(-50%,-95%) scale(.98)}to{opacity:1;transform:translate(-50%,-100%) scale(1)}}@keyframes ogx-tooltip-in-bottom{0%{opacity:0;transform:translate(-50%,-4px) scale(.98)}to{opacity:1;transform:translate(-50%) scale(1)}}