issue-sticker 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,14 +15,14 @@ var __privateWrapper = (obj, member, setter, getter) => ({
15
15
  }
16
16
  });
17
17
  var _focused, _cleanup, _setup, _b, _provider, _providerCalled, _c, _online, _cleanup2, _setup2, _d, _gcTimeout, _e, _queryType, _initialState, _revertState, _cache, _client, _retryer, _defaultOptions, _abortSignalConsumed, _Query_instances, isInitialPausedFetch_fn, dispatch_fn, _f, _client2, _currentQuery, _currentQueryInitialState, _currentResult, _currentResultState, _currentResultOptions, _currentThenable, _selectError, _selectFn, _selectResult, _lastQueryWithDefinedData, _staleTimeoutId, _refetchIntervalId, _currentRefetchInterval, _trackedProps, _QueryObserver_instances, executeFetch_fn, updateStaleTimeout_fn, computeRefetchInterval_fn, updateRefetchInterval_fn, updateTimers_fn, clearStaleTimeout_fn, clearRefetchInterval_fn, updateQuery_fn, notify_fn, _g, _client3, _observers, _mutationCache, _retryer2, _Mutation_instances, dispatch_fn2, _h, _mutations, _scopes, _mutationId, _i, _client4, _currentResult2, _currentMutation, _mutateOptions, _MutationObserver_instances, updateResult_fn, notify_fn2, _j, _queries, _k, _queryCache, _mutationCache2, _defaultOptions2, _queryDefaults, _mutationDefaults, _mountCount, _unsubscribeFocus, _unsubscribeOnline, _l, _m;
18
- import { A as trimLogBackupPayload, B as createSafeLogBackup, D as getLogBackupSessionId, N as NetworkCollector, C as ConsoleCollector, E as createIndexedDbLogBackup, e as buildJiraCreateFields, P as Popover, F as PopoverTrigger, G as Input, H as PopoverContent, L as Label, J as Select, K as SelectTrigger, M as SelectValue, O as SelectContent, Q as SelectItem, R as getJiraMetadata, T as buildJiraIssueFields, U as Button, V as Root2$2, W as Trigger$2, X as ChevronDown, Y as Portal, Z as Content2$1, _ as Check, $ as X$1, a0 as DatePicker, f as buildNotionCreateFields, a1 as getNotionPageMetadata, a2 as buildNotionFieldViews, c as captureWithModernScreenshot, p as pristineFetch, d as directUploadToSignedUrl, a3 as DirectUploadError, a4 as toast, a5 as getSnapshot, a6 as subscribe, a as uploadSignedMediaWithApi, v as sanitizeString, a7 as getRegisteredUploadId, h as buildGuestOwnerQuery, j as devLogger, w as getCurrentPageUrl, a8 as ChevronRight, a9 as ReactRemoveScroll, aa as hideOthers, ab as useFocusGuards, ac as FocusScope, ad as getExposedJiraFields, ae as isJiraFieldExposed, n as normalizeExposedJiraFields, y as preloadModernScreenshot, u as uploadScreenshotDataUrls, k as filterExcludeServiceRelatedLogs, l as filterExcludeServiceRelatedConsoleLogs, s as selectNetworkLogsForSubmit, m as compactNetworkLogsForTransport, o as CONSOLE_LOG_SUBMIT_LIMIT, g as getElementPosition, q as buildExternalUserPayload, r as shrinkNetworkLogsToFit, t as measureJsonBytes, i as buildIssueIntegrationsPayload, x as SessionReplayCaptureController, af as getPrimaryJiraMapping, ag as createCollection, ah as useDirection, ai as getPrimaryNotionMapping, aj as buttonVariants, ak as findElementBySelector, al as findElementByXPath, S as ScreenRecordingController, am as OnboardingProvider, an as useOnboardingTarget, ao as useOnboardingFlow, ap as ISSUE_STICKER_HOST_ELEMENT_ID, aq as getIssueStickerRuntimeOwner, ar as ISSUE_STICKER_RUNTIME_OWNER, z as isIssueStickerExtensionRuntimeActive, as as createRuntimeHostElement, at as attachHostTypingGuard, au as ISSUE_STICKER_EXTENSION_RUNTIME_READY_EVENT } from "./externalUserPayload-B7zThnol.js";
18
+ import { O as OVERLAY_LAYER_INDEX, c as createLucideIcon$1, b as usePortalContainer, a as cn$1, d as OVERLAY_LAYER, s as stopEscapePropagation, P as Presence, e as Primitive, f as composeEventHandlers, g as useDismissableLayerSurface, h as useComposedRefs$1, i as Portal$1, j as createContextScope, k as createSlot, D as DismissableLayer, l as useControllableState, m as useId$1, n as useLayoutEffect2, o as useCallbackRef, p as PortalContainerProvider } from "./mouse-pointer-2-BR00y3ir.js";
19
+ import { y as trimLogBackupPayload, z as createSafeLogBackup, A as getLogBackupSessionId, N as NetworkCollector, C as ConsoleCollector, B as createIndexedDbLogBackup, b as buildJiraCreateFields, P as Popover, D as PopoverTrigger, E as Input, F as PopoverContent, L as Label, G as Select, H as SelectTrigger, J as SelectValue, K as SelectContent, M as SelectItem, O as getJiraMetadata, Q as buildJiraIssueFields, R as Button, T as Root2$2, U as Trigger$2, V as ChevronDown, W as Portal, X as Content2$1, Y as Check, Z as X$1, _ as DatePicker, e as buildNotionCreateFields, $ as getNotionPageMetadata, a0 as buildNotionFieldViews, c as captureWithModernScreenshot, p as pristineFetch, d as directUploadToSignedUrl, a1 as DirectUploadError, a2 as toast, a3 as getSnapshot, a4 as subscribe, a as uploadSignedMediaWithApi, t as sanitizeString, a5 as getRegisteredUploadId, f as buildGuestOwnerQuery, j as devLogger, v as getCurrentPageUrl, a6 as ChevronRight, a7 as ReactRemoveScroll, a8 as hideOthers, a9 as useFocusGuards, aa as FocusScope, ab as getExposedJiraFields, ac as isJiraFieldExposed, ad as normalizeExposedJiraFields, x as preloadModernScreenshot, u as uploadScreenshotDataUrls, k as filterExcludeServiceRelatedLogs, l as filterExcludeServiceRelatedConsoleLogs, s as selectNetworkLogsForSubmit, m as compactNetworkLogsForTransport, n as CONSOLE_LOG_SUBMIT_LIMIT, g as getElementPosition, o as buildExternalUserPayload, q as shrinkNetworkLogsToFit, r as measureJsonBytes, i as buildIssueIntegrationsPayload, w as SessionReplayCaptureController, ae as getPrimaryJiraMapping, af as createCollection, ag as useDirection, ah as getPrimaryNotionMapping, ai as buttonVariants, aj as findElementBySelector, ak as findElementByXPath, S as ScreenRecordingController, h as composeIssueFilterGroups, al as OnboardingProvider, am as useOnboardingTarget, an as useOnboardingFlow, ao as PopoverAnchor } from "./externalUserPayload-k9LSBeMB.js";
19
20
  import * as React from "react";
20
- import { useRef, useState, useEffect, useId, useLayoutEffect, useCallback, forwardRef, createElement, createContext, useContext, Component, Suspense, useInsertionEffect, useMemo, Children, isValidElement, Fragment as Fragment$1, useSyncExternalStore } from "react";
21
+ import { useRef, useState, useEffect, useId, useLayoutEffect, useCallback, forwardRef, createElement, createContext, useContext, Component, Suspense, useInsertionEffect, useMemo, Children, isValidElement, Fragment as Fragment$1, useSyncExternalStore, useDeferredValue } from "react";
21
22
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
22
- import { c as createLucideIcon$1, b as usePortalContainer, a as cn$1, O as OVERLAY_LAYER, s as stopEscapePropagation, d as OVERLAY_LAYER_INDEX, P as Presence, e as Primitive, f as composeEventHandlers, g as useDismissableLayerSurface, h as useComposedRefs$1, i as Portal$1, j as createContextScope, k as createSlot, D as DismissableLayer, l as useControllableState, m as useId$1, n as useLayoutEffect2, o as useCallbackRef, p as PortalContainerProvider } from "./createLucideIcon-BzRMP02h.js";
23
23
  import { createRoot } from "react-dom/client";
24
24
  import { createPortal } from "react-dom";
