@gridsheet/web 3.3.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/lib/dom.ts","../src/lib/input.ts","../src/lib/virtualization.ts","../src/lib/popup.ts","../src/styles/minified.ts","../src/styles/embedder.ts"],"sourcesContent":["export const focus = (el: HTMLElement | null | undefined) => {\n el?.focus({ preventScroll: true });\n};\n\nconst isSafari = (): boolean =>\n typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Prevents Safari elastic bounce (rubber-band) at scroll boundaries.\n * No-op on non-Safari browsers. Returns a cleanup function to remove the listeners.\n */\nexport const preventSafariBounce = (el: HTMLDivElement): (() => void) => {\n if (!isSafari()) {\n return () => {};\n }\n const preventBounce = (e: WheelEvent) => {\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = el;\n const atTop = e.deltaY < 0 && scrollTop <= 0;\n const atBottom = e.deltaY > 0 && scrollTop + clientHeight >= scrollHeight;\n const atLeft = e.deltaX < 0 && scrollLeft <= 0;\n const atRight = e.deltaX > 0 && scrollLeft + clientWidth >= scrollWidth;\n if (atTop || atBottom || atLeft || atRight) {\n e.preventDefault();\n window.scrollBy({ top: e.deltaY, left: e.deltaX, behavior: 'auto' });\n }\n };\n\n let touchStartX = 0;\n let touchStartY = 0;\n\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length === 1) {\n touchStartX = e.touches[0].clientX;\n touchStartY = e.touches[0].clientY;\n }\n };\n\n const preventTouchBounce = (e: TouchEvent) => {\n if (e.touches.length !== 1) {\n return;\n }\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = el;\n const dx = e.touches[0].clientX - touchStartX;\n const dy = e.touches[0].clientY - touchStartY;\n const atTop = dy > 0 && scrollTop <= 0;\n const atBottom = dy < 0 && scrollTop + clientHeight >= scrollHeight;\n const atLeft = dx > 0 && scrollLeft <= 0;\n const atRight = dx < 0 && scrollLeft + clientWidth >= scrollWidth;\n if (atTop || atBottom || atLeft || atRight) {\n e.preventDefault();\n }\n };\n\n el.addEventListener('wheel', preventBounce, { passive: false });\n el.addEventListener('touchstart', onTouchStart, { passive: true });\n el.addEventListener('touchmove', preventTouchBounce, { passive: false });\n\n return () => {\n el.removeEventListener('wheel', preventBounce);\n el.removeEventListener('touchstart', onTouchStart);\n el.removeEventListener('touchmove', preventTouchBounce);\n };\n};\n","import {\n type PointType,\n type Sheet,\n Lexer,\n splitRef,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n a2p,\n grantAddressAbsolute,\n toSheetPrefix,\n} from '@gridsheet/engine';\nimport { focus } from './dom';\n\nexport const insertTextAtCursor = (input: HTMLTextAreaElement, text: string) => {\n focus(input);\n const deprecated = !document.execCommand?.('insertText', false, text);\n if (!deprecated) {\n return;\n }\n input.setRangeText(text, input.selectionStart, input.selectionEnd, 'end');\n return;\n};\n\ntype InsertRefProps = {\n input: HTMLTextAreaElement | null;\n ref: string;\n dryRun?: boolean;\n};\n\nexport const insertRef = ({ input, ref, dryRun = false }: InsertRefProps): boolean => {\n // dryRun is used to check if the ref can be inserted without actually inserting it\n if (!input?.value?.startsWith('=') || input.selectionStart === 0) {\n return false;\n }\n const lexer = new Lexer(input.value.substring(1));\n lexer.tokenize();\n const [tokenIndex, _] = lexer.getTokenIndexByCharPosition(input.selectionStart - 1);\n let token = lexer.tokens[tokenIndex];\n if (token?.type === 'SPACE') {\n token = lexer.tokens[tokenIndex - 1];\n }\n if (\n token == null ||\n token.type === 'OPEN' ||\n token.type === 'COMMA' ||\n token.type === 'INFIX_OPERATOR' ||\n token.type === 'PREFIX_OPERATOR'\n ) {\n if (!dryRun) {\n insertTextAtCursor(input, ref);\n }\n } else if (token.type === 'REF' || token.type === 'RANGE') {\n if (!dryRun) {\n // keep the absolute/relative state of the token\n const { sheetName: refSheetName, addresses: refAddresses } = splitRef(ref);\n const { addresses: tokenAddresses } = splitRef(token.entity as string);\n\n const tokenAbsolutes = tokenAddresses.map((a) => a2p(a));\n if (tokenAddresses.length === 2 && refAddresses.length === 1) {\n refAddresses.push(refAddresses[0]);\n }\n ref =\n toSheetPrefix(refSheetName) +\n refAddresses\n .map((r, i) => {\n return grantAddressAbsolute(r, !!tokenAbsolutes[i]?.absX, !!tokenAbsolutes[i]?.absY);\n })\n .join(':');\n\n const [start, end] = lexer.getTokenPositionRange(tokenIndex + 1, 1);\n input.setSelectionRange(start, end);\n insertTextAtCursor(input, ref);\n }\n } else {\n return false;\n }\n return true;\n};\n\nexport const isRefInsertable = (input: HTMLTextAreaElement | null): boolean => {\n return insertRef({ input, ref: '', dryRun: true });\n};\n\nexport const expandInput = (input: HTMLTextAreaElement | null) => {\n if (input == null) {\n return;\n }\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n};\n\nexport const resetInput = (input: HTMLTextAreaElement | null, sheet: Sheet, point: PointType) => {\n const style = input?.style;\n if (style == null) {\n return;\n }\n const width = sheet.getCell({ x: point.x, y: 0 }, { resolution: 'SYSTEM' })?.width ?? DEFAULT_WIDTH;\n const height = sheet.getCell(point, { resolution: 'SYSTEM' })?.height ?? DEFAULT_HEIGHT;\n style.width = `${width}px`;\n style.height = `${height}px`;\n};\n\nexport const isFocus = (input: HTMLTextAreaElement | null): boolean => {\n if (typeof window === 'undefined' || input == null) {\n return false;\n }\n return document.activeElement === input;\n};\n\n/**\n * Handles auto-close behavior for double quotes in formula editing.\n * - Typing `\"` inserts `\"\"` and places cursor between them.\n * - Typing `\"` when cursor is right before an auto-closed `\"` skips over it.\n * - Backspace between empty `\"\"` deletes both quotes.\n *\n * Returns true if the event was handled (caller should preventDefault), false otherwise.\n */\nexport const handleFormulaQuoteAutoClose = (\n e: { key: string; preventDefault(): void; currentTarget: HTMLTextAreaElement },\n inputting: string,\n): boolean => {\n const input = e.currentTarget;\n const isFormula = inputting.startsWith('=');\n if (!isFormula) {\n return false;\n }\n\n const { selectionStart, selectionEnd } = input;\n\n if (e.key === '\"') {\n // If text is selected, wrap it in quotes\n if (selectionStart !== selectionEnd) {\n e.preventDefault();\n const selectedText = inputting.slice(selectionStart, selectionEnd);\n insertTextAtCursor(input, `\"${selectedText}\"`);\n requestAnimationFrame(() => {\n input.setSelectionRange(selectionStart + 1, selectionEnd + 1);\n });\n return true;\n }\n\n const charAfter = inputting[selectionStart];\n\n // Count unescaped double quotes before cursor (after '=') to determine if we're inside a string\n const beforeCursor = inputting.slice(1, selectionStart); // skip '='\n let quoteCount = 0;\n for (let i = 0; i < beforeCursor.length; i++) {\n if (beforeCursor[i] === '\"') {\n // Skip escaped double quotes (\"\") inside strings\n if (i + 1 < beforeCursor.length && beforeCursor[i + 1] === '\"') {\n i++; // skip the next quote\n } else {\n quoteCount++;\n }\n }\n }\n\n // If odd number of quotes before cursor, we're inside a string.\n // If the next char is `\"`, it's the closing quote — skip over it.\n if (quoteCount % 2 === 1 && charAfter === '\"') {\n e.preventDefault();\n input.setSelectionRange(selectionStart + 1, selectionStart + 1);\n return true;\n }\n\n // Otherwise, insert `\"\"` and place cursor in between\n e.preventDefault();\n insertTextAtCursor(input, '\"\"');\n requestAnimationFrame(() => {\n input.setSelectionRange(selectionStart + 1, selectionStart + 1);\n });\n return true;\n }\n\n if (e.key === 'Backspace') {\n // If cursor is between `\"\"`, delete both\n if (\n selectionStart === selectionEnd &&\n selectionStart > 0 &&\n inputting[selectionStart - 1] === '\"' &&\n inputting[selectionStart] === '\"'\n ) {\n e.preventDefault();\n input.setRangeText('', selectionStart - 1, selectionStart + 1, 'end');\n input.dispatchEvent(new Event('input', { bubbles: true }));\n return true;\n }\n }\n\n return false;\n};\n","import {\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n OVERSCAN_X,\n OVERSCAN_Y,\n range,\n binarySearch,\n type BinarySearchPredicate,\n Sheet,\n type AreaType,\n type PointType,\n type Virtualization,\n} from '@gridsheet/engine';\n\nexport const getCellRectPositions = (sheet: Sheet, { y, x }: PointType) => {\n const colCell = sheet.getCell({ y: 0, x }, { resolution: 'SYSTEM' });\n const rowCell = sheet.getCell({ y, x: 0 }, { resolution: 'SYSTEM' });\n const left = sheet.getSystem({ y: 0, x })?.offsetLeft ?? 0;\n const top = sheet.getOffsetTop(y);\n const w = colCell?.width || DEFAULT_WIDTH;\n const h = rowCell?.filtered ? 0 : rowCell?.height || DEFAULT_HEIGHT;\n return {\n top,\n left,\n bottom: top + h,\n right: left + w,\n width: w,\n height: h,\n };\n};\n\nexport const getScreenRect = (e: HTMLDivElement) => {\n const top = e.scrollTop,\n left = e.scrollLeft;\n const height = e.clientHeight,\n width = e.clientWidth;\n const bottom = top + height,\n right = left + width;\n return { top, left, bottom, right, height, width };\n};\n\nexport const virtualize = (sheet: Sheet, e: HTMLDivElement | null): Virtualization | null => {\n if (e == null) {\n return null;\n }\n let boundaryTop = 0,\n boundaryLeft = 0,\n boundaryBottom = sheet.numRows,\n boundaryRight = sheet.numCols;\n\n const { top, left, bottom, right } = getScreenRect(e);\n let width = 0,\n height = 0;\n for (let x = 1; x <= sheet.numCols; x++) {\n const w = sheet.getCell({ y: 0, x }, { resolution: 'SYSTEM' })?.width || DEFAULT_WIDTH;\n width += w;\n if (boundaryLeft === 0 && width > left) {\n boundaryLeft = Math.max(x - OVERSCAN_X, 1);\n }\n if (width > right) {\n boundaryRight = Math.min(x + OVERSCAN_X, sheet.numCols);\n break;\n }\n }\n // This loop breaks early once visible bottom is found — O(visible_rows), not O(numRows).\n for (let y = 1; y <= sheet.numRows; y++) {\n if (sheet.isRowFiltered(y)) {\n continue;\n }\n const h = sheet.getCell({ y, x: 0 }, { resolution: 'SYSTEM' })?.height || DEFAULT_HEIGHT;\n height += h;\n if (boundaryTop === 0 && height > top) {\n boundaryTop = Math.max(y - OVERSCAN_Y, 1);\n }\n if (height > bottom) {\n boundaryBottom = Math.min(y + OVERSCAN_Y, sheet.numRows);\n break;\n }\n }\n const ys = boundaryTop === 0 ? [] : range(boundaryTop, boundaryBottom).filter((y) => !sheet.isRowFiltered(y));\n const xs = range(boundaryLeft, boundaryRight);\n const before = sheet.getRectSize({\n top: 1,\n left: 1,\n bottom: boundaryTop,\n right: boundaryLeft,\n });\n const after = sheet.getRectSize({\n top: boundaryBottom,\n left: boundaryRight,\n bottom: sheet.numRows,\n right: sheet.numCols,\n });\n return {\n ys,\n xs,\n adjuster: {\n top: before.height,\n left: before.width,\n bottom: after.height,\n right: after.width,\n },\n };\n};\n\nexport const smartScroll = (\n sheet: Sheet,\n e: HTMLDivElement | null,\n targetPoint: PointType,\n behavior: ScrollBehavior = 'auto',\n) => {\n if (e == null) {\n return;\n }\n const screen = getScreenRect(e);\n const target = getCellRectPositions(sheet, targetPoint);\n\n // when header is sticky\n const up = target.top - sheet.headerHeight;\n const left = target.left - sheet.headerWidth;\n const down = target.bottom - screen.height + 1;\n const right = target.right - screen.width + 1;\n\n const isTopOver = up < screen.top;\n const isLeftOver = left < screen.left;\n const isBottomOver = target.bottom > screen.bottom;\n const isRightOver = target.right > screen.right;\n\n if (isLeftOver) {\n if (isTopOver) {\n // go left up\n e.scrollTo({ left, top: up, behavior });\n } else if (isBottomOver) {\n // go left down\n e.scrollTo({ left, top: down, behavior });\n } else {\n // go left\n e.scrollTo({ left, top: screen.top, behavior });\n }\n } else if (isRightOver) {\n if (isTopOver) {\n // go right up\n e.scrollTo({ left: right, top: up, behavior });\n } else if (isBottomOver) {\n // go right down\n e.scrollTo({ left: right, top: down, behavior });\n } else {\n // go right\n e.scrollTo({ left: right, top: screen.top, behavior });\n }\n } else {\n if (isTopOver) {\n // go up\n e.scrollTo({ left: screen.left, top: up, behavior });\n } else if (isBottomOver) {\n // go down\n e.scrollTo({ left: screen.left, top: down, behavior });\n } else {\n // go nowhere\n }\n }\n};\n\ntype PositionGetter = (rect: DOMRect) => number;\n\nconst findVisibleElement = (\n elements: HTMLTableHeaderCellElement[],\n getPosition: PositionGetter,\n boundary: number,\n dataKey: string,\n): number => {\n const index = binarySearch(\n 0,\n elements.length - 1,\n (mid) => getPosition(elements[mid].getBoundingClientRect()) < boundary,\n false,\n );\n return parseInt(elements[index]?.dataset[dataKey] ?? '1');\n};\n\nexport const getAreaInTabular = (tabularElement: HTMLDivElement): AreaType => {\n const {\n top: topPosition,\n left: leftPosition,\n bottom: bottomPosition,\n right: rightPosition,\n } = tabularElement.getBoundingClientRect();\n\n const rows = Array.from(tabularElement.querySelectorAll('.gs-th-left')) as HTMLTableHeaderCellElement[];\n const cols = Array.from(tabularElement.querySelectorAll('.gs-th-top')) as HTMLTableHeaderCellElement[];\n\n const top = findVisibleElement(rows, (rect) => rect.top, topPosition, 'y');\n const bottom = findVisibleElement(rows, (rect) => rect.bottom, bottomPosition + 1, 'y');\n const left = findVisibleElement(cols, (rect) => rect.left, leftPosition, 'x');\n const right = findVisibleElement(cols, (rect) => rect.right, rightPosition + 1, 'x');\n\n return { top, left, bottom, right };\n};\n","/**\n * lib/popup.ts\n *\n * Utility functions for computing the position of floating UI elements\n * (tooltips, dropdowns, autocomplete lists, function guides, etc.)\n * so they don't overflow the viewport.\n */\n\nconst MARGIN = 8; // px gap from the viewport edge\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type HAlign = 'left' | 'right';\nexport type VAlign = 'top' | 'bottom';\n\nexport type PopupPosition = {\n x: number;\n y: number;\n hAlign: HAlign;\n};\n\n// ---------------------------------------------------------------------------\n// calcBelowPosition\n//\n// Places a popup BELOW an anchor rect.\n// Prefers aligning the popup's RIGHT edge to rect.right (hAlign='right'),\n// but falls back to aligning its LEFT edge to rect.left (hAlign='left')\n// when there is not enough room on the left side of the viewport.\n//\n// In the 'right' case the caller should apply translateX(-100%) to shift the\n// popup leftward so its right edge lands at x.\n// In the 'left' case x is the desired left edge directly.\n//\n// Usage: error triangle tooltip, any anchored-to-element popup.\n// ---------------------------------------------------------------------------\nexport const calcBelowPosition = (rect: DOMRect, maxWidth = 260, margin = MARGIN): PopupPosition => {\n if (rect.right - maxWidth >= margin) {\n return { x: rect.right, y: rect.bottom, hAlign: 'right' };\n }\n return { x: Math.max(rect.left, margin), y: rect.bottom, hAlign: 'left' };\n};\n\n// ---------------------------------------------------------------------------\n// clampLeft\n//\n// Given the desired left position of a popup and its rendered width,\n// returns an adjusted left value that keeps the popup within the viewport.\n//\n// Usage: EditorOptions dropdown, FunctionGuide floating panel.\n// ---------------------------------------------------------------------------\nexport const clampLeft = (left: number, width: number, margin = MARGIN): number => {\n const rightEdge = left + width;\n const overflow = rightEdge - (window.innerWidth - margin);\n return overflow > 0 ? left - overflow : left;\n};\n\n// ---------------------------------------------------------------------------\n// calcSidePosition\n//\n// Places a popup to the LEFT or RIGHT of an anchor element.\n// Prefers the right side; falls back to the left side if the right side\n// overflows the viewport.\n//\n// Resets the element to the preferred (right-side) position BEFORE measuring,\n// so that stale styles from a previous render don't corrupt the measurement.\n//\n// Applies the final styles directly to the element and also returns them.\n//\n// Usage: FunctionGuide guide1 (option tooltip panel).\n// ---------------------------------------------------------------------------\nexport type SideStyle = { left: string; right: string };\n\nexport const calcSideStyle = (el: HTMLElement, gap = MARGIN): SideStyle => {\n // 1. Reset to preferred position so getBoundingClientRect reflects the right side.\n el.style.left = `calc(100% + ${gap}px)`;\n el.style.right = 'auto';\n\n // 2. Measure after reset.\n const rect = el.getBoundingClientRect();\n if (rect.right > window.innerWidth - MARGIN) {\n const flipped: SideStyle = { left: 'auto', right: `calc(100% + ${gap}px)` };\n el.style.left = flipped.left;\n el.style.right = flipped.right;\n return flipped;\n }\n return { left: `calc(100% + ${gap}px)`, right: 'auto' };\n};\n\n// ---------------------------------------------------------------------------\n// clampPopup\n//\n// Adjusts a rendered popup element's position so it stays within the viewport.\n// Applies left/top corrections directly as inline styles to avoid re-renders.\n// Call this inside useLayoutEffect with no dependency array so it runs after\n// every render (content changes may change the popup dimensions).\n//\n// Usage: ContextMenu, FunctionGuide guide2, any popup that can change size.\n// ---------------------------------------------------------------------------\nexport const clampPopup = (el: HTMLElement): void => {\n const rect = el.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n if (rect.right > vw - MARGIN) {\n el.style.left = `${parseFloat(el.style.left || '0') - (rect.right - (vw - MARGIN))}px`;\n }\n if (rect.bottom > vh - MARGIN) {\n el.style.top = `${parseFloat(el.style.top || '0') - (rect.bottom - (vh - MARGIN))}px`;\n }\n};\n\n// ---------------------------------------------------------------------------\n// hAlignTransform\n//\n// Returns the CSS transform string for a popup based on its horizontal alignment.\n// 'right' → shift left by full width so the popup's right edge sits at x.\n// 'left' → no transform needed.\n// ---------------------------------------------------------------------------\nexport const hAlignTransform = (hAlign: HAlign): string => (hAlign === 'right' ? 'translateX(-100%)' : 'none');\n","// pnpm generate-style\nexport const LAST_MODIFIED = 1786834463;\nexport const CSS = `.gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 8%,transparent);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px var(--gs-accent,#2563eb);box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:var(--gs-accent,#2563eb);color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}:where(.gs-root1[data-mode=light],.gs-editor[data-mode=light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}.gs-root1{background-color:var(--gs-bg);color:var(--gs-fg)}.gs-root1 .gs-main{background-color:var(--gs-canvas)}.gs-root1 .gs-tabular{background-color:var(--gs-canvas)}.gs-root1 .gs-sheet-body-data{background-color:var(--gs-surface)}.gs-root1 .gs-formula-bar{background-color:var(--gs-header-bg)}.gs-root1 .gs-formula-bar-editor-inner{color:var(--gs-fg)}.gs-root1 .gs-cell{border:solid 1px var(--gs-border)}.gs-root1 .gs-adjuster{background-color:var(--gs-border)}.gs-root1 .gs-tabular-inner{background-color:var(--gs-border)}.gs-root1 .gs-large-editor textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-root1 .gs-th{background-color:var(--gs-header-bg);color:var(--gs-header-fg)}.gs-root1 .gs-th-top{border-left:solid 1px var(--gs-border)}.gs-root1 .gs-th-top .gs-th-inner{border-top:solid var(--gs-mx-bt,1px) var(--gs-border)}.gs-root1 .gs-th-left{border-top:solid 1px var(--gs-border)}.gs-root1 .gs-th-left .gs-th-inner{border-left:solid var(--gs-mx-bl,1px) var(--gs-border)}.gs-root1 .gs-search-bar{color:color-mix(in srgb,var(--gs-fg) 40%,transparent)}.gs-root1 .gs-search-bar textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-editor.gs-editing textarea{caret-color:var(--gs-fg)}.gs-editor.gs-editing .gs-editor-hl{background-color:var(--gs-editor-surface);color:var(--gs-fg)}.gs-editor .gs-editor-options{color:var(--gs-fg);background-color:var(--gs-editor-surface);border:solid 1px var(--gs-border)}:where(.gs-root1[data-mode=dark],.gs-editor[data-mode=dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}@media (prefers-color-scheme:dark){:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}}:where(.gs-root1[data-mode=inherit-light],.gs-editor[data-mode=inherit-light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}:where(.gs-root1[data-mode=inherit-dark],.gs-editor[data-mode=inherit-dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}.gs-root1[data-mode=inherit-dark] .gs-adjuster,.gs-root1[data-mode=inherit-dark] .gs-tabular-inner,.gs-root1[data-mode=inherit-light] .gs-adjuster,.gs-root1[data-mode=inherit-light] .gs-tabular-inner{background-color:transparent}.gs-root1[data-mode=inherit-light] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-mode=inherit-dark] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-gridlines=horizontal] .gs-cell{border-left-color:transparent;border-right-color:transparent}.gs-root1[data-gridlines=none] .gs-cell{border-color:transparent}.gs-root1[data-density=comfortable] .gs-cell-rendered{padding:0 10px}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell.gs-copying textarea:focus{outline:solid 1px var(--gs-accent,#2563eb)}.gs-cell.gs-selecting{z-index:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 7%,transparent)}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell.gs-pending .gs-cell-rendered{position:relative;overflow:hidden}.gs-cell.gs-pending .gs-cell-rendered::after{content:'';position:absolute;bottom:0;left:0;height:4px;width:40%;border-radius:1px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 65%,transparent);animation:gs-pending-slide 1.4s ease-in-out infinite}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:4px solid rgba(200,0,0,.9);border-right:4px solid rgba(200,0,0,.9);border-bottom:4px solid transparent;border-left:4px solid transparent;z-index:2;cursor:help}.gs-cell .gs-cell-label{font-size:10px;font-weight:500;font-style:normal;font-family:inherit;letter-spacing:.2px;line-height:1.4;position:absolute;top:0;right:0;background-color:var(--gs-accent,#2563eb);color:#fff;padding:1px 5px;border-bottom-left-radius:4px;display:none;opacity:.92}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 6px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:var(--gs-accent,#2563eb);position:absolute;width:7px;height:7px;bottom:0;right:0;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-formula-error-tooltip{position:fixed;background-color:rgba(35,8,8,.94);color:#fff;padding:6px 10px;border-radius:4px;border-left:3px solid rgba(220,50,50,.8);font-size:12px;line-height:1.5;max-width:260px;white-space:pre-wrap;word-break:break-word;box-shadow:0 3px 10px rgba(0,0,0,.4);z-index:100;pointer-events:none;letter-spacing:.3px}.gs-menu-modal{width:100%;height:100vh;z-index:12}.gs-label-input-label{font-size:13px;letter-spacing:1px}.gs-menu-divider{background-color:#aaa;padding:0;margin:5px 0;height:1px;list-style-type:none}.gs-menu-btn{position:absolute;background-color:rgba(128,128,128,.3);border:1px solid #ccc;border-radius:50%;cursor:pointer;font-size:12px;font-weight:700;line-height:1;color:#888;width:18px;height:18px;padding:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;z-index:2}.gs-context-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-context-menu:hover{opacity:1}.gs-context-menu .gs-menu-items{color:#555;margin:0;padding:0;min-width:250px}.gs-menu-item{padding:5px 10px;list-style-type:none;display:flex}.gs-menu-item.gs-enabled{cursor:pointer}.gs-menu-item.gs-enabled:hover{background-color:#eee}.gs-menu-item.gs-disabled{opacity:.5;cursor:not-allowed}.gs-menu-item .gs-menu-name{font-size:13px;letter-spacing:1px;flex:1}.gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-menu-shortcut:before{content:\"( \"}.gs-menu-shortcut:after{content:\" )\"}.gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-column-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-column-menu:hover{opacity:1}.gs-column-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-column-menu .gs-column-menu-sort{align-items:center}.gs-column-menu .gs-column-menu-sort .gs-sort-buttons{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-column-menu-sort .gs-sort-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-label{padding:5px 10px}.gs-column-menu .gs-label-input-row{display:flex;gap:4px;align-items:center}.gs-column-menu .gs-label-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:100px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-label-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-label-apply-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-label-apply-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-label-apply-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-filter{padding:5px 10px;list-style-type:none;font-size:13px}.gs-column-menu .gs-filter-header{display:flex;align-items:center;gap:8px}.gs-column-menu .gs-filter-header .gs-filter-add-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;letter-spacing:1px}.gs-column-menu .gs-filter-header .gs-filter-add-btn:hover{border-color:#555}.gs-column-menu .gs-filter-mode-toggle{display:flex;gap:6px;margin-left:auto}.gs-column-menu .gs-filter-mode-toggle label{display:flex;align-items:center;gap:3px;font-size:11px;font-weight:700;letter-spacing:.5px;color:#888;cursor:pointer;user-select:none}.gs-column-menu .gs-filter-mode-toggle label input[type=radio]{margin:0;cursor:pointer}.gs-column-menu .gs-filter-mode-toggle label.gs-active{color:var(--gs-accent,#2563eb)}.gs-column-menu .gs-filter-mode-toggle.gs-disabled{opacity:.4;pointer-events:none}.gs-column-menu .gs-filter-conditions{display:flex;flex-direction:column;gap:5px;margin-top:6px;max-height:200px;overflow-y:auto}.gs-column-menu .gs-filter-condition-row{display:flex;gap:4px;align-items:normal}.gs-column-menu .gs-filter-method-select{font-size:12px;padding:4px 4px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;background-color:#fff;box-shadow:none;min-width:40px;max-width:80px;cursor:pointer}.gs-column-menu .gs-filter-method-select:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-value-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:80px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-filter-value-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-remove-btn{font-size:12px;padding:0;border:none;border-radius:3px;background-color:transparent;cursor:pointer;color:#999;line-height:1;flex-shrink:0}.gs-column-menu .gs-filter-remove-btn:hover{color:#c33}.gs-column-menu .gs-filter-actions{display:flex;gap:4px;margin-top:10px;align-items:center}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#c33;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn:hover{border-color:#c33}.gs-column-menu .gs-filter-actions .gs-filter-actions-right{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#e08000;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn:hover{border-color:#e08000}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn{font-size:12px;padding:3px 6px;border:1px solid transparent;border-radius:3px;background-color:transparent;color:var(--gs-accent,#2563eb);cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:var(--gs-accent,#2563eb)}.gs-column-menu-waiting{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 30px;gap:12px;min-width:180px}.gs-column-menu-waiting .gs-waiting-message{font-size:13px;font-weight:700;color:#555;letter-spacing:.5px}.gs-column-menu-waiting .gs-waiting-spinner{width:24px;height:24px;border:3px solid #e0e0e0;border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}.gs-column-menu-waiting .gs-waiting-cancel-btn{font-size:12px;padding:4px 18px;border:1px solid #c33;border-radius:3px;background-color:transparent;color:#c33;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu-waiting .gs-waiting-cancel-btn:hover{background-color:#c33;color:#fff}.gs-column-menu-btn{right:4px;top:50%;transform:translateY(-50%)}.gs-column-menu-btn.gs-filtered{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-column-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-top:hover .gs-column-menu-btn{opacity:1}.gs-row-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-row-menu:hover{opacity:1}.gs-row-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-row-menu .gs-row-fixed-toggle{display:flex;align-items:center;gap:6px}.gs-row-menu .gs-row-fixed-check{font-size:12px;width:14px;text-align:center;color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent)}.gs-row-menu .gs-row-fixed-check.gs-row-fixed-active{color:var(--gs-accent,#2563eb)}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left:hover .gs-row-menu-btn{opacity:1}.gs-corner-menu-btn{bottom:2px;right:2px}.gs-corner-menu-btn:hover{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left.gs-th-top:hover .gs-corner-menu-btn{opacity:1}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;flex:1;min-width:0;display:flex;align-items:center}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px var(--gs-accent,#2563eb);margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:11;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:inherit;font-weight:500;position:absolute;top:0;right:0;margin-top:-17px;margin-right:-2px;padding:1px 5px;border-top-left-radius:4px;border-top-right-radius:4px;font-size:10px;background-color:var(--gs-accent,#2563eb);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:flex;align-items:stretch;box-sizing:border-box;border-style:solid;border-color:var(--gs-border,#e3e6ea);border-width:var(--gs-fb-bt,1px) var(--gs-fb-br,1px) var(--gs-fb-bb,1px) var(--gs-fb-bl,1px);padding:3px 6px;gap:6px}.gs-formula-bar .gs-selecting-address{display:flex;align-items:center;justify-content:center;min-width:38px;padding:0 4px;color:var(--gs-muted-fg,#6b7280);font-size:12px;font-variant-numeric:tabular-nums;text-align:center}.gs-formula-bar[data-spill=true]{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 6%,var(--gs-header-bg,#f4f5f7))}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:var(--gs-accent,#2563eb);font-style:italic}.gs-formula-bar[data-spill=true] .gs-selecting-address::after{content:\"\\\\2196\";margin-left:2px;font-style:normal;font-size:9px}.gs-formula-bar .gs-fx{display:flex;align-items:center;justify-content:center;align-self:center;width:26px;height:18px;flex-shrink:0;color:var(--gs-muted-fg,#6b7280);font-style:italic;font-family:inherit;font-weight:400;text-align:center;font-size:13px;letter-spacing:.3px;border-radius:4px;background-color:color-mix(in srgb,var(--gs-fg,#1f2328) 6%,transparent)}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;text-align:left;line-height:24px}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;text-align:left;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:var(--gs-fg,#1f2328);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{position:fixed;z-index:1000;padding:4px;background:var(--gs-bg,#fff);box-shadow:0 4px 12px rgba(0,0,0,.15);border:1px solid rgba(0,0,0,.1);border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;overflow:visible}.gs-editor-option{position:relative;cursor:pointer;list-style:none;padding:6px 12px;font-size:13px;border-radius:4px;color:#333;margin-bottom:2px}.gs-editor-option-content{display:flex;justify-content:space-between;width:100%;align-items:center}.gs-editor-option-tab{font-size:10px;color:#aaa;margin-left:8px;padding:2px 4px;border:1px solid #ddd;border-radius:3px;background:#f9f9f9}.gs-editor-option:last-child{margin-bottom:0}.gs-editor-option:hover{background-color:#f5f5f5}.gs-editor-option-selected{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);color:var(--gs-accent,#2563eb);font-weight:500}.gs-editor-option-selected:hover{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent)}.gs-fn-guide1{position:absolute;top:-4px;left:calc(100% + 8px);background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333}.gs-fn-guide1-tooltip{margin-bottom:8px;line-height:1.4;font-size:13px}.gs-fn-guide1-example{font-family:monospace;font-weight:600;font-size:13px;margin-bottom:8px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.gs-fn-guide1-desc{font-size:13px;color:#555;margin-bottom:12px;line-height:1.4}.gs-fn-guide1-desc p{margin:0 0 6px 0}.gs-fn-guide1-desc p:last-child{margin-bottom:0}.gs-fn-guide1-args{border-top:1px solid #eee;padding-top:10px}.gs-fn-guide1-arg{margin-bottom:6px;line-height:1.4;font-size:12px}.gs-fn-guide1-arg-name{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide1-arg-desc{color:#666}.gs-fn-guide-category{position:absolute;top:-11px;right:8px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:4px;background:#e8eaf6;color:#3949ab;border:1px solid #c5cae9;white-space:nowrap}.gs-fn-guide-category.gs-fn-guide-category-math{background:#e3f2fd;color:#1565c0;border-color:#bbdefb}.gs-fn-guide-category.gs-fn-guide-category-statistics{background:#e8f5e9;color:#2e7d32;border-color:#c8e6c9}.gs-fn-guide-category.gs-fn-guide-category-text{background:#fff8e1;color:#f57f17;border-color:#ffecb3}.gs-fn-guide-category.gs-fn-guide-category-time{background:#fce4ec;color:#880e4f;border-color:#f8bbd0}.gs-fn-guide-category.gs-fn-guide-category-lookup{background:#f3e5f5;color:#6a1b9a;border-color:#e1bee7}.gs-fn-guide-category.gs-fn-guide-category-logical{background:#e0f2f1;color:#00695c;border-color:#b2dfdb}.gs-fn-guide-category.gs-fn-guide-category-information{background:#e0f7fa;color:#006064;border-color:#b2ebf2}.gs-fn-guide-category.gs-fn-guide-category-finance{background:#fff3e0;color:#e65100;border-color:#ffe0b2}.gs-fn-guide-category.gs-fn-guide-category-engineering{background:#efebe9;color:#4e342e;border-color:#d7ccc8}.gs-fn-guide-category.gs-fn-guide-category-other{background:#f5f5f5;color:#616161;border-color:#e0e0e0}.gs-editor-portal{display:contents}.gs-editor-portal[data-mode=dark] .gs-editor-options,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-options,.gs-editor[data-mode=dark] .gs-editor-options,.gs-editor[data-mode=inherit-dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor-portal[data-mode=dark] .gs-editor-option,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option,.gs-editor[data-mode=dark] .gs-editor-option,.gs-editor[data-mode=inherit-dark] .gs-editor-option{color:#ccc}.gs-editor-portal[data-mode=dark] .gs-editor-option:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option:hover,.gs-editor[data-mode=dark] .gs-editor-option:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option:hover{background-color:#333}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected,.gs-editor[data-mode=dark] .gs-editor-option-selected,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor-portal[data-mode=dark] .gs-editor-option-tab,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-tab,.gs-editor[data-mode=dark] .gs-editor-option-tab,.gs-editor[data-mode=inherit-dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide1,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1,.gs-editor[data-mode=dark] .gs-fn-guide1,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-example,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-example,.gs-editor[data-mode=dark] .gs-fn-guide1-example,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-args,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-args,.gs-editor[data-mode=dark] .gs-fn-guide1-args,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-args{border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category,.gs-editor[data-mode=dark] .gs-fn-guide-category,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide2,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2,.gs-editor[data-mode=dark] .gs-fn-guide2,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-name,.gs-editor[data-mode=dark] .gs-fn-guide2-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-desc,.gs-editor[data-mode=dark] .gs-fn-guide2-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-desc{color:#aaa;border-top-color:#333}.gs-fn-guide2{position:fixed;left:0;background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:12px 16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;transition:opacity .1s ease-in-out}.gs-fn-guide2.gs-fn-guide2-hidden{opacity:0!important;pointer-events:none!important}.gs-fn-guide2-name{font-family:monospace;font-weight:700;font-size:13px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%;box-sizing:border-box;margin-bottom:8px}.gs-fn-guide2-args-inline{font-size:13px;font-family:monospace;line-height:1.5;margin-bottom:8px;color:#666}.gs-fn-guide2-args-inline span{transition:all .2s ease-in-out}.gs-fn-guide2 .gs-active-arg{font-weight:700;color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide2-desc{font-size:12px;color:#555;line-height:1.4;border-top:1px solid #eee;padding-top:8px;margin-top:4px}.gs-fn-guide2-desc p{margin:0}.gs-fn-guide2-desc-more{font-style:italic;color:#888;margin-top:4px!important;font-size:11px}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;display:flex;box-sizing:border-box;position:relative}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=horizontal] .gs-tabular{justify-content:safe center}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=vertical] .gs-tabular{align-items:safe center}.gs-tabular-inner{flex:0 0 auto;position:relative;overflow:hidden;overflow:clip;box-sizing:border-box;border-right:solid var(--gs-mx-br,1px) var(--gs-border,#e3e6ea);border-bottom:solid var(--gs-mx-bb,1px) var(--gs-border,#e3e6ea)}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-main[data-overflow-x=true] .gs-tabular-inner{border-right-width:0}.gs-main[data-overflow-y=true] .gs-tabular-inner{border-bottom-width:0}.gs-main::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:3;border:0 solid var(--gs-border,#e3e6ea)}.gs-main[data-overflow-x=true]::after{border-right-width:var(--gs-mx-br,1px)}.gs-main[data-overflow-y=true]::after{border-bottom-width:var(--gs-mx-bb,1px)}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:var(--gs-accent,#2563eb)}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px var(--gs-border,#e3e6ea)}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-th-left.gs-filter-fixed .gs-th-inner::before{content:'‹\\\\00a0'}.gs-th-left.gs-sort-fixed .gs-th-inner::after{content:'\\\\00a0›'}.gs-col-addr{position:absolute;top:2px;right:4px;font-size:9px;opacity:.5;line-height:1;letter-spacing:.3px;pointer-events:none}.gs-search-bar{width:100%;display:flex;align-items:center;padding:3px 0;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);border-bottom:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:flex;align-items:center;justify-content:center;width:30px;flex-shrink:0}.gs-search-bar .gs-search-input-wrapper{flex-grow:1;position:relative;display:flex;align-items:center;height:100%}.gs-search-bar .gs-search-input-ghost{position:absolute;left:2px;right:2px;top:0;bottom:0;pointer-events:none;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;white-space:pre-wrap;word-break:break-all;color:transparent;overflow:hidden}.gs-search-bar .gs-search-input-ghost .gs-search-ghost-hint{color:#aaa}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;flex-grow:1;width:100%;resize:none}.gs-search-progress{color:#999;font-size:13px;width:60px;flex-shrink:0;white-space:nowrap;text-align:center}.gs-search-close{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;flex-shrink:0}.gs-search-buttons{display:flex;align-items:center;white-space:nowrap;flex-shrink:0}.gs-search-button{display:inline-flex;cursor:pointer;margin:0 2px}.gs-search-button span{display:inline-block;font-size:11px;padding:3px 5px;background-color:rgba(128,128,128,.1);border:1px solid rgba(128,128,128,.3);border-radius:3px;transition:all .15s ease;line-height:1}.gs-search-button span:hover{background-color:rgba(128,128,128,.2)}.gs-search-button span.gs-search-button-on{color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 22%,transparent);border-color:var(--gs-accent,#2563eb)}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.gs-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--gs-surface,#fff) 70%,transparent);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:all}.gs-loading-spinner{width:32px;height:32px;border:3px solid color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent);border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}@keyframes gs-pending-slide{0%{left:-40%}100%{left:100%}}@keyframes gs-pending-pulse{0%{left:0;width:0}50%{left:0;width:100%}100%{left:100%;width:0}}@keyframes gs-flash{0%{opacity:0}20%{opacity:1}100%{opacity:0}}.gs-flash-overlay{position:absolute;inset:0;pointer-events:none;z-index:9999;background:color-mix(in srgb,var(--gs-accent,#2563eb) 15%,transparent);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}`;\n","import { CSS, LAST_MODIFIED } from './minified';\n\nexport const embedStyle = () => {\n if (typeof window === 'undefined') {\n return;\n }\n const exists = document.querySelector(`style.gs-styling[data-modified-at='${LAST_MODIFIED}']`);\n if (exists) {\n return;\n }\n const style = document.createElement('style');\n document.head.appendChild(style);\n style.setAttribute('class', 'gs-styling');\n style.setAttribute('data-modified-at', `${LAST_MODIFIED}`);\n style.innerText = CSS;\n};\n"],"names":["focus","el","isSafari","preventSafariBounce","preventBounce","e","scrollTop","scrollHeight","clientHeight","scrollLeft","scrollWidth","clientWidth","atTop","atBottom","atLeft","atRight","touchStartX","touchStartY","onTouchStart","preventTouchBounce","dx","dy","insertTextAtCursor","input","text","_a","insertRef","ref","dryRun","lexer","Lexer","tokenIndex","_","token","refSheetName","refAddresses","splitRef","tokenAddresses","tokenAbsolutes","a","a2p","toSheetPrefix","r","i","grantAddressAbsolute","_b","start","end","isRefInsertable","expandInput","resetInput","sheet","point","style","width","DEFAULT_WIDTH","height","DEFAULT_HEIGHT","isFocus","handleFormulaQuoteAutoClose","inputting","selectionStart","selectionEnd","selectedText","charAfter","beforeCursor","quoteCount","getCellRectPositions","y","x","colCell","rowCell","left","top","w","h","getScreenRect","bottom","right","virtualize","boundaryTop","boundaryLeft","boundaryBottom","boundaryRight","OVERSCAN_X","OVERSCAN_Y","ys","range","xs","before","after","smartScroll","targetPoint","behavior","screen","target","up","down","isTopOver","isLeftOver","isBottomOver","isRightOver","findVisibleElement","elements","getPosition","boundary","dataKey","index","binarySearch","mid","getAreaInTabular","tabularElement","topPosition","leftPosition","bottomPosition","rightPosition","rows","cols","rect","MARGIN","calcBelowPosition","maxWidth","margin","clampLeft","overflow","calcSideStyle","gap","flipped","clampPopup","vw","vh","hAlignTransform","hAlign","LAST_MODIFIED","CSS","embedStyle"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/lib/dom.ts","../src/lib/input.ts","../src/lib/virtualization.ts","../src/lib/popup.ts","../src/styles/minified.ts","../src/styles/embedder.ts"],"sourcesContent":["export const focus = (el: HTMLElement | null | undefined) => {\n el?.focus({ preventScroll: true });\n};\n\nconst isSafari = (): boolean =>\n typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Prevents Safari elastic bounce (rubber-band) at scroll boundaries.\n * No-op on non-Safari browsers. Returns a cleanup function to remove the listeners.\n */\nexport const preventSafariBounce = (el: HTMLDivElement): (() => void) => {\n if (!isSafari()) {\n return () => {};\n }\n const preventBounce = (e: WheelEvent) => {\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = el;\n const atTop = e.deltaY < 0 && scrollTop <= 0;\n const atBottom = e.deltaY > 0 && scrollTop + clientHeight >= scrollHeight;\n const atLeft = e.deltaX < 0 && scrollLeft <= 0;\n const atRight = e.deltaX > 0 && scrollLeft + clientWidth >= scrollWidth;\n if (atTop || atBottom || atLeft || atRight) {\n e.preventDefault();\n window.scrollBy({ top: e.deltaY, left: e.deltaX, behavior: 'auto' });\n }\n };\n\n let touchStartX = 0;\n let touchStartY = 0;\n\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length === 1) {\n touchStartX = e.touches[0].clientX;\n touchStartY = e.touches[0].clientY;\n }\n };\n\n const preventTouchBounce = (e: TouchEvent) => {\n if (e.touches.length !== 1) {\n return;\n }\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = el;\n const dx = e.touches[0].clientX - touchStartX;\n const dy = e.touches[0].clientY - touchStartY;\n const atTop = dy > 0 && scrollTop <= 0;\n const atBottom = dy < 0 && scrollTop + clientHeight >= scrollHeight;\n const atLeft = dx > 0 && scrollLeft <= 0;\n const atRight = dx < 0 && scrollLeft + clientWidth >= scrollWidth;\n if (atTop || atBottom || atLeft || atRight) {\n e.preventDefault();\n }\n };\n\n el.addEventListener('wheel', preventBounce, { passive: false });\n el.addEventListener('touchstart', onTouchStart, { passive: true });\n el.addEventListener('touchmove', preventTouchBounce, { passive: false });\n\n return () => {\n el.removeEventListener('wheel', preventBounce);\n el.removeEventListener('touchstart', onTouchStart);\n el.removeEventListener('touchmove', preventTouchBounce);\n };\n};\n","import {\n type PointType,\n type Sheet,\n Lexer,\n splitRef,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n a2p,\n grantAddressAbsolute,\n toSheetPrefix,\n} from '@gridsheet/engine';\nimport { focus } from './dom';\n\nexport const insertTextAtCursor = (input: HTMLTextAreaElement, text: string) => {\n focus(input);\n const deprecated = !document.execCommand?.('insertText', false, text);\n if (!deprecated) {\n return;\n }\n input.setRangeText(text, input.selectionStart, input.selectionEnd, 'end');\n return;\n};\n\ntype InsertRefProps = {\n input: HTMLTextAreaElement | null;\n ref: string;\n dryRun?: boolean;\n};\n\nexport const insertRef = ({ input, ref, dryRun = false }: InsertRefProps): boolean => {\n // dryRun is used to check if the ref can be inserted without actually inserting it\n if (!input?.value?.startsWith('=') || input.selectionStart === 0) {\n return false;\n }\n const lexer = new Lexer(input.value.substring(1));\n lexer.tokenize();\n const [tokenIndex, _] = lexer.getTokenIndexByCharPosition(input.selectionStart - 1);\n let token = lexer.tokens[tokenIndex];\n if (token?.type === 'SPACE') {\n token = lexer.tokens[tokenIndex - 1];\n }\n if (\n token == null ||\n token.type === 'OPEN' ||\n token.type === 'COMMA' ||\n token.type === 'INFIX_OPERATOR' ||\n token.type === 'PREFIX_OPERATOR'\n ) {\n if (!dryRun) {\n insertTextAtCursor(input, ref);\n }\n } else if (token.type === 'REF' || token.type === 'RANGE') {\n if (!dryRun) {\n // keep the absolute/relative state of the token\n const { sheetName: refSheetName, addresses: refAddresses } = splitRef(ref);\n const { addresses: tokenAddresses } = splitRef(token.entity as string);\n\n const tokenAbsolutes = tokenAddresses.map((a) => a2p(a));\n if (tokenAddresses.length === 2 && refAddresses.length === 1) {\n refAddresses.push(refAddresses[0]);\n }\n ref =\n toSheetPrefix(refSheetName) +\n refAddresses\n .map((r, i) => {\n return grantAddressAbsolute(r, !!tokenAbsolutes[i]?.absX, !!tokenAbsolutes[i]?.absY);\n })\n .join(':');\n\n const [start, end] = lexer.getTokenPositionRange(tokenIndex + 1, 1);\n input.setSelectionRange(start, end);\n insertTextAtCursor(input, ref);\n }\n } else {\n return false;\n }\n return true;\n};\n\nexport const isRefInsertable = (input: HTMLTextAreaElement | null): boolean => {\n return insertRef({ input, ref: '', dryRun: true });\n};\n\nexport const expandInput = (input: HTMLTextAreaElement | null) => {\n if (input == null) {\n return;\n }\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n};\n\nexport const resetInput = (input: HTMLTextAreaElement | null, sheet: Sheet, point: PointType) => {\n const style = input?.style;\n if (style == null) {\n return;\n }\n const width = sheet.getCell({ x: point.x, y: 0 }, { resolution: 'SYSTEM' })?.width ?? DEFAULT_WIDTH;\n const height = sheet.getCell(point, { resolution: 'SYSTEM' })?.height ?? DEFAULT_HEIGHT;\n style.width = `${width}px`;\n style.height = `${height}px`;\n};\n\nexport const isFocus = (input: HTMLTextAreaElement | null): boolean => {\n if (typeof window === 'undefined' || input == null) {\n return false;\n }\n return document.activeElement === input;\n};\n\n/**\n * Handles auto-close behavior for double quotes in formula editing.\n * - Typing `\"` inserts `\"\"` and places cursor between them.\n * - Typing `\"` when cursor is right before an auto-closed `\"` skips over it.\n * - Backspace between empty `\"\"` deletes both quotes.\n *\n * Returns true if the event was handled (caller should preventDefault), false otherwise.\n */\nexport const handleFormulaQuoteAutoClose = (\n e: { key: string; preventDefault(): void; currentTarget: HTMLTextAreaElement },\n inputting: string,\n): boolean => {\n const input = e.currentTarget;\n const isFormula = inputting.startsWith('=');\n if (!isFormula) {\n return false;\n }\n\n const { selectionStart, selectionEnd } = input;\n\n if (e.key === '\"') {\n // If text is selected, wrap it in quotes\n if (selectionStart !== selectionEnd) {\n e.preventDefault();\n const selectedText = inputting.slice(selectionStart, selectionEnd);\n insertTextAtCursor(input, `\"${selectedText}\"`);\n requestAnimationFrame(() => {\n input.setSelectionRange(selectionStart + 1, selectionEnd + 1);\n });\n return true;\n }\n\n const charAfter = inputting[selectionStart];\n\n // Count unescaped double quotes before cursor (after '=') to determine if we're inside a string\n const beforeCursor = inputting.slice(1, selectionStart); // skip '='\n let quoteCount = 0;\n for (let i = 0; i < beforeCursor.length; i++) {\n if (beforeCursor[i] === '\"') {\n // Skip escaped double quotes (\"\") inside strings\n if (i + 1 < beforeCursor.length && beforeCursor[i + 1] === '\"') {\n i++; // skip the next quote\n } else {\n quoteCount++;\n }\n }\n }\n\n // If odd number of quotes before cursor, we're inside a string.\n // If the next char is `\"`, it's the closing quote — skip over it.\n if (quoteCount % 2 === 1 && charAfter === '\"') {\n e.preventDefault();\n input.setSelectionRange(selectionStart + 1, selectionStart + 1);\n return true;\n }\n\n // Otherwise, insert `\"\"` and place cursor in between\n e.preventDefault();\n insertTextAtCursor(input, '\"\"');\n requestAnimationFrame(() => {\n input.setSelectionRange(selectionStart + 1, selectionStart + 1);\n });\n return true;\n }\n\n if (e.key === 'Backspace') {\n // If cursor is between `\"\"`, delete both\n if (\n selectionStart === selectionEnd &&\n selectionStart > 0 &&\n inputting[selectionStart - 1] === '\"' &&\n inputting[selectionStart] === '\"'\n ) {\n e.preventDefault();\n input.setRangeText('', selectionStart - 1, selectionStart + 1, 'end');\n input.dispatchEvent(new Event('input', { bubbles: true }));\n return true;\n }\n }\n\n return false;\n};\n","import {\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n OVERSCAN_X,\n OVERSCAN_Y,\n range,\n binarySearch,\n type BinarySearchPredicate,\n Sheet,\n type AreaType,\n type PointType,\n type Virtualization,\n} from '@gridsheet/engine';\n\n// Browsers lose integer-pixel precision (and get very slow) once content is laid out past\n// 2^24 = 16,777,216 px, so a million 24px rows (~24M px) render broken/slow at the bottom.\n// Cap the PHYSICAL scroll height just below 2^24 and map the DOM's physical scrollTop to the\n// sheet's VIRTUAL scroll space; the (few) visible rows are then placed at physical offsets\n// that stay under the limit (so still crisp). Identity when the sheet fits under the cap.\n// Kept as high as precision allows so the physical→virtual ratio — and thus how many rows a\n// given scroll gesture covers — stays as close to 1:1 as possible (~1.65× at 1M rows).\nexport const SCROLL_CAP = 16_000_000;\n\nexport const physicalScrollHeight = (sheet: Sheet): number => Math.min(sheet.totalHeight, SCROLL_CAP);\n\n/** DOM (capped) physical scrollTop -> the virtual scrollTop the coordinate logic uses. */\nexport const toVirtualScrollTop = (sheet: Sheet, physicalTop: number, viewH: number): number => {\n const totalV = sheet.totalHeight;\n if (totalV <= SCROLL_CAP) {\n return physicalTop;\n }\n const physRange = Math.max(1, SCROLL_CAP - viewH);\n const virtRange = Math.max(0, totalV - viewH);\n return (physicalTop / physRange) * virtRange;\n};\n\n/** Virtual scrollTop -> physical scrollTop (for scrollTo / smartScroll). */\nexport const toPhysicalScrollTop = (sheet: Sheet, virtualTop: number, viewH: number): number => {\n const totalV = sheet.totalHeight;\n if (totalV <= SCROLL_CAP) {\n return virtualTop;\n }\n const physRange = Math.max(1, SCROLL_CAP - viewH);\n const virtRange = Math.max(1, totalV - viewH);\n return (virtualTop / virtRange) * physRange;\n};\n\nexport const getCellRectPositions = (sheet: Sheet, { y, x }: PointType) => {\n const colCell = sheet.getCell({ y: 0, x }, { resolution: 'SYSTEM' });\n const rowCell = sheet.getCell({ y, x: 0 }, { resolution: 'SYSTEM' });\n const left = sheet.getSystem({ y: 0, x })?.offsetLeft ?? 0;\n const top = sheet.getOffsetTop(y);\n const w = colCell?.width || DEFAULT_WIDTH;\n const h = rowCell?.filtered ? 0 : rowCell?.height || DEFAULT_HEIGHT;\n return {\n top,\n left,\n bottom: top + h,\n right: left + w,\n width: w,\n height: h,\n };\n};\n\nexport const getScreenRect = (e: HTMLDivElement) => {\n const top = e.scrollTop,\n left = e.scrollLeft;\n const height = e.clientHeight,\n width = e.clientWidth;\n const bottom = top + height,\n right = left + width;\n return { top, left, bottom, right, height, width };\n};\n\nexport const virtualize = (sheet: Sheet, e: HTMLDivElement | null): Virtualization | null => {\n if (e == null) {\n return null;\n }\n let boundaryTop = 0,\n boundaryLeft = 0,\n boundaryBottom = sheet.numRows,\n boundaryRight = sheet.numCols;\n\n const { top: physTop, left, right, height: viewH } = getScreenRect(e);\n // Rows use the VIRTUAL scroll position (mapped from the DOM's capped physical scroll);\n // columns keep physical coordinates (few enough to never approach the cap).\n const top = toVirtualScrollTop(sheet, physTop, viewH);\n const bottom = top + viewH;\n let width = 0;\n for (let x = 1; x <= sheet.numCols; x++) {\n const w = sheet.getCell({ y: 0, x }, { resolution: 'SYSTEM' })?.width || DEFAULT_WIDTH;\n width += w;\n if (boundaryLeft === 0 && width > left) {\n boundaryLeft = Math.max(x - OVERSCAN_X, 1);\n }\n if (width > right) {\n boundaryRight = Math.min(x + OVERSCAN_X, sheet.numCols);\n break;\n }\n }\n // Rows: binary-search the boundaries instead of accumulating heights from row 1.\n // The old linear scan was O(last-visible-row-index), so scrolling near the bottom\n // of a tall sheet cost O(numRows) per scroll event (~38ms at 1M rows). getOffsetTop(y)\n // is the pixel offset of row y's top edge (with row-height overrides and filtered rows\n // already folded in), so the running height through row y — matching the old accumulator,\n // header excluded — is getOffsetTop(y + 1) - headerHeight. That is monotonic in y, so we\n // binary-search it: O((overrides + filtered) * log numRows) regardless of scroll depth.\n const headerH = sheet.headerHeight;\n const numRows = sheet.numRows;\n const cumHeightThrough = (y: number) => sheet.getOffsetTop(y + 1) - headerH;\n // First row whose bottom edge passes the viewport top / bottom (binarySearch returns\n // numRows + 1 when none does, i.e. scrolled past all content / content shorter than view).\n const topIdx = binarySearch(1, numRows, (y) => cumHeightThrough(y) > top, true);\n boundaryTop = topIdx > numRows ? 0 : Math.max(topIdx - OVERSCAN_Y, 1);\n // Remap only: the visible block is placed at physical offset adjTop = physTop - top +\n // before.height (see below). Near the top of a tall (capped) sheet there isn't enough\n // physical room above the scroll position for the full top overscan, so adjTop would go\n // negative and get clamped — shifting the rendered cells down out from under the selection\n // overlay (which draws at the unclamped position). Trim the top overscan instead so\n // before.height (= getOffsetTop(boundaryTop) - headerH) >= top - physTop, keeping adjTop >= 0.\n if (boundaryTop > 0 && sheet.totalHeight > SCROLL_CAP) {\n const gap = top - physTop; // virtual scroll is >= physical scroll when remapped\n if (gap > 0 && sheet.getOffsetTop(boundaryTop) - headerH < gap) {\n const minTop = binarySearch(1, numRows, (y) => sheet.getOffsetTop(y) - headerH >= gap, true);\n boundaryTop = Math.min(Math.max(boundaryTop, minTop), topIdx);\n }\n }\n const bottomIdx = binarySearch(1, numRows, (y) => cumHeightThrough(y) > bottom, true);\n boundaryBottom = bottomIdx > numRows ? numRows : Math.min(bottomIdx + OVERSCAN_Y, numRows);\n const ys = boundaryTop === 0 ? [] : range(boundaryTop, boundaryBottom).filter((y) => !sheet.isRowFiltered(y));\n const xs = range(boundaryLeft, boundaryRight);\n const before = sheet.getRectSize({\n top: 1,\n left: 1,\n bottom: boundaryTop,\n right: boundaryLeft,\n });\n const after = sheet.getRectSize({\n top: boundaryBottom,\n left: boundaryRight,\n bottom: sheet.numRows,\n right: sheet.numCols,\n });\n // Vertical spacers: when remapping, place the visible block at a PHYSICAL offset near\n // the current physical scroll (so it renders well under 2^24 px) rather than at its\n // virtual offset (which can reach ~24M). before.height is the virtual height above the\n // first rendered row; the top spacer is that, shifted from virtual into physical space.\n let adjTop = before.height;\n let adjBottom = after.height;\n if (sheet.totalHeight > SCROLL_CAP) {\n adjTop = Math.max(0, physTop - top + before.height);\n const visibleHeight = sheet.totalHeight - sheet.headerHeight - before.height - after.height;\n adjBottom = Math.max(0, SCROLL_CAP - sheet.headerHeight - adjTop - visibleHeight);\n }\n return {\n ys,\n xs,\n adjuster: {\n top: adjTop,\n left: before.width,\n bottom: adjBottom,\n right: after.width,\n },\n };\n};\n\n// Inclusive [first, last] row indices whose vertical span intersects the viewport\n// (scrollTop..scrollTop+viewH). Lets overlay/header drawing stay O(visible) instead\n// of O(numRows) — the same binary-search trick virtualize() uses. `first > last`\n// signals an empty range (e.g. a zero-row sheet).\nexport const getVisibleRowRange = (sheet: Sheet, scrollTop: number, viewH: number): [number, number] => {\n const numRows = sheet.numRows;\n if (numRows < 1) {\n return [1, 0];\n }\n const headerH = sheet.headerHeight;\n // getOffsetTop(y+1) - headerH == cumulative data height through row y (filtered rows = 0).\n const cum = (y: number) => sheet.getOffsetTop(y + 1) - headerH;\n const first = binarySearch(1, numRows, (y) => cum(y) > scrollTop, true);\n const last = binarySearch(1, numRows, (y) => cum(y) > scrollTop + viewH, true);\n // ±1 overscan so a partially-clipped edge row is never skipped.\n return [Math.max(1, first - 1), Math.min(last + 1, numRows)];\n};\n\n// Column analogue of getVisibleRowRange, using the precomputed header offsetLeft.\nexport const getVisibleColRange = (sheet: Sheet, scrollLeft: number, viewW: number): [number, number] => {\n const numCols = sheet.numCols;\n if (numCols < 1) {\n return [1, 0];\n }\n const headerW = sheet.headerWidth;\n const cum = (x: number) => (sheet.getSystem({ y: 0, x: x + 1 })?.offsetLeft ?? sheet.totalWidth) - headerW;\n const first = binarySearch(1, numCols, (x) => cum(x) > scrollLeft, true);\n const last = binarySearch(1, numCols, (x) => cum(x) > scrollLeft + viewW, true);\n // ±1 overscan so a partially-clipped edge column is never skipped.\n return [Math.max(1, first - 1), Math.min(last + 1, numCols)];\n};\n\nexport const smartScroll = (\n sheet: Sheet,\n e: HTMLDivElement | null,\n targetPoint: PointType,\n behavior: ScrollBehavior = 'auto',\n) => {\n if (e == null) {\n return;\n }\n const screen = getScreenRect(e);\n const viewH = screen.height;\n // Vertical is done in virtual space (target.top/bottom are virtual), then mapped back to\n // the DOM's physical scroll; horizontal stays physical (columns aren't remapped).\n const virtTop = toVirtualScrollTop(sheet, screen.top, viewH);\n const target = getCellRectPositions(sheet, targetPoint);\n\n const upV = target.top - sheet.headerHeight;\n const downV = target.bottom - viewH + 1;\n const leftP = target.left - sheet.headerWidth;\n const rightP = target.right - screen.width + 1;\n\n const isTopOver = upV < virtTop;\n const isBottomOver = target.bottom > virtTop + viewH;\n const isLeftOver = leftP < screen.left;\n const isRightOver = target.right > screen.right;\n\n const toPhys = (vTop: number) => toPhysicalScrollTop(sheet, Math.max(0, vTop), viewH);\n let topDest = screen.top;\n if (isTopOver) {\n topDest = toPhys(upV);\n } else if (isBottomOver) {\n topDest = toPhys(downV);\n }\n let leftDest = screen.left;\n if (isLeftOver) {\n leftDest = leftP;\n } else if (isRightOver) {\n leftDest = rightP;\n }\n if (topDest !== screen.top || leftDest !== screen.left) {\n e.scrollTo({ left: leftDest, top: topDest, behavior });\n }\n};\n\ntype PositionGetter = (rect: DOMRect) => number;\n\nconst findVisibleElement = (\n elements: HTMLTableHeaderCellElement[],\n getPosition: PositionGetter,\n boundary: number,\n dataKey: string,\n): number => {\n const index = binarySearch(\n 0,\n elements.length - 1,\n (mid) => getPosition(elements[mid].getBoundingClientRect()) < boundary,\n false,\n );\n return parseInt(elements[index]?.dataset[dataKey] ?? '1');\n};\n\nexport const getAreaInTabular = (tabularElement: HTMLDivElement): AreaType => {\n const {\n top: topPosition,\n left: leftPosition,\n bottom: bottomPosition,\n right: rightPosition,\n } = tabularElement.getBoundingClientRect();\n\n const rows = Array.from(tabularElement.querySelectorAll('.gs-th-left')) as HTMLTableHeaderCellElement[];\n const cols = Array.from(tabularElement.querySelectorAll('.gs-th-top')) as HTMLTableHeaderCellElement[];\n\n const top = findVisibleElement(rows, (rect) => rect.top, topPosition, 'y');\n const bottom = findVisibleElement(rows, (rect) => rect.bottom, bottomPosition + 1, 'y');\n const left = findVisibleElement(cols, (rect) => rect.left, leftPosition, 'x');\n const right = findVisibleElement(cols, (rect) => rect.right, rightPosition + 1, 'x');\n\n return { top, left, bottom, right };\n};\n","/**\n * lib/popup.ts\n *\n * Utility functions for computing the position of floating UI elements\n * (tooltips, dropdowns, autocomplete lists, function guides, etc.)\n * so they don't overflow the viewport.\n */\n\nconst MARGIN = 8; // px gap from the viewport edge\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type HAlign = 'left' | 'right';\nexport type VAlign = 'top' | 'bottom';\n\nexport type PopupPosition = {\n x: number;\n y: number;\n hAlign: HAlign;\n};\n\n// ---------------------------------------------------------------------------\n// calcBelowPosition\n//\n// Places a popup BELOW an anchor rect.\n// Prefers aligning the popup's RIGHT edge to rect.right (hAlign='right'),\n// but falls back to aligning its LEFT edge to rect.left (hAlign='left')\n// when there is not enough room on the left side of the viewport.\n//\n// In the 'right' case the caller should apply translateX(-100%) to shift the\n// popup leftward so its right edge lands at x.\n// In the 'left' case x is the desired left edge directly.\n//\n// Usage: error triangle tooltip, any anchored-to-element popup.\n// ---------------------------------------------------------------------------\nexport const calcBelowPosition = (rect: DOMRect, maxWidth = 260, margin = MARGIN): PopupPosition => {\n if (rect.right - maxWidth >= margin) {\n return { x: rect.right, y: rect.bottom, hAlign: 'right' };\n }\n return { x: Math.max(rect.left, margin), y: rect.bottom, hAlign: 'left' };\n};\n\n// ---------------------------------------------------------------------------\n// clampLeft\n//\n// Given the desired left position of a popup and its rendered width,\n// returns an adjusted left value that keeps the popup within the viewport.\n//\n// Usage: EditorOptions dropdown, FunctionGuide floating panel.\n// ---------------------------------------------------------------------------\nexport const clampLeft = (left: number, width: number, margin = MARGIN): number => {\n const rightEdge = left + width;\n const overflow = rightEdge - (window.innerWidth - margin);\n return overflow > 0 ? left - overflow : left;\n};\n\n// ---------------------------------------------------------------------------\n// calcSidePosition\n//\n// Places a popup to the LEFT or RIGHT of an anchor element.\n// Prefers the right side; falls back to the left side if the right side\n// overflows the viewport.\n//\n// Resets the element to the preferred (right-side) position BEFORE measuring,\n// so that stale styles from a previous render don't corrupt the measurement.\n//\n// Applies the final styles directly to the element and also returns them.\n//\n// Usage: FunctionGuide guide1 (option tooltip panel).\n// ---------------------------------------------------------------------------\nexport type SideStyle = { left: string; right: string };\n\nexport const calcSideStyle = (el: HTMLElement, gap = MARGIN): SideStyle => {\n // 1. Reset to preferred position so getBoundingClientRect reflects the right side.\n el.style.left = `calc(100% + ${gap}px)`;\n el.style.right = 'auto';\n\n // 2. Measure after reset.\n const rect = el.getBoundingClientRect();\n if (rect.right > window.innerWidth - MARGIN) {\n const flipped: SideStyle = { left: 'auto', right: `calc(100% + ${gap}px)` };\n el.style.left = flipped.left;\n el.style.right = flipped.right;\n return flipped;\n }\n return { left: `calc(100% + ${gap}px)`, right: 'auto' };\n};\n\n// ---------------------------------------------------------------------------\n// clampPopup\n//\n// Adjusts a rendered popup element's position so it stays within the viewport.\n// Applies left/top corrections directly as inline styles to avoid re-renders.\n// Call this inside useLayoutEffect with no dependency array so it runs after\n// every render (content changes may change the popup dimensions).\n//\n// Usage: ContextMenu, FunctionGuide guide2, any popup that can change size.\n// ---------------------------------------------------------------------------\nexport const clampPopup = (el: HTMLElement): void => {\n const rect = el.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n if (rect.right > vw - MARGIN) {\n el.style.left = `${parseFloat(el.style.left || '0') - (rect.right - (vw - MARGIN))}px`;\n }\n if (rect.bottom > vh - MARGIN) {\n el.style.top = `${parseFloat(el.style.top || '0') - (rect.bottom - (vh - MARGIN))}px`;\n }\n};\n\n// ---------------------------------------------------------------------------\n// hAlignTransform\n//\n// Returns the CSS transform string for a popup based on its horizontal alignment.\n// 'right' → shift left by full width so the popup's right edge sits at x.\n// 'left' → no transform needed.\n// ---------------------------------------------------------------------------\nexport const hAlignTransform = (hAlign: HAlign): string => (hAlign === 'right' ? 'translateX(-100%)' : 'none');\n","// pnpm generate-style\nexport const LAST_MODIFIED = 1787241466;\nexport const CSS = `.gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 8%,transparent);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px var(--gs-accent,#2563eb);box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:var(--gs-accent,#2563eb);color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}:where(.gs-root1[data-mode=light],.gs-editor[data-mode=light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}.gs-root1{background-color:var(--gs-bg);color:var(--gs-fg)}.gs-root1 .gs-main{background-color:var(--gs-canvas)}.gs-root1 .gs-tabular{background-color:var(--gs-canvas)}.gs-root1 .gs-sheet-body-data{background-color:var(--gs-surface)}.gs-root1 .gs-formula-bar{background-color:var(--gs-header-bg)}.gs-root1 .gs-formula-bar-editor-inner{color:var(--gs-fg)}.gs-root1 .gs-cell{border:solid 1px var(--gs-border)}.gs-root1 .gs-adjuster{background-color:var(--gs-border)}.gs-root1 .gs-tabular-inner{background-color:var(--gs-border)}.gs-root1 .gs-large-editor textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-root1 .gs-th{background-color:var(--gs-header-bg);color:var(--gs-header-fg)}.gs-root1 .gs-th-top{border-left:solid 1px var(--gs-border)}.gs-root1 .gs-th-top .gs-th-inner{border-top:solid var(--gs-mx-bt,1px) var(--gs-border)}.gs-root1 .gs-th-left{border-top:solid 1px var(--gs-border)}.gs-root1 .gs-th-left .gs-th-inner{border-left:solid var(--gs-mx-bl,1px) var(--gs-border)}.gs-root1 .gs-search-bar{color:color-mix(in srgb,var(--gs-fg) 40%,transparent)}.gs-root1 .gs-search-bar textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-editor.gs-editing textarea{caret-color:var(--gs-fg)}.gs-editor.gs-editing .gs-editor-hl{background-color:var(--gs-editor-surface);color:var(--gs-fg)}.gs-editor .gs-editor-options{color:var(--gs-fg);background-color:var(--gs-editor-surface);border:solid 1px var(--gs-border)}:where(.gs-root1[data-mode=dark],.gs-editor[data-mode=dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}@media (prefers-color-scheme:dark){:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}}:where(.gs-root1[data-mode=inherit-light],.gs-editor[data-mode=inherit-light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}:where(.gs-root1[data-mode=inherit-dark],.gs-editor[data-mode=inherit-dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}.gs-root1[data-mode=inherit-dark] .gs-adjuster,.gs-root1[data-mode=inherit-dark] .gs-tabular-inner,.gs-root1[data-mode=inherit-light] .gs-adjuster,.gs-root1[data-mode=inherit-light] .gs-tabular-inner{background-color:transparent}.gs-root1[data-mode=inherit-light] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-mode=inherit-dark] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-gridlines=horizontal] .gs-cell{border-left-color:transparent;border-right-color:transparent}.gs-root1[data-gridlines=none] .gs-cell{border-color:transparent}.gs-root1[data-density=comfortable] .gs-cell-rendered{padding:0 10px}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell.gs-copying textarea:focus{outline:solid 1px var(--gs-accent,#2563eb)}.gs-cell.gs-selecting{z-index:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 7%,transparent)}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell.gs-pending .gs-cell-rendered{position:relative;overflow:hidden}.gs-cell.gs-pending .gs-cell-rendered::after{content:'';position:absolute;bottom:0;left:0;height:4px;width:40%;border-radius:1px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 65%,transparent);animation:gs-pending-slide 1.4s ease-in-out infinite}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:4px solid rgba(200,0,0,.9);border-right:4px solid rgba(200,0,0,.9);border-bottom:4px solid transparent;border-left:4px solid transparent;z-index:2;cursor:help}.gs-cell .gs-cell-label{font-size:10px;font-weight:500;font-style:normal;font-family:inherit;letter-spacing:.2px;line-height:1.4;position:absolute;top:0;right:0;background-color:var(--gs-accent,#2563eb);color:#fff;padding:1px 5px;border-bottom-left-radius:4px;display:none;opacity:.92}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 6px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:var(--gs-accent,#2563eb);position:absolute;width:7px;height:7px;bottom:0;right:0;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-formula-error-tooltip{position:fixed;background-color:rgba(35,8,8,.94);color:#fff;padding:6px 10px;border-radius:4px;border-left:3px solid rgba(220,50,50,.8);font-size:12px;line-height:1.5;max-width:260px;white-space:pre-wrap;word-break:break-word;box-shadow:0 3px 10px rgba(0,0,0,.4);z-index:100;pointer-events:none;letter-spacing:.3px}.gs-menu-modal{width:100%;height:100vh;z-index:12}.gs-label-input-label{font-size:13px;letter-spacing:1px}.gs-menu-divider{background-color:#aaa;padding:0;margin:5px 0;height:1px;list-style-type:none}.gs-menu-btn{position:absolute;background-color:rgba(128,128,128,.3);border:1px solid #ccc;border-radius:50%;cursor:pointer;font-size:12px;font-weight:700;line-height:1;color:#888;width:18px;height:18px;padding:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;z-index:2}.gs-context-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-context-menu:hover{opacity:1}.gs-context-menu .gs-menu-items{color:#555;margin:0;padding:0;min-width:250px}.gs-menu-item{padding:5px 10px;list-style-type:none;display:flex}.gs-menu-item.gs-enabled{cursor:pointer}.gs-menu-item.gs-enabled:hover{background-color:#eee}.gs-menu-item.gs-disabled{opacity:.5;cursor:not-allowed}.gs-menu-item .gs-menu-name{font-size:13px;letter-spacing:1px;flex:1}.gs-submenu-parent{position:relative;align-items:center}.gs-submenu-parent .gs-submenu-arrow{margin-left:8px;font-size:11px;opacity:.6}.gs-submenu-flyout{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease;min-width:200px;margin:0;color:#555;opacity:1;list-style-type:none}.gs-submenu-flyout:hover{opacity:1}.gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-menu-shortcut:before{content:\"( \"}.gs-menu-shortcut:after{content:\" )\"}.gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-column-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-column-menu:hover{opacity:1}.gs-column-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-column-menu .gs-column-menu-sort{align-items:center}.gs-column-menu .gs-column-menu-sort .gs-sort-buttons{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-column-menu-sort .gs-sort-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-label{padding:5px 10px}.gs-column-menu .gs-label-input-row{display:flex;gap:4px;align-items:center}.gs-column-menu .gs-label-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:100px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-label-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-label-apply-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-label-apply-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-label-apply-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-filter{padding:5px 10px;list-style-type:none;font-size:13px}.gs-column-menu .gs-filter-header{display:flex;align-items:center;gap:8px}.gs-column-menu .gs-filter-header .gs-filter-add-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;letter-spacing:1px}.gs-column-menu .gs-filter-header .gs-filter-add-btn:hover{border-color:#555}.gs-column-menu .gs-filter-mode-toggle{display:flex;gap:6px;margin-left:auto}.gs-column-menu .gs-filter-mode-toggle label{display:flex;align-items:center;gap:3px;font-size:11px;font-weight:700;letter-spacing:.5px;color:#888;cursor:pointer;user-select:none}.gs-column-menu .gs-filter-mode-toggle label input[type=radio]{margin:0;cursor:pointer}.gs-column-menu .gs-filter-mode-toggle label.gs-active{color:var(--gs-accent,#2563eb)}.gs-column-menu .gs-filter-mode-toggle.gs-disabled{opacity:.4;pointer-events:none}.gs-column-menu .gs-filter-conditions{display:flex;flex-direction:column;gap:5px;margin-top:6px;max-height:200px;overflow-y:auto}.gs-column-menu .gs-filter-condition-row{display:flex;gap:4px;align-items:normal}.gs-column-menu .gs-filter-method-select{font-size:12px;padding:4px 4px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;background-color:#fff;box-shadow:none;min-width:40px;max-width:80px;cursor:pointer}.gs-column-menu .gs-filter-method-select:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-value-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:80px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-filter-value-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-remove-btn{font-size:12px;padding:0;border:none;border-radius:3px;background-color:transparent;cursor:pointer;color:#999;line-height:1;flex-shrink:0}.gs-column-menu .gs-filter-remove-btn:hover{color:#c33}.gs-column-menu .gs-filter-actions{display:flex;gap:4px;margin-top:10px;align-items:center}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#c33;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn:hover{border-color:#c33}.gs-column-menu .gs-filter-actions .gs-filter-actions-right{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#e08000;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn:hover{border-color:#e08000}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn{font-size:12px;padding:3px 6px;border:1px solid transparent;border-radius:3px;background-color:transparent;color:var(--gs-accent,#2563eb);cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:var(--gs-accent,#2563eb)}.gs-column-menu-waiting{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 30px;gap:12px;min-width:180px}.gs-column-menu-waiting .gs-waiting-message{font-size:13px;font-weight:700;color:#555;letter-spacing:.5px}.gs-column-menu-waiting .gs-waiting-spinner{width:24px;height:24px;border:3px solid #e0e0e0;border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}.gs-column-menu-waiting .gs-waiting-cancel-btn{font-size:12px;padding:4px 18px;border:1px solid #c33;border-radius:3px;background-color:transparent;color:#c33;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu-waiting .gs-waiting-cancel-btn:hover{background-color:#c33;color:#fff}.gs-column-menu-btn{right:4px;top:50%;transform:translateY(-50%)}.gs-column-menu-btn.gs-filtered{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-column-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-top:hover .gs-column-menu-btn{opacity:1}.gs-row-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-row-menu:hover{opacity:1}.gs-row-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-row-fixed-toggle{display:flex;align-items:center;gap:6px}.gs-row-fixed-check{font-size:12px;width:14px;text-align:center;color:transparent}.gs-row-fixed-check.gs-row-fixed-active{color:var(--gs-accent,#2563eb)}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left:hover .gs-row-menu-btn{opacity:1}.gs-corner-menu-btn{bottom:2px;right:2px}.gs-corner-menu-btn:hover{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left.gs-th-top:hover .gs-corner-menu-btn{opacity:1}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;flex:1;min-width:0;display:flex;align-items:center}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px var(--gs-accent,#2563eb);margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:11;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:inherit;font-weight:500;position:absolute;top:0;right:0;margin-top:-17px;margin-right:-2px;padding:1px 5px;border-top-left-radius:4px;border-top-right-radius:4px;font-size:10px;background-color:var(--gs-accent,#2563eb);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:flex;align-items:stretch;box-sizing:border-box;border-style:solid;border-color:var(--gs-border,#e3e6ea);border-width:var(--gs-fb-bt,1px) var(--gs-fb-br,1px) var(--gs-fb-bb,1px) var(--gs-fb-bl,1px);padding:3px 6px;gap:6px}.gs-formula-bar .gs-selecting-address{display:flex;align-items:center;justify-content:center;min-width:38px;padding:0 4px;color:var(--gs-muted-fg,#6b7280);font-size:12px;font-variant-numeric:tabular-nums;text-align:center}.gs-formula-bar[data-spill=true]{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 6%,var(--gs-header-bg,#f4f5f7))}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:var(--gs-accent,#2563eb);font-style:italic}.gs-formula-bar[data-spill=true] .gs-selecting-address::after{content:\"\\\\2196\";margin-left:2px;font-style:normal;font-size:9px}.gs-formula-bar .gs-fx{display:flex;align-items:center;justify-content:center;align-self:center;width:26px;height:18px;flex-shrink:0;color:var(--gs-muted-fg,#6b7280);font-style:italic;font-family:inherit;font-weight:400;text-align:center;font-size:13px;letter-spacing:.3px;border-radius:4px;background-color:color-mix(in srgb,var(--gs-fg,#1f2328) 6%,transparent)}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;text-align:left;line-height:24px}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;text-align:left;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:var(--gs-fg,#1f2328);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{position:fixed;z-index:1000;padding:4px;background:var(--gs-bg,#fff);box-shadow:0 4px 12px rgba(0,0,0,.15);border:1px solid rgba(0,0,0,.1);border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;overflow:visible}.gs-editor-option{position:relative;cursor:pointer;list-style:none;padding:6px 12px;font-size:13px;border-radius:4px;color:#333;margin-bottom:2px}.gs-editor-option-content{display:flex;justify-content:space-between;width:100%;align-items:center}.gs-editor-option-tab{font-size:10px;color:#aaa;margin-left:8px;padding:2px 4px;border:1px solid #ddd;border-radius:3px;background:#f9f9f9}.gs-editor-option:last-child{margin-bottom:0}.gs-editor-option:hover{background-color:#f5f5f5}.gs-editor-option-selected{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);color:var(--gs-accent,#2563eb);font-weight:500}.gs-editor-option-selected:hover{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent)}.gs-fn-guide1{position:absolute;top:-4px;left:calc(100% + 8px);background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333}.gs-fn-guide1-tooltip{margin-bottom:8px;line-height:1.4;font-size:13px}.gs-fn-guide1-example{font-family:monospace;font-weight:600;font-size:13px;margin-bottom:8px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.gs-fn-guide1-desc{font-size:13px;color:#555;margin-bottom:12px;line-height:1.4}.gs-fn-guide1-desc p{margin:0 0 6px 0}.gs-fn-guide1-desc p:last-child{margin-bottom:0}.gs-fn-guide1-args{border-top:1px solid #eee;padding-top:10px}.gs-fn-guide1-arg{margin-bottom:6px;line-height:1.4;font-size:12px}.gs-fn-guide1-arg-name{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide1-arg-desc{color:#666}.gs-fn-guide-category{position:absolute;top:-11px;right:8px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:4px;background:#e8eaf6;color:#3949ab;border:1px solid #c5cae9;white-space:nowrap}.gs-fn-guide-category.gs-fn-guide-category-math{background:#e3f2fd;color:#1565c0;border-color:#bbdefb}.gs-fn-guide-category.gs-fn-guide-category-statistics{background:#e8f5e9;color:#2e7d32;border-color:#c8e6c9}.gs-fn-guide-category.gs-fn-guide-category-text{background:#fff8e1;color:#f57f17;border-color:#ffecb3}.gs-fn-guide-category.gs-fn-guide-category-time{background:#fce4ec;color:#880e4f;border-color:#f8bbd0}.gs-fn-guide-category.gs-fn-guide-category-lookup{background:#f3e5f5;color:#6a1b9a;border-color:#e1bee7}.gs-fn-guide-category.gs-fn-guide-category-logical{background:#e0f2f1;color:#00695c;border-color:#b2dfdb}.gs-fn-guide-category.gs-fn-guide-category-information{background:#e0f7fa;color:#006064;border-color:#b2ebf2}.gs-fn-guide-category.gs-fn-guide-category-finance{background:#fff3e0;color:#e65100;border-color:#ffe0b2}.gs-fn-guide-category.gs-fn-guide-category-engineering{background:#efebe9;color:#4e342e;border-color:#d7ccc8}.gs-fn-guide-category.gs-fn-guide-category-ai{background:#e8eaf6;color:#3949ab;border-color:#c5cae9}.gs-fn-guide-category.gs-fn-guide-category-other{background:#f5f5f5;color:#616161;border-color:#e0e0e0}.gs-editor-portal{display:contents}.gs-editor-portal[data-mode=dark] .gs-editor-options,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-options,.gs-editor[data-mode=dark] .gs-editor-options,.gs-editor[data-mode=inherit-dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor-portal[data-mode=dark] .gs-editor-option,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option,.gs-editor[data-mode=dark] .gs-editor-option,.gs-editor[data-mode=inherit-dark] .gs-editor-option{color:#ccc}.gs-editor-portal[data-mode=dark] .gs-editor-option:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option:hover,.gs-editor[data-mode=dark] .gs-editor-option:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option:hover{background-color:#333}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected,.gs-editor[data-mode=dark] .gs-editor-option-selected,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor-portal[data-mode=dark] .gs-editor-option-tab,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-tab,.gs-editor[data-mode=dark] .gs-editor-option-tab,.gs-editor[data-mode=inherit-dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide1,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1,.gs-editor[data-mode=dark] .gs-fn-guide1,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-example,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-example,.gs-editor[data-mode=dark] .gs-fn-guide1-example,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-args,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-args,.gs-editor[data-mode=dark] .gs-fn-guide1-args,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-args{border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category,.gs-editor[data-mode=dark] .gs-fn-guide-category,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-ai,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-ai,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-ai,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-ai{background:#10142e;color:#7986cb;border-color:#232a52}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide2,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2,.gs-editor[data-mode=dark] .gs-fn-guide2,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-name,.gs-editor[data-mode=dark] .gs-fn-guide2-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-desc,.gs-editor[data-mode=dark] .gs-fn-guide2-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-desc{color:#aaa;border-top-color:#333}.gs-fn-guide2{position:fixed;left:0;background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:12px 16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;transition:opacity .1s ease-in-out}.gs-fn-guide2.gs-fn-guide2-hidden{opacity:0!important;pointer-events:none!important}.gs-fn-guide2-name{font-family:monospace;font-weight:700;font-size:13px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%;box-sizing:border-box;margin-bottom:8px}.gs-fn-guide2-args-inline{font-size:13px;font-family:monospace;line-height:1.5;margin-bottom:8px;color:#666}.gs-fn-guide2-args-inline span{transition:all .2s ease-in-out}.gs-fn-guide2 .gs-active-arg{font-weight:700;color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide2-desc{font-size:12px;color:#555;line-height:1.4;border-top:1px solid #eee;padding-top:8px;margin-top:4px}.gs-fn-guide2-desc p{margin:0}.gs-fn-guide2-desc-more{font-style:italic;color:#888;margin-top:4px!important;font-size:11px}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;overflow-anchor:none;display:flex;box-sizing:border-box;position:relative}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=horizontal] .gs-tabular{justify-content:safe center}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=vertical] .gs-tabular{align-items:safe center}.gs-tabular-inner{flex:0 0 auto;position:relative;overflow:hidden;overflow:clip;box-sizing:border-box;border-right:solid var(--gs-mx-br,1px) var(--gs-border,#e3e6ea);border-bottom:solid var(--gs-mx-bb,1px) var(--gs-border,#e3e6ea)}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-main[data-overflow-x=true] .gs-tabular-inner{border-right-width:0}.gs-main[data-overflow-y=true] .gs-tabular-inner{border-bottom-width:0}.gs-main::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:3;border:0 solid var(--gs-border,#e3e6ea)}.gs-main[data-overflow-x=true]::after{border-right-width:var(--gs-mx-br,1px)}.gs-main[data-overflow-y=true]::after{border-bottom-width:var(--gs-mx-bb,1px)}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:var(--gs-accent,#2563eb)}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px var(--gs-border,#e3e6ea)}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-th-left.gs-filter-fixed .gs-th-inner::before{content:'‹\\\\00a0'}.gs-th-left.gs-sort-fixed .gs-th-inner::after{content:'\\\\00a0›'}.gs-col-addr{position:absolute;top:2px;right:4px;font-size:9px;opacity:.5;line-height:1;letter-spacing:.3px;pointer-events:none}.gs-search-bar{width:100%;display:flex;align-items:center;padding:3px 0;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);border-bottom:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:flex;align-items:center;justify-content:center;width:30px;flex-shrink:0}.gs-search-bar .gs-search-input-wrapper{flex-grow:1;position:relative;display:flex;align-items:center;height:100%}.gs-search-bar .gs-search-input-ghost{position:absolute;left:2px;right:2px;top:0;bottom:0;pointer-events:none;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;white-space:pre-wrap;word-break:break-all;color:transparent;overflow:hidden}.gs-search-bar .gs-search-input-ghost .gs-search-ghost-hint{color:#aaa}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;flex-grow:1;width:100%;resize:none}.gs-search-progress{color:#999;font-size:13px;width:60px;flex-shrink:0;white-space:nowrap;text-align:center}.gs-search-close{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;flex-shrink:0}.gs-search-buttons{display:flex;align-items:center;white-space:nowrap;flex-shrink:0}.gs-search-button{display:inline-flex;cursor:pointer;margin:0 2px}.gs-search-button span{display:inline-block;font-size:11px;padding:3px 5px;background-color:rgba(128,128,128,.1);border:1px solid rgba(128,128,128,.3);border-radius:3px;transition:all .15s ease;line-height:1}.gs-search-button span:hover{background-color:rgba(128,128,128,.2)}.gs-search-button span.gs-search-button-on{color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 22%,transparent);border-color:var(--gs-accent,#2563eb)}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.gs-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--gs-surface,#fff) 70%,transparent);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:all}.gs-loading-spinner{width:32px;height:32px;border:3px solid color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent);border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}.gs-progress-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:100;pointer-events:all;display:flex;align-items:center;justify-content:center}.gs-progress-box{min-width:240px;padding:16px 18px;border-radius:8px;background:var(--gs-editor-surface,#fff);border:1px solid var(--gs-border,#e3e6ea);box-shadow:0 6px 24px rgba(0,0,0,.28);display:flex;flex-direction:column;gap:10px}.gs-progress-head{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--gs-fg,#1f2328)}.gs-progress-head .gs-loading-spinner{width:15px;height:15px;border-width:2px}.gs-progress-track{height:6px;border-radius:3px;overflow:hidden;background:color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent)}.gs-progress-fill{height:100%;border-radius:3px;background:var(--gs-accent,#2563eb);transition:width .1s linear}@keyframes gs-pending-slide{0%{left:-40%}100%{left:100%}}@keyframes gs-pending-pulse{0%{left:0;width:0}50%{left:0;width:100%}100%{left:100%;width:0}}@keyframes gs-flash{0%{opacity:0}20%{opacity:1}100%{opacity:0}}.gs-flash-overlay{position:absolute;inset:0;pointer-events:none;z-index:9999;background:color-mix(in srgb,var(--gs-accent,#2563eb) 15%,transparent);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}`;\n","import { CSS, LAST_MODIFIED } from './minified';\n\nexport const embedStyle = () => {\n if (typeof window === 'undefined') {\n return;\n }\n const exists = document.querySelector(`style.gs-styling[data-modified-at='${LAST_MODIFIED}']`);\n if (exists) {\n return;\n }\n const style = document.createElement('style');\n document.head.appendChild(style);\n style.setAttribute('class', 'gs-styling');\n style.setAttribute('data-modified-at', `${LAST_MODIFIED}`);\n style.innerText = CSS;\n};\n"],"names":["focus","el","isSafari","preventSafariBounce","preventBounce","e","scrollTop","scrollHeight","clientHeight","scrollLeft","scrollWidth","clientWidth","atTop","atBottom","atLeft","atRight","touchStartX","touchStartY","onTouchStart","preventTouchBounce","dx","dy","insertTextAtCursor","input","text","_a","insertRef","ref","dryRun","lexer","Lexer","tokenIndex","_","token","refSheetName","refAddresses","splitRef","tokenAddresses","tokenAbsolutes","a","a2p","toSheetPrefix","r","i","grantAddressAbsolute","_b","start","end","isRefInsertable","expandInput","resetInput","sheet","point","style","width","DEFAULT_WIDTH","height","DEFAULT_HEIGHT","isFocus","handleFormulaQuoteAutoClose","inputting","selectionStart","selectionEnd","selectedText","charAfter","beforeCursor","quoteCount","SCROLL_CAP","physicalScrollHeight","toVirtualScrollTop","physicalTop","viewH","totalV","physRange","virtRange","toPhysicalScrollTop","virtualTop","getCellRectPositions","y","x","colCell","rowCell","left","top","w","h","getScreenRect","bottom","right","virtualize","boundaryTop","boundaryLeft","boundaryBottom","boundaryRight","physTop","OVERSCAN_X","headerH","numRows","cumHeightThrough","topIdx","binarySearch","OVERSCAN_Y","gap","minTop","bottomIdx","ys","range","xs","before","after","adjTop","adjBottom","visibleHeight","getVisibleRowRange","cum","first","last","getVisibleColRange","viewW","numCols","headerW","smartScroll","targetPoint","behavior","screen","virtTop","target","upV","downV","leftP","rightP","isTopOver","isBottomOver","isLeftOver","isRightOver","toPhys","vTop","topDest","leftDest","findVisibleElement","elements","getPosition","boundary","dataKey","index","mid","getAreaInTabular","tabularElement","topPosition","leftPosition","bottomPosition","rightPosition","rows","cols","rect","MARGIN","calcBelowPosition","maxWidth","margin","clampLeft","overflow","calcSideStyle","flipped","clampPopup","vw","vh","hAlignTransform","hAlign","LAST_MODIFIED","CSS","embedStyle"],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  import { Sheet, AreaType, PointType, Virtualization } from '@gridsheet/engine';
2
+ export declare const SCROLL_CAP = 16000000;
3
+ export declare const physicalScrollHeight: (sheet: Sheet) => number;
4
+ /** DOM (capped) physical scrollTop -> the virtual scrollTop the coordinate logic uses. */
5
+ export declare const toVirtualScrollTop: (sheet: Sheet, physicalTop: number, viewH: number) => number;
6
+ /** Virtual scrollTop -> physical scrollTop (for scrollTo / smartScroll). */
7
+ export declare const toPhysicalScrollTop: (sheet: Sheet, virtualTop: number, viewH: number) => number;
2
8
  export declare const getCellRectPositions: (sheet: Sheet, { y, x }: PointType) => {
3
9
  top: number;
4
10
  left: number;
@@ -16,6 +22,8 @@ export declare const getScreenRect: (e: HTMLDivElement) => {
16
22
  width: number;
17
23
  };
18
24
  export declare const virtualize: (sheet: Sheet, e: HTMLDivElement | null) => Virtualization | null;
25
+ export declare const getVisibleRowRange: (sheet: Sheet, scrollTop: number, viewH: number) => [number, number];
26
+ export declare const getVisibleColRange: (sheet: Sheet, scrollLeft: number, viewW: number) => [number, number];
19
27
  export declare const smartScroll: (sheet: Sheet, e: HTMLDivElement | null, targetPoint: PointType, behavior?: ScrollBehavior) => void;
20
28
  export declare const getAreaInTabular: (tabularElement: HTMLDivElement) => AreaType;
21
29
  //# sourceMappingURL=virtualization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtualization.d.ts","sourceRoot":"","sources":["../../src/lib/virtualization.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,EAAE,UAAU,SAAS;;;;;;;CAerE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,GAAG,cAAc;;;;;;;CAQ9C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,GAAG,cAAc,GAAG,IAAI,KAAG,cAAc,GAAG,IA8DpF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,GAAG,cAAc,GAAG,IAAI,EACxB,aAAa,SAAS,EACtB,WAAU,cAAuB,SAoDlC,CAAC;AAmBF,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,cAAc,KAAG,QAiBjE,CAAC"}
1
+ {"version":3,"file":"virtualization.d.ts","sourceRoot":"","sources":["../../src/lib/virtualization.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAS3B,eAAO,MAAM,UAAU,WAAa,CAAC;AAErC,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,MAAiD,CAAC;AAEtG,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,aAAa,MAAM,EAAE,OAAO,MAAM,KAAG,MAQrF,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,GAAI,OAAO,KAAK,EAAE,YAAY,MAAM,EAAE,OAAO,MAAM,KAAG,MAQrF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,EAAE,UAAU,SAAS;;;;;;;CAerE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,GAAG,cAAc;;;;;;;CAQ9C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,GAAG,cAAc,GAAG,IAAI,KAAG,cAAc,GAAG,IA0FpF,CAAC;AAMF,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,WAAW,MAAM,EAAE,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAYlG,CAAC;AAGF,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,YAAY,MAAM,EAAE,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAWnG,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,GAAG,cAAc,GAAG,IAAI,EACxB,aAAa,SAAS,EACtB,WAAU,cAAuB,SAsClC,CAAC;AAmBF,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,cAAc,KAAG,QAiBjE,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const LAST_MODIFIED = 1786834463;
2
- export declare const CSS = ".gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 8%,transparent);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px var(--gs-accent,#2563eb);box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:var(--gs-accent,#2563eb);color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}:where(.gs-root1[data-mode=light],.gs-editor[data-mode=light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}.gs-root1{background-color:var(--gs-bg);color:var(--gs-fg)}.gs-root1 .gs-main{background-color:var(--gs-canvas)}.gs-root1 .gs-tabular{background-color:var(--gs-canvas)}.gs-root1 .gs-sheet-body-data{background-color:var(--gs-surface)}.gs-root1 .gs-formula-bar{background-color:var(--gs-header-bg)}.gs-root1 .gs-formula-bar-editor-inner{color:var(--gs-fg)}.gs-root1 .gs-cell{border:solid 1px var(--gs-border)}.gs-root1 .gs-adjuster{background-color:var(--gs-border)}.gs-root1 .gs-tabular-inner{background-color:var(--gs-border)}.gs-root1 .gs-large-editor textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-root1 .gs-th{background-color:var(--gs-header-bg);color:var(--gs-header-fg)}.gs-root1 .gs-th-top{border-left:solid 1px var(--gs-border)}.gs-root1 .gs-th-top .gs-th-inner{border-top:solid var(--gs-mx-bt,1px) var(--gs-border)}.gs-root1 .gs-th-left{border-top:solid 1px var(--gs-border)}.gs-root1 .gs-th-left .gs-th-inner{border-left:solid var(--gs-mx-bl,1px) var(--gs-border)}.gs-root1 .gs-search-bar{color:color-mix(in srgb,var(--gs-fg) 40%,transparent)}.gs-root1 .gs-search-bar textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-editor.gs-editing textarea{caret-color:var(--gs-fg)}.gs-editor.gs-editing .gs-editor-hl{background-color:var(--gs-editor-surface);color:var(--gs-fg)}.gs-editor .gs-editor-options{color:var(--gs-fg);background-color:var(--gs-editor-surface);border:solid 1px var(--gs-border)}:where(.gs-root1[data-mode=dark],.gs-editor[data-mode=dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}@media (prefers-color-scheme:dark){:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}}:where(.gs-root1[data-mode=inherit-light],.gs-editor[data-mode=inherit-light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}:where(.gs-root1[data-mode=inherit-dark],.gs-editor[data-mode=inherit-dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}.gs-root1[data-mode=inherit-dark] .gs-adjuster,.gs-root1[data-mode=inherit-dark] .gs-tabular-inner,.gs-root1[data-mode=inherit-light] .gs-adjuster,.gs-root1[data-mode=inherit-light] .gs-tabular-inner{background-color:transparent}.gs-root1[data-mode=inherit-light] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-mode=inherit-dark] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-gridlines=horizontal] .gs-cell{border-left-color:transparent;border-right-color:transparent}.gs-root1[data-gridlines=none] .gs-cell{border-color:transparent}.gs-root1[data-density=comfortable] .gs-cell-rendered{padding:0 10px}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell.gs-copying textarea:focus{outline:solid 1px var(--gs-accent,#2563eb)}.gs-cell.gs-selecting{z-index:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 7%,transparent)}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell.gs-pending .gs-cell-rendered{position:relative;overflow:hidden}.gs-cell.gs-pending .gs-cell-rendered::after{content:'';position:absolute;bottom:0;left:0;height:4px;width:40%;border-radius:1px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 65%,transparent);animation:gs-pending-slide 1.4s ease-in-out infinite}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:4px solid rgba(200,0,0,.9);border-right:4px solid rgba(200,0,0,.9);border-bottom:4px solid transparent;border-left:4px solid transparent;z-index:2;cursor:help}.gs-cell .gs-cell-label{font-size:10px;font-weight:500;font-style:normal;font-family:inherit;letter-spacing:.2px;line-height:1.4;position:absolute;top:0;right:0;background-color:var(--gs-accent,#2563eb);color:#fff;padding:1px 5px;border-bottom-left-radius:4px;display:none;opacity:.92}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 6px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:var(--gs-accent,#2563eb);position:absolute;width:7px;height:7px;bottom:0;right:0;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-formula-error-tooltip{position:fixed;background-color:rgba(35,8,8,.94);color:#fff;padding:6px 10px;border-radius:4px;border-left:3px solid rgba(220,50,50,.8);font-size:12px;line-height:1.5;max-width:260px;white-space:pre-wrap;word-break:break-word;box-shadow:0 3px 10px rgba(0,0,0,.4);z-index:100;pointer-events:none;letter-spacing:.3px}.gs-menu-modal{width:100%;height:100vh;z-index:12}.gs-label-input-label{font-size:13px;letter-spacing:1px}.gs-menu-divider{background-color:#aaa;padding:0;margin:5px 0;height:1px;list-style-type:none}.gs-menu-btn{position:absolute;background-color:rgba(128,128,128,.3);border:1px solid #ccc;border-radius:50%;cursor:pointer;font-size:12px;font-weight:700;line-height:1;color:#888;width:18px;height:18px;padding:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;z-index:2}.gs-context-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-context-menu:hover{opacity:1}.gs-context-menu .gs-menu-items{color:#555;margin:0;padding:0;min-width:250px}.gs-menu-item{padding:5px 10px;list-style-type:none;display:flex}.gs-menu-item.gs-enabled{cursor:pointer}.gs-menu-item.gs-enabled:hover{background-color:#eee}.gs-menu-item.gs-disabled{opacity:.5;cursor:not-allowed}.gs-menu-item .gs-menu-name{font-size:13px;letter-spacing:1px;flex:1}.gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-menu-shortcut:before{content:\"( \"}.gs-menu-shortcut:after{content:\" )\"}.gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-column-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-column-menu:hover{opacity:1}.gs-column-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-column-menu .gs-column-menu-sort{align-items:center}.gs-column-menu .gs-column-menu-sort .gs-sort-buttons{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-column-menu-sort .gs-sort-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-label{padding:5px 10px}.gs-column-menu .gs-label-input-row{display:flex;gap:4px;align-items:center}.gs-column-menu .gs-label-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:100px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-label-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-label-apply-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-label-apply-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-label-apply-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-filter{padding:5px 10px;list-style-type:none;font-size:13px}.gs-column-menu .gs-filter-header{display:flex;align-items:center;gap:8px}.gs-column-menu .gs-filter-header .gs-filter-add-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;letter-spacing:1px}.gs-column-menu .gs-filter-header .gs-filter-add-btn:hover{border-color:#555}.gs-column-menu .gs-filter-mode-toggle{display:flex;gap:6px;margin-left:auto}.gs-column-menu .gs-filter-mode-toggle label{display:flex;align-items:center;gap:3px;font-size:11px;font-weight:700;letter-spacing:.5px;color:#888;cursor:pointer;user-select:none}.gs-column-menu .gs-filter-mode-toggle label input[type=radio]{margin:0;cursor:pointer}.gs-column-menu .gs-filter-mode-toggle label.gs-active{color:var(--gs-accent,#2563eb)}.gs-column-menu .gs-filter-mode-toggle.gs-disabled{opacity:.4;pointer-events:none}.gs-column-menu .gs-filter-conditions{display:flex;flex-direction:column;gap:5px;margin-top:6px;max-height:200px;overflow-y:auto}.gs-column-menu .gs-filter-condition-row{display:flex;gap:4px;align-items:normal}.gs-column-menu .gs-filter-method-select{font-size:12px;padding:4px 4px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;background-color:#fff;box-shadow:none;min-width:40px;max-width:80px;cursor:pointer}.gs-column-menu .gs-filter-method-select:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-value-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:80px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-filter-value-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-remove-btn{font-size:12px;padding:0;border:none;border-radius:3px;background-color:transparent;cursor:pointer;color:#999;line-height:1;flex-shrink:0}.gs-column-menu .gs-filter-remove-btn:hover{color:#c33}.gs-column-menu .gs-filter-actions{display:flex;gap:4px;margin-top:10px;align-items:center}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#c33;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn:hover{border-color:#c33}.gs-column-menu .gs-filter-actions .gs-filter-actions-right{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#e08000;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn:hover{border-color:#e08000}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn{font-size:12px;padding:3px 6px;border:1px solid transparent;border-radius:3px;background-color:transparent;color:var(--gs-accent,#2563eb);cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:var(--gs-accent,#2563eb)}.gs-column-menu-waiting{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 30px;gap:12px;min-width:180px}.gs-column-menu-waiting .gs-waiting-message{font-size:13px;font-weight:700;color:#555;letter-spacing:.5px}.gs-column-menu-waiting .gs-waiting-spinner{width:24px;height:24px;border:3px solid #e0e0e0;border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}.gs-column-menu-waiting .gs-waiting-cancel-btn{font-size:12px;padding:4px 18px;border:1px solid #c33;border-radius:3px;background-color:transparent;color:#c33;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu-waiting .gs-waiting-cancel-btn:hover{background-color:#c33;color:#fff}.gs-column-menu-btn{right:4px;top:50%;transform:translateY(-50%)}.gs-column-menu-btn.gs-filtered{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-column-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-top:hover .gs-column-menu-btn{opacity:1}.gs-row-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-row-menu:hover{opacity:1}.gs-row-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-row-menu .gs-row-fixed-toggle{display:flex;align-items:center;gap:6px}.gs-row-menu .gs-row-fixed-check{font-size:12px;width:14px;text-align:center;color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent)}.gs-row-menu .gs-row-fixed-check.gs-row-fixed-active{color:var(--gs-accent,#2563eb)}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left:hover .gs-row-menu-btn{opacity:1}.gs-corner-menu-btn{bottom:2px;right:2px}.gs-corner-menu-btn:hover{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left.gs-th-top:hover .gs-corner-menu-btn{opacity:1}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;flex:1;min-width:0;display:flex;align-items:center}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px var(--gs-accent,#2563eb);margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:11;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:inherit;font-weight:500;position:absolute;top:0;right:0;margin-top:-17px;margin-right:-2px;padding:1px 5px;border-top-left-radius:4px;border-top-right-radius:4px;font-size:10px;background-color:var(--gs-accent,#2563eb);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:flex;align-items:stretch;box-sizing:border-box;border-style:solid;border-color:var(--gs-border,#e3e6ea);border-width:var(--gs-fb-bt,1px) var(--gs-fb-br,1px) var(--gs-fb-bb,1px) var(--gs-fb-bl,1px);padding:3px 6px;gap:6px}.gs-formula-bar .gs-selecting-address{display:flex;align-items:center;justify-content:center;min-width:38px;padding:0 4px;color:var(--gs-muted-fg,#6b7280);font-size:12px;font-variant-numeric:tabular-nums;text-align:center}.gs-formula-bar[data-spill=true]{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 6%,var(--gs-header-bg,#f4f5f7))}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:var(--gs-accent,#2563eb);font-style:italic}.gs-formula-bar[data-spill=true] .gs-selecting-address::after{content:\"\\2196\";margin-left:2px;font-style:normal;font-size:9px}.gs-formula-bar .gs-fx{display:flex;align-items:center;justify-content:center;align-self:center;width:26px;height:18px;flex-shrink:0;color:var(--gs-muted-fg,#6b7280);font-style:italic;font-family:inherit;font-weight:400;text-align:center;font-size:13px;letter-spacing:.3px;border-radius:4px;background-color:color-mix(in srgb,var(--gs-fg,#1f2328) 6%,transparent)}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;text-align:left;line-height:24px}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;text-align:left;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:var(--gs-fg,#1f2328);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{position:fixed;z-index:1000;padding:4px;background:var(--gs-bg,#fff);box-shadow:0 4px 12px rgba(0,0,0,.15);border:1px solid rgba(0,0,0,.1);border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;overflow:visible}.gs-editor-option{position:relative;cursor:pointer;list-style:none;padding:6px 12px;font-size:13px;border-radius:4px;color:#333;margin-bottom:2px}.gs-editor-option-content{display:flex;justify-content:space-between;width:100%;align-items:center}.gs-editor-option-tab{font-size:10px;color:#aaa;margin-left:8px;padding:2px 4px;border:1px solid #ddd;border-radius:3px;background:#f9f9f9}.gs-editor-option:last-child{margin-bottom:0}.gs-editor-option:hover{background-color:#f5f5f5}.gs-editor-option-selected{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);color:var(--gs-accent,#2563eb);font-weight:500}.gs-editor-option-selected:hover{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent)}.gs-fn-guide1{position:absolute;top:-4px;left:calc(100% + 8px);background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333}.gs-fn-guide1-tooltip{margin-bottom:8px;line-height:1.4;font-size:13px}.gs-fn-guide1-example{font-family:monospace;font-weight:600;font-size:13px;margin-bottom:8px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.gs-fn-guide1-desc{font-size:13px;color:#555;margin-bottom:12px;line-height:1.4}.gs-fn-guide1-desc p{margin:0 0 6px 0}.gs-fn-guide1-desc p:last-child{margin-bottom:0}.gs-fn-guide1-args{border-top:1px solid #eee;padding-top:10px}.gs-fn-guide1-arg{margin-bottom:6px;line-height:1.4;font-size:12px}.gs-fn-guide1-arg-name{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide1-arg-desc{color:#666}.gs-fn-guide-category{position:absolute;top:-11px;right:8px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:4px;background:#e8eaf6;color:#3949ab;border:1px solid #c5cae9;white-space:nowrap}.gs-fn-guide-category.gs-fn-guide-category-math{background:#e3f2fd;color:#1565c0;border-color:#bbdefb}.gs-fn-guide-category.gs-fn-guide-category-statistics{background:#e8f5e9;color:#2e7d32;border-color:#c8e6c9}.gs-fn-guide-category.gs-fn-guide-category-text{background:#fff8e1;color:#f57f17;border-color:#ffecb3}.gs-fn-guide-category.gs-fn-guide-category-time{background:#fce4ec;color:#880e4f;border-color:#f8bbd0}.gs-fn-guide-category.gs-fn-guide-category-lookup{background:#f3e5f5;color:#6a1b9a;border-color:#e1bee7}.gs-fn-guide-category.gs-fn-guide-category-logical{background:#e0f2f1;color:#00695c;border-color:#b2dfdb}.gs-fn-guide-category.gs-fn-guide-category-information{background:#e0f7fa;color:#006064;border-color:#b2ebf2}.gs-fn-guide-category.gs-fn-guide-category-finance{background:#fff3e0;color:#e65100;border-color:#ffe0b2}.gs-fn-guide-category.gs-fn-guide-category-engineering{background:#efebe9;color:#4e342e;border-color:#d7ccc8}.gs-fn-guide-category.gs-fn-guide-category-other{background:#f5f5f5;color:#616161;border-color:#e0e0e0}.gs-editor-portal{display:contents}.gs-editor-portal[data-mode=dark] .gs-editor-options,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-options,.gs-editor[data-mode=dark] .gs-editor-options,.gs-editor[data-mode=inherit-dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor-portal[data-mode=dark] .gs-editor-option,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option,.gs-editor[data-mode=dark] .gs-editor-option,.gs-editor[data-mode=inherit-dark] .gs-editor-option{color:#ccc}.gs-editor-portal[data-mode=dark] .gs-editor-option:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option:hover,.gs-editor[data-mode=dark] .gs-editor-option:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option:hover{background-color:#333}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected,.gs-editor[data-mode=dark] .gs-editor-option-selected,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor-portal[data-mode=dark] .gs-editor-option-tab,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-tab,.gs-editor[data-mode=dark] .gs-editor-option-tab,.gs-editor[data-mode=inherit-dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide1,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1,.gs-editor[data-mode=dark] .gs-fn-guide1,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-example,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-example,.gs-editor[data-mode=dark] .gs-fn-guide1-example,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-args,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-args,.gs-editor[data-mode=dark] .gs-fn-guide1-args,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-args{border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category,.gs-editor[data-mode=dark] .gs-fn-guide-category,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide2,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2,.gs-editor[data-mode=dark] .gs-fn-guide2,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-name,.gs-editor[data-mode=dark] .gs-fn-guide2-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-desc,.gs-editor[data-mode=dark] .gs-fn-guide2-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-desc{color:#aaa;border-top-color:#333}.gs-fn-guide2{position:fixed;left:0;background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:12px 16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;transition:opacity .1s ease-in-out}.gs-fn-guide2.gs-fn-guide2-hidden{opacity:0!important;pointer-events:none!important}.gs-fn-guide2-name{font-family:monospace;font-weight:700;font-size:13px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%;box-sizing:border-box;margin-bottom:8px}.gs-fn-guide2-args-inline{font-size:13px;font-family:monospace;line-height:1.5;margin-bottom:8px;color:#666}.gs-fn-guide2-args-inline span{transition:all .2s ease-in-out}.gs-fn-guide2 .gs-active-arg{font-weight:700;color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide2-desc{font-size:12px;color:#555;line-height:1.4;border-top:1px solid #eee;padding-top:8px;margin-top:4px}.gs-fn-guide2-desc p{margin:0}.gs-fn-guide2-desc-more{font-style:italic;color:#888;margin-top:4px!important;font-size:11px}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;display:flex;box-sizing:border-box;position:relative}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=horizontal] .gs-tabular{justify-content:safe center}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=vertical] .gs-tabular{align-items:safe center}.gs-tabular-inner{flex:0 0 auto;position:relative;overflow:hidden;overflow:clip;box-sizing:border-box;border-right:solid var(--gs-mx-br,1px) var(--gs-border,#e3e6ea);border-bottom:solid var(--gs-mx-bb,1px) var(--gs-border,#e3e6ea)}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-main[data-overflow-x=true] .gs-tabular-inner{border-right-width:0}.gs-main[data-overflow-y=true] .gs-tabular-inner{border-bottom-width:0}.gs-main::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:3;border:0 solid var(--gs-border,#e3e6ea)}.gs-main[data-overflow-x=true]::after{border-right-width:var(--gs-mx-br,1px)}.gs-main[data-overflow-y=true]::after{border-bottom-width:var(--gs-mx-bb,1px)}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:var(--gs-accent,#2563eb)}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px var(--gs-border,#e3e6ea)}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-th-left.gs-filter-fixed .gs-th-inner::before{content:'\u2039\\00a0'}.gs-th-left.gs-sort-fixed .gs-th-inner::after{content:'\\00a0\u203A'}.gs-col-addr{position:absolute;top:2px;right:4px;font-size:9px;opacity:.5;line-height:1;letter-spacing:.3px;pointer-events:none}.gs-search-bar{width:100%;display:flex;align-items:center;padding:3px 0;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);border-bottom:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:flex;align-items:center;justify-content:center;width:30px;flex-shrink:0}.gs-search-bar .gs-search-input-wrapper{flex-grow:1;position:relative;display:flex;align-items:center;height:100%}.gs-search-bar .gs-search-input-ghost{position:absolute;left:2px;right:2px;top:0;bottom:0;pointer-events:none;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;white-space:pre-wrap;word-break:break-all;color:transparent;overflow:hidden}.gs-search-bar .gs-search-input-ghost .gs-search-ghost-hint{color:#aaa}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;flex-grow:1;width:100%;resize:none}.gs-search-progress{color:#999;font-size:13px;width:60px;flex-shrink:0;white-space:nowrap;text-align:center}.gs-search-close{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;flex-shrink:0}.gs-search-buttons{display:flex;align-items:center;white-space:nowrap;flex-shrink:0}.gs-search-button{display:inline-flex;cursor:pointer;margin:0 2px}.gs-search-button span{display:inline-block;font-size:11px;padding:3px 5px;background-color:rgba(128,128,128,.1);border:1px solid rgba(128,128,128,.3);border-radius:3px;transition:all .15s ease;line-height:1}.gs-search-button span:hover{background-color:rgba(128,128,128,.2)}.gs-search-button span.gs-search-button-on{color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 22%,transparent);border-color:var(--gs-accent,#2563eb)}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.gs-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--gs-surface,#fff) 70%,transparent);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:all}.gs-loading-spinner{width:32px;height:32px;border:3px solid color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent);border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}@keyframes gs-pending-slide{0%{left:-40%}100%{left:100%}}@keyframes gs-pending-pulse{0%{left:0;width:0}50%{left:0;width:100%}100%{left:100%;width:0}}@keyframes gs-flash{0%{opacity:0}20%{opacity:1}100%{opacity:0}}.gs-flash-overlay{position:absolute;inset:0;pointer-events:none;z-index:9999;background:color-mix(in srgb,var(--gs-accent,#2563eb) 15%,transparent);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}";
1
+ export declare const LAST_MODIFIED = 1787241466;
2
+ export declare const CSS = ".gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 8%,transparent);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px var(--gs-accent,#2563eb);box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:var(--gs-accent,#2563eb);color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}:where(.gs-root1[data-mode=light],.gs-editor[data-mode=light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}.gs-root1{background-color:var(--gs-bg);color:var(--gs-fg)}.gs-root1 .gs-main{background-color:var(--gs-canvas)}.gs-root1 .gs-tabular{background-color:var(--gs-canvas)}.gs-root1 .gs-sheet-body-data{background-color:var(--gs-surface)}.gs-root1 .gs-formula-bar{background-color:var(--gs-header-bg)}.gs-root1 .gs-formula-bar-editor-inner{color:var(--gs-fg)}.gs-root1 .gs-cell{border:solid 1px var(--gs-border)}.gs-root1 .gs-adjuster{background-color:var(--gs-border)}.gs-root1 .gs-tabular-inner{background-color:var(--gs-border)}.gs-root1 .gs-large-editor textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-root1 .gs-th{background-color:var(--gs-header-bg);color:var(--gs-header-fg)}.gs-root1 .gs-th-top{border-left:solid 1px var(--gs-border)}.gs-root1 .gs-th-top .gs-th-inner{border-top:solid var(--gs-mx-bt,1px) var(--gs-border)}.gs-root1 .gs-th-left{border-top:solid 1px var(--gs-border)}.gs-root1 .gs-th-left .gs-th-inner{border-left:solid var(--gs-mx-bl,1px) var(--gs-border)}.gs-root1 .gs-search-bar{color:color-mix(in srgb,var(--gs-fg) 40%,transparent)}.gs-root1 .gs-search-bar textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-editor.gs-editing textarea{caret-color:var(--gs-fg)}.gs-editor.gs-editing .gs-editor-hl{background-color:var(--gs-editor-surface);color:var(--gs-fg)}.gs-editor .gs-editor-options{color:var(--gs-fg);background-color:var(--gs-editor-surface);border:solid 1px var(--gs-border)}:where(.gs-root1[data-mode=dark],.gs-editor[data-mode=dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}@media (prefers-color-scheme:dark){:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}}:where(.gs-root1[data-mode=inherit-light],.gs-editor[data-mode=inherit-light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}:where(.gs-root1[data-mode=inherit-dark],.gs-editor[data-mode=inherit-dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}.gs-root1[data-mode=inherit-dark] .gs-adjuster,.gs-root1[data-mode=inherit-dark] .gs-tabular-inner,.gs-root1[data-mode=inherit-light] .gs-adjuster,.gs-root1[data-mode=inherit-light] .gs-tabular-inner{background-color:transparent}.gs-root1[data-mode=inherit-light] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-mode=inherit-dark] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-gridlines=horizontal] .gs-cell{border-left-color:transparent;border-right-color:transparent}.gs-root1[data-gridlines=none] .gs-cell{border-color:transparent}.gs-root1[data-density=comfortable] .gs-cell-rendered{padding:0 10px}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell.gs-copying textarea:focus{outline:solid 1px var(--gs-accent,#2563eb)}.gs-cell.gs-selecting{z-index:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 7%,transparent)}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell.gs-pending .gs-cell-rendered{position:relative;overflow:hidden}.gs-cell.gs-pending .gs-cell-rendered::after{content:'';position:absolute;bottom:0;left:0;height:4px;width:40%;border-radius:1px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 65%,transparent);animation:gs-pending-slide 1.4s ease-in-out infinite}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:4px solid rgba(200,0,0,.9);border-right:4px solid rgba(200,0,0,.9);border-bottom:4px solid transparent;border-left:4px solid transparent;z-index:2;cursor:help}.gs-cell .gs-cell-label{font-size:10px;font-weight:500;font-style:normal;font-family:inherit;letter-spacing:.2px;line-height:1.4;position:absolute;top:0;right:0;background-color:var(--gs-accent,#2563eb);color:#fff;padding:1px 5px;border-bottom-left-radius:4px;display:none;opacity:.92}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 6px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:var(--gs-accent,#2563eb);position:absolute;width:7px;height:7px;bottom:0;right:0;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-formula-error-tooltip{position:fixed;background-color:rgba(35,8,8,.94);color:#fff;padding:6px 10px;border-radius:4px;border-left:3px solid rgba(220,50,50,.8);font-size:12px;line-height:1.5;max-width:260px;white-space:pre-wrap;word-break:break-word;box-shadow:0 3px 10px rgba(0,0,0,.4);z-index:100;pointer-events:none;letter-spacing:.3px}.gs-menu-modal{width:100%;height:100vh;z-index:12}.gs-label-input-label{font-size:13px;letter-spacing:1px}.gs-menu-divider{background-color:#aaa;padding:0;margin:5px 0;height:1px;list-style-type:none}.gs-menu-btn{position:absolute;background-color:rgba(128,128,128,.3);border:1px solid #ccc;border-radius:50%;cursor:pointer;font-size:12px;font-weight:700;line-height:1;color:#888;width:18px;height:18px;padding:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;z-index:2}.gs-context-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-context-menu:hover{opacity:1}.gs-context-menu .gs-menu-items{color:#555;margin:0;padding:0;min-width:250px}.gs-menu-item{padding:5px 10px;list-style-type:none;display:flex}.gs-menu-item.gs-enabled{cursor:pointer}.gs-menu-item.gs-enabled:hover{background-color:#eee}.gs-menu-item.gs-disabled{opacity:.5;cursor:not-allowed}.gs-menu-item .gs-menu-name{font-size:13px;letter-spacing:1px;flex:1}.gs-submenu-parent{position:relative;align-items:center}.gs-submenu-parent .gs-submenu-arrow{margin-left:8px;font-size:11px;opacity:.6}.gs-submenu-flyout{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease;min-width:200px;margin:0;color:#555;opacity:1;list-style-type:none}.gs-submenu-flyout:hover{opacity:1}.gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-menu-shortcut:before{content:\"( \"}.gs-menu-shortcut:after{content:\" )\"}.gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-column-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-column-menu:hover{opacity:1}.gs-column-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-column-menu .gs-column-menu-sort{align-items:center}.gs-column-menu .gs-column-menu-sort .gs-sort-buttons{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-column-menu-sort .gs-sort-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-label{padding:5px 10px}.gs-column-menu .gs-label-input-row{display:flex;gap:4px;align-items:center}.gs-column-menu .gs-label-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:100px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-label-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-label-apply-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-label-apply-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-label-apply-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-filter{padding:5px 10px;list-style-type:none;font-size:13px}.gs-column-menu .gs-filter-header{display:flex;align-items:center;gap:8px}.gs-column-menu .gs-filter-header .gs-filter-add-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;letter-spacing:1px}.gs-column-menu .gs-filter-header .gs-filter-add-btn:hover{border-color:#555}.gs-column-menu .gs-filter-mode-toggle{display:flex;gap:6px;margin-left:auto}.gs-column-menu .gs-filter-mode-toggle label{display:flex;align-items:center;gap:3px;font-size:11px;font-weight:700;letter-spacing:.5px;color:#888;cursor:pointer;user-select:none}.gs-column-menu .gs-filter-mode-toggle label input[type=radio]{margin:0;cursor:pointer}.gs-column-menu .gs-filter-mode-toggle label.gs-active{color:var(--gs-accent,#2563eb)}.gs-column-menu .gs-filter-mode-toggle.gs-disabled{opacity:.4;pointer-events:none}.gs-column-menu .gs-filter-conditions{display:flex;flex-direction:column;gap:5px;margin-top:6px;max-height:200px;overflow-y:auto}.gs-column-menu .gs-filter-condition-row{display:flex;gap:4px;align-items:normal}.gs-column-menu .gs-filter-method-select{font-size:12px;padding:4px 4px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;background-color:#fff;box-shadow:none;min-width:40px;max-width:80px;cursor:pointer}.gs-column-menu .gs-filter-method-select:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-value-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:80px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-filter-value-input:focus{border-bottom-color:var(--gs-accent,#2563eb);outline:0;box-shadow:none}.gs-column-menu .gs-filter-remove-btn{font-size:12px;padding:0;border:none;border-radius:3px;background-color:transparent;cursor:pointer;color:#999;line-height:1;flex-shrink:0}.gs-column-menu .gs-filter-remove-btn:hover{color:#c33}.gs-column-menu .gs-filter-actions{display:flex;gap:4px;margin-top:10px;align-items:center}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#c33;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn:hover{border-color:#c33}.gs-column-menu .gs-filter-actions .gs-filter-actions-right{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#e08000;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn:hover{border-color:#e08000}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn{font-size:12px;padding:3px 6px;border:1px solid transparent;border-radius:3px;background-color:transparent;color:var(--gs-accent,#2563eb);cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:var(--gs-accent,#2563eb)}.gs-column-menu-waiting{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 30px;gap:12px;min-width:180px}.gs-column-menu-waiting .gs-waiting-message{font-size:13px;font-weight:700;color:#555;letter-spacing:.5px}.gs-column-menu-waiting .gs-waiting-spinner{width:24px;height:24px;border:3px solid #e0e0e0;border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}.gs-column-menu-waiting .gs-waiting-cancel-btn{font-size:12px;padding:4px 18px;border:1px solid #c33;border-radius:3px;background-color:transparent;color:#c33;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu-waiting .gs-waiting-cancel-btn:hover{background-color:#c33;color:#fff}.gs-column-menu-btn{right:4px;top:50%;transform:translateY(-50%)}.gs-column-menu-btn.gs-filtered{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-column-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-top:hover .gs-column-menu-btn{opacity:1}.gs-row-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-row-menu:hover{opacity:1}.gs-row-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-row-fixed-toggle{display:flex;align-items:center;gap:6px}.gs-row-fixed-check{font-size:12px;width:14px;text-align:center;color:transparent}.gs-row-fixed-check.gs-row-fixed-active{color:var(--gs-accent,#2563eb)}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left:hover .gs-row-menu-btn{opacity:1}.gs-corner-menu-btn{bottom:2px;right:2px}.gs-corner-menu-btn:hover{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-th-left.gs-th-top:hover .gs-corner-menu-btn{opacity:1}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;flex:1;min-width:0;display:flex;align-items:center}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px var(--gs-accent,#2563eb);margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:11;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:inherit;font-weight:500;position:absolute;top:0;right:0;margin-top:-17px;margin-right:-2px;padding:1px 5px;border-top-left-radius:4px;border-top-right-radius:4px;font-size:10px;background-color:var(--gs-accent,#2563eb);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:flex;align-items:stretch;box-sizing:border-box;border-style:solid;border-color:var(--gs-border,#e3e6ea);border-width:var(--gs-fb-bt,1px) var(--gs-fb-br,1px) var(--gs-fb-bb,1px) var(--gs-fb-bl,1px);padding:3px 6px;gap:6px}.gs-formula-bar .gs-selecting-address{display:flex;align-items:center;justify-content:center;min-width:38px;padding:0 4px;color:var(--gs-muted-fg,#6b7280);font-size:12px;font-variant-numeric:tabular-nums;text-align:center}.gs-formula-bar[data-spill=true]{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 6%,var(--gs-header-bg,#f4f5f7))}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:var(--gs-accent,#2563eb);font-style:italic}.gs-formula-bar[data-spill=true] .gs-selecting-address::after{content:\"\\2196\";margin-left:2px;font-style:normal;font-size:9px}.gs-formula-bar .gs-fx{display:flex;align-items:center;justify-content:center;align-self:center;width:26px;height:18px;flex-shrink:0;color:var(--gs-muted-fg,#6b7280);font-style:italic;font-family:inherit;font-weight:400;text-align:center;font-size:13px;letter-spacing:.3px;border-radius:4px;background-color:color-mix(in srgb,var(--gs-fg,#1f2328) 6%,transparent)}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;text-align:left;line-height:24px}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;text-align:left;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:var(--gs-fg,#1f2328);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{position:fixed;z-index:1000;padding:4px;background:var(--gs-bg,#fff);box-shadow:0 4px 12px rgba(0,0,0,.15);border:1px solid rgba(0,0,0,.1);border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;overflow:visible}.gs-editor-option{position:relative;cursor:pointer;list-style:none;padding:6px 12px;font-size:13px;border-radius:4px;color:#333;margin-bottom:2px}.gs-editor-option-content{display:flex;justify-content:space-between;width:100%;align-items:center}.gs-editor-option-tab{font-size:10px;color:#aaa;margin-left:8px;padding:2px 4px;border:1px solid #ddd;border-radius:3px;background:#f9f9f9}.gs-editor-option:last-child{margin-bottom:0}.gs-editor-option:hover{background-color:#f5f5f5}.gs-editor-option-selected{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);color:var(--gs-accent,#2563eb);font-weight:500}.gs-editor-option-selected:hover{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent)}.gs-fn-guide1{position:absolute;top:-4px;left:calc(100% + 8px);background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333}.gs-fn-guide1-tooltip{margin-bottom:8px;line-height:1.4;font-size:13px}.gs-fn-guide1-example{font-family:monospace;font-weight:600;font-size:13px;margin-bottom:8px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.gs-fn-guide1-desc{font-size:13px;color:#555;margin-bottom:12px;line-height:1.4}.gs-fn-guide1-desc p{margin:0 0 6px 0}.gs-fn-guide1-desc p:last-child{margin-bottom:0}.gs-fn-guide1-args{border-top:1px solid #eee;padding-top:10px}.gs-fn-guide1-arg{margin-bottom:6px;line-height:1.4;font-size:12px}.gs-fn-guide1-arg-name{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide1-arg-desc{color:#666}.gs-fn-guide-category{position:absolute;top:-11px;right:8px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:4px;background:#e8eaf6;color:#3949ab;border:1px solid #c5cae9;white-space:nowrap}.gs-fn-guide-category.gs-fn-guide-category-math{background:#e3f2fd;color:#1565c0;border-color:#bbdefb}.gs-fn-guide-category.gs-fn-guide-category-statistics{background:#e8f5e9;color:#2e7d32;border-color:#c8e6c9}.gs-fn-guide-category.gs-fn-guide-category-text{background:#fff8e1;color:#f57f17;border-color:#ffecb3}.gs-fn-guide-category.gs-fn-guide-category-time{background:#fce4ec;color:#880e4f;border-color:#f8bbd0}.gs-fn-guide-category.gs-fn-guide-category-lookup{background:#f3e5f5;color:#6a1b9a;border-color:#e1bee7}.gs-fn-guide-category.gs-fn-guide-category-logical{background:#e0f2f1;color:#00695c;border-color:#b2dfdb}.gs-fn-guide-category.gs-fn-guide-category-information{background:#e0f7fa;color:#006064;border-color:#b2ebf2}.gs-fn-guide-category.gs-fn-guide-category-finance{background:#fff3e0;color:#e65100;border-color:#ffe0b2}.gs-fn-guide-category.gs-fn-guide-category-engineering{background:#efebe9;color:#4e342e;border-color:#d7ccc8}.gs-fn-guide-category.gs-fn-guide-category-ai{background:#e8eaf6;color:#3949ab;border-color:#c5cae9}.gs-fn-guide-category.gs-fn-guide-category-other{background:#f5f5f5;color:#616161;border-color:#e0e0e0}.gs-editor-portal{display:contents}.gs-editor-portal[data-mode=dark] .gs-editor-options,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-options,.gs-editor[data-mode=dark] .gs-editor-options,.gs-editor[data-mode=inherit-dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor-portal[data-mode=dark] .gs-editor-option,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option,.gs-editor[data-mode=dark] .gs-editor-option,.gs-editor[data-mode=inherit-dark] .gs-editor-option{color:#ccc}.gs-editor-portal[data-mode=dark] .gs-editor-option:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option:hover,.gs-editor[data-mode=dark] .gs-editor-option:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option:hover{background-color:#333}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected,.gs-editor[data-mode=dark] .gs-editor-option-selected,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor-portal[data-mode=dark] .gs-editor-option-tab,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-tab,.gs-editor[data-mode=dark] .gs-editor-option-tab,.gs-editor[data-mode=inherit-dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide1,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1,.gs-editor[data-mode=dark] .gs-fn-guide1,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-example,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-example,.gs-editor[data-mode=dark] .gs-fn-guide1-example,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-args,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-args,.gs-editor[data-mode=dark] .gs-fn-guide1-args,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-args{border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category,.gs-editor[data-mode=dark] .gs-fn-guide-category,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-ai,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-ai,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-ai,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-ai{background:#10142e;color:#7986cb;border-color:#232a52}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide2,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2,.gs-editor[data-mode=dark] .gs-fn-guide2,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-name,.gs-editor[data-mode=dark] .gs-fn-guide2-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-desc,.gs-editor[data-mode=dark] .gs-fn-guide2-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-desc{color:#aaa;border-top-color:#333}.gs-fn-guide2{position:fixed;left:0;background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:12px 16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;transition:opacity .1s ease-in-out}.gs-fn-guide2.gs-fn-guide2-hidden{opacity:0!important;pointer-events:none!important}.gs-fn-guide2-name{font-family:monospace;font-weight:700;font-size:13px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%;box-sizing:border-box;margin-bottom:8px}.gs-fn-guide2-args-inline{font-size:13px;font-family:monospace;line-height:1.5;margin-bottom:8px;color:#666}.gs-fn-guide2-args-inline span{transition:all .2s ease-in-out}.gs-fn-guide2 .gs-active-arg{font-weight:700;color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide2-desc{font-size:12px;color:#555;line-height:1.4;border-top:1px solid #eee;padding-top:8px;margin-top:4px}.gs-fn-guide2-desc p{margin:0}.gs-fn-guide2-desc-more{font-style:italic;color:#888;margin-top:4px!important;font-size:11px}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;overflow-anchor:none;display:flex;box-sizing:border-box;position:relative}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=horizontal] .gs-tabular{justify-content:safe center}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=vertical] .gs-tabular{align-items:safe center}.gs-tabular-inner{flex:0 0 auto;position:relative;overflow:hidden;overflow:clip;box-sizing:border-box;border-right:solid var(--gs-mx-br,1px) var(--gs-border,#e3e6ea);border-bottom:solid var(--gs-mx-bb,1px) var(--gs-border,#e3e6ea)}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-main[data-overflow-x=true] .gs-tabular-inner{border-right-width:0}.gs-main[data-overflow-y=true] .gs-tabular-inner{border-bottom-width:0}.gs-main::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:3;border:0 solid var(--gs-border,#e3e6ea)}.gs-main[data-overflow-x=true]::after{border-right-width:var(--gs-mx-br,1px)}.gs-main[data-overflow-y=true]::after{border-bottom-width:var(--gs-mx-bb,1px)}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:var(--gs-accent,#2563eb)}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px var(--gs-border,#e3e6ea)}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-th-left.gs-filter-fixed .gs-th-inner::before{content:'\u2039\\00a0'}.gs-th-left.gs-sort-fixed .gs-th-inner::after{content:'\\00a0\u203A'}.gs-col-addr{position:absolute;top:2px;right:4px;font-size:9px;opacity:.5;line-height:1;letter-spacing:.3px;pointer-events:none}.gs-search-bar{width:100%;display:flex;align-items:center;padding:3px 0;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);border-bottom:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:flex;align-items:center;justify-content:center;width:30px;flex-shrink:0}.gs-search-bar .gs-search-input-wrapper{flex-grow:1;position:relative;display:flex;align-items:center;height:100%}.gs-search-bar .gs-search-input-ghost{position:absolute;left:2px;right:2px;top:0;bottom:0;pointer-events:none;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;white-space:pre-wrap;word-break:break-all;color:transparent;overflow:hidden}.gs-search-bar .gs-search-input-ghost .gs-search-ghost-hint{color:#aaa}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;flex-grow:1;width:100%;resize:none}.gs-search-progress{color:#999;font-size:13px;width:60px;flex-shrink:0;white-space:nowrap;text-align:center}.gs-search-close{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;flex-shrink:0}.gs-search-buttons{display:flex;align-items:center;white-space:nowrap;flex-shrink:0}.gs-search-button{display:inline-flex;cursor:pointer;margin:0 2px}.gs-search-button span{display:inline-block;font-size:11px;padding:3px 5px;background-color:rgba(128,128,128,.1);border:1px solid rgba(128,128,128,.3);border-radius:3px;transition:all .15s ease;line-height:1}.gs-search-button span:hover{background-color:rgba(128,128,128,.2)}.gs-search-button span.gs-search-button-on{color:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 22%,transparent);border-color:var(--gs-accent,#2563eb)}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.gs-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--gs-surface,#fff) 70%,transparent);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:all}.gs-loading-spinner{width:32px;height:32px;border:3px solid color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent);border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}.gs-progress-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:100;pointer-events:all;display:flex;align-items:center;justify-content:center}.gs-progress-box{min-width:240px;padding:16px 18px;border-radius:8px;background:var(--gs-editor-surface,#fff);border:1px solid var(--gs-border,#e3e6ea);box-shadow:0 6px 24px rgba(0,0,0,.28);display:flex;flex-direction:column;gap:10px}.gs-progress-head{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--gs-fg,#1f2328)}.gs-progress-head .gs-loading-spinner{width:15px;height:15px;border-width:2px}.gs-progress-track{height:6px;border-radius:3px;overflow:hidden;background:color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent)}.gs-progress-fill{height:100%;border-radius:3px;background:var(--gs-accent,#2563eb);transition:width .1s linear}@keyframes gs-pending-slide{0%{left:-40%}100%{left:100%}}@keyframes gs-pending-pulse{0%{left:0;width:0}50%{left:0;width:100%}100%{left:100%;width:0}}@keyframes gs-flash{0%{opacity:0}20%{opacity:1}100%{opacity:0}}.gs-flash-overlay{position:absolute;inset:0;pointer-events:none;z-index:9999;background:color-mix(in srgb,var(--gs-accent,#2563eb) 15%,transparent);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}";
3
3
  //# sourceMappingURL=minified.d.ts.map