25
- import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from "./tooltip-B6UPO-U8.js";
25
+ import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from "./tooltip-DH02R32-.js";
26
26
  function readReleaseMarker() {
27
27
  try {
28
28
  const g = globalThis.__ISSUE_STICKER_RELEASE__;
@@ -256,6 +256,86 @@ function createJiraFieldSearchConfig(source) {
256
256
  return null;
257
257
  };
258
258
  }
259
+ const ISSUE_STICKER_HOST_ELEMENT_ID = "issue-sticker-host";
260
+ const ISSUE_STICKER_RUNTIME_OWNER_ATTRIBUTE = "data-issue-sticker-runtime";
261
+ const ISSUE_STICKER_EXTENSION_RUNTIME_READY_EVENT = "issue-sticker:extension-runtime-ready";
262
+ const ISSUE_STICKER_RUNTIME_OWNER = {
263
+ extension: "extension",
264
+ sdk: "sdk"
265
+ };
266
+ function resolveDocument(doc) {
267
+ return typeof document === "undefined" ? null : document;
268
+ }
269
+ function getIssueStickerRuntimeHost(doc) {
270
+ var _a;
271
+ return ((_a = resolveDocument()) == null ? void 0 : _a.getElementById(ISSUE_STICKER_HOST_ELEMENT_ID)) ?? null;
272
+ }
273
+ function getIssueStickerRuntimeOwner(element2) {
274
+ const owner = element2 == null ? void 0 : element2.getAttribute(ISSUE_STICKER_RUNTIME_OWNER_ATTRIBUTE);
275
+ if (owner === ISSUE_STICKER_RUNTIME_OWNER.extension || owner === ISSUE_STICKER_RUNTIME_OWNER.sdk) {
276
+ return owner;
277
+ }
278
+ return null;
279
+ }
280
+ function markIssueStickerRuntimeHost(element2, owner) {
281
+ element2.setAttribute(ISSUE_STICKER_RUNTIME_OWNER_ATTRIBUTE, owner);
282
+ }
283
+ function createRuntimeHostElement(owner, doc) {
284
+ const targetDocument = resolveDocument();
285
+ if (!targetDocument) {
286
+ throw new Error("createRuntimeHostElement: document 를 찾을 수 없습니다.");
287
+ }
288
+ const hostElement = targetDocument.createElement("div");
289
+ hostElement.id = ISSUE_STICKER_HOST_ELEMENT_ID;
290
+ markIssueStickerRuntimeHost(hostElement, owner);
291
+ hostElement.style.all = "initial";
292
+ const frame2 = {
293
+ position: "fixed",
294
+ top: "0",
295
+ left: "0",
296
+ width: "0",
297
+ height: "0",
298
+ overflow: "visible",
299
+ background: "transparent",
300
+ "pointer-events": "none",
301
+ "z-index": String(OVERLAY_LAYER_INDEX.runtimeHost),
302
+ display: "block",
303
+ isolation: "isolate"
304
+ };
305
+ Object.entries(frame2).forEach(([property, value]) => {
306
+ hostElement.style.setProperty(property, value, "important");
307
+ });
308
+ return hostElement;
309
+ }
310
+ function isEditableTarget(target) {
311
+ if (!(target instanceof HTMLElement)) return false;
312
+ return target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable === true;
313
+ }
314
+ function attachHostTypingGuard(shadowRoot) {
315
+ const handleKeyDown = (event) => {
316
+ const keyboardEvent = event;
317
+ if (keyboardEvent.ctrlKey || keyboardEvent.metaKey || keyboardEvent.altKey) return;
318
+ if (keyboardEvent.key === "Escape") return;
319
+ if (!isEditableTarget(keyboardEvent.composedPath()[0])) return;
320
+ keyboardEvent.stopPropagation();
321
+ };
322
+ shadowRoot.addEventListener("keydown", handleKeyDown);
323
+ return () => shadowRoot.removeEventListener("keydown", handleKeyDown);
324
+ }
325
+ const RUNTIME_OWNER_MARKER_KEY = "__issueStickerRuntimeOwner";
326
+ function markerHost() {
327
+ return typeof window === "undefined" ? null : window;
328
+ }
329
+ function getClaimedIssueStickerRuntimeOwner() {
330
+ var _a;
331
+ return ((_a = markerHost()) == null ? void 0 : _a[RUNTIME_OWNER_MARKER_KEY]) ?? null;
332
+ }
333
+ function isIssueStickerExtensionRuntimeActive(doc) {
334
+ if (getClaimedIssueStickerRuntimeOwner() === ISSUE_STICKER_RUNTIME_OWNER.extension) {
335
+ return true;
336
+ }
337
+ return getIssueStickerRuntimeOwner(getIssueStickerRuntimeHost()) === ISSUE_STICKER_RUNTIME_OWNER.extension;
338
+ }
259
339
  const SEARCH_DEBOUNCE_MS = 250;
260
340
  function AsyncSearchSelect({
261
341
  value,
@@ -711,6 +791,22 @@ const PenLine = createLucideIcon$1("PenLine", [
711
791
  }
712
792
  ]
713
793
  ]);
794
+ /**
795
+ * @license lucide-react v0.468.0 - ISC
796
+ *
797
+ * This source code is licensed under the ISC license.
798
+ * See the LICENSE file in the root directory of this source tree.
799
+ */
800
+ const Pin = createLucideIcon$1("Pin", [
801
+ ["path", { d: "M12 17v5", key: "bb1du9" }],
802
+ [
803
+ "path",
804
+ {
805
+ d: "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",
806
+ key: "1nkz8b"
807
+ }
808
+ ]
809
+ ]);
714
810
  /**
715
811
  * @license lucide-react v0.468.0 - ISC
716
812
  *
@@ -723,6 +819,23 @@ const RefreshCw = createLucideIcon$1("RefreshCw", [
723
819
  ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
724
820
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
725
821
  ]);
822
+ /**
823
+ * @license lucide-react v0.468.0 - ISC
824
+ *
825
+ * This source code is licensed under the ISC license.
826
+ * See the LICENSE file in the root directory of this source tree.
827
+ */
828
+ const SlidersHorizontal = createLucideIcon$1("SlidersHorizontal", [
829
+ ["line", { x1: "21", x2: "14", y1: "4", y2: "4", key: "obuewd" }],
830
+ ["line", { x1: "10", x2: "3", y1: "4", y2: "4", key: "1q6298" }],
831
+ ["line", { x1: "21", x2: "12", y1: "12", y2: "12", key: "1iu8h1" }],
832
+ ["line", { x1: "8", x2: "3", y1: "12", y2: "12", key: "ntss68" }],
833
+ ["line", { x1: "21", x2: "16", y1: "20", y2: "20", key: "14d8ph" }],
834
+ ["line", { x1: "12", x2: "3", y1: "20", y2: "20", key: "m0wm8r" }],
835
+ ["line", { x1: "14", x2: "14", y1: "2", y2: "6", key: "14e1ph" }],
836
+ ["line", { x1: "8", x2: "8", y1: "10", y2: "14", key: "1i6ji0" }],
837
+ ["line", { x1: "16", x2: "16", y1: "18", y2: "22", key: "1lctlv" }]
838
+ ]);
726
839
  /**
727
840
  * @license lucide-react v0.468.0 - ISC
728
841
  *
@@ -14213,6 +14326,7 @@ function ToastContainer({ position: position2 = "top-right" }) {
14213
14326
  const content2 = /* @__PURE__ */ jsx(
14214
14327
  "div",
14215
14328
  {
14329
+ "data-issue-sticker-toast-layer": "",
14216
14330
  className: cn$1(
14217
14331
  `pointer-events-none fixed ${OVERLAY_LAYER.toast} flex flex-col-reverse`,
14218
14332
  positionClass
@@ -14259,6 +14373,28 @@ function useIssueListGenerationPolling({
14259
14373
  onRefetch
14260
14374
  });
14261
14375
  }
14376
+ const EMPTY_ISSUE_FIELD_FILTERS = {
14377
+ dateFrom: null,
14378
+ dateTo: null,
14379
+ customFieldValues: {},
14380
+ jiraFieldValues: {},
14381
+ notionFieldValues: {}
14382
+ };
14383
+ function countRecord(record) {
14384
+ return Object.values(record).filter((values) => values.length > 0).length;
14385
+ }
14386
+ function countActiveIssueFieldFilters(filters) {
14387
+ return (filters.dateFrom || filters.dateTo ? 1 : 0) + countRecord(filters.customFieldValues) + countRecord(filters.jiraFieldValues) + countRecord(filters.notionFieldValues);
14388
+ }
14389
+ function toIssueFilterParams(filters) {
14390
+ return {
14391
+ ...filters.dateFrom ? { dateFrom: filters.dateFrom } : {},
14392
+ ...filters.dateTo ? { dateTo: filters.dateTo } : {},
14393
+ ...countRecord(filters.customFieldValues) ? { customFieldValues: filters.customFieldValues } : {},
14394
+ ...countRecord(filters.jiraFieldValues) ? { jiraFieldValues: filters.jiraFieldValues } : {},
14395
+ ...countRecord(filters.notionFieldValues) ? { notionFieldValues: filters.notionFieldValues } : {}
14396
+ };
14397
+ }
14262
14398
  async function uploadSignedMedia(file, mediaType, issueId) {
14263
14399
  return uploadSignedMediaWithApi(
14264
14400
  {
@@ -14324,7 +14460,7 @@ function recordToFilterArray(record, keyFieldName) {
14324
14460
  ([key, values]) => ({ [keyFieldName]: key, values })
14325
14461
  );
14326
14462
  }
14327
- function buildFilterQueryParams(filters, options = {}) {
14463
+ function buildFilterQueryParams(filters) {
14328
14464
  var _a;
14329
14465
  const params = new URLSearchParams();
14330
14466
  if (filters.projectId) {
@@ -14337,29 +14473,27 @@ function buildFilterQueryParams(filters, options = {}) {
14337
14473
  params.set("url", filters.url);
14338
14474
  }
14339
14475
  }
14340
- if (options.includeListFilters) {
14341
- const search2 = (_a = filters.search) == null ? void 0 : _a.trim();
14342
- if (search2) {
14343
- params.set("search", search2);
14344
- }
14345
- if (filters.dateFrom) {
14346
- params.set("date_from", filters.dateFrom);
14347
- }
14348
- if (filters.dateTo) {
14349
- params.set("date_to", filters.dateTo);
14350
- }
14351
- const customArr = recordToFilterArray(filters.customFieldValues, "fieldDefinitionId");
14352
- if (customArr) {
14353
- params.set("custom_field_filters", JSON.stringify(customArr));
14354
- }
14355
- const jiraArr = recordToFilterArray(filters.jiraFieldValues, "fieldName");
14356
- if (jiraArr) {
14357
- params.set("jira_field_filters", JSON.stringify(jiraArr));
14358
- }
14359
- const notionArr = recordToFilterArray(filters.notionFieldValues, "fieldName");
14360
- if (notionArr) {
14361
- params.set("notion_field_filters", JSON.stringify(notionArr));
14362
- }
14476
+ const search2 = (_a = filters.search) == null ? void 0 : _a.trim();
14477
+ if (search2) {
14478
+ params.set("search", search2);
14479
+ }
14480
+ if (filters.dateFrom) {
14481
+ params.set("date_from", filters.dateFrom);
14482
+ }
14483
+ if (filters.dateTo) {
14484
+ params.set("date_to", filters.dateTo);
14485
+ }
14486
+ const customArr = recordToFilterArray(filters.customFieldValues, "fieldDefinitionId");
14487
+ if (customArr) {
14488
+ params.set("custom_field_filters", JSON.stringify(customArr));
14489
+ }
14490
+ const jiraArr = recordToFilterArray(filters.jiraFieldValues, "fieldName");
14491
+ if (jiraArr) {
14492
+ params.set("jira_field_filters", JSON.stringify(jiraArr));
14493
+ }
14494
+ const notionArr = recordToFilterArray(filters.notionFieldValues, "fieldName");
14495
+ if (notionArr) {
14496
+ params.set("notion_field_filters", JSON.stringify(notionArr));
14363
14497
  }
14364
14498
  if (filters.externalUserId) {
14365
14499
  params.set("external_user_id", filters.externalUserId);
@@ -14400,7 +14534,7 @@ const issueService = {
14400
14534
  if (!options.forceRefresh && issuesCache && issuesCache.filterKey === filterKey && now2 - issuesCache.timestamp < CACHE_DURATION_MS) {
14401
14535
  return issuesCache.data;
14402
14536
  }
14403
- const queryParams = buildFilterQueryParams(filters, { includeListFilters: true });
14537
+ const queryParams = buildFilterQueryParams(filters);
14404
14538
  const { items: issues = [] } = await apiClient.get(
14405
14539
  `${issuesEndpoint()}${queryParams}`
14406
14540
  );
@@ -14447,7 +14581,7 @@ const issueService = {
14447
14581
  invalidateCache() {
14448
14582
  invalidateIssuesCache();
14449
14583
  },
14450
- // 계약 정본: 백엔드 GET /api/sdk/issues/:id 는 back#101부터 읽기-시점-스크럽된
14584
+ // 계약 기준: 백엔드 GET /api/sdk/issues/:id 는 back#101부터 읽기-시점-스크럽된
14451
14585
  // llm_prompt 를 상세 응답에 포함한다(목록 응답에는 없음) — 스코프를 이 반환 타입에만 한정한다.
14452
14586
  async getIssue(id2) {
14453
14587
  return apiClient.get(
@@ -14464,7 +14598,7 @@ const issueService = {
14464
14598
  return issue;
14465
14599
  },
14466
14600
  /**
14467
- * 재생성. 스펙상 세 표면 모두에서 되고 역할과 무관하다 — 게이트는 역할이 아니라
14601
+ * 재생성. 스펙상 세 채널 모두에서 되고 역할과 무관하다 — 검사는 역할이 아니라
14468
14602
  * 그 이슈에 접근할 수 있는지다(백엔드가 판정한다).
14469
14603
  *
14470
14604
  * 응답으로 갱신된 이슈가 오지만 상태는 다시 pending 이다. 호출부는 응답을
@@ -14490,14 +14624,15 @@ const issueService = {
14490
14624
  invalidateIssuesCache();
14491
14625
  }
14492
14626
  };
14493
- async function loadIssuesFromServer(url, projectId, externalUserId, options = {}) {
14627
+ async function loadIssuesFromServer(url, projectId, externalUserId, filters, options = {}) {
14494
14628
  if (!projectId) return [];
14495
14629
  try {
14496
14630
  return await issueService.getIssueStickers(
14497
14631
  {
14498
14632
  url,
14499
14633
  projectId,
14500
- ...externalUserId ? { externalUserId } : {}
14634
+ ...externalUserId ? { externalUserId } : {},
14635
+ ...toIssueFilterParams(filters)
14501
14636
  },
14502
14637
  options
14503
14638
  ) || [];
@@ -14512,24 +14647,38 @@ function contentIssuesQueryKey({
14512
14647
  currentUrl,
14513
14648
  projectId,
14514
14649
  isMember,
14515
- externalUserId
14650
+ externalUserId,
14651
+ filters = EMPTY_ISSUE_FIELD_FILTERS
14516
14652
  }) {
14517
- return [...contentIssuesQueryRoot, currentUrl, projectId, isMember, externalUserId];
14653
+ return [
14654
+ ...contentIssuesQueryRoot,
14655
+ currentUrl,
14656
+ projectId,
14657
+ isMember,
14658
+ externalUserId,
14659
+ toIssueFilterParams(filters)
14660
+ ];
14518
14661
  }
14519
14662
  function fetchContentIssues({
14520
14663
  currentUrl,
14521
14664
  projectId,
14522
14665
  isMember,
14523
14666
  externalUserId,
14667
+ filters = EMPTY_ISSUE_FIELD_FILTERS,
14524
14668
  forceRefresh
14525
14669
  }) {
14526
- return loadIssuesFromServer(currentUrl, projectId, isMember ? void 0 : externalUserId, {
14527
- forceRefresh
14528
- });
14670
+ return loadIssuesFromServer(
14671
+ currentUrl,
14672
+ projectId,
14673
+ isMember ? void 0 : externalUserId,
14674
+ isMember ? filters : EMPTY_ISSUE_FIELD_FILTERS,
14675
+ { forceRefresh }
14676
+ );
14529
14677
  }
14530
- function useIssues(currentUrl) {
14678
+ function useIssues(currentUrl, filters = EMPTY_ISSUE_FIELD_FILTERS) {
14531
14679
  var _a;
14532
14680
  const { isMember } = useAuthContext();
14681
+ const appliedFilters = isMember ? filters : EMPTY_ISSUE_FIELD_FILTERS;
14533
14682
  const config = SDKManager.getInstance().config;
14534
14683
  const sessionIssuesRef = useRef([]);
14535
14684
  const projectIdQuery = useSuspenseQuery({
@@ -14545,7 +14694,8 @@ function useIssues(currentUrl) {
14545
14694
  currentUrl,
14546
14695
  projectId,
14547
14696
  isMember,
14548
- externalUserId: (_a = config.user) == null ? void 0 : _a.id
14697
+ externalUserId: (_a = config.user) == null ? void 0 : _a.id,
14698
+ filters: appliedFilters
14549
14699
  }),
14550
14700
  queryFn: () => {
14551
14701
  var _a2;
@@ -14553,7 +14703,8 @@ function useIssues(currentUrl) {
14553
14703
  currentUrl,
14554
14704
  projectId,
14555
14705
  isMember,
14556
- externalUserId: (_a2 = config.user) == null ? void 0 : _a2.id
14706
+ externalUserId: (_a2 = config.user) == null ? void 0 : _a2.id,
14707
+ filters: appliedFilters
14557
14708
  });
14558
14709
  }
14559
14710
  });
@@ -14845,6 +14996,7 @@ const ISSUE_DRAFT_DISABLED_MESSAGE = "지금은 AI 작성을 사용할 수 없
14845
14996
  const LABEL = "기대한 동작";
14846
14997
  const PLACEHOLDER = "예: 할인 쿠폰을 적용하면 결제 금액에서 즉시 차감되어야 합니다";
14847
14998
  const SWITCH_TO_MANUAL = "직접 작성";
14999
+ const SWITCH_TO_MANUAL_TOOLTIP = "제목, 설명 등 이슈 필드를 직접 작성합니다";
14848
15000
  const SUBMIT = "보내기";
14849
15001
  const MAX_INPUT_HEIGHT = 160;
14850
15002
  const FOCUS_RETRY_BUDGET_MS = 1e3;
@@ -14858,7 +15010,8 @@ function IssueIntentBubble({
14858
15010
  onSubmit,
14859
15011
  onSwitchToManual,
14860
15012
  submitting = false,
14861
- error = null
15013
+ error = null,
15014
+ toolbar
14862
15015
  }) {
14863
15016
  const inputRef = useRef(null);
14864
15017
  const canSubmit = !submitting && value.trim().length > 0;
@@ -14907,7 +15060,7 @@ function IssueIntentBubble({
14907
15060
  /* @__PURE__ */ jsxs(
14908
15061
  "div",
14909
15062
  {
14910
- className: `${ISSUE_STICKER_REPORT_FORM_CLASS} w-80 space-y-1.5 rounded-md border border-line-subtle bg-surface-1 p-1.5 transition-colors duration-fast ease-out focus-within:border-line-focus`,
15063
+ className: `${ISSUE_STICKER_REPORT_FORM_CLASS} w-[min(20rem,calc(100vw_-_1.5rem))] space-y-1.5 rounded-md border border-line-subtle bg-surface-1 p-1.5 transition-colors duration-fast ease-out focus-within:border-line-focus`,
14911
15064
  children: [
14912
15065
  /* @__PURE__ */ jsxs("div", { className: "flex items-end gap-1.5", children: [
14913
15066
  /* @__PURE__ */ jsx(
@@ -14936,9 +15089,23 @@ function IssueIntentBubble({
14936
15089
  )
14937
15090
  ] }),
14938
15091
  error ? /* @__PURE__ */ jsx("p", { className: "text-xs text-danger", children: error }) : null,
14939
- /* @__PURE__ */ jsxs(Button, { type: "button", variant: "secondary", size: "sm", onClick: onSwitchToManual, children: [
14940
- /* @__PURE__ */ jsx(PenLine, { className: "h-3.5 w-3.5" }),
14941
- SWITCH_TO_MANUAL
15092
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
15093
+ /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 240, skipDelayDuration: 120, disableHoverableContent: true, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
15094
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
15095
+ Button,
15096
+ {
15097
+ type: "button",
15098
+ variant: "secondary",
15099
+ size: "icon",
15100
+ className: "h-7 w-7",
15101
+ "aria-label": SWITCH_TO_MANUAL,
15102
+ onClick: onSwitchToManual,
15103
+ children: /* @__PURE__ */ jsx(PenLine, { className: "h-3.5 w-3.5" })
15104
+ }
15105
+ ) }),
15106
+ /* @__PURE__ */ jsx(TooltipContent, { side: "top", sideOffset: 10, children: SWITCH_TO_MANUAL_TOOLTIP })
15107
+ ] }) }),
15108
+ toolbar ?? null
14942
15109
  ] })
14943
15110
  ]
14944
15111
  }
@@ -15505,6 +15672,180 @@ function IssueIntentBubbleAnchor({
15505
15672
  )
15506
15673
  ] });
15507
15674
  }
15675
+ function appendSnippet(base, body) {
15676
+ const trimmedBody = body.trim();
15677
+ if (!trimmedBody) return base;
15678
+ const trimmedBase = base.trimEnd();
15679
+ if (!trimmedBase) return trimmedBody;
15680
+ return `${trimmedBase}
15681
+
15682
+ ${trimmedBody}`;
15683
+ }
15684
+ const TRIGGER_LABEL = "고정 문구 선택";
15685
+ const CLEAR_OPTION_LABEL = "선택 안 함";
15686
+ const GROUP_LABEL = {
15687
+ project: "공용 문구",
15688
+ personal: "내 문구"
15689
+ };
15690
+ function SnippetPicker({
15691
+ snippets,
15692
+ selectedId,
15693
+ onSelect,
15694
+ disabled = false
15695
+ }) {
15696
+ const [open, setOpen] = useState(false);
15697
+ const listRef = useRef(null);
15698
+ const optionRefs = useRef([]);
15699
+ const [focusedIndex, setFocusedIndex] = useState(0);
15700
+ const selected = snippets.find((snippet) => snippet.id === selectedId) ?? null;
15701
+ const isEmpty = snippets.length === 0;
15702
+ const projectSnippets = snippets.filter((snippet) => snippet.scope === "project");
15703
+ const personalSnippets = snippets.filter((snippet) => snippet.scope === "personal");
15704
+ const orderedSnippets = [...projectSnippets, ...personalSnippets];
15705
+ useEffect(() => {
15706
+ if (!open) return;
15707
+ const selectedIndex = selectedId ? orderedSnippets.findIndex((snippet) => snippet.id === selectedId) + 1 : 0;
15708
+ setFocusedIndex(Math.max(selectedIndex, 0));
15709
+ }, [open]);
15710
+ useEffect(() => {
15711
+ var _a;
15712
+ if (!open) return;
15713
+ (_a = optionRefs.current[focusedIndex]) == null ? void 0 : _a.focus();
15714
+ }, [open, focusedIndex]);
15715
+ function selectAndClose(id2) {
15716
+ onSelect(id2);
15717
+ setOpen(false);
15718
+ }
15719
+ function handleListKeyDown(event) {
15720
+ const lastIndex = orderedSnippets.length;
15721
+ switch (event.key) {
15722
+ case "ArrowDown":
15723
+ event.preventDefault();
15724
+ setFocusedIndex((index2) => Math.min(index2 + 1, lastIndex));
15725
+ break;
15726
+ case "ArrowUp":
15727
+ event.preventDefault();
15728
+ setFocusedIndex((index2) => Math.max(index2 - 1, 0));
15729
+ break;
15730
+ case "Home":
15731
+ event.preventDefault();
15732
+ setFocusedIndex(0);
15733
+ break;
15734
+ case "End":
15735
+ event.preventDefault();
15736
+ setFocusedIndex(lastIndex);
15737
+ break;
15738
+ }
15739
+ }
15740
+ function optionClassName(isSelected) {
15741
+ return cn$1(
15742
+ "flex w-full flex-col items-start gap-0.5 rounded-sm border border-transparent px-2.5 py-1.5 text-left outline-none",
15743
+ "hover:bg-surface-2 focus-visible:border-line-focus",
15744
+ isSelected && "bg-surface-2"
15745
+ );
15746
+ }
15747
+ let optionIndex = 0;
15748
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: disabled ? void 0 : setOpen, children: [
15749
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
15750
+ "button",
15751
+ {
15752
+ type: "button",
15753
+ disabled: disabled || isEmpty,
15754
+ className: cn$1(
15755
+ "inline-flex max-w-[10rem] items-center gap-1 rounded-sm border border-transparent px-2 py-1 text-xs text-text-secondary outline-none",
15756
+ "hover:bg-surface-2 focus-visible:border-line-focus disabled:cursor-not-allowed disabled:opacity-40"
15757
+ ),
15758
+ children: [
15759
+ /* @__PURE__ */ jsx(Pin, { className: "h-3.5 w-3.5 shrink-0" }),
15760
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: selected ? selected.label : TRIGGER_LABEL }),
15761
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3 shrink-0" })
15762
+ ]
15763
+ }
15764
+ ) }),
15765
+ /* @__PURE__ */ jsx(
15766
+ PopoverContent,
15767
+ {
15768
+ align: "start",
15769
+ sideOffset: 4,
15770
+ onEscapeKeyDown: stopEscapePropagation(),
15771
+ className: cn$1(`panel-shell-subtle w-72 p-1.5 shadow-lg ${OVERLAY_LAYER.floating}`),
15772
+ children: /* @__PURE__ */ jsxs(
15773
+ "div",
15774
+ {
15775
+ ref: listRef,
15776
+ role: "listbox",
15777
+ "aria-label": TRIGGER_LABEL,
15778
+ onKeyDown: handleListKeyDown,
15779
+ className: "flex max-h-80 flex-col gap-0.5 overflow-y-auto",
15780
+ children: [
15781
+ /* @__PURE__ */ jsx(
15782
+ "button",
15783
+ {
15784
+ ref: (node2) => {
15785
+ optionRefs.current[0] = node2;
15786
+ },
15787
+ type: "button",
15788
+ role: "option",
15789
+ "aria-selected": selectedId === null,
15790
+ tabIndex: focusedIndex === 0 ? 0 : -1,
15791
+ onClick: () => selectAndClose(null),
15792
+ className: optionClassName(selectedId === null),
15793
+ children: /* @__PURE__ */ jsx("span", { className: "text-sm text-text-secondary", children: CLEAR_OPTION_LABEL })
15794
+ }
15795
+ ),
15796
+ [["project", projectSnippets], ["personal", personalSnippets]].map(
15797
+ ([scope, groupSnippets]) => groupSnippets.length === 0 ? null : /* @__PURE__ */ jsxs(
15798
+ "div",
15799
+ {
15800
+ className: "border-t border-line-subtle pt-1 mt-1 first:mt-0 first:border-t-0 first:pt-0",
15801
+ children: [
15802
+ /* @__PURE__ */ jsx(
15803
+ "div",
15804
+ {
15805
+ role: "presentation",
15806
+ className: "px-2.5 pb-1 pt-1 text-[11px] font-medium text-text-tertiary",
15807
+ children: GROUP_LABEL[scope]
15808
+ }
15809
+ ),
15810
+ groupSnippets.map((snippet) => {
15811
+ optionIndex += 1;
15812
+ const index2 = optionIndex;
15813
+ const isSelected = snippet.id === selectedId;
15814
+ return /* @__PURE__ */ jsxs(
15815
+ "button",
15816
+ {
15817
+ ref: (node2) => {
15818
+ optionRefs.current[index2] = node2;
15819
+ },
15820
+ type: "button",
15821
+ role: "option",
15822
+ "aria-selected": isSelected,
15823
+ tabIndex: focusedIndex === index2 ? 0 : -1,
15824
+ onClick: () => selectAndClose(snippet.id),
15825
+ className: optionClassName(isSelected),
15826
+ children: [
15827
+ /* @__PURE__ */ jsxs("span", { className: "flex w-full items-center justify-between gap-2", children: [
15828
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-text-primary", children: snippet.label }),
15829
+ isSelected ? /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 shrink-0 text-brand" }) : null
15830
+ ] }),
15831
+ /* @__PURE__ */ jsx("span", { className: "line-clamp-2 text-xs text-text-tertiary", children: snippet.body })
15832
+ ]
15833
+ },
15834
+ snippet.id
15835
+ );
15836
+ })
15837
+ ]
15838
+ },
15839
+ scope
15840
+ )
15841
+ )
15842
+ ]
15843
+ }
15844
+ )
15845
+ }
15846
+ )
15847
+ ] });
15848
+ }
15508
15849
  function useProject() {
15509
15850
  const auth = useAuthContext();
15510
15851
  return {
@@ -15684,20 +16025,15 @@ function useJiraConnectNudge(projectId, enabled) {
15684
16025
  const isResolving = isEnabled && !isFetched;
15685
16026
  return { needsConnect, connect, isResolving };
15686
16027
  }
15687
- function useIssueFormState({ initialDescription } = {}) {
16028
+ function useIssueFormState() {
15688
16029
  const [title, setTitle] = useState("");
15689
- const [description, setDescription] = useState(initialDescription || "");
16030
+ const [description, setDescription] = useState("");
15690
16031
  const [mode, setMode] = useState("ai");
15691
16032
  const [renderedMode, setRenderedMode] = useState("ai");
15692
16033
  const [intent, setIntent] = useState("");
15693
16034
  const modeRef = useRef(mode);
15694
16035
  modeRef.current = mode;
15695
16036
  const finishModeTransition = useCallback(() => setRenderedMode(modeRef.current), []);
15696
- useEffect(() => {
15697
- if (initialDescription !== void 0) {
15698
- setDescription(initialDescription);
15699
- }
15700
- }, [initialDescription]);
15701
16037
  return {
15702
16038
  title,
15703
16039
  description,
@@ -15853,6 +16189,26 @@ function waitForFormOpen() {
15853
16189
  setTimeout(resolve, CAPTURE_START_DELAY_MS);
15854
16190
  });
15855
16191
  }
16192
+ const BLOCKED_PAGE_EVENTS = [
16193
+ "pointerdown",
16194
+ "pointerup",
16195
+ "mousedown",
16196
+ "mouseup",
16197
+ "dblclick",
16198
+ "auxclick",
16199
+ "contextmenu"
16200
+ ];
16201
+ function isOwnRuntimeTarget(target) {
16202
+ if (!(target instanceof HTMLElement)) return false;
16203
+ return target.closest(".issue-sticker-marker") !== null || target.closest("#issue-sticker-host") !== null;
16204
+ }
16205
+ const HIGHLIGHT_CLASS = "issue-sticker-mode-highlight";
16206
+ function highlightElement(element2) {
16207
+ element2.classList.add(HIGHLIGHT_CLASS);
16208
+ }
16209
+ function unhighlightElement(element2) {
16210
+ element2 == null ? void 0 : element2.classList.remove(HIGHLIGHT_CLASS);
16211
+ }
15856
16212
  function useClickPosition(isCreatingIssueRef, recordedVideoFile) {
15857
16213
  const [clickPosition, setClickPosition] = useState(null);
15858
16214
  const clickPositionRef = useRef(null);
@@ -15863,6 +16219,8 @@ function useClickPosition(isCreatingIssueRef, recordedVideoFile) {
15863
16219
  useEffect(() => {
15864
16220
  const handleMouseOver = (e) => {
15865
16221
  if (!isCreatingIssueRef.current) {
16222
+ unhighlightElement(highlightedElementRef.current);
16223
+ highlightedElementRef.current = null;
15866
16224
  return;
15867
16225
  }
15868
16226
  preloadModernScreenshot();
@@ -15876,14 +16234,14 @@ function useClickPosition(isCreatingIssueRef, recordedVideoFile) {
15876
16234
  if (target.closest(".issue-sticker-marker") || target.closest(".issue-form-overlay") || target.closest(".issue-popover") || target.closest("#issue-sticker-host")) {
15877
16235
  return;
15878
16236
  }
15879
- if (highlightedElementRef.current) {
15880
- highlightedElementRef.current.classList.remove("issue-sticker-mode-highlight");
15881
- }
15882
- target.classList.add("issue-sticker-mode-highlight");
16237
+ unhighlightElement(highlightedElementRef.current);
16238
+ highlightElement(target);
15883
16239
  highlightedElementRef.current = target;
15884
16240
  };
15885
16241
  const handleMouseOut = (e) => {
15886
16242
  if (!isCreatingIssueRef.current) {
16243
+ unhighlightElement(highlightedElementRef.current);
16244
+ highlightedElementRef.current = null;
15887
16245
  return;
15888
16246
  }
15889
16247
  const target = e.target;
@@ -15891,7 +16249,7 @@ function useClickPosition(isCreatingIssueRef, recordedVideoFile) {
15891
16249
  return;
15892
16250
  }
15893
16251
  if (highlightedElementRef.current === target) {
15894
- target.classList.remove("issue-sticker-mode-highlight");
16252
+ unhighlightElement(target);
15895
16253
  highlightedElementRef.current = null;
15896
16254
  }
15897
16255
  };
@@ -15904,10 +16262,8 @@ function useClickPosition(isCreatingIssueRef, recordedVideoFile) {
15904
16262
  passive: true
15905
16263
  });
15906
16264
  return () => {
15907
- if (highlightedElementRef.current) {
15908
- highlightedElementRef.current.classList.remove("issue-sticker-mode-highlight");
15909
- highlightedElementRef.current = null;
15910
- }
16265
+ unhighlightElement(highlightedElementRef.current);
16266
+ highlightedElementRef.current = null;
15911
16267
  document.removeEventListener("mouseover", handleMouseOver, {
15912
16268
  capture: true
15913
16269
  });
@@ -15969,10 +16325,8 @@ function useClickPosition(isCreatingIssueRef, recordedVideoFile) {
15969
16325
  e.preventDefault();
15970
16326
  e.stopImmediatePropagation();
15971
16327
  const selectedElement = highlightedElementRef.current ?? clickTarget;
15972
- if (highlightedElementRef.current) {
15973
- highlightedElementRef.current.classList.remove("issue-sticker-mode-highlight");
15974
- highlightedElementRef.current = null;
15975
- }
16328
+ unhighlightElement(highlightedElementRef.current);
16329
+ highlightedElementRef.current = null;
15976
16330
  const newClickPosition = {
15977
16331
  x: e.clientX + window.scrollX,
15978
16332
  y: e.clientY + window.scrollY,
@@ -15985,23 +16339,35 @@ function useClickPosition(isCreatingIssueRef, recordedVideoFile) {
15985
16339
  setClickPosition(newClickPosition);
15986
16340
  clickPositionRef.current = newClickPosition;
15987
16341
  };
16342
+ const blockPageEvent = (e) => {
16343
+ if (!isCreatingIssueRef.current) return;
16344
+ if (isOwnRuntimeTarget(e.target)) return;
16345
+ e.preventDefault();
16346
+ e.stopImmediatePropagation();
16347
+ };
15988
16348
  document.addEventListener("click", handleDocumentClick, {
15989
16349
  capture: true,
15990
16350
  passive: false
15991
16351
  });
16352
+ BLOCKED_PAGE_EVENTS.forEach((type) => {
16353
+ document.addEventListener(type, blockPageEvent, { capture: true, passive: false });
16354
+ });
15992
16355
  return () => {
15993
16356
  document.removeEventListener("click", handleDocumentClick, {
15994
16357
  capture: true
15995
16358
  });
16359
+ BLOCKED_PAGE_EVENTS.forEach((type) => {
16360
+ document.removeEventListener(type, blockPageEvent, {
16361
+ capture: true
16362
+ });
16363
+ });
15996
16364
  };
15997
16365
  }, [isCreatingIssueRef, recordedVideoFile]);
15998
16366
  const clearClickPosition = () => {
15999
16367
  setClickPosition(null);
16000
16368
  clickPositionRef.current = null;
16001
- if (highlightedElementRef.current) {
16002
- highlightedElementRef.current.classList.remove("issue-sticker-mode-highlight");
16003
- highlightedElementRef.current = null;
16004
- }
16369
+ unhighlightElement(highlightedElementRef.current);
16370
+ highlightedElementRef.current = null;
16005
16371
  };
16006
16372
  const setClickPositionManually = (position2) => {
16007
16373
  setClickPosition(position2);
@@ -16105,7 +16471,8 @@ function useIssueSubmission({
16105
16471
  activeIntegrationType,
16106
16472
  notionIntegrationId,
16107
16473
  videoFile,
16108
- sessionReplay
16474
+ sessionReplay,
16475
+ snippetId
16109
16476
  }) {
16110
16477
  const failedServicesRef = useRef([]);
16111
16478
  const { fetchNetworkLogs } = useNetworkLogs();
@@ -16169,6 +16536,7 @@ function useIssueSubmission({
16169
16536
  tenant_id: authInfo.tenantId,
16170
16537
  project_id: authInfo.projectId,
16171
16538
  account_id: authInfo.accountId || void 0,
16539
+ snippet_id: snippetId ?? void 0,
16172
16540
  ...buildExternalUserPayload(SDKManager.getInstance().config.user),
16173
16541
  // 비어 있는 값은 보내지 않는다 — 저장해봐야 값 없음과 같고 요청만 커진다.
16174
16542
  custom_field_values: Object.entries(customFieldValues ?? {}).filter(([, value]) => value !== null && value !== void 0 && value !== "").map(([field_definition_id, value]) => ({ field_definition_id, value }))
@@ -16256,6 +16624,141 @@ function useIssueSubmission({
16256
16624
  error: createIssueMutation.error ? `이슈 생성에 실패했습니다: ${createIssueMutation.error instanceof Error ? createIssueMutation.error.message : "알 수 없는 오류"}` : null
16257
16625
  };
16258
16626
  }
16627
+ async function fetchSnippets(projectId) {
16628
+ try {
16629
+ return await apiClient.get(
16630
+ `/api/snippets?projectId=${encodeURIComponent(projectId)}`
16631
+ );
16632
+ } catch (error) {
16633
+ devLogger.error("snippetService", "고정 문구 조회 실패:", error);
16634
+ return [];
16635
+ }
16636
+ }
16637
+ function buildSettingsQuery(settingKey, projectId, serviceType) {
16638
+ const params = new URLSearchParams({ setting_key: settingKey });
16639
+ if (projectId) {
16640
+ params.set("project_id", projectId);
16641
+ }
16642
+ {
16643
+ params.set("service_type", serviceType);
16644
+ }
16645
+ return `/api/settings?${params.toString()}`;
16646
+ }
16647
+ async function getSetting(settingKey, defaultValue, _tenantId, _accountId, _email, projectId, serviceType) {
16648
+ try {
16649
+ const data = await apiClient.get(
16650
+ buildSettingsQuery(settingKey, projectId, serviceType)
16651
+ );
16652
+ if (!data) {
16653
+ if (defaultValue !== null && defaultValue !== void 0 && defaultValue !== "") {
16654
+ await initializeSetting(settingKey, defaultValue, projectId, serviceType);
16655
+ }
16656
+ return defaultValue;
16657
+ }
16658
+ return data.setting_value ?? defaultValue;
16659
+ } catch (error) {
16660
+ devLogger.error("settingsService", `설정 로드 실패 (${settingKey}):`, error);
16661
+ return defaultValue;
16662
+ }
16663
+ }
16664
+ async function initializeSetting(settingKey, value, projectId, serviceType) {
16665
+ try {
16666
+ await apiClient.put("/api/settings", {
16667
+ setting_key: settingKey,
16668
+ setting_value: value,
16669
+ project_id: projectId ?? null,
16670
+ service_type: serviceType ?? null
16671
+ });
16672
+ } catch (error) {
16673
+ devLogger.error("settingsService", `설정 초기화 실패 (${settingKey}):`, error);
16674
+ }
16675
+ }
16676
+ async function setSetting(settingKey, value, _tenantId, _accountId, _email, projectId, serviceType) {
16677
+ try {
16678
+ await apiClient.put("/api/settings", {
16679
+ setting_key: settingKey,
16680
+ setting_value: value,
16681
+ project_id: projectId ?? null,
16682
+ service_type: serviceType ?? null
16683
+ });
16684
+ } catch (error) {
16685
+ devLogger.error("settingsService", `설정 저장 실패 (${settingKey}):`, error);
16686
+ throw error;
16687
+ }
16688
+ }
16689
+ function useAuth() {
16690
+ const ctx = useAuthContext();
16691
+ return {
16692
+ isAuthenticated: ctx.isAuthenticated,
16693
+ isMember: ctx.isMember,
16694
+ isLoading: ctx.isLoading,
16695
+ user: ctx.accountId ? { id: ctx.accountId, email: "" } : null,
16696
+ tenant: ctx.tenantId ? { id: ctx.tenantId, name: "", slug: "" } : null,
16697
+ accountId: ctx.accountId
16698
+ };
16699
+ }
16700
+ const EMPTY$1 = [];
16701
+ const SETTING_KEY = "lastIssueSnippetId";
16702
+ function useSnippets(projectId) {
16703
+ const { isMember } = useAuth();
16704
+ const [manualSelectedId, setManualSelectedId] = useState(void 0);
16705
+ useEffect(() => {
16706
+ setManualSelectedId(void 0);
16707
+ }, [projectId]);
16708
+ const enabled = Boolean(projectId) && isMember;
16709
+ const { data: snippets = EMPTY$1 } = useQuery({
16710
+ queryKey: ["issueSnippets", projectId ?? "none"],
16711
+ queryFn: () => projectId ? fetchSnippets(projectId) : Promise.resolve(EMPTY$1),
16712
+ enabled,
16713
+ staleTime: 5 * 60 * 1e3
16714
+ });
16715
+ const { data: rememberedId = null } = useQuery({
16716
+ queryKey: ["lastIssueSnippetId", projectId ?? "none"],
16717
+ queryFn: () => projectId ? getSetting(
16718
+ SETTING_KEY,
16719
+ null,
16720
+ void 0,
16721
+ void 0,
16722
+ void 0,
16723
+ projectId,
16724
+ "GENERAL"
16725
+ ) : Promise.resolve(null),
16726
+ enabled
16727
+ });
16728
+ const candidateId = manualSelectedId !== void 0 ? manualSelectedId : rememberedId;
16729
+ const selectedId = candidateId && snippets.some((s) => s.id === candidateId) ? candidateId : null;
16730
+ const setSelectedId = useCallback((id2) => {
16731
+ setManualSelectedId(id2);
16732
+ }, []);
16733
+ const rememberSelection = useCallback(async () => {
16734
+ if (!projectId || !isMember) return;
16735
+ try {
16736
+ await setSetting(
16737
+ SETTING_KEY,
16738
+ selectedId,
16739
+ void 0,
16740
+ void 0,
16741
+ void 0,
16742
+ projectId,
16743
+ "GENERAL"
16744
+ );
16745
+ } catch {
16746
+ }
16747
+ }, [projectId, isMember, selectedId]);
16748
+ return { snippets, selectedId, setSelectedId, rememberSelection };
16749
+ }
16750
+ function mergeSnippetIntoDescription(currentDescription, prevBody, nextBody) {
16751
+ const normalizedNext = nextBody || null;
16752
+ if (prevBody === normalizedNext) {
16753
+ return { ref: prevBody };
16754
+ }
16755
+ const trimmedCurrent = currentDescription.trimEnd();
16756
+ if (prevBody && !trimmedCurrent.endsWith(prevBody)) {
16757
+ return { ref: null };
16758
+ }
16759
+ const base = prevBody ? trimmedCurrent.slice(0, trimmedCurrent.length - prevBody.length).trimEnd() : currentDescription;
16760
+ return { ref: normalizedNext, description: appendSnippet(base, nextBody) };
16761
+ }
16259
16762
  function useSessionReplayController() {
16260
16763
  const controllerRef = useRef(null);
16261
16764
  if (!controllerRef.current) {
@@ -16933,13 +17436,12 @@ function IssueForm({
16933
17436
  position: position2,
16934
17437
  onSubmit,
16935
17438
  onCancel,
16936
- initialDescription,
16937
17439
  activeIntegration,
16938
17440
  isIntegrationLoading = false
16939
17441
  }) {
16940
17442
  var _a, _b2;
16941
17443
  const { isMember } = useAuthContext();
16942
- const formState = useIssueFormState({ initialDescription });
17444
+ const formState = useIssueFormState();
16943
17445
  const sessionReplay = useSessionReplay();
16944
17446
  const { markReportStart, clearReportStart } = sessionReplay;
16945
17447
  useEffect(() => {
@@ -16966,6 +17468,22 @@ function IssueForm({
16966
17468
  const [customFieldValues, setCustomFieldValues] = useState({});
16967
17469
  const { selectedProjectId } = useProject();
16968
17470
  const showCustomFields = isMember && Boolean(selectedProjectId);
17471
+ const snippets = useSnippets(selectedProjectId);
17472
+ const { setDescription } = formState;
17473
+ const lastAppliedSnippetBodyRef = useRef(null);
17474
+ useEffect(() => {
17475
+ const selected = snippets.snippets.find((snippet) => snippet.id === snippets.selectedId);
17476
+ const nextBody = selected ? selected.body.trim() : "";
17477
+ const result = mergeSnippetIntoDescription(
17478
+ formState.description,
17479
+ lastAppliedSnippetBodyRef.current,
17480
+ nextBody
17481
+ );
17482
+ lastAppliedSnippetBodyRef.current = result.ref;
17483
+ if (result.description !== void 0) {
17484
+ setDescription(result.description);
17485
+ }
17486
+ }, [snippets.selectedId]);
16969
17487
  const [isOpen, setIsOpen] = useState(true);
16970
17488
  const jiraIntegrationId = ((_a = jiraService.getConfig()) == null ? void 0 : _a.integrationId) ?? null;
16971
17489
  const isResolvingIntegration = isMember && isIntegrationLoading;
@@ -16983,6 +17501,7 @@ function IssueForm({
16983
17501
  const issueSubmission = useIssueSubmission({
16984
17502
  position: position2,
16985
17503
  onSubmit: (hasIntegrationFailure) => {
17504
+ void snippets.rememberSelection();
16986
17505
  if (formState.mode === "ai") {
16987
17506
  onSubmit(hasIntegrationFailure);
16988
17507
  return;
@@ -16997,7 +17516,9 @@ function IssueForm({
16997
17516
  activeIntegrationType: (activeIntegration == null ? void 0 : activeIntegration.type) ?? null,
16998
17517
  notionIntegrationId: (activeIntegration == null ? void 0 : activeIntegration.type) === "NOTION" ? activeIntegration.integration.id : null,
16999
17518
  videoFile: position2.videoFile,
17000
- sessionReplay
17519
+ sessionReplay,
17520
+ // 직접 작성 모드는 이미 설명란에 문구 본문을 붙였다 — 여기서 또 실으면 중복이다.
17521
+ snippetId: formState.mode === "ai" ? snippets.selectedId : null
17001
17522
  });
17002
17523
  useDisableBodyScroll(formState.mode !== "ai");
17003
17524
  useEffect(() => {
@@ -17086,7 +17607,16 @@ function IssueForm({
17086
17607
  onSubmit: () => void submitCurrentMode(),
17087
17608
  onSwitchToManual: () => formState.setMode("manual"),
17088
17609
  submitting: issueSubmission.isSubmitting,
17089
- error: issueSubmission.error
17610
+ error: issueSubmission.error,
17611
+ toolbar: /* @__PURE__ */ jsx(
17612
+ SnippetPicker,
17613
+ {
17614
+ snippets: snippets.snippets,
17615
+ selectedId: snippets.selectedId,
17616
+ onSelect: snippets.setSelectedId,
17617
+ disabled: issueSubmission.isSubmitting
17618
+ }
17619
+ )
17090
17620
  }
17091
17621
  )
17092
17622
  ]
@@ -17225,6 +17755,7 @@ function IssueForm({
17225
17755
  );
17226
17756
  }
17227
17757
  function invalidateIssueQueries(issueId) {
17758
+ issueService.invalidateCache();
17228
17759
  queryClient.invalidateQueries({ queryKey: ["contentIssues"] });
17229
17760
  queryClient.invalidateQueries({ queryKey: ["issue", issueId] });
17230
17761
  }
@@ -34496,7 +35027,10 @@ function IssueCustomFields({
34496
35027
  const { values, setValue } = useCustomFieldValueDraft({
34497
35028
  serverValues,
34498
35029
  save: (fieldDefinitionId, value) => upsertIssueCustomFieldValue(issueId, fieldDefinitionId, value),
34499
- onSaved: () => toast.success("필드 값이 저장되었습니다."),
35030
+ onSaved: () => {
35031
+ toast.success("필드 값이 저장되었습니다.");
35032
+ applyIssueMutationEffects(issueId);
35033
+ },
34500
35034
  onError: (_fieldDefinitionId, error) => {
34501
35035
  devLogger.error("IssueCustomFields", "커스텀 필드 값 저장 실패:", error);
34502
35036
  toast.error("필드 값 저장에 실패했습니다.");
@@ -35708,19 +36242,20 @@ function getCurrentStickerDocumentMetrics() {
35708
36242
  }
35709
36243
  const STICKER_PALETTE_WHITE = "#FFFFFF";
35710
36244
  const STICKER_PALETTE_INK = "#111827";
36245
+ const STICKER_PALETTE_BLACK = "#000000";
35711
36246
  const STICKER_PALETTE = {
35712
- slate: { bg: "#475569", fg: STICKER_PALETTE_WHITE },
35713
- blue: { bg: "#1D4ED8", fg: STICKER_PALETTE_WHITE },
35714
- teal: { bg: "#0F766E", fg: STICKER_PALETTE_WHITE },
35715
- green: { bg: "#15803D", fg: STICKER_PALETTE_WHITE },
35716
- amber: { bg: "#B45309", fg: STICKER_PALETTE_WHITE },
35717
- red: { bg: "#DC2626", fg: STICKER_PALETTE_WHITE },
35718
- pink: { bg: "#BE185D", fg: STICKER_PALETTE_WHITE },
35719
- violet: { bg: "#6D28D9", fg: STICKER_PALETTE_WHITE },
36247
+ slate: { bg: "#64748B", fg: STICKER_PALETTE_WHITE },
36248
+ blue: { bg: "#0A84FF", fg: STICKER_PALETTE_INK },
36249
+ teal: { bg: "#00BFA5", fg: STICKER_PALETTE_INK },
36250
+ green: { bg: "#00C853", fg: STICKER_PALETTE_INK },
36251
+ lime: { bg: "#84CC16", fg: STICKER_PALETTE_INK },
36252
+ red: { bg: "#FF0000", fg: STICKER_PALETTE_BLACK },
36253
+ pink: { bg: "#FF2D87", fg: STICKER_PALETTE_INK },
36254
+ violet: { bg: "#7C3AED", fg: STICKER_PALETTE_WHITE },
35720
36255
  orange: { bg: "#F97316", fg: STICKER_PALETTE_INK },
35721
- yellow: { bg: "#FACC15", fg: STICKER_PALETTE_INK },
35722
- indigo: { bg: "#4338CA", fg: STICKER_PALETTE_WHITE },
35723
- cyan: { bg: "#22D3EE", fg: STICKER_PALETTE_INK }
36256
+ yellow: { bg: "#FFD000", fg: STICKER_PALETTE_INK },
36257
+ indigo: { bg: "#4F46E5", fg: STICKER_PALETTE_WHITE },
36258
+ cyan: { bg: "#00BCD4", fg: STICKER_PALETTE_INK }
35724
36259
  };
35725
36260
  const STICKER_PALETTE_ORDER = Object.keys(STICKER_PALETTE);
35726
36261
  function getEntry(name2) {
@@ -35828,7 +36363,7 @@ function IssueSticker$1({
35828
36363
  const buttonStyle = {
35829
36364
  ...backgroundStyle,
35830
36365
  // 밝은 배경(노랑·주황·하늘)은 흰 글씨로 대비가 안 나온다. 팔레트가 정한 글씨색을
35831
- // inline 으로 얹어 text-white 클래스를 덮는다.
36366
+ // inline 으로 추가해 text-white 클래스를 덮는다.
35832
36367
  ...designForeground ? { color: designForeground } : {},
35833
36368
  ["--issue-sticker-expanded-width"]: `${expandedWidth}px`,
35834
36369
  ...clusterStackAnimation ? {
@@ -35874,7 +36409,7 @@ function IssueSticker$1({
35874
36409
  "span",
35875
36410
  {
35876
36411
  "data-sticker-badge": "",
35877
- className: `mx-3 shrink-0 whitespace-nowrap rounded-sm px-1.5 py-0.5 text-[10px] font-bold leading-none transition-opacity duration-[var(--issue-marker-expand-duration)] ease-out ${designForeground === STICKER_PALETTE_INK ? "bg-black/10" : "bg-white/25"} ${alwaysExpanded ? "opacity-100" : "opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100"}`,
36412
+ className: `mx-3 shrink-0 whitespace-nowrap rounded-sm px-1.5 py-0.5 text-[10px] font-bold leading-none transition-opacity duration-[var(--issue-marker-expand-duration)] ease-out ${designForeground === STICKER_PALETTE_WHITE ? "bg-white/25" : "bg-black/10"} ${alwaysExpanded ? "opacity-100" : "opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100"}`,
35878
36413
  children: badgeLabel
35879
36414
  }
35880
36415
  ) : null
@@ -36192,7 +36727,7 @@ async function getActiveIntegration(projectId) {
36192
36727
  return null;
36193
36728
  }
36194
36729
  }
36195
- function applyStickerFilters(issues, _filters, currentPageUrl) {
36730
+ function applyStickerFilters(issues, currentPageUrl) {
36196
36731
  const normalizedCurrentUrl = normalizeComparableUrl(currentPageUrl);
36197
36732
  if (!normalizedCurrentUrl) return [];
36198
36733
  return issues.filter((issue) => normalizeComparableUrl(issue.url) === normalizedCurrentUrl);
@@ -36219,10 +36754,10 @@ function useExtensionEnabled() {
36219
36754
  const [isEnabled] = useState(true);
36220
36755
  return isEnabled;
36221
36756
  }
36222
- const DEFAULT_VALUE$1 = false;
36757
+ const DEFAULT_VALUE = false;
36223
36758
  function useIssueMode() {
36224
- const [isCreatingIssue, setIsCreatingIssue] = useState(DEFAULT_VALUE$1);
36225
- const isCreatingIssueRef = useRef(DEFAULT_VALUE$1);
36759
+ const [isCreatingIssue, setIsCreatingIssue] = useState(DEFAULT_VALUE);
36760
+ const isCreatingIssueRef = useRef(DEFAULT_VALUE);
36226
36761
  useEffect(() => {
36227
36762
  isCreatingIssueRef.current = isCreatingIssue;
36228
36763
  }, [isCreatingIssue]);
@@ -36257,151 +36792,6 @@ function useIssueMode() {
36257
36792
  showToast
36258
36793
  };
36259
36794
  }
36260
- function buildSettingsQuery(settingKey, projectId, serviceType) {
36261
- const params = new URLSearchParams({ setting_key: settingKey });
36262
- if (projectId) {
36263
- params.set("project_id", projectId);
36264
- }
36265
- {
36266
- params.set("service_type", serviceType);
36267
- }
36268
- return `/api/settings?${params.toString()}`;
36269
- }
36270
- async function getSetting(settingKey, defaultValue, _tenantId, _accountId, _email, projectId, serviceType) {
36271
- try {
36272
- const data = await apiClient.get(
36273
- buildSettingsQuery(settingKey, projectId, serviceType)
36274
- );
36275
- if (!data) {
36276
- if (defaultValue !== null && defaultValue !== void 0 && defaultValue !== "") {
36277
- await initializeSetting(settingKey, defaultValue, projectId, serviceType);
36278
- }
36279
- return defaultValue;
36280
- }
36281
- return data.setting_value ?? defaultValue;
36282
- } catch (error) {
36283
- devLogger.error("settingsService", `설정 로드 실패 (${settingKey}):`, error);
36284
- return defaultValue;
36285
- }
36286
- }
36287
- async function initializeSetting(settingKey, value, projectId, serviceType) {
36288
- try {
36289
- await apiClient.put("/api/settings", {
36290
- setting_key: settingKey,
36291
- setting_value: value,
36292
- project_id: projectId ?? null,
36293
- service_type: serviceType ?? null
36294
- });
36295
- } catch (error) {
36296
- devLogger.error("settingsService", `설정 초기화 실패 (${settingKey}):`, error);
36297
- }
36298
- }
36299
- async function setSetting(settingKey, value, _tenantId, _accountId, _email, projectId, serviceType) {
36300
- try {
36301
- await apiClient.put("/api/settings", {
36302
- setting_key: settingKey,
36303
- setting_value: value,
36304
- project_id: projectId ?? null,
36305
- service_type: serviceType ?? null
36306
- });
36307
- } catch (error) {
36308
- devLogger.error("settingsService", `설정 저장 실패 (${settingKey}):`, error);
36309
- throw error;
36310
- }
36311
- }
36312
- async function migrateFromLocalStorage(settingKey, storageKey, _tenantId, _accountId, _email, projectId, serviceType) {
36313
- try {
36314
- const existing = await apiClient.get(
36315
- buildSettingsQuery(settingKey, projectId, serviceType)
36316
- );
36317
- if (existing) {
36318
- return false;
36319
- }
36320
- const stored = localStorage.getItem(storageKey);
36321
- const value = stored !== null ? JSON.parse(stored) : void 0;
36322
- if (value !== void 0) {
36323
- await setSetting(
36324
- settingKey,
36325
- value,
36326
- void 0,
36327
- void 0,
36328
- void 0,
36329
- projectId ?? void 0,
36330
- serviceType ?? void 0
36331
- );
36332
- return true;
36333
- }
36334
- return false;
36335
- } catch (error) {
36336
- devLogger.error("settingsService", `마이그레이션 실패 (${settingKey}):`, error);
36337
- return false;
36338
- }
36339
- }
36340
- function useAuth() {
36341
- const ctx = useAuthContext();
36342
- return {
36343
- isAuthenticated: ctx.isAuthenticated,
36344
- isMember: ctx.isMember,
36345
- isLoading: ctx.isLoading,
36346
- user: ctx.accountId ? { id: ctx.accountId, email: "" } : null,
36347
- tenant: ctx.tenantId ? { id: ctx.tenantId, name: "", slug: "" } : null,
36348
- accountId: ctx.accountId
36349
- };
36350
- }
36351
- const SETTING_KEY = "issueDescriptionTemplate";
36352
- const STORAGE_KEY$1 = "issueDescriptionTemplate";
36353
- const DEFAULT_VALUE = "";
36354
- async function loadIssueTemplate(tenantId, email, projectId, isMember) {
36355
- if (!tenantId || !isMember) {
36356
- return DEFAULT_VALUE;
36357
- }
36358
- try {
36359
- if (email) {
36360
- await migrateFromLocalStorage(
36361
- SETTING_KEY,
36362
- STORAGE_KEY$1,
36363
- tenantId,
36364
- void 0,
36365
- email,
36366
- projectId ?? void 0,
36367
- "GENERAL"
36368
- );
36369
- }
36370
- const savedTemplate = await getSetting(
36371
- SETTING_KEY,
36372
- DEFAULT_VALUE,
36373
- tenantId,
36374
- void 0,
36375
- email ?? void 0,
36376
- projectId ?? void 0,
36377
- "GENERAL"
36378
- );
36379
- return savedTemplate;
36380
- } catch (error) {
36381
- devLogger.error("useIssueTemplate", "템플릿 로드 실패:", error);
36382
- return DEFAULT_VALUE;
36383
- }
36384
- }
36385
- function useIssueTemplate() {
36386
- var _a, _b2;
36387
- const auth = useAuth();
36388
- const project = useProject();
36389
- const tenantId = ((_a = auth.tenant) == null ? void 0 : _a.id) ?? null;
36390
- const email = ((_b2 = auth.user) == null ? void 0 : _b2.email) ?? null;
36391
- const isMember = auth.isMember;
36392
- const projectId = project.selectedProjectId;
36393
- const { data: template } = useSuspenseQuery({
36394
- queryKey: ["contentIssueTemplate", tenantId, email, projectId, isMember],
36395
- queryFn: () => loadIssueTemplate(tenantId, email, projectId, isMember)
36396
- });
36397
- const loadTemplate = useCallback(() => {
36398
- queryClient.invalidateQueries({ queryKey: ["contentIssueTemplate"] });
36399
- }, []);
36400
- return {
36401
- template,
36402
- loadTemplate
36403
- };
36404
- }
36405
36795
  const RECORDING_BLOCKED_BY_ISSUE_MODE = "이슈 생성 모드에서는 녹화를 시작할 수 없습니다. 이슈 생성을 종료한 뒤 다시 시도하세요.";
36406
36796
  const ISSUE_MODE_BLOCKED_BY_RECORDING = "녹화 중에는 이슈 생성 모드를 시작할 수 없습니다. 녹화를 중지한 뒤 다시 시도하세요.";
36407
36797
  function getDigitFromCode(code2) {
@@ -36619,19 +37009,6 @@ function useScreenRecording() {
36619
37009
  startedAt: snapshot.startedAt
36620
37010
  };
36621
37011
  }
36622
- const DEFAULT_FILTERS = {
36623
- url: "all"
36624
- };
36625
- function useStickerFilters() {
36626
- const [stickerFilters, setStickerFilters] = useState({
36627
- ...DEFAULT_FILTERS,
36628
- url: getCurrentPageUrl()
36629
- });
36630
- return {
36631
- stickerFilters,
36632
- setStickerFilters
36633
- };
36634
- }
36635
37012
  function useStickerVisibility() {
36636
37013
  const [showStickers, setShowStickers] = useState(true);
36637
37014
  const showStickersRef = useRef(true);
@@ -36674,10 +37051,9 @@ function useContentAppState() {
36674
37051
  const { isDomainAllowed } = useDomainRestriction(currentUrl);
36675
37052
  const isExtensionEnabledRaw = useExtensionEnabled();
36676
37053
  const isExtensionEnabled = isExtensionEnabledRaw && isDomainAllowed;
36677
- const { issues, loadIssues } = useIssues(currentUrl);
36678
- const { template } = useIssueTemplate();
37054
+ const [fieldFilters, setFieldFilters] = useState(EMPTY_ISSUE_FIELD_FILTERS);
37055
+ const { issues, loadIssues } = useIssues(currentUrl, useDeferredValue(fieldFilters));
36679
37056
  const { showStickers, showStickersRef, setShowStickers } = useStickerVisibility();
36680
- const { stickerFilters, setStickerFilters } = useStickerFilters();
36681
37057
  const {
36682
37058
  isCreatingIssue,
36683
37059
  isCreatingIssueRef,
@@ -36691,8 +37067,8 @@ function useContentAppState() {
36691
37067
  screenRecording.recordedFile
36692
37068
  );
36693
37069
  const filteredIssues = useMemo(() => {
36694
- return applyStickerFilters(issues, stickerFilters, currentUrl);
36695
- }, [issues, stickerFilters, currentUrl]);
37070
+ return applyStickerFilters(issues, currentUrl);
37071
+ }, [issues, currentUrl]);
36696
37072
  useCallback(async () => {
36697
37073
  if (!isExtensionEnabled) {
36698
37074
  return;
@@ -36710,38 +37086,12 @@ function useContentAppState() {
36710
37086
  resetIssueMode();
36711
37087
  clearClickPosition();
36712
37088
  }, [resetIssueMode, clearClickPosition]);
36713
- useCallback(
36714
- (_newValue, filters) => {
36715
- if (filters) {
36716
- const contentScriptFilters = {
36717
- ...filters,
36718
- url: getCurrentPageUrl()
36719
- // 현재 페이지 URL로 고정
36720
- };
36721
- setStickerFilters(contentScriptFilters);
36722
- }
36723
- },
36724
- [setStickerFilters]
36725
- );
36726
- useCallback(
36727
- (filters) => {
36728
- const contentScriptFilters = {
36729
- ...filters,
36730
- url: getCurrentPageUrl()
36731
- // 현재 페이지 URL로 고정
36732
- };
36733
- setStickerFilters(contentScriptFilters);
36734
- },
36735
- [setStickerFilters]
36736
- );
36737
37089
  const handleOpenIssueDetail = useCallback((issueId) => {
36738
37090
  setOpenPopoverIssueId(issueId);
36739
37091
  }, []);
36740
37092
  const handleCloseIssueDetail = useCallback(() => {
36741
37093
  setOpenPopoverIssueId(null);
36742
37094
  }, []);
36743
- useCallback(async (_newTemplate) => {
36744
- }, []);
36745
37095
  const handleRecordingStopped = useCallback(
36746
37096
  async (_recordedFile) => {
36747
37097
  if (!isCreatingIssueRef.current) {
@@ -36883,7 +37233,6 @@ function useContentAppState() {
36883
37233
  );
36884
37234
  return {
36885
37235
  // 상태
36886
- template,
36887
37236
  openPopoverIssueId,
36888
37237
  isExtensionEnabled,
36889
37238
  issues: filteredIssues,
@@ -36904,7 +37253,9 @@ function useContentAppState() {
36904
37253
  toggleIssueMode,
36905
37254
  handleToggleRecording,
36906
37255
  screenRecordingClearRecordedFile: screenRecording.clearRecordedFile,
36907
- setShowStickers
37256
+ setShowStickers,
37257
+ fieldFilters,
37258
+ setFieldFilters
36908
37259
  };
36909
37260
  }
36910
37261
  const STORAGE_KEY = "issue-sticker-sticker-render-mode";
@@ -36973,6 +37324,16 @@ function useStickerRenderMode() {
36973
37324
  isSaving: mutation.isPending
36974
37325
  };
36975
37326
  }
37327
+ async function fetchIssueFilterGroups(projectId) {
37328
+ const [integrations, customFields] = await Promise.all([
37329
+ apiClient.get(`/api/integrations/${projectId}`).catch((error) => {
37330
+ devLogger.error("issueFilterOptions", "연동 조회 실패:", error);
37331
+ return [];
37332
+ }),
37333
+ fetchCustomFieldDefinitions(projectId)
37334
+ ]);
37335
+ return composeIssueFilterGroups(Array.isArray(integrations) ? integrations : [], customFields);
37336
+ }
36976
37337
  function advanceOnEvent(event) {
36977
37338
  return ({ advance }) => {
36978
37339
  const manager = SDKManager.getInstance();
@@ -37017,7 +37378,7 @@ function buildSdkOnboardingSteps({
37017
37378
  id: "record",
37018
37379
  targetId: "sdk-toolbar-record",
37019
37380
  title: "재현 과정은 화면 녹화로 남깁니다",
37020
- body: "클릭 순서나 화면 전환이 중요한 문제는 녹화로 남깁니다. 녹화를 시작해 문제를 재현하고 이슈를 저장해 보세요.",
37381
+ body: "클릭 순서나 화면 전환이 중요한 문제는 녹화로 남깁니다. 녹화를 시작하면 공유할 화면을 선택하는 창이 열립니다. 문제를 재현하고 이슈를 저장해 보세요.",
37021
37382
  position: "top",
37022
37383
  advanceOn: advanceOnEvent("issue:created"),
37023
37384
  allowManualAdvance: true,
@@ -37090,6 +37451,112 @@ function SdkOnboardingProvider({
37090
37451
  }
37091
37452
  );
37092
37453
  }
37454
+ const ISSUE_FIELD_FILTER_POPOVER_CLASS = "w-80 overflow-hidden p-0 text-xs";
37455
+ function IssueFieldFilterFields({
37456
+ groups,
37457
+ value,
37458
+ onChange,
37459
+ leading
37460
+ }) {
37461
+ const setRecord = (key, field, values) => onChange({ ...value, [key]: { ...value[key], [field]: values } });
37462
+ const customs = groups.filter((g) => g.kind === "custom");
37463
+ const jiras = groups.filter((g) => g.kind === "jira");
37464
+ const notions = groups.filter((g) => g.kind === "notion");
37465
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
37466
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2 p-3", children: [
37467
+ leading,
37468
+ /* @__PURE__ */ jsx(
37469
+ DatePicker,
37470
+ {
37471
+ value: value.dateFrom,
37472
+ onChange: (v) => onChange({ ...value, dateFrom: v }),
37473
+ placeholder: "이슈 생성일: 시작",
37474
+ className: "rounded-md text-xs"
37475
+ }
37476
+ ),
37477
+ /* @__PURE__ */ jsx(
37478
+ DatePicker,
37479
+ {
37480
+ value: value.dateTo,
37481
+ onChange: (v) => onChange({ ...value, dateTo: v }),
37482
+ placeholder: "이슈 생성일: 종료",
37483
+ className: "rounded-md text-xs"
37484
+ }
37485
+ ),
37486
+ customs.map((g) => /* @__PURE__ */ jsx(
37487
+ MultiSelect,
37488
+ {
37489
+ options: g.options,
37490
+ value: value.customFieldValues[g.fieldDefinitionId] ?? [],
37491
+ onValueChange: (v) => setRecord("customFieldValues", g.fieldDefinitionId, v),
37492
+ placeholder: g.label,
37493
+ className: "rounded-md text-xs"
37494
+ },
37495
+ g.id
37496
+ ))
37497
+ ] }),
37498
+ jiras.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "space-y-2 border-t border-line-subtle p-3", children: [
37499
+ /* @__PURE__ */ jsx("div", { className: "text-2xs font-semibold uppercase text-text-tertiary", children: "Jira" }),
37500
+ jiras.map((g) => /* @__PURE__ */ jsx(
37501
+ MultiSelect,
37502
+ {
37503
+ options: g.options,
37504
+ value: value.jiraFieldValues[g.fieldName] ?? [],
37505
+ onValueChange: (v) => setRecord("jiraFieldValues", g.fieldName, v),
37506
+ placeholder: g.label,
37507
+ className: "rounded-md text-xs"
37508
+ },
37509
+ g.id
37510
+ ))
37511
+ ] }) : null,
37512
+ notions.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "space-y-2 border-t border-line-subtle p-3", children: [
37513
+ /* @__PURE__ */ jsx("div", { className: "text-2xs font-semibold uppercase text-text-tertiary", children: "Notion" }),
37514
+ notions.map((g) => /* @__PURE__ */ jsx(
37515
+ MultiSelect,
37516
+ {
37517
+ options: g.options,
37518
+ value: value.notionFieldValues[g.fieldName] ?? [],
37519
+ onValueChange: (v) => setRecord("notionFieldValues", g.fieldName, v),
37520
+ placeholder: g.label,
37521
+ className: "rounded-md text-xs"
37522
+ },
37523
+ g.id
37524
+ ))
37525
+ ] }) : null
37526
+ ] });
37527
+ }
37528
+ function IssueFieldFilterPanel({
37529
+ title,
37530
+ onReset,
37531
+ onClose,
37532
+ ...fields
37533
+ }) {
37534
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
37535
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-line-subtle bg-surface-2 px-3 py-2", children: [
37536
+ /* @__PURE__ */ jsx("strong", { className: "text-sm font-semibold", children: title }),
37537
+ /* @__PURE__ */ jsx(
37538
+ "button",
37539
+ {
37540
+ type: "button",
37541
+ onClick: onClose,
37542
+ "aria-label": "닫기",
37543
+ className: "text-text-tertiary hover:text-text-primary",
37544
+ children: /* @__PURE__ */ jsx(X$1, { className: "h-3.5 w-3.5" })
37545
+ }
37546
+ )
37547
+ ] }),
37548
+ /* @__PURE__ */ jsx(IssueFieldFilterFields, { ...fields }),
37549
+ /* @__PURE__ */ jsx("div", { className: "border-t border-line-subtle bg-surface-2 px-3 py-2", children: /* @__PURE__ */ jsx(
37550
+ "button",
37551
+ {
37552
+ type: "button",
37553
+ onClick: onReset,
37554
+ className: "text-text-tertiary hover:text-text-primary",
37555
+ children: "전체 초기화"
37556
+ }
37557
+ ) })
37558
+ ] });
37559
+ }
37093
37560
  const SHORTCUTS = {
37094
37561
  CAPTURE_SCREENSHOT: { mac: ["⌘⌥1", "⌃⌥1"], other: ["Ctrl+Alt+1"] },
37095
37562
  CAPTURE_VIDEO: { mac: ["⌘⌥2", "⌃⌥2"], other: ["Ctrl+Alt+2"] }
@@ -37115,6 +37582,7 @@ function MoreMenu({
37115
37582
  onOpenUnrenderedStickers,
37116
37583
  onboardingEnabled,
37117
37584
  onReplayOnboarding,
37585
+ filter: filter2,
37118
37586
  account,
37119
37587
  targets,
37120
37588
  direction,
@@ -37135,6 +37603,14 @@ function MoreMenu({
37135
37603
  visible: true,
37136
37604
  targetRef: stickersTargetRef
37137
37605
  },
37606
+ {
37607
+ id: "sticker-filter",
37608
+ label: "스티커 필터",
37609
+ hint: filter2 && filter2.activeCount > 0 ? `${filter2.activeCount}개 적용 중` : void 0,
37610
+ icon: /* @__PURE__ */ jsx(SlidersHorizontal, { size: ICON_SIZE }),
37611
+ onClick: () => filter2 == null ? void 0 : filter2.onOpen(),
37612
+ visible: filter2 !== void 0
37613
+ },
37138
37614
  {
37139
37615
  id: "render-mode",
37140
37616
  label: `현재 표시 기준: ${renderModeLabel}`,
@@ -37613,6 +38089,7 @@ function Toolbar({
37613
38089
  onStartRecording,
37614
38090
  onStopRecording,
37615
38091
  isCreatingIssue,
38092
+ isWritingIssue,
37616
38093
  isRecording,
37617
38094
  recordingStartedAt,
37618
38095
  showStickers,
@@ -37626,10 +38103,12 @@ function Toolbar({
37626
38103
  onboardingEnabled = true,
37627
38104
  targets,
37628
38105
  account,
37629
- blocked
38106
+ blocked,
38107
+ filter: filter2
37630
38108
  }) {
37631
38109
  const rootRef = useRef(null);
37632
38110
  const [internalOpen, setInternalOpen] = useState(false);
38111
+ const [filterOpen, setFilterOpen] = useState(false);
37633
38112
  const [placement, setPlacement] = useState(
37634
38113
  () => resolveInitialPlacement(toolbar)
37635
38114
  );
@@ -37645,7 +38124,7 @@ function Toolbar({
37645
38124
  },
37646
38125
  [menuOpen, onMenuOpenChange]
37647
38126
  );
37648
- const state = isRecording ? "recording" : isCreatingIssue ? "aiming" : blocked ? "blocked" : "idle";
38127
+ const state = isRecording ? "recording" : isWritingIssue ? "writing" : isCreatingIssue ? "aiming" : blocked ? "blocked" : "idle";
37649
38128
  const [now2, setNow] = useState(() => Date.now());
37650
38129
  const skipFocusRestore = useRef(true);
37651
38130
  const getSize2 = useCallback(
@@ -37694,7 +38173,9 @@ function Toolbar({
37694
38173
  return () => document.removeEventListener("mousedown", handleClickOutside);
37695
38174
  }, [isOpen, onboardingOpen, setIsOpen]);
37696
38175
  useEffect(() => {
37697
- if (state !== "idle" && isOpen) setIsOpen(false);
38176
+ if (state === "idle") return;
38177
+ if (isOpen) setIsOpen(false);
38178
+ setFilterOpen(false);
37698
38179
  }, [state, isOpen, setIsOpen]);
37699
38180
  useEffect(() => {
37700
38181
  var _a;
@@ -37757,9 +38238,10 @@ function Toolbar({
37757
38238
  children: /* @__PURE__ */ jsx(Circle, { size: 15, fill: "currentColor" })
37758
38239
  }
37759
38240
  ) }),
37760
- /* @__PURE__ */ jsxs(TooltipContent, { side: "top", sideOffset: 10, children: [
38241
+ /* @__PURE__ */ jsxs(TooltipContent, { side: "top", sideOffset: 10, className: "text-center", children: [
37761
38242
  "화면 녹화 ",
37762
- getShortcutLabel("CAPTURE_VIDEO")
38243
+ getShortcutLabel("CAPTURE_VIDEO"),
38244
+ /* @__PURE__ */ jsx("span", { className: "block font-normal opacity-70", children: "공유할 화면을 선택하는 창이 열립니다" })
37763
38245
  ] })
37764
38246
  ] }),
37765
38247
  /* @__PURE__ */ jsx("div", { className: "toolbar-divider" }),
@@ -37813,7 +38295,7 @@ function Toolbar({
37813
38295
  children: /* @__PURE__ */ jsx(X$1, { size: 15 })
37814
38296
  }
37815
38297
  )
37816
- ] }) : state === "recording" ? /* @__PURE__ */ jsxs(Fragment, { children: [
38298
+ ] }) : state === "writing" ? /* @__PURE__ */ jsx("span", { className: "toolbar-hint", children: "이슈를 작성 중입니다" }) : state === "recording" ? /* @__PURE__ */ jsxs(Fragment, { children: [
37817
38299
  /* @__PURE__ */ jsx("span", { className: "toolbar-pulse", "aria-hidden": "true" }),
37818
38300
  /* @__PURE__ */ jsx("span", { className: "toolbar-elapsed", "aria-hidden": "true", children: formatElapsed(recordingStartedAt, now2) }),
37819
38301
  /* @__PURE__ */ jsx("div", { className: "toolbar-divider" }),
@@ -37830,45 +38312,75 @@ function Toolbar({
37830
38312
  ] }) : idleBody;
37831
38313
  return /* @__PURE__ */ jsxs(Fragment, { children: [
37832
38314
  /* @__PURE__ */ jsx("style", { children: TOOLBAR_STYLES }),
37833
- /* @__PURE__ */ jsxs(
37834
- "div",
37835
- {
37836
- ref: rootRef,
37837
- "data-issue-sticker-toolbar": "",
37838
- className: "toolbar-root",
37839
- role: "toolbar",
37840
- "aria-label": "이슈스티커",
37841
- "data-state": state,
37842
- "data-dragging": isDragging2,
37843
- style: { ...anchor, zIndex: OVERLAY_LAYER_INDEX.fab },
37844
- onKeyDown: handleKeyDown,
37845
- tabIndex: -1,
37846
- onPointerDown: handleRootPointerDown,
37847
- children: [
37848
- body,
37849
- isOpen ? /* @__PURE__ */ jsx(
37850
- MoreMenu,
38315
+ /* @__PURE__ */ jsxs(Popover, { open: filterOpen, onOpenChange: setFilterOpen, children: [
38316
+ /* @__PURE__ */ jsx(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsxs(
38317
+ "div",
38318
+ {
38319
+ ref: rootRef,
38320
+ "data-issue-sticker-toolbar": "",
38321
+ className: "toolbar-root",
38322
+ role: "toolbar",
38323
+ "aria-label": "이슈스티커",
38324
+ "data-state": state,
38325
+ "data-dragging": isDragging2,
38326
+ style: { ...anchor, zIndex: OVERLAY_LAYER_INDEX.fab },
38327
+ onKeyDown: handleKeyDown,
38328
+ tabIndex: -1,
38329
+ onPointerDown: handleRootPointerDown,
38330
+ children: [
38331
+ body,
38332
+ isOpen ? /* @__PURE__ */ jsx(
38333
+ MoreMenu,
38334
+ {
38335
+ showStickers,
38336
+ onToggleStickers,
38337
+ stickerRenderMode,
38338
+ onToggleStickerRenderMode,
38339
+ unrenderedStickerCount,
38340
+ onOpenUnrenderedStickers,
38341
+ onboardingEnabled,
38342
+ onReplayOnboarding: () => {
38343
+ setIsOpen(false);
38344
+ replay();
38345
+ },
38346
+ filter: filter2 ? {
38347
+ activeCount: countActiveIssueFieldFilters(filter2.value),
38348
+ onOpen: () => {
38349
+ setIsOpen(false);
38350
+ setFilterOpen(true);
38351
+ }
38352
+ } : void 0,
38353
+ account,
38354
+ targets,
38355
+ direction: menuPlacement.vertical,
38356
+ horizontalDirection: menuPlacement.horizontal
38357
+ }
38358
+ ) : null
38359
+ ]
38360
+ }
38361
+ ) }),
38362
+ filter2 ? /* @__PURE__ */ jsx(
38363
+ PopoverContent,
38364
+ {
38365
+ side: menuPlacement.vertical === "up" ? "top" : "bottom",
38366
+ align: menuPlacement.horizontal === "left" ? "end" : "start",
38367
+ sideOffset: 8,
38368
+ collisionPadding: 8,
38369
+ className: ISSUE_FIELD_FILTER_POPOVER_CLASS,
38370
+ children: /* @__PURE__ */ jsx(
38371
+ IssueFieldFilterPanel,
37851
38372
  {
37852
- showStickers,
37853
- onToggleStickers,
37854
- stickerRenderMode,
37855
- onToggleStickerRenderMode,
37856
- unrenderedStickerCount,
37857
- onOpenUnrenderedStickers,
37858
- onboardingEnabled,
37859
- onReplayOnboarding: () => {
37860
- setIsOpen(false);
37861
- replay();
37862
- },
37863
- account,
37864
- targets,
37865
- direction: menuPlacement.vertical,
37866
- horizontalDirection: menuPlacement.horizontal
38373
+ title: "스티커 필터",
38374
+ groups: filter2.groups,
38375
+ value: filter2.value,
38376
+ onChange: filter2.onChange,
38377
+ onReset: () => filter2.onChange(EMPTY_ISSUE_FIELD_FILTERS),
38378
+ onClose: () => setFilterOpen(false)
37867
38379
  }
37868
- ) : null
37869
- ]
37870
- }
37871
- )
38380
+ )
38381
+ }
38382
+ ) : null
38383
+ ] })
37872
38384
  ] });
37873
38385
  }
37874
38386
  const SDK_TOOLBAR_TARGETS = {
@@ -37928,7 +38440,6 @@ function ContentAppWrapper({
37928
38440
  const [moreMenuOpen, setMoreMenuOpen] = useState(false);
37929
38441
  const unrenderedSignatureRef = useRef("");
37930
38442
  const {
37931
- template,
37932
38443
  openPopoverIssueId,
37933
38444
  isExtensionEnabled,
37934
38445
  issues,
@@ -37947,9 +38458,20 @@ function ContentAppWrapper({
37947
38458
  handleToggleRecording,
37948
38459
  screenRecordingClearRecordedFile,
37949
38460
  showStickersRef,
37950
- setShowStickers
38461
+ setShowStickers,
38462
+ fieldFilters,
38463
+ setFieldFilters
37951
38464
  } = useContentAppState();
37952
38465
  const { renderMode, saveRenderMode } = useStickerRenderMode();
38466
+ const { isMember } = useAuthContext();
38467
+ const { selectedProjectId } = useProject();
38468
+ const filterProjectId = isMember ? selectedProjectId : null;
38469
+ const { data: filterGroups = [] } = useQuery({
38470
+ queryKey: ["issueFilterGroups", filterProjectId],
38471
+ queryFn: () => filterProjectId ? fetchIssueFilterGroups(filterProjectId) : [],
38472
+ enabled: Boolean(filterProjectId),
38473
+ staleTime: 5 * 6e4
38474
+ });
37953
38475
  const nextRenderMode = renderMode === "absolute" ? "target" : "absolute";
37954
38476
  const unrenderedCount = unrenderedStickers.length;
37955
38477
  const handleOpenMoreMenu = useCallback(() => setMoreMenuOpen(true), []);
@@ -37980,6 +38502,7 @@ function ContentAppWrapper({
37980
38502
  onStartRecording: handleToggleRecording,
37981
38503
  onStopRecording: handleToggleRecording,
37982
38504
  isCreatingIssue,
38505
+ isWritingIssue: clickPosition !== null,
37983
38506
  isRecording: screenRecording.isRecording,
37984
38507
  recordingStartedAt: screenRecording.startedAt,
37985
38508
  showStickers,
@@ -37989,7 +38512,8 @@ function ContentAppWrapper({
37989
38512
  unrenderedStickerCount: unrenderedCount,
37990
38513
  onOpenUnrenderedStickers: () => setUnrenderedDialogOpen(true),
37991
38514
  menuOpen: moreMenuOpen,
37992
- onMenuOpenChange: setMoreMenuOpen
38515
+ onMenuOpenChange: setMoreMenuOpen,
38516
+ filter: filterProjectId ? { groups: filterGroups, value: fieldFilters, onChange: setFieldFilters } : void 0
37993
38517
  }
37994
38518
  ),
37995
38519
  /* @__PURE__ */ jsx(QueryBoundary, { loadingFallback: /* @__PURE__ */ jsx(Fragment, {}), onError: OverlayErrorFallback, children: /* @__PURE__ */ jsx(
@@ -38035,7 +38559,6 @@ function ContentAppWrapper({
38035
38559
  SDKManager.getInstance().eventBus.emit("issue:cancelled");
38036
38560
  }
38037
38561
  },
38038
- initialDescription: template,
38039
38562
  activeIntegration,
38040
38563
  isIntegrationLoading
38041
38564
  }
@@ -38079,9 +38602,9 @@ function AuthGate() {
38079
38602
  ) })
38080
38603
  ] });
38081
38604
  }
38082
- const globalsCSS = `:root,:host{color-scheme:light;--brand-h: 150;--brand-s: 100%;--brand-l: 34%;--brand-hsl: var(--brand-h) var(--brand-s) var(--brand-l);--brand: hsl(var(--brand-hsl));--brand-hover: hsl(var(--brand-h) calc(var(--brand-s) + 3%) calc(var(--brand-l) - 4%));--brand-active: hsl(var(--brand-h) calc(var(--brand-s) + 2%) calc(var(--brand-l) - 8%));--brand-subtle: hsl(var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .14);--brand-border: hsl(var(--brand-h) calc(var(--brand-s) + 8%) calc(var(--brand-l) + 8%) / .34);--brand-fg: hsl(0 0% 100%);--brand-ring: hsl(var(--brand-h) calc(var(--brand-s) + 12%) calc(var(--brand-l) + 10%) / .22);--font-sans: "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif;--font-display: var(--font-sans);--font-mono: var(--font-sans);--surface-0: 0 0% 99%;--surface-1: 0 0% 100%;--surface-2: 144 8% 96%;--surface-3: 144 6% 93%;--surface-inset: 144 6% 95%;--overlay-backdrop: hsl(0 0% 0% / .24);--overlay-backdrop-strong: hsl(0 0% 0% / .48);--text-primary: 150 10% 12%;--text-secondary: 148 6% 36%;--text-tertiary: 145 5% 42%;--text-disabled: 145 4% 70%;--text-inverse: 0 0% 100%;--border-subtle: 144 8% 91%;--border-default: 144 6% 85%;--border-strong: 144 5% 72%;--border-focus: var(--brand-h) var(--brand-s) var(--brand-l);--success: var(--brand-h) var(--brand-s) var(--brand-l);--success-subtle: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .14;--success-surface: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .24;--warning: 34 82% 52%;--warning-subtle: 34 82% 52% / .14;--danger: 3 68% 56%;--danger-subtle: 3 68% 56% / .12;--info: 202 52% 44%;--info-subtle: 202 52% 44% / .12;--accent-terra: 13 52% 47%;--accent-terra-subtle: 13 52% 47% / .1;--accent-terra-deep: 13 48% 44%;--accent-blue: 213 86% 56%;--accent-blue-subtle: 213 92% 56% / .12;--accent-blue-deep: 216 78% 40%;--accent-blue-border: 213 86% 62% / .36;--accent-cream: 38 52% 88%;--accent-cream-warm: 40 56% 95%;--accent-cream-deep: 38 48% 82%;--accent-highlight: 55 96% 70%;--accent-ink: 32 13% 11%;--radius-xs: 4px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--radius-2xl: 24px;--radius-pill: 9999px;--shadow-xs: 0 1px 2px 0 hsl(0 0% 0% / .04);--shadow-sm: 0 1px 3px 0 hsl(0 0% 0% / .06), 0 1px 2px -1px hsl(0 0% 0% / .06);--shadow-md: 0 4px 6px -1px hsl(0 0% 0% / .06), 0 2px 4px -2px hsl(0 0% 0% / .04);--shadow-lg: 0 10px 15px -3px hsl(0 0% 0% / .06), 0 4px 6px -4px hsl(0 0% 0% / .04);--shadow-xl: 0 20px 25px -5px hsl(0 0% 0% / .06), 0 8px 10px -6px hsl(0 0% 0% / .04);--shadow-focus: 0 0 0 3px var(--brand-ring);--shadow-inset: inset 0 1px 2px 0 hsl(0 0% 0% / .04);--shadow-brand: 0 2px 8px hsl(var(--brand-h) calc(var(--brand-s) - 60%) calc(var(--brand-l) - 14%) / .24), 0 6px 20px hsl(var(--brand-h) calc(var(--brand-s) - 70%) calc(var(--brand-l) - 19%) / .16);--duration-instant: 90ms;--duration-fast: .16s;--duration-base: .26s;--duration-out: .18s;--duration-slow: .36s;--ease-out: cubic-bezier(.23, 1, .32, 1);--ease-in-out: cubic-bezier(.45, 0, .15, 1);--ease-spring: cubic-bezier(.18, .94, .32, 1.08);--grid-line: 0 0% 92%}.dark,:host(.dark){color-scheme:dark;--brand-l: 34%;--brand-fg: hsl(0 0% 100%);--surface-0: 150 8% 7%;--surface-1: 150 6% 10%;--surface-2: 150 5% 14%;--surface-3: 150 4% 18%;--surface-inset: 150 6% 6%;--overlay-backdrop: hsl(0 0% 0% / .56);--overlay-backdrop-strong: hsl(0 0% 0% / .8);--text-primary: 40 16% 93%;--text-secondary: 36 8% 68%;--text-tertiary: 34 6% 50%;--text-disabled: 30 5% 34%;--text-inverse: 150 8% 10%;--border-subtle: 150 6% 16%;--border-default: 150 5% 22%;--border-strong: 150 4% 34%;--success: var(--brand-h) var(--brand-s) var(--brand-l);--success-subtle: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .14;--success-surface: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .24;--warning: 34 82% 62%;--danger: 2 70% 64%;--info: 202 54% 62%;--accent-terra: 13 56% 62%;--accent-terra-subtle: 13 56% 62% / .14;--accent-terra-deep: 13 52% 56%;--accent-blue: 210 92% 68%;--accent-blue-subtle: 210 92% 68% / .18;--accent-blue-deep: 209 100% 78%;--accent-blue-border: 210 92% 72% / .44;--accent-cream: 38 30% 26%;--accent-cream-warm: 38 22% 18%;--accent-cream-deep: 38 26% 32%;--accent-highlight: 55 96% 70%;--accent-ink: 32 13% 8%;--shadow-xs: 0 1px 2px 0 hsl(0 0% 0% / .2);--shadow-sm: 0 1px 3px 0 hsl(0 0% 0% / .3), 0 1px 2px -1px hsl(0 0% 0% / .24);--shadow-md: 0 4px 6px -1px hsl(0 0% 0% / .34), 0 2px 4px -2px hsl(0 0% 0% / .2);--shadow-lg: 0 10px 15px -3px hsl(0 0% 0% / .38), 0 4px 6px -4px hsl(0 0% 0% / .24);--shadow-xl: 0 20px 25px -5px hsl(0 0% 0% / .44), 0 8px 10px -6px hsl(0 0% 0% / .28);--shadow-inset: inset 0 1px 2px 0 hsl(0 0% 0% / .16);--shadow-brand: 0 2px 8px hsl(var(--brand-h) calc(var(--brand-s) - 60%) calc(var(--brand-l) - 24%) / .44), 0 6px 20px hsl(0 0% 0% / .32);--grid-line: 150 6% 14%}*{border-color:hsl(var(--border-default))}html{font-family:var(--font-sans),ui-sans-serif,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-feature-settings:"cv11","ss01","ss03";background-color:hsl(var(--surface-0))}body{margin:0;min-height:100vh;color:hsl(var(--text-primary));background-color:hsl(var(--surface-0))}::-moz-selection{background-color:hsl(var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 16%) / .22);color:hsl(var(--text-primary))}::selection{background-color:hsl(var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 16%) / .22);color:hsl(var(--text-primary))}code,kbd,samp,pre{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,monospace;font-feature-settings:"ss01","ss02","cv11"}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:hsl(var(--border-strong) / .52);border-radius:var(--radius-pill);border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:hsl(var(--border-strong) / .9);background-clip:padding-box;border:2px solid transparent}.app-canvas,.grid-canvas{background-color:hsl(var(--surface-0))}.onboarding-canvas{--surface-0: var(--brand-h) var(--brand-s) var(--brand-l);--surface-1: 0 0% 100%;--surface-2: var(--brand-h) 62% 28%;--surface-3: var(--brand-h) 60% 25%;--surface-inset: var(--brand-h) 62% 28%;--text-primary: 0 0% 100%;--text-secondary: var(--brand-h) 46% 90%;--text-tertiary: var(--brand-h) 34% 84%;--text-disabled: var(--brand-h) 20% 72%;--border-subtle: var(--brand-h) 44% 52%;--border-default: var(--brand-h) 40% 58%;--border-strong: var(--brand-h) 36% 70%;--border-focus: 0 0% 100%;--brand-hsl: 0 0% 100%;--brand: hsl(var(--brand-hsl));--brand-hover: hsl(var(--brand-h) 24% 94%);--brand-active: hsl(var(--brand-h) 20% 88%);--brand-fg: hsl(var(--brand-h) var(--brand-s) 24%);--brand-ring: hsl(0 0% 100% / .4);--danger: 6 96% 86%;--danger-subtle: 6 96% 86% / .18;--warning: 42 96% 82%;--warning-subtle: 42 96% 82% / .18}.onboarding-canvas .bg-surface-1,.onboarding-canvas input,.onboarding-canvas textarea,.onboarding-canvas [role=combobox]{--text-primary: 150 10% 12%;--text-secondary: 148 6% 36%;--text-tertiary: 145 5% 42%;--surface-2: 144 8% 96%;--surface-inset: 144 6% 95%;--border-subtle: 144 8% 91%;--border-default: 144 6% 85%;--brand-hsl: var(--brand-h) var(--brand-s) var(--brand-l);--brand: hsl(var(--brand-hsl));--brand-hover: hsl(var(--brand-h) calc(var(--brand-s) + 3%) calc(var(--brand-l) - 4%));--brand-active: hsl(var(--brand-h) calc(var(--brand-s) + 2%) calc(var(--brand-l) - 8%));--brand-fg: hsl(0 0% 100%);--brand-ring: hsl(var(--brand-h) calc(var(--brand-s) + 12%) calc(var(--brand-l) + 10%) / .22)}@keyframes onboarding-step-in{0%{opacity:0;transform:translate(96px)}to{opacity:1;transform:translate(0)}}.onboarding-step-in{animation:onboarding-step-in var(--duration-slow) var(--ease-out) forwards}@keyframes onboarding-enter-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.onboarding-enter{position:fixed;top:0;right:0;bottom:0;left:0;overflow-x:hidden;overflow-y:auto;animation:onboarding-enter-up var(--duration-base) var(--ease-out) forwards}@keyframes onboarding-confetti-x{0%{transform:translate(0)}to{transform:translate(var(--confetti-x))}}@keyframes onboarding-confetti-y{0%{transform:translateY(0);animation-timing-function:cubic-bezier(.12,.66,.32,1)}42%{transform:translateY(var(--confetti-lift));animation-timing-function:cubic-bezier(.58,0,.86,.32)}to{transform:translateY(var(--confetti-drop))}}@keyframes onboarding-confetti-piece{0%{opacity:0;transform:scale(.7) rotate(0)}6%{opacity:1}72%{opacity:1}to{opacity:0;transform:scale(1) rotate(var(--confetti-spin))}}.onboarding-confetti-x,.onboarding-confetti-y,.onboarding-confetti-piece{--confetti-duration: 1.9s;animation-duration:var(--confetti-duration);animation-delay:var(--confetti-delay, 0ms);animation-fill-mode:both}.onboarding-confetti-x{animation-name:onboarding-confetti-x;animation-timing-function:cubic-bezier(.08,.62,.3,1)}.onboarding-confetti-y{animation-name:onboarding-confetti-y;animation-timing-function:linear}.onboarding-confetti-piece{width:var(--confetti-size);height:var(--confetti-size);border-radius:var(--radius-pill) var(--radius-xs) var(--radius-pill) var(--radius-pill);animation-name:onboarding-confetti-piece;animation-timing-function:linear}@media(prefers-reduced-motion:reduce){.onboarding-confetti-x,.onboarding-confetti-y,.onboarding-confetti-piece{animation:none;opacity:0}}body:has(.onboarding-canvas){background-color:hsl(var(--brand-h) var(--brand-s) var(--brand-l))}.panel-shell,.surface-shell{border:1px solid hsl(var(--border-subtle));border-radius:var(--radius-xl);background:hsl(var(--surface-1));box-shadow:var(--shadow-sm)}.panel-shell-muted,.surface-shell-muted{background:hsl(var(--surface-2));box-shadow:var(--shadow-xs)}.panel-shell-subtle{border:1px solid hsl(var(--border-subtle));border-radius:var(--radius-lg);background:hsl(var(--surface-1));box-shadow:var(--shadow-xs)}.panel-shell-elevated{border:1px solid hsl(var(--border-default));border-radius:var(--radius-xl);background:hsl(var(--surface-1));box-shadow:var(--shadow-md)}.utility-chip,.floating-chip{display:inline-flex;align-items:center;gap:.5rem;border:1px solid hsl(var(--border-default));border-radius:var(--radius-pill);background:hsl(var(--surface-1));box-shadow:var(--shadow-xs)}.hairline{border-bottom:1px solid hsl(var(--border-subtle))}.mono-label{font-family:var(--font-mono),ui-monospace,monospace;font-size:11px;text-transform:uppercase;color:hsl(var(--text-tertiary))}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root,:host{--font-sans: "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif;--font-mono: var(--font-sans);--issue-marker-expand-duration: .52s;--surface-0: 0 0% 99%;--surface-1: 0 0% 100%;--surface-2: 144 8% 96%;--surface-3: 144 6% 93%;--surface-inset: 144 6% 95%;--overlay-backdrop: hsl(0 0% 0% / .24);--overlay-backdrop-strong: hsl(0 0% 0% / .48);--text-primary: 150 10% 12%;--text-secondary: 148 6% 36%;--text-tertiary: 145 5% 52%;--text-disabled: 145 4% 70%;--border-subtle: 144 8% 91%;--border-default: 144 6% 85%;--border-strong: 144 5% 72%;--grid-line: 0 0% 92%;--shadow-xs: 0 1px 2px 0 hsl(0 0% 0% / .04);--shadow-sm: 0 1px 3px 0 hsl(0 0% 0% / .06), 0 1px 2px -1px hsl(0 0% 0% / .06);--shadow-md: 0 4px 6px -1px hsl(0 0% 0% / .06), 0 2px 4px -2px hsl(0 0% 0% / .04);--shadow-lg: 0 10px 15px -3px hsl(0 0% 0% / .06), 0 4px 6px -4px hsl(0 0% 0% / .04);--shadow-xl: 0 20px 25px -5px hsl(0 0% 0% / .06), 0 8px 10px -6px hsl(0 0% 0% / .04);--shadow-focus: 0 0 0 4px var(--brand-ring);--shadow-inset: inset 0 1px 2px 0 hsl(0 0% 0% / .04)}*{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}#issue-sticker-shadow-root{background-color:transparent;--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.\\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-1{left:.25rem;right:.25rem}.inset-y-0{top:0;bottom:0}.-bottom-px{bottom:-1px}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-6{bottom:1.5rem}.left-0{left:0}.left-1\\/2{left:50%}.left-2{left:.5rem}.left-4{left:1rem}.left-\\[50\\%\\]{left:50%}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-6{right:1.5rem}.top-0{top:0}.top-1{top:.25rem}.top-1\\/2{top:50%}.top-2{top:.5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-5{top:1.25rem}.top-\\[50\\%\\]{top:50%}.top-\\[calc\\(\\(3\\.5rem-1\\.75rem\\)\\/2\\)\\]{top:.875rem}.top-full{top:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-\\[1000000\\]{z-index:1000000}.z-\\[1000003\\]{z-index:1000003}.z-\\[1000004\\]{z-index:1000004}.z-\\[1000005\\]{z-index:1000005}.z-\\[1000006\\]{z-index:1000006}.z-\\[1000007\\]{z-index:1000007}.z-\\[1000008\\]{z-index:1000008}.z-\\[1000010\\]{z-index:1000010}.z-\\[1000011\\]{z-index:1000011}.z-\\[10001\\]{z-index:10001}.z-\\[999999\\]{z-index:999999}.z-\\[9999\\]{z-index:9999}.m-0{margin:0}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-2\\.5{margin-top:.625rem;margin-bottom:.625rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0\\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-5{margin-bottom:1.25rem}.ml-0\\.5{margin-left:.125rem}.ml-4{margin-left:1rem}.mr-1\\.5{margin-right:.375rem}.mt-0{margin-top:0}.mt-0\\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.\\!h-auto{height:auto!important}.h-1\\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\\[1\\.4rem\\]{height:1.4rem}.h-\\[100vh\\]{height:100vh}.h-\\[18px\\]{height:18px}.h-\\[220px\\]{height:220px}.h-\\[22px\\]{height:22px}.h-\\[30px\\]{height:30px}.h-\\[min\\(36vh\\,320px\\)\\]{height:min(36vh,320px)}.h-\\[min\\(480px\\,calc\\(100vh-64px\\)\\)\\]{height:min(480px,calc(100vh - 64px))}.h-\\[min\\(54vh\\,520px\\)\\]{height:min(54vh,520px)}.h-\\[min\\(560px\\,calc\\(100vh-32px\\)\\)\\]{height:min(560px,calc(100vh - 32px))}.h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-24{max-height:6rem}.max-h-40{max-height:10rem}.max-h-56{max-height:14rem}.max-h-96{max-height:24rem}.max-h-\\[150px\\]{max-height:150px}.max-h-\\[220px\\]{max-height:220px}.max-h-\\[320px\\]{max-height:320px}.max-h-\\[420px\\]{max-height:420px}.max-h-\\[90vh\\]{max-height:90vh}.max-h-\\[calc\\(100vh-3rem\\)\\]{max-height:calc(100vh - 3rem)}.max-h-\\[min\\(80vh\\,640px\\)\\]{max-height:min(80vh,640px)}.min-h-0{min-height:0px}.min-h-11{min-height:2.75rem}.min-h-\\[108px\\]{min-height:108px}.min-h-\\[120px\\]{min-height:120px}.min-h-\\[140px\\]{min-height:140px}.min-h-\\[220px\\]{min-height:220px}.w-0\\.5{width:.125rem}.w-1{width:.25rem}.w-1\\.5{width:.375rem}.w-1\\/2{width:50%}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\\[1\\.4rem\\]{width:1.4rem}.w-\\[18px\\]{width:18px}.w-\\[21rem\\]{width:21rem}.w-\\[22rem\\]{width:22rem}.w-\\[30px\\]{width:30px}.w-\\[38px\\]{width:38px}.w-\\[calc\\(100vw-32px\\)\\]{width:calc(100vw - 32px)}.w-\\[min\\(560px\\,calc\\(100vw-32px\\)\\)\\]{width:min(560px,calc(100vw - 32px))}.w-\\[var\\(--radix-popover-trigger-width\\)\\]{width:var(--radix-popover-trigger-width)}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0px}.min-w-9{min-width:2.25rem}.min-w-\\[12rem\\]{min-width:12rem}.min-w-\\[200px\\]{min-width:200px}.min-w-\\[var\\(--radix-popover-trigger-width\\)\\]{min-width:var(--radix-popover-trigger-width)}.min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.max-w-8{max-width:2rem}.max-w-\\[120px\\]{max-width:120px}.max-w-\\[160px\\]{max-width:160px}.max-w-\\[280px\\]{max-width:280px}.max-w-\\[28rem\\]{max-width:28rem}.max-w-\\[300px\\]{max-width:300px}.max-w-\\[360px\\]{max-width:360px}.max-w-\\[36rem\\]{max-width:36rem}.max-w-\\[400px\\]{max-width:400px}.max-w-\\[420px\\]{max-width:420px}.max-w-\\[428px\\]{max-width:428px}.max-w-\\[480px\\]{max-width:480px}.max-w-\\[62ch\\]{max-width:62ch}.max-w-\\[640px\\]{max-width:640px}.max-w-\\[70ch\\]{max-width:70ch}.max-w-\\[90vw\\]{max-width:90vw}.max-w-\\[960px\\]{max-width:960px}.max-w-\\[calc\\(100vw-24px\\)\\]{max-width:calc(100vw - 24px)}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[-50\\%\\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[18px\\]{--tw-translate-x: 18px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[2px\\]{--tw-translate-x: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\\[-50\\%\\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse-ring{0%,to{box-shadow:0 0 0 0 var(--brand-ring)}50%{box-shadow:0 0 0 8px transparent}}.animate-pulse-ring{animation:pulse-ring 1.8s var(--ease-in-out) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-3\\.5{gap:.875rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-y-2{row-gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-line-subtle>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.\\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\\[18px\\]{border-radius:18px}.rounded-\\[20px\\]{border-radius:20px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0px}.border-dashed{border-style:dashed}.border-\\[hsl\\(144_8\\%_91\\%\\)\\]{--tw-border-opacity: 1;border-color:hsl(144 8% 91% / var(--tw-border-opacity, 1))}.border-brand{--tw-border-opacity: 1;border-color:hsl(var(--brand-hsl) / var(--tw-border-opacity, 1))}.border-brand-border{border-color:var(--brand-border)}.border-brand\\/30{border-color:hsl(var(--brand-hsl) / .3)}.border-brand\\/40{border-color:hsl(var(--brand-hsl) / .4)}.border-danger\\/20{border-color:hsl(var(--danger) / .2)}.border-danger\\/30{border-color:hsl(var(--danger) / .3)}.border-info\\/20{border-color:hsl(var(--info) / .2)}.border-info\\/30{border-color:hsl(var(--info) / .3)}.border-line{--tw-border-opacity: 1;border-color:hsl(var(--border-default) / var(--tw-border-opacity, 1))}.border-line-focus{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.border-line-strong{--tw-border-opacity: 1;border-color:hsl(var(--border-strong) / var(--tw-border-opacity, 1))}.border-line-subtle{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}.border-line-subtle\\/50{border-color:hsl(var(--border-subtle) / .5)}.border-line-subtle\\/90{border-color:hsl(var(--border-subtle) / .9)}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-success{--tw-border-opacity: 1;border-color:hsl(var(--success) / var(--tw-border-opacity, 1))}.border-success\\/20{border-color:hsl(var(--success) / .2)}.border-success\\/30{border-color:hsl(var(--success) / .3)}.border-text-primary{--tw-border-opacity: 1;border-color:hsl(var(--text-primary) / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-warning\\/20{border-color:hsl(var(--warning) / .2)}.border-warning\\/30{border-color:hsl(var(--warning) / .3)}.border-white\\/70{border-color:#ffffffb3}.border-white\\/80{border-color:#fffc}.border-white\\/90{border-color:#ffffffe6}.border-l-brand{--tw-border-opacity: 1;border-left-color:hsl(var(--brand-hsl) / var(--tw-border-opacity, 1))}.\\!bg-success-surface{background-color:hsl(var(--success-surface))!important}.bg-\\[var\\(--overlay-backdrop-strong\\)\\]{background-color:var(--overlay-backdrop-strong)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\\/10{background-color:#0000001a}.bg-black\\/40{background-color:#0006}.bg-black\\/80{background-color:#000c}.bg-brand{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.bg-brand-subtle{background-color:var(--brand-subtle)}.bg-brand\\/10{background-color:hsl(var(--brand-hsl) / .1)}.bg-brand\\/5{background-color:hsl(var(--brand-hsl) / .05)}.bg-danger{--tw-bg-opacity: 1;background-color:hsl(var(--danger) / var(--tw-bg-opacity, 1))}.bg-danger-subtle{background-color:hsl(var(--danger-subtle))}.bg-danger\\/10{background-color:hsl(var(--danger) / .1)}.bg-info-subtle{background-color:hsl(var(--info-subtle))}.bg-line{--tw-bg-opacity: 1;background-color:hsl(var(--border-default) / var(--tw-bg-opacity, 1))}.bg-line-subtle{--tw-bg-opacity: 1;background-color:hsl(var(--border-subtle) / var(--tw-bg-opacity, 1))}.bg-success{--tw-bg-opacity: 1;background-color:hsl(var(--success) / var(--tw-bg-opacity, 1))}.bg-success-subtle{background-color:hsl(var(--success-subtle))}.bg-success-surface{background-color:hsl(var(--success-surface))}.bg-surface-0{--tw-bg-opacity: 1;background-color:hsl(var(--surface-0) / var(--tw-bg-opacity, 1))}.bg-surface-1{--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.bg-surface-2{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.bg-surface-3{--tw-bg-opacity: 1;background-color:hsl(var(--surface-3) / var(--tw-bg-opacity, 1))}.bg-surface-inset{--tw-bg-opacity: 1;background-color:hsl(var(--surface-inset) / var(--tw-bg-opacity, 1))}.bg-text-primary{--tw-bg-opacity: 1;background-color:hsl(var(--text-primary) / var(--tw-bg-opacity, 1))}.bg-text-tertiary{--tw-bg-opacity: 1;background-color:hsl(var(--text-tertiary) / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-warning{--tw-bg-opacity: 1;background-color:hsl(var(--warning) / var(--tw-bg-opacity, 1))}.bg-warning-subtle{background-color:hsl(var(--warning-subtle))}.bg-warning\\/10{background-color:hsl(var(--warning) / .1)}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\\/10{background-color:#ffffff1a}.bg-white\\/25{background-color:#ffffff40}.fill-text-primary{fill:hsl(var(--text-primary) / 1)}.stroke-\\[3\\]{stroke-width:3}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.\\!p-0{padding:0!important}.p-0{padding:0}.p-0\\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-3\\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.p-\\[18px\\]{padding:18px}.px-0{padding-left:0;padding-right:0}.px-1\\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2\\.5{padding-top:.625rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-display{font-family:var(--font-display),ui-sans-serif,system-ui,sans-serif}.font-mono{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,monospace}.font-sans{font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif}.text-2xs{font-size:clamp(10.5px,10.19px + .082vw,11.5px);line-height:1.333}.text-\\[0\\.72rem\\]{font-size:.72rem}.text-\\[1\\.45rem\\]{font-size:1.45rem}.text-\\[1\\.75rem\\]{font-size:1.75rem}.text-\\[10px\\]{font-size:10px}.text-base{font-size:clamp(14px,13.39px + .163vw,16px);line-height:1.5}.text-lg{font-size:clamp(17px,16.39px + .163vw,19px);line-height:1.471}.text-sm{font-size:clamp(13px,12.54px + .122vw,14.5px);line-height:1.462}.text-xl{font-size:clamp(20px,19.08px + .245vw,23px);line-height:1.45}.text-xs{font-size:clamp(12px,11.69px + .082vw,13px);line-height:1.333}.font-black{font-weight:900}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-8{line-height:2rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.text-\\[hsl\\(145_5\\%_42\\%\\)\\]{--tw-text-opacity: 1;color:hsl(145 5% 42% / var(--tw-text-opacity, 1))}.text-brand{--tw-text-opacity: 1;color:hsl(var(--brand-hsl) / var(--tw-text-opacity, 1))}.text-brand-fg{color:var(--brand-fg)}.text-brand\\/50{color:hsl(var(--brand-hsl) / .5)}.text-danger{--tw-text-opacity: 1;color:hsl(var(--danger) / var(--tw-text-opacity, 1))}.text-danger\\/80{color:hsl(var(--danger) / .8)}.text-info{--tw-text-opacity: 1;color:hsl(var(--info) / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-success{--tw-text-opacity: 1;color:hsl(var(--success) / var(--tw-text-opacity, 1))}.text-text-disabled{--tw-text-opacity: 1;color:hsl(var(--text-disabled) / var(--tw-text-opacity, 1))}.text-text-inverse{--tw-text-opacity: 1;color:hsl(var(--text-inverse) / var(--tw-text-opacity, 1))}.text-text-primary{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.text-text-secondary{--tw-text-opacity: 1;color:hsl(var(--text-secondary) / var(--tw-text-opacity, 1))}.text-text-tertiary{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-warning{--tw-text-opacity: 1;color:hsl(var(--warning) / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-brand{accent-color:hsl(var(--brand-hsl) / 1)}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.\\!shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\\[0_24px_70px_-28px_rgba\\(16\\,24\\,18\\,0\\.45\\)\\]{--tw-shadow: 0 24px 70px -28px rgba(16,24,18,.45);--tw-shadow-colored: 0 24px 70px -28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: var(--shadow-lg);--tw-shadow-colored: var(--shadow-lg);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: var(--shadow-md);--tw-shadow-colored: var(--shadow-md);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: var(--shadow-xl);--tw-shadow-colored: var(--shadow-xl);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: var(--shadow-xs);--tw-shadow-colored: var(--shadow-xs);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-2{outline-width:2px}.outline-offset-0{outline-offset:0px}.outline-transparent{outline-color:transparent}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-brand{--tw-ring-opacity: 1;--tw-ring-color: hsl(var(--brand-hsl) / var(--tw-ring-opacity, 1))}.ring-brand-subtle{--tw-ring-color: var(--brand-subtle)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\\[2px\\]{--tw-backdrop-blur: blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,border-color\\,color\\,box-shadow\\]{transition-property:background-color,border-color,color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\,border-color\\,box-shadow\\,opacity\\]{transition-property:background-color,color,border-color,box-shadow,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\,border-color\\,box-shadow\\]{transition-property:background-color,color,border-color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\,box-shadow\\]{transition-property:background-color,color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\]{transition-property:background-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[border-color\\,box-shadow\\,background-color\\]{transition-property:border-color,box-shadow,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[border-color\\,outline-color\\,box-shadow\\,background-color\\,transform\\]{transition-property:border-color,outline-color,box-shadow,background-color,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[max-width\\,box-shadow\\,background-color\\,border-color\\,transform\\,opacity\\]{transition-property:max-width,box-shadow,background-color,border-color,transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[max-width\\]{transition-property:max-width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.duration-\\[var\\(--issue-marker-expand-duration\\)\\]{transition-duration:var(--issue-marker-expand-duration)}.duration-fast{transition-duration:var(--duration-fast)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:var(--ease-in-out)}.ease-out{transition-timing-function:var(--ease-out)}@keyframes float-gentle{0%,to{transform:translateY(0)}50%{transform:translateY(-2px)}}@keyframes toast-slide{0%{opacity:0;transform:translateY(-14px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes gradient-shift{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}.issue-overlay-shell{border:1px solid hsl(var(--border-subtle));border-radius:var(--radius-lg);background:hsl(var(--surface-1));box-shadow:var(--shadow-md)}.issue-marker-breathe{animation:float-gentle 4.8s var(--ease-in-out) infinite}.issue-marker-breathe:hover,.issue-marker-breathe:focus-visible,.issue-marker-breathe:focus-within{animation-play-state:paused}.marker\\:text-text-tertiary *::marker{color:hsl(var(--text-tertiary))}.marker\\:text-text-tertiary::marker{color:hsl(var(--text-tertiary))}.file\\:border-0::file-selector-button{border-width:0px}.file\\:bg-transparent::file-selector-button{background-color:transparent}.file\\:text-sm::file-selector-button{font-size:clamp(13px,12.54px + .122vw,14.5px);line-height:1.462}.file\\:font-medium::file-selector-button{font-weight:500}.file\\:text-text-primary::file-selector-button{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.placeholder\\:text-text-tertiary::-moz-placeholder{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.placeholder\\:text-text-tertiary::placeholder{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.focus-within\\:z-\\[10001\\]:focus-within{z-index:10001}.focus-within\\:border-line-focus:focus-within{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.hover\\:z-\\[10001\\]:hover{z-index:10001}.hover\\:max-w-\\[160px\\]:hover{max-width:160px}.hover\\:max-w-\\[480px\\]:hover{max-width:480px}.hover\\:border-line:hover{--tw-border-opacity: 1;border-color:hsl(var(--border-default) / var(--tw-border-opacity, 1))}.hover\\:border-line-strong:hover{--tw-border-opacity: 1;border-color:hsl(var(--border-strong) / var(--tw-border-opacity, 1))}.hover\\:border-line-subtle:hover{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}.hover\\:bg-\\[hsl\\(144_8\\%_96\\%\\)\\]:hover{--tw-bg-opacity: 1;background-color:hsl(144 8% 96% / var(--tw-bg-opacity, 1))}.hover\\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\\:bg-brand-hover:hover{background-color:var(--brand-hover)}.hover\\:bg-brand\\/40:hover{background-color:hsl(var(--brand-hsl) / .4)}.hover\\:bg-danger-subtle:hover{background-color:hsl(var(--danger-subtle))}.hover\\:bg-danger\\/10:hover{background-color:hsl(var(--danger) / .1)}.hover\\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\\:bg-surface-2:hover{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.hover\\:bg-surface-2\\/60:hover{background-color:hsl(var(--surface-2) / .6)}.hover\\:bg-surface-3:hover{--tw-bg-opacity: 1;background-color:hsl(var(--surface-3) / var(--tw-bg-opacity, 1))}.hover\\:bg-surface-inset:hover{--tw-bg-opacity: 1;background-color:hsl(var(--surface-inset) / var(--tw-bg-opacity, 1))}.hover\\:bg-transparent:hover{background-color:transparent}.hover\\:bg-white\\/20:hover{background-color:#fff3}.hover\\:text-\\[hsl\\(150_10\\%_12\\%\\)\\]:hover{--tw-text-opacity: 1;color:hsl(150 10% 12% / var(--tw-text-opacity, 1))}.hover\\:text-brand-hover:hover{color:var(--brand-hover)}.hover\\:text-danger:hover{--tw-text-opacity: 1;color:hsl(var(--danger) / var(--tw-text-opacity, 1))}.hover\\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\\:text-text-primary:hover{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.hover\\:text-text-secondary:hover{--tw-text-opacity: 1;color:hsl(var(--text-secondary) / var(--tw-text-opacity, 1))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-90:hover{opacity:.9}.hover\\:shadow-xl:hover{--tw-shadow: var(--shadow-xl);--tw-shadow-colored: var(--shadow-xl);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\\:border-brand:focus{--tw-border-opacity: 1;border-color:hsl(var(--brand-hsl) / var(--tw-border-opacity, 1))}.focus\\:bg-surface-2:focus{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.focus\\:text-text-primary:focus{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:max-w-\\[160px\\]:focus-visible{max-width:160px}.focus-visible\\:max-w-\\[480px\\]:focus-visible{max-width:480px}.focus-visible\\:border-line-focus:focus-visible{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.focus-visible\\:border-transparent:focus-visible{border-color:transparent}.focus-visible\\:bg-slate-50:focus-visible{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.focus-visible\\:bg-surface-1:focus-visible{--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.focus-visible\\:bg-surface-2:focus-visible{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.focus-visible\\:text-text-primary:focus-visible{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.focus-visible\\:shadow-focus:focus-visible{--tw-shadow: var(--shadow-focus);--tw-shadow-colored: var(--shadow-focus);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:outline-line-focus:focus-visible{outline-color:hsl(var(--border-focus) / 1)}.focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-brand-subtle:focus-visible{--tw-ring-color: var(--brand-subtle)}.focus-visible\\:ring-white\\/40:focus-visible{--tw-ring-color: rgb(255 255 255 / .4)}.active\\:bg-brand-active:active{background-color:var(--brand-active)}.active\\:bg-brand\\/60:active{background-color:hsl(var(--brand-hsl) / .6)}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\\:opacity-100{opacity:1}.group:focus-visible .group-focus-visible\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-visible .group-focus-visible\\:opacity-100{opacity:1}.group.toaster .group-\\[\\.toaster\\]\\:isolate{isolation:isolate}.group.toast .group-\\[\\.toast\\]\\:rounded-md,.group.toaster .group-\\[\\.toaster\\]\\:rounded-md{border-radius:var(--radius-md)}.group.toaster .group-\\[\\.toaster\\]\\:border{border-width:1px}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-danger\\/30{border-color:hsl(var(--danger) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-info\\/30{border-color:hsl(var(--info) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-success\\/30{border-color:hsl(var(--success) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-warning\\/30{border-color:hsl(var(--warning) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:border-line-subtle{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}.group.toast .group-\\[\\.toast\\]\\:bg-brand{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.group.toast .group-\\[\\.toast\\]\\:bg-surface-2{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-danger-subtle{background-color:hsl(var(--danger-subtle))!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-info-subtle{background-color:hsl(var(--info-subtle))!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-success-surface{background-color:hsl(var(--success-surface))!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-warning-subtle{background-color:hsl(var(--warning-subtle))!important}.group.toaster .group-\\[\\.toaster\\]\\:bg-surface-1{--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:px-4{padding-left:1rem;padding-right:1rem}.group.toaster .group-\\[\\.toaster\\]\\:py-3{padding-top:.75rem;padding-bottom:.75rem}.group.toast .group-\\[\\.toast\\]\\:text-sm{font-size:clamp(13px,12.54px + .122vw,14.5px);line-height:1.462}.group.toast .group-\\[\\.toast\\]\\:text-xs{font-size:clamp(12px,11.69px + .082vw,13px);line-height:1.333}.group.toast .group-\\[\\.toast\\]\\:font-medium{font-weight:500}.group.toast .group-\\[\\.toast\\]\\:text-brand-fg{color:var(--brand-fg)}.group.toast .group-\\[\\.toast\\]\\:text-text-primary{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.group.toast .group-\\[\\.toast\\]\\:text-text-secondary{--tw-text-opacity: 1;color:hsl(var(--text-secondary) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:text-text-primary{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:shadow-sm{--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group.toaster .group-\\[\\.toaster\\]\\:before\\:absolute:before{content:var(--tw-content);position:absolute}.group.toaster .group-\\[\\.toaster\\]\\:before\\:inset-0:before{content:var(--tw-content);top:0;right:0;bottom:0;left:0}.group.toaster .group-\\[\\.toaster\\]\\:before\\:-z-10:before{content:var(--tw-content);z-index:-10}.group.toaster .group-\\[\\.toaster\\]\\:before\\:rounded-md:before{content:var(--tw-content);border-radius:var(--radius-md)}.group.toaster .group-\\[\\.toaster\\]\\:before\\:bg-surface-1:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:before\\:content-\\[\\'\\'\\]:before{--tw-content: "";content:var(--tw-content)}.peer:focus-visible~.peer-focus-visible\\:shadow-focus{--tw-shadow: var(--shadow-focus);--tw-shadow-colored: var(--shadow-focus);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:disabled~.peer-disabled\\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\\:opacity-60{opacity:.6}.aria-disabled\\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\\:opacity-40[aria-disabled=true]{opacity:.4}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}@keyframes dialog-out{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,calc(-50% + 8px)) scale(.985)}}.data-\\[state\\=closed\\]\\:animate-dialog-out[data-state=closed]{animation:dialog-out var(--duration-out) var(--ease-out) forwards}@keyframes fade-out{0%{opacity:1}to{opacity:0}}.data-\\[state\\=closed\\]\\:animate-fade-out[data-state=closed]{animation:fade-out var(--duration-out) var(--ease-out) forwards}@keyframes scale-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.97)}}.data-\\[state\\=closed\\]\\:animate-scale-out[data-state=closed]{animation:scale-out var(--duration-out) var(--ease-out) forwards}@keyframes sheet-out-left{0%{transform:translate(0)}to{transform:translate(-100%);opacity:.6}}.data-\\[state\\=closed\\]\\:animate-sheet-out-left[data-state=closed]{animation:sheet-out-left var(--duration-base) var(--ease-out) forwards}@keyframes sheet-out-right{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:.6}}.data-\\[state\\=closed\\]\\:animate-sheet-out-right[data-state=closed]{animation:sheet-out-right var(--duration-base) var(--ease-out) forwards}.data-\\[state\\=delayed-open\\]\\:animate-scale-in[data-state=delayed-open]{animation:scale-in var(--duration-base) var(--ease-out) forwards}@keyframes dialog-in{0%{opacity:0;transform:translate(-50%,calc(-50% + 12px)) scale(.985)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.data-\\[state\\=open\\]\\:animate-dialog-in[data-state=open]{animation:dialog-in var(--duration-base) var(--ease-out) forwards}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.data-\\[state\\=open\\]\\:animate-fade-in[data-state=open]{animation:fade-in var(--duration-base) var(--ease-out) forwards}@keyframes scale-in{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.data-\\[state\\=open\\]\\:animate-scale-in[data-state=open]{animation:scale-in var(--duration-base) var(--ease-out) forwards}@keyframes sheet-in-left{0%{transform:translate(-100%);opacity:.6}to{transform:translate(0);opacity:1}}.data-\\[state\\=open\\]\\:animate-sheet-in-left[data-state=open]{animation:sheet-in-left var(--duration-base) var(--ease-out) forwards}@keyframes sheet-in-right{0%{transform:translate(100%);opacity:.6}to{transform:translate(0)}}.data-\\[state\\=open\\]\\:animate-sheet-in-right[data-state=open]{animation:sheet-in-right var(--duration-base) var(--ease-out) forwards}.data-\\[range-end\\=true\\]\\:rounded-md[data-range-end=true]{border-radius:var(--radius-md)}.data-\\[range-middle\\=true\\]\\:rounded-none[data-range-middle=true]{border-radius:0}.data-\\[range-start\\=true\\]\\:rounded-md[data-range-start=true]{border-radius:var(--radius-md)}.data-\\[state\\=open\\]\\:border-line-focus[data-state=open]{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.data-\\[highlighted\\]\\:bg-surface-2[data-highlighted]{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.data-\\[range-end\\=true\\]\\:bg-brand[data-range-end=true]{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.data-\\[range-middle\\=true\\]\\:bg-transparent[data-range-middle=true]{background-color:transparent}.data-\\[range-start\\=true\\]\\:bg-brand[data-range-start=true],.data-\\[selected-single\\=true\\]\\:bg-brand[data-selected-single=true]{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.data-\\[state\\=selected\\]\\:bg-brand-subtle[data-state=selected]{background-color:var(--brand-subtle)}.data-\\[today\\=true\\]\\:font-semibold[data-today=true]{font-weight:600}.data-\\[highlighted\\]\\:text-text-primary[data-highlighted]{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.data-\\[placeholder\\]\\:text-text-tertiary[data-placeholder]{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.data-\\[range-end\\=true\\]\\:text-brand-fg[data-range-end=true]{color:var(--brand-fg)}.data-\\[range-middle\\=true\\]\\:text-text-primary[data-range-middle=true]{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.data-\\[range-start\\=true\\]\\:text-brand-fg[data-range-start=true],.data-\\[selected-single\\=true\\]\\:text-brand-fg[data-selected-single=true]{color:var(--brand-fg)}.data-\\[state\\=active\\]\\:text-text-primary[data-state=active],.data-\\[state\\=checked\\]\\:text-text-primary[data-state=checked]{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.data-\\[today\\=true\\]\\:text-brand[data-today=true]{--tw-text-opacity: 1;color:hsl(var(--brand-hsl) / var(--tw-text-opacity, 1))}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=open\\]\\:shadow-focus[data-state=open]{--tw-shadow: var(--shadow-focus);--tw-shadow-colored: var(--shadow-focus);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\\[range-end\\=true\\]\\:hover\\:bg-brand-hover:hover[data-range-end=true],.data-\\[range-start\\=true\\]\\:hover\\:bg-brand-hover:hover[data-range-start=true],.data-\\[selected-single\\=true\\]\\:hover\\:bg-brand-hover:hover[data-selected-single=true]{background-color:var(--brand-hover)}.data-\\[range-end\\=true\\]\\:hover\\:text-brand-fg:hover[data-range-end=true],.data-\\[range-start\\=true\\]\\:hover\\:text-brand-fg:hover[data-range-start=true],.data-\\[selected-single\\=true\\]\\:hover\\:text-brand-fg:hover[data-selected-single=true]{color:var(--brand-fg)}@media(prefers-reduced-motion:reduce){.motion-reduce\\:animate-none{animation:none}}@media(min-width:640px){.sm\\:flex-row{flex-direction:row}.sm\\:items-start{align-items:flex-start}.sm\\:items-center{align-items:center}.sm\\:justify-end{justify-content:flex-end}.sm\\:justify-between{justify-content:space-between}.sm\\:gap-2\\.5{gap:.625rem}.sm\\:p-5{padding:1.25rem}.sm\\:p-6{padding:1.5rem}.sm\\:text-2xl{font-size:clamp(26px,24.78px + .327vw,30px);line-height:1.308}.sm\\:text-\\[2\\.1rem\\]{font-size:2.1rem}}@media(min-width:768px){.md\\:flex{display:flex}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-\\[minmax\\(0\\,1fr\\)_minmax\\(260px\\,340px\\)\\]{grid-template-columns:minmax(0,1fr) minmax(260px,340px)}}.\\[\\&\\>\\*\\:not\\(summary\\)\\]\\:pl-4>*:not(summary){padding-left:1rem}.\\[\\&\\>span\\]\\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>tr\\]\\:last\\:border-b-0:last-child>tr{border-bottom-width:0px}.\\[\\&\\[data-state\\=open\\]\\>span\\[data-chevron\\]\\]\\:rotate-180[data-state=open]>span[data-chevron]{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-danger [data-icon]{--tw-text-opacity: 1;color:hsl(var(--danger) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-info [data-icon]{--tw-text-opacity: 1;color:hsl(var(--info) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-success [data-icon]{--tw-text-opacity: 1;color:hsl(var(--success) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-warning [data-icon]{--tw-text-opacity: 1;color:hsl(var(--warning) / var(--tw-text-opacity, 1))}.\\[\\&_tr\\]\\:border-b tr{border-bottom-width:1px}.\\[\\&_tr\\]\\:border-line-subtle tr{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}`;
38605
+ const globalsCSS = `:root,:host{color-scheme:light;--brand-h: 150;--brand-s: 100%;--brand-l: 34%;--brand-hsl: var(--brand-h) var(--brand-s) var(--brand-l);--brand: hsl(var(--brand-hsl));--brand-hover: hsl(var(--brand-h) calc(var(--brand-s) + 3%) calc(var(--brand-l) - 4%));--brand-active: hsl(var(--brand-h) calc(var(--brand-s) + 2%) calc(var(--brand-l) - 8%));--brand-subtle: hsl(var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .14);--brand-border: hsl(var(--brand-h) calc(var(--brand-s) + 8%) calc(var(--brand-l) + 8%) / .34);--brand-fg: hsl(0 0% 100%);--brand-ring: hsl(var(--brand-h) calc(var(--brand-s) + 12%) calc(var(--brand-l) + 10%) / .22);--font-sans: "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif;--font-display: var(--font-sans);--font-mono: var(--font-sans);--surface-0: 0 0% 99%;--surface-1: 0 0% 100%;--surface-2: 144 8% 96%;--surface-3: 144 6% 93%;--surface-inset: 144 6% 95%;--overlay-backdrop: hsl(0 0% 0% / .24);--overlay-backdrop-strong: hsl(0 0% 0% / .48);--text-primary: 150 10% 12%;--text-secondary: 148 6% 36%;--text-tertiary: 145 5% 42%;--text-disabled: 145 4% 70%;--text-inverse: 0 0% 100%;--border-subtle: 144 8% 91%;--border-default: 144 6% 85%;--border-strong: 144 5% 72%;--border-focus: var(--brand-h) var(--brand-s) var(--brand-l);--success: var(--brand-h) var(--brand-s) var(--brand-l);--success-subtle: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .14;--success-surface: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .24;--warning: 34 82% 52%;--warning-subtle: 34 82% 52% / .14;--danger: 3 68% 56%;--danger-subtle: 3 68% 56% / .12;--danger-deep: 3 62% 40%;--info: 202 52% 44%;--info-subtle: 202 52% 44% / .12;--accent-terra: 13 52% 47%;--accent-terra-subtle: 13 52% 47% / .1;--accent-terra-deep: 13 48% 44%;--accent-blue: 213 86% 56%;--accent-blue-subtle: 213 92% 56% / .12;--accent-blue-deep: 216 78% 40%;--accent-blue-border: 213 86% 62% / .36;--accent-cream: 38 52% 88%;--accent-cream-warm: 40 56% 95%;--accent-cream-deep: 38 48% 82%;--accent-highlight: 55 96% 70%;--accent-ink: 32 13% 11%;--radius-xs: 4px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--radius-2xl: 24px;--radius-pill: 9999px;--shadow-xs: 0 1px 2px 0 hsl(0 0% 0% / .04);--shadow-sm: 0 1px 3px 0 hsl(0 0% 0% / .06), 0 1px 2px -1px hsl(0 0% 0% / .06);--shadow-md: 0 4px 6px -1px hsl(0 0% 0% / .06), 0 2px 4px -2px hsl(0 0% 0% / .04);--shadow-lg: 0 10px 15px -3px hsl(0 0% 0% / .06), 0 4px 6px -4px hsl(0 0% 0% / .04);--shadow-xl: 0 20px 25px -5px hsl(0 0% 0% / .06), 0 8px 10px -6px hsl(0 0% 0% / .04);--shadow-focus: 0 0 0 3px var(--brand-ring);--shadow-inset: inset 0 1px 2px 0 hsl(0 0% 0% / .04);--shadow-brand: 0 2px 8px hsl(var(--brand-h) calc(var(--brand-s) - 60%) calc(var(--brand-l) - 14%) / .24), 0 6px 20px hsl(var(--brand-h) calc(var(--brand-s) - 70%) calc(var(--brand-l) - 19%) / .16);--duration-instant: 90ms;--duration-fast: .16s;--duration-base: .26s;--duration-out: .18s;--duration-slow: .36s;--ease-out: cubic-bezier(.23, 1, .32, 1);--ease-in-out: cubic-bezier(.45, 0, .15, 1);--ease-spring: cubic-bezier(.18, .94, .32, 1.08);--grid-line: 0 0% 92%}.dark,:host(.dark){color-scheme:dark;--brand-l: 34%;--brand-fg: hsl(0 0% 100%);--surface-0: 150 8% 7%;--surface-1: 150 6% 10%;--surface-2: 150 5% 14%;--surface-3: 150 4% 18%;--surface-inset: 150 6% 6%;--overlay-backdrop: hsl(0 0% 0% / .56);--overlay-backdrop-strong: hsl(0 0% 0% / .8);--text-primary: 40 16% 93%;--text-secondary: 36 8% 68%;--text-tertiary: 34 6% 50%;--text-disabled: 30 5% 34%;--text-inverse: 150 8% 10%;--border-subtle: 150 6% 16%;--border-default: 150 5% 22%;--border-strong: 150 4% 34%;--success: var(--brand-h) var(--brand-s) var(--brand-l);--success-subtle: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .14;--success-surface: var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 14%) / .24;--warning: 34 82% 62%;--danger: 2 70% 64%;--danger-deep: 2 80% 76%;--info: 202 54% 62%;--accent-terra: 13 56% 62%;--accent-terra-subtle: 13 56% 62% / .14;--accent-terra-deep: 13 52% 56%;--accent-blue: 210 92% 68%;--accent-blue-subtle: 210 92% 68% / .18;--accent-blue-deep: 209 100% 78%;--accent-blue-border: 210 92% 72% / .44;--accent-cream: 38 30% 26%;--accent-cream-warm: 38 22% 18%;--accent-cream-deep: 38 26% 32%;--accent-highlight: 55 96% 70%;--accent-ink: 32 13% 8%;--shadow-xs: 0 1px 2px 0 hsl(0 0% 0% / .2);--shadow-sm: 0 1px 3px 0 hsl(0 0% 0% / .3), 0 1px 2px -1px hsl(0 0% 0% / .24);--shadow-md: 0 4px 6px -1px hsl(0 0% 0% / .34), 0 2px 4px -2px hsl(0 0% 0% / .2);--shadow-lg: 0 10px 15px -3px hsl(0 0% 0% / .38), 0 4px 6px -4px hsl(0 0% 0% / .24);--shadow-xl: 0 20px 25px -5px hsl(0 0% 0% / .44), 0 8px 10px -6px hsl(0 0% 0% / .28);--shadow-inset: inset 0 1px 2px 0 hsl(0 0% 0% / .16);--shadow-brand: 0 2px 8px hsl(var(--brand-h) calc(var(--brand-s) - 60%) calc(var(--brand-l) - 24%) / .44), 0 6px 20px hsl(0 0% 0% / .32);--grid-line: 150 6% 14%}*{border-color:hsl(var(--border-default))}html{font-family:var(--font-sans),ui-sans-serif,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-feature-settings:"cv11","ss01","ss03";background-color:hsl(var(--surface-0))}body{margin:0;min-height:100vh;color:hsl(var(--text-primary));background-color:hsl(var(--surface-0))}::-moz-selection{background-color:hsl(var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 16%) / .22);color:hsl(var(--text-primary))}::selection{background-color:hsl(var(--brand-h) calc(var(--brand-s) + 6%) calc(var(--brand-l) + 16%) / .22);color:hsl(var(--text-primary))}code,kbd,samp,pre{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,monospace;font-feature-settings:"ss01","ss02","cv11"}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:hsl(var(--border-strong) / .52);border-radius:var(--radius-pill);border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:hsl(var(--border-strong) / .9);background-clip:padding-box;border:2px solid transparent}.app-canvas,.grid-canvas{background-color:hsl(var(--surface-0))}.onboarding-canvas{word-break:keep-all;overflow-wrap:break-word;--surface-0: var(--brand-h) var(--brand-s) var(--brand-l);--surface-1: 0 0% 100%;--surface-2: var(--brand-h) 62% 28%;--surface-3: var(--brand-h) 60% 25%;--surface-inset: var(--brand-h) 62% 28%;--text-primary: 0 0% 100%;--text-secondary: var(--brand-h) 46% 90%;--text-tertiary: var(--brand-h) 34% 84%;--text-disabled: var(--brand-h) 20% 72%;--border-subtle: var(--brand-h) 44% 52%;--border-default: var(--brand-h) 40% 58%;--border-strong: var(--brand-h) 36% 70%;--border-focus: 0 0% 100%;--brand-hsl: 0 0% 100%;--brand: hsl(var(--brand-hsl));--brand-hover: hsl(var(--brand-h) 24% 94%);--brand-active: hsl(var(--brand-h) 20% 88%);--brand-fg: hsl(var(--brand-h) var(--brand-s) 24%);--brand-ring: hsl(0 0% 100% / .4);--danger: 6 96% 86%;--danger-subtle: 6 96% 86% / .18;--danger-deep: 6 96% 92%;--warning: 42 96% 82%;--warning-subtle: 42 96% 82% / .18}.onboarding-canvas .bg-surface-1,.onboarding-canvas input,.onboarding-canvas textarea,.onboarding-canvas [role=combobox]{--text-primary: 150 10% 12%;--text-secondary: 148 6% 36%;--text-tertiary: 145 5% 42%;--surface-2: 144 8% 96%;--surface-inset: 144 6% 95%;--border-subtle: 144 8% 91%;--border-default: 144 6% 85%;--brand-hsl: var(--brand-h) var(--brand-s) var(--brand-l);--brand: hsl(var(--brand-hsl));--brand-hover: hsl(var(--brand-h) calc(var(--brand-s) + 3%) calc(var(--brand-l) - 4%));--brand-active: hsl(var(--brand-h) calc(var(--brand-s) + 2%) calc(var(--brand-l) - 8%));--brand-fg: hsl(0 0% 100%);--brand-ring: hsl(var(--brand-h) calc(var(--brand-s) + 12%) calc(var(--brand-l) + 10%) / .22)}@keyframes onboarding-step-in{0%{opacity:0;transform:translate(96px)}to{opacity:1;transform:translate(0)}}.onboarding-step-in{animation:onboarding-step-in var(--duration-slow) var(--ease-out) forwards}@keyframes onboarding-enter-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.onboarding-enter{position:fixed;top:0;right:0;bottom:0;left:0;overflow-x:hidden;overflow-y:auto;animation:onboarding-enter-up var(--duration-base) var(--ease-out) forwards}body:has(.onboarding-canvas){background-color:hsl(var(--brand-h) var(--brand-s) var(--brand-l))}.panel-shell,.surface-shell{border:1px solid hsl(var(--border-subtle));border-radius:var(--radius-xl);background:hsl(var(--surface-1));box-shadow:var(--shadow-sm)}.panel-shell-muted,.surface-shell-muted{background:hsl(var(--surface-2));box-shadow:var(--shadow-xs)}.panel-shell-subtle{border:1px solid hsl(var(--border-subtle));border-radius:var(--radius-lg);background:hsl(var(--surface-1));box-shadow:var(--shadow-xs)}.panel-shell-elevated{border:1px solid hsl(var(--border-default));border-radius:var(--radius-xl);background:hsl(var(--surface-1));box-shadow:var(--shadow-md)}.utility-chip,.floating-chip{display:inline-flex;align-items:center;gap:8px;border:1px solid hsl(var(--border-default));border-radius:var(--radius-pill);background:hsl(var(--surface-1));box-shadow:var(--shadow-xs)}.hairline{border-bottom:1px solid hsl(var(--border-subtle))}.mono-label{font-family:var(--font-mono),ui-monospace,monospace;font-size:11px;text-transform:uppercase;color:hsl(var(--text-tertiary))}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root,:host{--font-sans: "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif;--font-mono: var(--font-sans);--issue-marker-expand-duration: .52s;--surface-0: 0 0% 99%;--surface-1: 0 0% 100%;--surface-2: 144 8% 96%;--surface-3: 144 6% 93%;--surface-inset: 144 6% 95%;--overlay-backdrop: hsl(0 0% 0% / .24);--overlay-backdrop-strong: hsl(0 0% 0% / .48);--text-primary: 150 10% 12%;--text-secondary: 148 6% 36%;--text-tertiary: 145 5% 52%;--text-disabled: 145 4% 70%;--border-subtle: 144 8% 91%;--border-default: 144 6% 85%;--border-strong: 144 5% 72%;--grid-line: 0 0% 92%;--shadow-xs: 0 1px 2px 0 hsl(0 0% 0% / .04);--shadow-sm: 0 1px 3px 0 hsl(0 0% 0% / .06), 0 1px 2px -1px hsl(0 0% 0% / .06);--shadow-md: 0 4px 6px -1px hsl(0 0% 0% / .06), 0 2px 4px -2px hsl(0 0% 0% / .04);--shadow-lg: 0 10px 15px -3px hsl(0 0% 0% / .06), 0 4px 6px -4px hsl(0 0% 0% / .04);--shadow-xl: 0 20px 25px -5px hsl(0 0% 0% / .06), 0 8px 10px -6px hsl(0 0% 0% / .04);--shadow-focus: 0 0 0 4px var(--brand-ring);--shadow-inset: inset 0 1px 2px 0 hsl(0 0% 0% / .04)}*{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}#issue-sticker-shadow-root{all:initial;display:block;background-color:transparent;--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1));font-family:var(--font-sans);line-height:1.5}.\\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-1{left:4px;right:4px}.inset-y-0{top:0;bottom:0}.-bottom-px{bottom:-1px}.bottom-0{bottom:0}.bottom-4{bottom:16px}.bottom-6{bottom:24px}.left-0{left:0}.left-1\\/2{left:50%}.left-2{left:8px}.left-4{left:16px}.left-\\[50\\%\\]{left:50%}.right-0{right:0}.right-2{right:8px}.right-3{right:12px}.right-4{right:16px}.right-5{right:20px}.right-6{right:24px}.top-0{top:0}.top-1{top:4px}.top-1\\/2{top:50%}.top-2{top:8px}.top-3{top:12px}.top-4{top:16px}.top-5{top:20px}.top-\\[50\\%\\]{top:50%}.top-\\[calc\\(\\(3\\.5rem-1\\.75rem\\)\\/2\\)\\]{top:14px}.top-full{top:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-\\[1000000\\]{z-index:1000000}.z-\\[1000003\\]{z-index:1000003}.z-\\[1000004\\]{z-index:1000004}.z-\\[1000005\\]{z-index:1000005}.z-\\[1000006\\]{z-index:1000006}.z-\\[1000007\\]{z-index:1000007}.z-\\[1000008\\]{z-index:1000008}.z-\\[1000010\\]{z-index:1000010}.z-\\[1000011\\]{z-index:1000011}.z-\\[10001\\]{z-index:10001}.z-\\[999999\\]{z-index:999999}.z-\\[9999\\]{z-index:9999}.m-0{margin:0}.-mx-2{margin-left:-8px;margin-right:-8px}.mx-3{margin-left:12px;margin-right:12px}.my-1{margin-top:4px;margin-bottom:4px}.my-2{margin-top:8px;margin-bottom:8px}.my-2\\.5{margin-top:10px;margin-bottom:10px}.my-3{margin-top:12px;margin-bottom:12px}.my-4{margin-top:16px;margin-bottom:16px}.mb-0\\.5{margin-bottom:2px}.mb-1{margin-bottom:4px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.mb-5{margin-bottom:20px}.ml-0\\.5{margin-left:2px}.ml-4{margin-left:16px}.mr-1\\.5{margin-right:6px}.mt-0{margin-top:0}.mt-0\\.5{margin-top:2px}.mt-1{margin-top:4px}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.\\!h-auto{height:auto!important}.h-1\\.5{height:6px}.h-10{height:40px}.h-11{height:44px}.h-2{height:8px}.h-24{height:96px}.h-3{height:12px}.h-3\\.5{height:14px}.h-4{height:16px}.h-5{height:20px}.h-6{height:24px}.h-7{height:28px}.h-8{height:32px}.h-9{height:36px}.h-\\[1\\.4rem\\]{height:22.4px}.h-\\[100vh\\]{height:100vh}.h-\\[18px\\]{height:18px}.h-\\[220px\\]{height:220px}.h-\\[22px\\]{height:22px}.h-\\[30px\\]{height:30px}.h-\\[min\\(36vh\\,320px\\)\\]{height:min(36vh,320px)}.h-\\[min\\(480px\\,calc\\(100vh-64px\\)\\)\\]{height:min(480px,calc(100vh - 64px))}.h-\\[min\\(54vh\\,520px\\)\\]{height:min(54vh,520px)}.h-\\[min\\(560px\\,calc\\(100vh-32px\\)\\)\\]{height:min(560px,calc(100vh - 32px))}.h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-24{max-height:96px}.max-h-40{max-height:160px}.max-h-56{max-height:224px}.max-h-80{max-height:320px}.max-h-96{max-height:384px}.max-h-\\[150px\\]{max-height:150px}.max-h-\\[220px\\]{max-height:220px}.max-h-\\[320px\\]{max-height:320px}.max-h-\\[420px\\]{max-height:420px}.max-h-\\[90vh\\]{max-height:90vh}.max-h-\\[calc\\(100vh-3rem\\)\\]{max-height:calc(100vh - 48px)}.max-h-\\[min\\(80vh\\,640px\\)\\]{max-height:min(80vh,640px)}.min-h-0{min-height:0px}.min-h-11{min-height:44px}.min-h-\\[108px\\]{min-height:108px}.min-h-\\[120px\\]{min-height:120px}.min-h-\\[140px\\]{min-height:140px}.min-h-\\[220px\\]{min-height:220px}.w-0\\.5{width:2px}.w-1{width:4px}.w-1\\.5{width:6px}.w-1\\/2{width:50%}.w-10{width:40px}.w-14{width:56px}.w-2{width:8px}.w-3{width:12px}.w-3\\.5{width:14px}.w-4{width:16px}.w-5{width:20px}.w-6{width:24px}.w-7{width:28px}.w-72{width:288px}.w-8{width:32px}.w-80{width:320px}.w-9{width:36px}.w-\\[1\\.4rem\\]{width:22.4px}.w-\\[18px\\]{width:18px}.w-\\[22\\.5rem\\]{width:360px}.w-\\[22rem\\]{width:352px}.w-\\[30px\\]{width:30px}.w-\\[38px\\]{width:38px}.w-\\[calc\\(100vw-32px\\)\\]{width:calc(100vw - 32px)}.w-\\[min\\(20rem\\,calc\\(100vw_-_1\\.5rem\\)\\)\\]{width:min(320px,calc(100vw - 24px))}.w-\\[min\\(560px\\,calc\\(100vw-32px\\)\\)\\]{width:min(560px,calc(100vw - 32px))}.w-\\[var\\(--radix-popover-trigger-width\\)\\]{width:var(--radix-popover-trigger-width)}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0px}.min-w-9{min-width:36px}.min-w-\\[12rem\\]{min-width:192px}.min-w-\\[200px\\]{min-width:200px}.min-w-\\[var\\(--radix-popover-trigger-width\\)\\]{min-width:var(--radix-popover-trigger-width)}.min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.max-w-8{max-width:32px}.max-w-\\[10rem\\]{max-width:160px}.max-w-\\[120px\\]{max-width:120px}.max-w-\\[160px\\]{max-width:160px}.max-w-\\[280px\\]{max-width:280px}.max-w-\\[28rem\\]{max-width:448px}.max-w-\\[300px\\]{max-width:300px}.max-w-\\[360px\\]{max-width:360px}.max-w-\\[36rem\\]{max-width:576px}.max-w-\\[400px\\]{max-width:400px}.max-w-\\[420px\\]{max-width:420px}.max-w-\\[428px\\]{max-width:428px}.max-w-\\[480px\\]{max-width:480px}.max-w-\\[62ch\\]{max-width:62ch}.max-w-\\[640px\\]{max-width:640px}.max-w-\\[70ch\\]{max-width:70ch}.max-w-\\[90vw\\]{max-width:90vw}.max-w-\\[960px\\]{max-width:960px}.max-w-\\[calc\\(100vw-24px\\)\\]{max-width:calc(100vw - 24px)}.max-w-full{max-width:100%}.max-w-md{max-width:448px}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x: -4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1{--tw-translate-x: 4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[-50\\%\\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[18px\\]{--tw-translate-x: 18px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[2px\\]{--tw-translate-x: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\\[-50\\%\\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulse-ring{0%,to{box-shadow:0 0 0 0 var(--brand-ring)}50%{box-shadow:0 0 0 8px transparent}}.animate-pulse-ring{animation:pulse-ring 1.8s var(--ease-in-out) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\\.5{gap:2px}.gap-1{gap:4px}.gap-1\\.5{gap:6px}.gap-2{gap:8px}.gap-2\\.5{gap:10px}.gap-3{gap:12px}.gap-3\\.5{gap:14px}.gap-4{gap:16px}.gap-5{gap:20px}.gap-6{gap:24px}.gap-x-5{-moz-column-gap:20px;column-gap:20px}.gap-y-2{row-gap:8px}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4px * var(--tw-space-y-reverse))}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(6px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(6px * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(8px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(8px * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(12px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(12px * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(16px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(16px * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(20px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(20px * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(24px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(24px * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-line-subtle>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.\\!rounded-none{border-radius:0!important}.rounded{border-radius:4px}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\\[18px\\]{border-radius:18px}.rounded-\\[20px\\]{border-radius:20px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0px}.border-dashed{border-style:dashed}.border-\\[hsl\\(144_8\\%_91\\%\\)\\]{--tw-border-opacity: 1;border-color:hsl(144 8% 91% / var(--tw-border-opacity, 1))}.border-brand{--tw-border-opacity: 1;border-color:hsl(var(--brand-hsl) / var(--tw-border-opacity, 1))}.border-brand-border{border-color:var(--brand-border)}.border-brand\\/30{border-color:hsl(var(--brand-hsl) / .3)}.border-brand\\/40{border-color:hsl(var(--brand-hsl) / .4)}.border-danger\\/20{border-color:hsl(var(--danger) / .2)}.border-danger\\/30{border-color:hsl(var(--danger) / .3)}.border-info\\/20{border-color:hsl(var(--info) / .2)}.border-info\\/30{border-color:hsl(var(--info) / .3)}.border-line{--tw-border-opacity: 1;border-color:hsl(var(--border-default) / var(--tw-border-opacity, 1))}.border-line-focus{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.border-line-strong{--tw-border-opacity: 1;border-color:hsl(var(--border-strong) / var(--tw-border-opacity, 1))}.border-line-subtle{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}.border-line-subtle\\/50{border-color:hsl(var(--border-subtle) / .5)}.border-line-subtle\\/90{border-color:hsl(var(--border-subtle) / .9)}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-success{--tw-border-opacity: 1;border-color:hsl(var(--success) / var(--tw-border-opacity, 1))}.border-success\\/20{border-color:hsl(var(--success) / .2)}.border-success\\/30{border-color:hsl(var(--success) / .3)}.border-text-primary{--tw-border-opacity: 1;border-color:hsl(var(--text-primary) / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-warning\\/20{border-color:hsl(var(--warning) / .2)}.border-warning\\/30{border-color:hsl(var(--warning) / .3)}.border-white\\/70{border-color:#ffffffb3}.border-white\\/80{border-color:#fffc}.border-white\\/90{border-color:#ffffffe6}.border-l-brand{--tw-border-opacity: 1;border-left-color:hsl(var(--brand-hsl) / var(--tw-border-opacity, 1))}.\\!bg-success-surface{background-color:hsl(var(--success-surface))!important}.bg-\\[var\\(--overlay-backdrop-strong\\)\\]{background-color:var(--overlay-backdrop-strong)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\\/10{background-color:#0000001a}.bg-black\\/40{background-color:#0006}.bg-black\\/80{background-color:#000c}.bg-brand{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.bg-brand-subtle{background-color:var(--brand-subtle)}.bg-brand\\/10{background-color:hsl(var(--brand-hsl) / .1)}.bg-brand\\/5{background-color:hsl(var(--brand-hsl) / .05)}.bg-danger{--tw-bg-opacity: 1;background-color:hsl(var(--danger) / var(--tw-bg-opacity, 1))}.bg-danger-subtle{background-color:hsl(var(--danger-subtle))}.bg-danger\\/10{background-color:hsl(var(--danger) / .1)}.bg-info-subtle{background-color:hsl(var(--info-subtle))}.bg-line{--tw-bg-opacity: 1;background-color:hsl(var(--border-default) / var(--tw-bg-opacity, 1))}.bg-line-subtle{--tw-bg-opacity: 1;background-color:hsl(var(--border-subtle) / var(--tw-bg-opacity, 1))}.bg-success{--tw-bg-opacity: 1;background-color:hsl(var(--success) / var(--tw-bg-opacity, 1))}.bg-success-subtle{background-color:hsl(var(--success-subtle))}.bg-success-surface{background-color:hsl(var(--success-surface))}.bg-surface-0{--tw-bg-opacity: 1;background-color:hsl(var(--surface-0) / var(--tw-bg-opacity, 1))}.bg-surface-1{--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.bg-surface-2{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.bg-surface-3{--tw-bg-opacity: 1;background-color:hsl(var(--surface-3) / var(--tw-bg-opacity, 1))}.bg-surface-inset{--tw-bg-opacity: 1;background-color:hsl(var(--surface-inset) / var(--tw-bg-opacity, 1))}.bg-text-primary{--tw-bg-opacity: 1;background-color:hsl(var(--text-primary) / var(--tw-bg-opacity, 1))}.bg-text-tertiary{--tw-bg-opacity: 1;background-color:hsl(var(--text-tertiary) / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-warning{--tw-bg-opacity: 1;background-color:hsl(var(--warning) / var(--tw-bg-opacity, 1))}.bg-warning-subtle{background-color:hsl(var(--warning-subtle))}.bg-warning\\/10{background-color:hsl(var(--warning) / .1)}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\\/10{background-color:#ffffff1a}.bg-white\\/25{background-color:#ffffff40}.fill-text-primary{fill:hsl(var(--text-primary) / 1)}.stroke-\\[3\\]{stroke-width:3}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.\\!p-0{padding:0!important}.p-0{padding:0}.p-0\\.5{padding:2px}.p-1{padding:4px}.p-1\\.5{padding:6px}.p-2{padding:8px}.p-3{padding:12px}.p-3\\.5{padding:14px}.p-4{padding:16px}.p-5{padding:20px}.p-6{padding:24px}.p-7{padding:28px}.p-8{padding:32px}.p-\\[18px\\]{padding:18px}.px-0{padding-left:0;padding-right:0}.px-1\\.5{padding-left:6px;padding-right:6px}.px-2{padding-left:8px;padding-right:8px}.px-2\\.5{padding-left:10px;padding-right:10px}.px-3{padding-left:12px;padding-right:12px}.px-4{padding-left:16px;padding-right:16px}.px-5{padding-left:20px;padding-right:20px}.px-6{padding-left:24px;padding-right:24px}.px-9{padding-left:36px;padding-right:36px}.py-0\\.5{padding-top:2px;padding-bottom:2px}.py-1{padding-top:4px;padding-bottom:4px}.py-1\\.5{padding-top:6px;padding-bottom:6px}.py-10{padding-top:40px;padding-bottom:40px}.py-16{padding-top:64px;padding-bottom:64px}.py-2{padding-top:8px;padding-bottom:8px}.py-2\\.5{padding-top:10px;padding-bottom:10px}.py-3{padding-top:12px;padding-bottom:12px}.py-3\\.5{padding-top:14px;padding-bottom:14px}.py-4{padding-top:16px;padding-bottom:16px}.py-5{padding-top:20px;padding-bottom:20px}.py-6{padding-top:24px;padding-bottom:24px}.py-8{padding-top:32px;padding-bottom:32px}.pb-1{padding-bottom:4px}.pb-3{padding-bottom:12px}.pb-4{padding-bottom:16px}.pl-3{padding-left:12px}.pl-4{padding-left:16px}.pl-5{padding-left:20px}.pl-8{padding-left:32px}.pr-10{padding-right:40px}.pr-3{padding-right:12px}.pr-4{padding-right:16px}.pt-0{padding-top:0}.pt-1{padding-top:4px}.pt-2\\.5{padding-top:10px}.pt-4{padding-top:16px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-display{font-family:var(--font-display),ui-sans-serif,system-ui,sans-serif}.font-mono{font-family:var(--font-mono),ui-monospace,SFMono-Regular,Menlo,monospace}.font-sans{font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif}.text-2xs{font-size:clamp(10.5px,10.19px + .082vw,11.5px);line-height:1.333}.text-\\[0\\.72rem\\]{font-size:11.52px}.text-\\[1\\.45rem\\]{font-size:23.2px}.text-\\[1\\.75rem\\]{font-size:28px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-base{font-size:clamp(14px,13.39px + .163vw,16px);line-height:1.5}.text-lg{font-size:clamp(17px,16.39px + .163vw,19px);line-height:1.471}.text-sm{font-size:clamp(13px,12.54px + .122vw,14.5px);line-height:1.462}.text-xl{font-size:clamp(20px,19.08px + .245vw,23px);line-height:1.45}.text-xs{font-size:clamp(12px,11.69px + .082vw,13px);line-height:1.333}.font-black{font-weight:900}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-4{line-height:16px}.leading-5{line-height:20px}.leading-8{line-height:32px}.leading-\\[1\\.55\\]{line-height:1.55}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.text-\\[hsl\\(145_5\\%_42\\%\\)\\]{--tw-text-opacity: 1;color:hsl(145 5% 42% / var(--tw-text-opacity, 1))}.text-brand{--tw-text-opacity: 1;color:hsl(var(--brand-hsl) / var(--tw-text-opacity, 1))}.text-brand-fg{color:var(--brand-fg)}.text-brand\\/50{color:hsl(var(--brand-hsl) / .5)}.text-danger{--tw-text-opacity: 1;color:hsl(var(--danger) / var(--tw-text-opacity, 1))}.text-danger\\/80{color:hsl(var(--danger) / .8)}.text-info{--tw-text-opacity: 1;color:hsl(var(--info) / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-success{--tw-text-opacity: 1;color:hsl(var(--success) / var(--tw-text-opacity, 1))}.text-text-disabled{--tw-text-opacity: 1;color:hsl(var(--text-disabled) / var(--tw-text-opacity, 1))}.text-text-inverse{--tw-text-opacity: 1;color:hsl(var(--text-inverse) / var(--tw-text-opacity, 1))}.text-text-primary{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.text-text-secondary{--tw-text-opacity: 1;color:hsl(var(--text-secondary) / var(--tw-text-opacity, 1))}.text-text-tertiary{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-warning{--tw-text-opacity: 1;color:hsl(var(--warning) / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-brand{accent-color:hsl(var(--brand-hsl) / 1)}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.\\!shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\\[0_24px_70px_-28px_rgba\\(16\\,24\\,18\\,0\\.45\\)\\]{--tw-shadow: 0 24px 70px -28px rgba(16,24,18,.45);--tw-shadow-colored: 0 24px 70px -28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: var(--shadow-lg);--tw-shadow-colored: var(--shadow-lg);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: var(--shadow-md);--tw-shadow-colored: var(--shadow-md);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: var(--shadow-xl);--tw-shadow-colored: var(--shadow-xl);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow: var(--shadow-xs);--tw-shadow-colored: var(--shadow-xs);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-2{outline-width:2px}.outline-offset-0{outline-offset:0px}.outline-transparent{outline-color:transparent}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-brand{--tw-ring-opacity: 1;--tw-ring-color: hsl(var(--brand-hsl) / var(--tw-ring-opacity, 1))}.ring-brand-subtle{--tw-ring-color: var(--brand-subtle)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\\[2px\\]{--tw-backdrop-blur: blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,border-color\\,color\\,box-shadow\\]{transition-property:background-color,border-color,color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\,border-color\\,box-shadow\\,opacity\\]{transition-property:background-color,color,border-color,box-shadow,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\,border-color\\,box-shadow\\]{transition-property:background-color,color,border-color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\,box-shadow\\]{transition-property:background-color,color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[background-color\\,color\\]{transition-property:background-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[border-color\\,box-shadow\\,background-color\\]{transition-property:border-color,box-shadow,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[border-color\\,outline-color\\,box-shadow\\,background-color\\,transform\\]{transition-property:border-color,outline-color,box-shadow,background-color,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[max-width\\,box-shadow\\,background-color\\,border-color\\,transform\\,opacity\\]{transition-property:max-width,box-shadow,background-color,border-color,transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[max-width\\]{transition-property:max-width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.duration-\\[var\\(--issue-marker-expand-duration\\)\\]{transition-duration:var(--issue-marker-expand-duration)}.duration-fast{transition-duration:var(--duration-fast)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:var(--ease-in-out)}.ease-out{transition-timing-function:var(--ease-out)}@keyframes float-gentle{0%,to{transform:translateY(0)}50%{transform:translateY(-2px)}}@keyframes toast-slide{0%{opacity:0;transform:translateY(-14px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes gradient-shift{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}.issue-overlay-shell{border:1px solid hsl(var(--border-subtle));border-radius:var(--radius-lg);background:hsl(var(--surface-1));box-shadow:var(--shadow-md)}.issue-marker-breathe{animation:float-gentle 4.8s var(--ease-in-out) infinite}.issue-marker-breathe:hover,.issue-marker-breathe:focus-visible,.issue-marker-breathe:focus-within{animation-play-state:paused}.\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}.marker\\:text-text-tertiary *::marker{color:hsl(var(--text-tertiary))}.marker\\:text-text-tertiary::marker{color:hsl(var(--text-tertiary))}.file\\:border-0::file-selector-button{border-width:0px}.file\\:bg-transparent::file-selector-button{background-color:transparent}.file\\:text-sm::file-selector-button{font-size:clamp(13px,12.54px + .122vw,14.5px);line-height:1.462}.file\\:font-medium::file-selector-button{font-weight:500}.file\\:text-text-primary::file-selector-button{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.placeholder\\:text-text-tertiary::-moz-placeholder{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.placeholder\\:text-text-tertiary::placeholder{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.first\\:mt-0:first-child{margin-top:0}.first\\:border-t-0:first-child{border-top-width:0px}.first\\:pt-0:first-child{padding-top:0}.focus-within\\:z-\\[10001\\]:focus-within{z-index:10001}.focus-within\\:border-line-focus:focus-within{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.hover\\:z-\\[10001\\]:hover{z-index:10001}.hover\\:max-w-\\[160px\\]:hover{max-width:160px}.hover\\:max-w-\\[480px\\]:hover{max-width:480px}.hover\\:border-line:hover{--tw-border-opacity: 1;border-color:hsl(var(--border-default) / var(--tw-border-opacity, 1))}.hover\\:border-line-strong:hover{--tw-border-opacity: 1;border-color:hsl(var(--border-strong) / var(--tw-border-opacity, 1))}.hover\\:border-line-subtle:hover{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}.hover\\:bg-\\[hsl\\(144_8\\%_96\\%\\)\\]:hover{--tw-bg-opacity: 1;background-color:hsl(144 8% 96% / var(--tw-bg-opacity, 1))}.hover\\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\\:bg-brand-hover:hover{background-color:var(--brand-hover)}.hover\\:bg-brand\\/40:hover{background-color:hsl(var(--brand-hsl) / .4)}.hover\\:bg-danger-subtle:hover{background-color:hsl(var(--danger-subtle))}.hover\\:bg-danger\\/10:hover{background-color:hsl(var(--danger) / .1)}.hover\\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\\:bg-surface-2:hover{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.hover\\:bg-surface-2\\/60:hover{background-color:hsl(var(--surface-2) / .6)}.hover\\:bg-surface-3:hover{--tw-bg-opacity: 1;background-color:hsl(var(--surface-3) / var(--tw-bg-opacity, 1))}.hover\\:bg-surface-inset:hover{--tw-bg-opacity: 1;background-color:hsl(var(--surface-inset) / var(--tw-bg-opacity, 1))}.hover\\:bg-transparent:hover{background-color:transparent}.hover\\:bg-white\\/20:hover{background-color:#fff3}.hover\\:text-\\[hsl\\(150_10\\%_12\\%\\)\\]:hover{--tw-text-opacity: 1;color:hsl(150 10% 12% / var(--tw-text-opacity, 1))}.hover\\:text-brand-hover:hover{color:var(--brand-hover)}.hover\\:text-danger:hover{--tw-text-opacity: 1;color:hsl(var(--danger) / var(--tw-text-opacity, 1))}.hover\\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\\:text-text-primary:hover{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.hover\\:text-text-secondary:hover{--tw-text-opacity: 1;color:hsl(var(--text-secondary) / var(--tw-text-opacity, 1))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-90:hover{opacity:.9}.hover\\:shadow-xl:hover{--tw-shadow: var(--shadow-xl);--tw-shadow-colored: var(--shadow-xl);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\\:border-brand:focus{--tw-border-opacity: 1;border-color:hsl(var(--brand-hsl) / var(--tw-border-opacity, 1))}.focus\\:bg-surface-2:focus{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.focus\\:text-text-primary:focus{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:max-w-\\[160px\\]:focus-visible{max-width:160px}.focus-visible\\:max-w-\\[480px\\]:focus-visible{max-width:480px}.focus-visible\\:border-line-focus:focus-visible{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.focus-visible\\:border-transparent:focus-visible{border-color:transparent}.focus-visible\\:bg-slate-50:focus-visible{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.focus-visible\\:bg-surface-1:focus-visible{--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.focus-visible\\:bg-surface-2:focus-visible{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.focus-visible\\:text-text-primary:focus-visible{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.focus-visible\\:shadow-focus:focus-visible{--tw-shadow: var(--shadow-focus);--tw-shadow-colored: var(--shadow-focus);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:outline-line-focus:focus-visible{outline-color:hsl(var(--border-focus) / 1)}.focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-brand-subtle:focus-visible{--tw-ring-color: var(--brand-subtle)}.focus-visible\\:ring-white\\/40:focus-visible{--tw-ring-color: rgb(255 255 255 / .4)}.active\\:bg-brand-active:active{background-color:var(--brand-active)}.active\\:bg-brand\\/60:active{background-color:hsl(var(--brand-hsl) / .6)}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.disabled\\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\\:opacity-100{opacity:1}.group:focus-visible .group-focus-visible\\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-visible .group-focus-visible\\:opacity-100{opacity:1}.group.toaster .group-\\[\\.toaster\\]\\:isolate{isolation:isolate}.group.toast .group-\\[\\.toast\\]\\:rounded-md,.group.toaster .group-\\[\\.toaster\\]\\:rounded-md{border-radius:var(--radius-md)}.group.toaster .group-\\[\\.toaster\\]\\:border{border-width:1px}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-danger\\/30{border-color:hsl(var(--danger) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-info\\/30{border-color:hsl(var(--info) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-success\\/30{border-color:hsl(var(--success) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!border-warning\\/30{border-color:hsl(var(--warning) / .3)!important}.group.toaster .group-\\[\\.toaster\\]\\:border-line-subtle{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}.group.toast .group-\\[\\.toast\\]\\:bg-brand{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.group.toast .group-\\[\\.toast\\]\\:bg-surface-2{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-danger-subtle{background-color:hsl(var(--danger-subtle))!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-info-subtle{background-color:hsl(var(--info-subtle))!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-success-surface{background-color:hsl(var(--success-surface))!important}.group.toaster .group-\\[\\.toaster\\]\\:\\!bg-warning-subtle{background-color:hsl(var(--warning-subtle))!important}.group.toaster .group-\\[\\.toaster\\]\\:bg-surface-1{--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:px-4{padding-left:16px;padding-right:16px}.group.toaster .group-\\[\\.toaster\\]\\:py-3{padding-top:12px;padding-bottom:12px}.group.toast .group-\\[\\.toast\\]\\:text-sm{font-size:clamp(13px,12.54px + .122vw,14.5px);line-height:1.462}.group.toast .group-\\[\\.toast\\]\\:text-xs{font-size:clamp(12px,11.69px + .082vw,13px);line-height:1.333}.group.toast .group-\\[\\.toast\\]\\:font-medium{font-weight:500}.group.toast .group-\\[\\.toast\\]\\:text-brand-fg{color:var(--brand-fg)}.group.toast .group-\\[\\.toast\\]\\:text-text-primary{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.group.toast .group-\\[\\.toast\\]\\:text-text-secondary{--tw-text-opacity: 1;color:hsl(var(--text-secondary) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:text-text-primary{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:shadow-sm{--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group.toaster .group-\\[\\.toaster\\]\\:before\\:absolute:before{content:var(--tw-content);position:absolute}.group.toaster .group-\\[\\.toaster\\]\\:before\\:inset-0:before{content:var(--tw-content);top:0;right:0;bottom:0;left:0}.group.toaster .group-\\[\\.toaster\\]\\:before\\:-z-10:before{content:var(--tw-content);z-index:-10}.group.toaster .group-\\[\\.toaster\\]\\:before\\:rounded-md:before{content:var(--tw-content);border-radius:var(--radius-md)}.group.toaster .group-\\[\\.toaster\\]\\:before\\:bg-surface-1:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:hsl(var(--surface-1) / var(--tw-bg-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:before\\:content-\\[\\'\\'\\]:before{--tw-content: "";content:var(--tw-content)}.peer:focus-visible~.peer-focus-visible\\:shadow-focus{--tw-shadow: var(--shadow-focus);--tw-shadow-colored: var(--shadow-focus);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:disabled~.peer-disabled\\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\\:opacity-60{opacity:.6}.aria-disabled\\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\\:opacity-40[aria-disabled=true]{opacity:.4}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}@keyframes dialog-out{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,calc(-50% + 8px)) scale(.985)}}.data-\\[state\\=closed\\]\\:animate-dialog-out[data-state=closed]{animation:dialog-out var(--duration-out) var(--ease-out) forwards}@keyframes fade-out{0%{opacity:1}to{opacity:0}}.data-\\[state\\=closed\\]\\:animate-fade-out[data-state=closed]{animation:fade-out var(--duration-out) var(--ease-out) forwards}@keyframes scale-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.97)}}.data-\\[state\\=closed\\]\\:animate-scale-out[data-state=closed]{animation:scale-out var(--duration-out) var(--ease-out) forwards}@keyframes sheet-out-left{0%{transform:translate(0)}to{transform:translate(-100%);opacity:.6}}.data-\\[state\\=closed\\]\\:animate-sheet-out-left[data-state=closed]{animation:sheet-out-left var(--duration-base) var(--ease-out) forwards}@keyframes sheet-out-right{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:.6}}.data-\\[state\\=closed\\]\\:animate-sheet-out-right[data-state=closed]{animation:sheet-out-right var(--duration-base) var(--ease-out) forwards}.data-\\[state\\=delayed-open\\]\\:animate-scale-in[data-state=delayed-open]{animation:scale-in var(--duration-base) var(--ease-out) forwards}@keyframes dialog-in{0%{opacity:0;transform:translate(-50%,calc(-50% + 12px)) scale(.985)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.data-\\[state\\=open\\]\\:animate-dialog-in[data-state=open]{animation:dialog-in var(--duration-base) var(--ease-out) forwards}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.data-\\[state\\=open\\]\\:animate-fade-in[data-state=open]{animation:fade-in var(--duration-base) var(--ease-out) forwards}@keyframes scale-in{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.data-\\[state\\=open\\]\\:animate-scale-in[data-state=open]{animation:scale-in var(--duration-base) var(--ease-out) forwards}@keyframes sheet-in-left{0%{transform:translate(-100%);opacity:.6}to{transform:translate(0);opacity:1}}.data-\\[state\\=open\\]\\:animate-sheet-in-left[data-state=open]{animation:sheet-in-left var(--duration-base) var(--ease-out) forwards}@keyframes sheet-in-right{0%{transform:translate(100%);opacity:.6}to{transform:translate(0)}}.data-\\[state\\=open\\]\\:animate-sheet-in-right[data-state=open]{animation:sheet-in-right var(--duration-base) var(--ease-out) forwards}.data-\\[range-end\\=true\\]\\:rounded-md[data-range-end=true]{border-radius:var(--radius-md)}.data-\\[range-middle\\=true\\]\\:rounded-none[data-range-middle=true]{border-radius:0}.data-\\[range-start\\=true\\]\\:rounded-md[data-range-start=true]{border-radius:var(--radius-md)}.data-\\[state\\=open\\]\\:border-line-focus[data-state=open]{--tw-border-opacity: 1;border-color:hsl(var(--border-focus) / var(--tw-border-opacity, 1))}.data-\\[highlighted\\]\\:bg-surface-2[data-highlighted]{--tw-bg-opacity: 1;background-color:hsl(var(--surface-2) / var(--tw-bg-opacity, 1))}.data-\\[range-end\\=true\\]\\:bg-brand[data-range-end=true]{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.data-\\[range-middle\\=true\\]\\:bg-transparent[data-range-middle=true]{background-color:transparent}.data-\\[range-start\\=true\\]\\:bg-brand[data-range-start=true],.data-\\[selected-single\\=true\\]\\:bg-brand[data-selected-single=true]{--tw-bg-opacity: 1;background-color:hsl(var(--brand-hsl) / var(--tw-bg-opacity, 1))}.data-\\[state\\=selected\\]\\:bg-brand-subtle[data-state=selected]{background-color:var(--brand-subtle)}.data-\\[today\\=true\\]\\:font-semibold[data-today=true]{font-weight:600}.data-\\[highlighted\\]\\:text-text-primary[data-highlighted]{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.data-\\[placeholder\\]\\:text-text-tertiary[data-placeholder]{--tw-text-opacity: 1;color:hsl(var(--text-tertiary) / var(--tw-text-opacity, 1))}.data-\\[range-end\\=true\\]\\:text-brand-fg[data-range-end=true]{color:var(--brand-fg)}.data-\\[range-middle\\=true\\]\\:text-text-primary[data-range-middle=true]{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.data-\\[range-start\\=true\\]\\:text-brand-fg[data-range-start=true],.data-\\[selected-single\\=true\\]\\:text-brand-fg[data-selected-single=true]{color:var(--brand-fg)}.data-\\[state\\=active\\]\\:text-text-primary[data-state=active],.data-\\[state\\=checked\\]\\:text-text-primary[data-state=checked]{--tw-text-opacity: 1;color:hsl(var(--text-primary) / var(--tw-text-opacity, 1))}.data-\\[today\\=true\\]\\:text-brand[data-today=true]{--tw-text-opacity: 1;color:hsl(var(--brand-hsl) / var(--tw-text-opacity, 1))}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=open\\]\\:shadow-focus[data-state=open]{--tw-shadow: var(--shadow-focus);--tw-shadow-colored: var(--shadow-focus);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\\[range-end\\=true\\]\\:hover\\:bg-brand-hover:hover[data-range-end=true],.data-\\[range-start\\=true\\]\\:hover\\:bg-brand-hover:hover[data-range-start=true],.data-\\[selected-single\\=true\\]\\:hover\\:bg-brand-hover:hover[data-selected-single=true]{background-color:var(--brand-hover)}.data-\\[range-end\\=true\\]\\:hover\\:text-brand-fg:hover[data-range-end=true],.data-\\[range-start\\=true\\]\\:hover\\:text-brand-fg:hover[data-range-start=true],.data-\\[selected-single\\=true\\]\\:hover\\:text-brand-fg:hover[data-selected-single=true]{color:var(--brand-fg)}@media(prefers-reduced-motion:reduce){.motion-reduce\\:animate-none{animation:none}}@media(min-width:640px){.sm\\:flex-row{flex-direction:row}.sm\\:items-start{align-items:flex-start}.sm\\:items-center{align-items:center}.sm\\:justify-end{justify-content:flex-end}.sm\\:justify-between{justify-content:space-between}.sm\\:gap-2\\.5{gap:10px}.sm\\:p-5{padding:20px}.sm\\:p-6{padding:24px}.sm\\:text-2xl{font-size:clamp(26px,24.78px + .327vw,30px);line-height:1.308}.sm\\:text-\\[2\\.1rem\\]{font-size:33.6px}}@media(min-width:768px){.md\\:flex{display:flex}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-\\[minmax\\(0\\,1fr\\)_minmax\\(260px\\,340px\\)\\]{grid-template-columns:minmax(0,1fr) minmax(260px,340px)}}.\\[\\&\\>\\*\\:not\\(summary\\)\\]\\:pl-4>*:not(summary){padding-left:16px}.\\[\\&\\>span\\]\\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>tr\\]\\:last\\:border-b-0:last-child>tr{border-bottom-width:0px}.\\[\\&\\[data-state\\=open\\]\\>span\\[data-chevron\\]\\]\\:rotate-180[data-state=open]>span[data-chevron]{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-danger [data-icon]{--tw-text-opacity: 1;color:hsl(var(--danger) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-info [data-icon]{--tw-text-opacity: 1;color:hsl(var(--info) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-success [data-icon]{--tw-text-opacity: 1;color:hsl(var(--success) / var(--tw-text-opacity, 1))}.group.toaster .group-\\[\\.toaster\\]\\:\\[\\&_\\[data-icon\\]\\]\\:text-warning [data-icon]{--tw-text-opacity: 1;color:hsl(var(--warning) / var(--tw-text-opacity, 1))}.\\[\\&_tr\\]\\:border-b tr{border-bottom-width:1px}.\\[\\&_tr\\]\\:border-line-subtle tr{--tw-border-opacity: 1;border-color:hsl(var(--border-subtle) / var(--tw-border-opacity, 1))}`;
38083
38606
  const sdkShadowCSS = ".issue-sticker-marker{pointer-events:auto}@keyframes highlight-pulse{0%,to{transform:scale(1);box-shadow:var(--shadow-md)}50%{transform:scale(1.3);box-shadow:var(--shadow-focus),var(--shadow-lg)}}.issue-sticker-marker.highlight-animation{animation:highlight-pulse .7s ease-in-out 3}";
38084
- const contentPageCSS = `body.issue-sticker-mode-active,body.issue-sticker-mode-active *{cursor:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M3 29 C3 22 3 20 3 15 a12 12 0 0 1 12-12 h2 a12 12 0 0 1 12 12 a12 12 0 0 1-12 12 H12 Z' fill='%231C221F' stroke='%23ffffff' stroke-width='2' stroke-linejoin='round'/%3E%3C/svg%3E") 3 29,crosshair!important}body.issue-sticker-mode-active .issue-sticker-marker{cursor:default!important}body.issue-sticker-mode-active button,body.issue-sticker-mode-active a,body.issue-sticker-mode-active input,body.issue-sticker-mode-active textarea,body.issue-sticker-mode-active select{cursor:pointer!important}.issue-sticker-mode-highlight{outline:2px solid hsl(160 64% 34%)!important;outline-offset:2px!important;background-color:#1f8e691f!important;transition:outline .1s ease,background-color .1s ease!important}`;
38607
+ const contentPageCSS = `@layer issue-sticker-mode{html:has(>body.issue-sticker-mode-active),body.issue-sticker-mode-active,body.issue-sticker-mode-active *{cursor:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M3 29 C3 22 3 20 3 15 a12 12 0 0 1 12-12 h2 a12 12 0 0 1 12 12 a12 12 0 0 1-12 12 H12 Z' fill='%231C221F' fill-opacity='0.35' stroke='%23ffffff' stroke-width='2' stroke-linejoin='round'/%3E%3C/svg%3E") 3 29,crosshair!important}body.issue-sticker-mode-active iframe{pointer-events:none!important}body.issue-sticker-mode-active .issue-sticker-mode-highlight{outline:2px solid hsl(160 64% 34%)!important;outline-offset:2px!important;background-color:#1f8e691f!important;transition:outline .1s ease,background-color .1s ease!important}}`;
38085
38608
  const PAGE_STYLE_ID = "issue-sticker-page-style";
38086
38609
  let root = null;
38087
38610
  let mountContainer = null;
@@ -38095,7 +38618,9 @@ function renderWidget(config) {
38095
38618
  }
38096
38619
  function mountWidget(config) {
38097
38620
  if (isIssueStickerExtensionRuntimeActive()) {
38098
- return;
38621
+ {
38622
+ return;
38623
+ }
38099
38624
  }
38100
38625
  const existingHost = document.getElementById(ISSUE_STICKER_HOST_ELEMENT_ID);
38101
38626
  if (root && mountContainer && existingHost) {
@@ -38232,7 +38757,10 @@ const IssueSticker = {
38232
38757
  }
38233
38758
  };
38234
38759
  if (typeof window !== "undefined") {
38235
- window.addEventListener(ISSUE_STICKER_EXTENSION_RUNTIME_READY_EVENT, destroySdkRuntime);
38760
+ window.addEventListener(
38761
+ ISSUE_STICKER_EXTENSION_RUNTIME_READY_EVENT,
38762
+ destroySdkRuntime
38763
+ );
38236
38764
  }
38237
38765
  const DESTROY_DELAY_MS = 300;
38238
38766
  let activeConsumerCount = 0;