@chuzi/shared 1.3.44 → 1.3.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/index.ts","../src/config/credits.ts","../src/config/chuzi-ai-prompts.ts","../src/config/index.ts","../src/themes/index.ts","../src/api/index.ts","../src/input/index.ts","../src/realms/index.ts","../src/scene-preview.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// ── Auth ──\n\nexport interface MagicLinkRequest {\n email: string;\n username?: string;\n device_name?: string;\n}\n\nexport interface MagicLinkRequestResponse {\n message: string;\n}\n\nexport interface MagicLinkVerifyRequest {\n email: string;\n token: string;\n device_name?: string;\n}\n\nexport interface MagicLinkVerifyResponse {\n token?: string;\n user: UserProfile;\n}\n\nexport interface OidcExchangeRequest {\n code: string;\n code_verifier: string;\n redirect_uri: string;\n device_name?: string;\n}\n\nexport interface OidcExchangeResponse {\n token?: string;\n user: UserProfile;\n}\n\nexport interface PasswordLoginRequest {\n email: string;\n password: string;\n device_name?: string;\n}\n\nexport interface PasswordLoginResponse {\n token?: string;\n user: UserProfile;\n}\n\n// ── User ──\n\nexport interface UserProfile {\n id: string;\n name: string;\n username: string;\n email: string;\n realm: RealmId | null;\n needs_realm_choice: boolean;\n locale: LocaleId | null;\n avatar_url: string | null;\n is_admin: boolean;\n created_at: string;\n}\n\nexport interface UpdateRealmRequest {\n realm: RealmId;\n}\n\nexport interface UpdateRealmResponse {\n realm: RealmId;\n user: UserProfile;\n}\n\nexport interface UpdateProfileRequest {\n name?: string;\n username?: string;\n}\n\nexport interface UpdateProfileResponse {\n user: UserProfile;\n}\n\nexport interface UsernameAvailabilityResponse {\n username: string;\n available: boolean;\n suggestion?: string;\n}\n\nexport interface PublicDirectorProfile {\n id: string;\n name: string;\n avatar_url: string | null;\n realm: RealmId | null;\n stories_count: number;\n}\n\n// ── Credits & payments ──\n\nexport type CreditPool = \"watch\" | \"create\";\n\nexport interface CreditBalance {\n watch: number;\n create: number;\n}\n\nexport interface CreditPack {\n id: string;\n pool: CreditPool;\n name: string;\n credits: number;\n price_cents: number;\n price: string;\n}\n\nexport interface PaymentMethod {\n id: string;\n type: string;\n last_four: string;\n label: string | null;\n is_default: boolean;\n created_at: string;\n}\n\nexport interface CreditBalanceResponse {\n balance: CreditBalance;\n}\n\nexport interface UploadCostResponse {\n file_size_bytes: number;\n file_size_mb: number;\n base_size_mb: number;\n credits_needed: number;\n balance: CreditBalance;\n can_afford: boolean;\n}\n\nexport interface PurchaseCreditsRequest {\n pack_id: string;\n payment_method_id?: string;\n}\n\nexport interface PurchaseAmountRequest {\n pool: CreditPool;\n credits: number;\n payment_method_id?: string;\n}\n\nexport interface PurchaseCreditsResponse {\n message: string;\n transaction_id?: string;\n balance: CreditBalance;\n}\n\nexport interface StorePaymentMethodRequest {\n type?: string;\n last_four: string;\n label?: string;\n}\n\nexport interface GrantCreditsRequest {\n user_id: string;\n pool: CreditPool;\n amount: number;\n note?: string;\n}\n\nexport interface GrantCreditsResponse {\n message: string;\n balance: CreditBalance;\n}\n\n// ── Catalog ──\n\nexport interface StoryListItem {\n id: string;\n title: string;\n description: string | null;\n genre: string | null;\n content_rating: ContentRating | null;\n published: boolean;\n published_version: number;\n watch_starts_count: number;\n choice_clicks_count: number;\n scenes_count: number;\n choices_count: number;\n tags: string[];\n creator: {\n id: string;\n name: string;\n } | null;\n created_at: string;\n updated_at: string;\n}\n\nexport interface StoryPreview {\n source: \"trailer\" | \"title_scene\" | \"none\";\n title: string;\n preview_url: string | null;\n media_type: string | null;\n is_ready: boolean;\n}\n\nexport interface PopularChoice {\n label: string;\n click_count: number;\n}\n\nexport interface StoryProgress {\n last_scene_id: string | null;\n bookmark_code: string | null;\n playback_seconds: number;\n watched_version: number;\n last_watched_at: string | null;\n}\n\nexport interface CatalogResponse {\n data: StoryListItem[];\n meta: {\n previews: Record<string, StoryPreview>;\n popular_choices: Record<string, PopularChoice[]>;\n creator_avatars: Record<string, string>;\n coverboxes: Record<string, string | null>;\n progress: Record<string, StoryProgress>;\n };\n}\n\nexport interface MineResponse {\n stories: StoryListItem[];\n data?: StoryListItem[];\n progress?: Record<string, StoryProgress>;\n meta: {\n coverboxes: Record<string, string | null>;\n };\n}\n\n// ── Watch / Scene Map ──\n\nexport interface SceneChoice {\n id: string;\n label: string;\n choice_type: string;\n choice_icon: string | null;\n choice_icon_media_id: string | null;\n choice_icon_url: string | null;\n reveal_mode: string;\n start_time_seconds: number | null;\n pause_for_choice: boolean;\n end_time_seconds: number | null;\n target_scene_id: string;\n x: number;\n y: number;\n w: number;\n h: number;\n arrow_rotation: number;\n arrow_scale: number;\n fade_in_ms?: number | null;\n fade_out_ms?: number | null;\n duration_ms?: number | null;\n visibility_rules: VisibilityRules | null;\n state_updates: StateUpdate[];\n}\n\nexport interface VisibilityRules {\n mode: \"all\" | \"any\";\n conditions: VisibilityCondition[];\n}\n\nexport interface VisibilityCondition {\n variable?: string;\n key?: string;\n operator?: string;\n value?: string;\n}\n\nexport interface StateUpdate {\n variable?: string;\n key?: string;\n action?: string;\n value?: string;\n}\n\nexport interface SceneNode {\n type: string;\n properties?: Record<string, unknown>;\n children?: SceneNode[];\n}\n\nexport type SceneActionPayload = Record<string, unknown> | unknown[];\n\nexport interface SceneMapEntry {\n scene_id: string;\n scene_title: string;\n color: string | null;\n is_title: boolean;\n media_title: string | null;\n media_type: string | null;\n media_url: string | null;\n stream_status: string | null;\n choice_style: string;\n choice_overlay_mode: string;\n goto_scene_id: string | null;\n choices: SceneChoice[];\n nodes: SceneNode[];\n}\n\nexport interface TreeGraphNode {\n id: string;\n title: string;\n is_title: boolean;\n is_end: boolean;\n level: number;\n index: number;\n x: number;\n y: number;\n color: string | null;\n}\n\nexport interface TreeGraphEdge {\n id: string;\n source: string;\n target: string;\n type: \"choice\" | \"go_to_scene\";\n}\n\nexport interface TreeGraph {\n nodes: TreeGraphNode[];\n edges: TreeGraphEdge[];\n meta: {\n root_id: string | null;\n level_count: number;\n };\n}\n\nexport interface WatchSnapshot {\n scene_id: string | null;\n state: Record<string, string>;\n history: HistoryEntry[];\n path: string[];\n visited_scene_ids?: string[];\n playback_seconds: number;\n}\n\nexport interface HistoryEntry {\n choice_id: string;\n scene_id: string;\n target_scene_id: string | null;\n at: string | null;\n path_index: number | null;\n}\n\nexport interface SceneMapResponse {\n story: {\n id: string;\n title: string;\n description: string | null;\n genre: string | null;\n content_rating: ContentRating | null;\n published_version: number;\n watch_starts_count: number;\n choice_clicks_count: number;\n };\n start_scene_id: string;\n scene_map: Record<string, SceneMapEntry>;\n tree_graph: TreeGraph;\n initial_snapshot: WatchSnapshot;\n initial_bookmark_code: string | null;\n}\n\n// ── Engagement ──\n\nexport interface TrackEngagementRequest {\n event: \"play_start\" | \"choice_click\";\n choice_id?: string;\n}\n\nexport interface EngagementResponse {\n watch_starts_count: number;\n choice_clicks_count: number;\n}\n\n// ── Bookmarks ──\n\nexport interface SaveBookmarkRequest {\n snapshot: WatchSnapshot;\n}\n\nexport interface BookmarkResponse {\n code: string;\n snapshot: WatchSnapshot;\n}\n\nexport interface BookmarkListItem {\n code: string;\n snapshot: WatchSnapshot;\n updated_at: string;\n}\n\nexport interface BookmarkListResponse {\n bookmarks: BookmarkListItem[];\n}\n\n// ── Pagination ──\n\nexport interface PaginatedLink {\n url: string | null;\n label: string;\n active: boolean;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n current_page: number;\n first_page_url: string;\n from: number | null;\n last_page: number;\n last_page_url: string;\n links: PaginatedLink[];\n next_page_url: string | null;\n path: string;\n per_page: number;\n prev_page_url: string | null;\n to: number | null;\n total: number;\n}\n\n// ── Scenes ──\n\nexport type LineType = \"text\" | \"sound\" | \"image\";\n\nexport interface TextLine {\n id: string;\n type?: LineType;\n media_id?: string;\n html: string;\n appear_at_ms: number;\n fade_in_ms: number;\n fade_out_ms: number;\n duration_ms: number;\n position_x?: number;\n position_y?: number;\n width_pct?: number;\n height_pct?: number;\n persist?: boolean;\n}\n\nexport interface SceneTextContent {\n html: string;\n lines?: TextLine[];\n}\n\nexport interface SceneListItem {\n id: string;\n story_id: string;\n title: string;\n order: number;\n is_title: boolean;\n is_end: boolean;\n color: string | null;\n media_id: string | null;\n alt_media_id: string | null;\n media_mode: \"text\" | \"imagery\" | \"film\" | null;\n text_content: SceneTextContent | null;\n text_style: {\n font_family?: string | null;\n text_color?: string | null;\n background_color?: string | null;\n } | null;\n goto_scene_id?: string | null;\n choice_end_time_seconds?: number | null;\n created_at: string;\n updated_at: string;\n}\n\nexport interface UpdateSceneRequest {\n title?: string;\n order?: number;\n media_id?: string | null;\n alt_media_id?: string | null;\n media_mode?: \"text\" | \"imagery\" | \"film\" | null;\n text_content?: SceneTextContent | null;\n text_style?: {\n font_family?: string | null;\n text_color?: string | null;\n background_color?: string | null;\n } | null;\n color?: string | null;\n is_title?: boolean;\n is_end?: boolean;\n goto_scene_id?: string | null;\n choice_style?: string | null;\n choice_overlay_mode?: string | null;\n choice_reveal_mode?: string | null;\n choice_start_time_seconds?: number | null;\n choice_pause_for_choice?: boolean;\n choice_end_time_seconds?: number | null;\n}\n\nexport interface CreateSceneRequest {\n story_id: string;\n title: string;\n order?: number;\n is_title?: boolean;\n is_end?: boolean;\n}\n\nexport interface SceneActionItem {\n id: string;\n scene_id: string;\n name: string;\n type: string | null;\n scene_choice_id: string | null;\n order: number;\n duration: number;\n properties: SceneActionPayload | null;\n subproperties: SceneActionPayload | null;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface CreateSceneActionRequest {\n scene_id: string;\n name: string;\n type?: string | null;\n order?: number;\n duration?: number;\n properties?: SceneActionPayload | null;\n subproperties?: SceneActionPayload | null;\n}\n\nexport interface UpdateSceneActionRequest {\n name?: string;\n type?: string | null;\n order?: number;\n duration?: number;\n properties?: SceneActionPayload;\n subproperties?: SceneActionPayload;\n}\n\n// ── AI Generation ──\n\nexport type AiGenerationStatus =\n | \"pending\"\n | \"generating\"\n | \"ready\"\n | \"failed\"\n | \"accepted\"\n | \"rejected\";\n\nexport interface GenerateImageRequest {\n story_id: string;\n scene_id?: string;\n prompt: string;\n mood?: string;\n visual_style?: string;\n rejection_feedback?: string;\n previous_generation_id?: string;\n}\n\nexport interface AiGeneration {\n id: string;\n story_id: string;\n scene_id: string | null;\n status: AiGenerationStatus;\n user_prompt: string;\n style_context: {\n mood?: string;\n visual_style?: string;\n subject_prompt: string;\n full_prompt: string;\n negative_prompt?: string;\n };\n preview_url?: string;\n rejection_feedback: string | null;\n media_id: string | null;\n attempt_number: number;\n credits_charged: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface GenerateImageResponse {\n generation: AiGeneration;\n balance: { watch: number; create: number };\n}\n\nexport interface AiGenerationShowResponse {\n generation: AiGeneration;\n}\n\nexport interface AcceptGenerationRequest {\n scene_id: string;\n}\n\nexport interface AcceptGenerationResponse {\n generation: AiGeneration;\n scene: SceneListItem;\n media: MediaItem;\n}\n\nexport interface RejectGenerationRequest {\n feedback: string;\n}\n\nexport interface RejectGenerationResponse {\n generation: AiGeneration;\n}\n\nexport interface StoryStyleResponse {\n has_style: boolean;\n style_context: AiGeneration[\"style_context\"] | null;\n}\n\n// ── Chuzi AI (Bedrock short-story generation) ──\n\nexport interface AiStoryScenePayload {\n title: string;\n text: string;\n font_family: string;\n text_color: string;\n background_color: string;\n scene_color: string | null;\n}\n\nexport interface AiStoryEstimateRequest {\n answers: Record<string, string>;\n}\n\nexport interface AiStoryTokenEstimate {\n input_tokens: number;\n output_tokens: number;\n credits_needed: number;\n}\n\nexport interface AiStoryEstimateResponse {\n estimate: AiStoryTokenEstimate;\n balance: CreditBalance;\n can_afford: boolean;\n}\n\nexport interface AiStoryGenerateRequest {\n answers: Record<string, string>;\n}\n\nexport interface AiStoryGenerationResult {\n id: string;\n title: string;\n scenes: AiStoryScenePayload[];\n input_tokens: number;\n output_tokens: number;\n credits_charged: number;\n model_id: string;\n}\n\nexport interface AiStoryGenerateResponse {\n generation: AiStoryGenerationResult;\n balance: CreditBalance;\n}\n\nexport type AiSceneMode = \"create\" | \"overwrite\";\n\nexport interface AiSceneEstimateRequest {\n story_id: string;\n brief: string;\n mode: AiSceneMode;\n scene_id?: string;\n}\n\nexport interface AiSceneEstimateResponse {\n estimate: AiStoryTokenEstimate;\n scene_credits: number;\n total_credits: number;\n balance: CreditBalance;\n can_afford: boolean;\n}\n\nexport interface AiSceneGenerateRequest {\n story_id: string;\n brief: string;\n mode: AiSceneMode;\n scene_id?: string;\n}\n\nexport interface AiSceneGenerationResult {\n id: string;\n story_id: string;\n mode: AiSceneMode;\n scene: AiStoryScenePayload;\n input_tokens: number;\n output_tokens: number;\n credits_charged: number;\n scene_credits: number;\n model_id: string;\n}\n\nexport interface AiSceneGenerateResponse {\n generation: AiSceneGenerationResult;\n balance: CreditBalance;\n}\n\n// ── Media ──\n\nexport interface MediaItem {\n id: string;\n user_id: string;\n s3_key: string;\n source_path: string;\n output_prefix: string | null;\n status: \"uploaded\" | \"processing\" | \"ready\" | \"error\";\n meta: Record<string, unknown>;\n order: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface UploadUrlRequest {\n filename: string;\n contentType: string;\n}\n\nexport interface UploadUrlResponse {\n key: string;\n uploadUrl: string;\n}\n\nexport interface RegisterMediaRequest {\n key: string;\n s3_key: string;\n filename: string;\n content_type?: string;\n title?: string;\n file_size?: number;\n}\n\nexport interface RegisterMediaResponse extends MediaItem {\n credits_charged: number;\n balance: number;\n}\n\nexport interface TranscodeRequest {\n media_id: string;\n}\n\nexport interface TranscodeResponse {\n message: string;\n job_id: string | null;\n manifest_path?: string;\n}\n\nexport interface PlayUrlResponse {\n play_url: string;\n status: string;\n}\n\nexport interface SourceUrlResponse {\n url: string;\n}\n\n// ── Story authoring ──\n\nexport interface CreateStoryRequest {\n title: string;\n description?: string | null;\n genre?: string | null;\n content_rating?: ContentRating | null;\n}\n\nexport interface UpdateStoryRequest {\n title?: string;\n description?: string | null;\n genre?: string | null;\n content_rating?: ContentRating | null;\n published?: boolean;\n tags?: string[];\n}\n\nexport interface TagListResponse {\n data: string[];\n}\n\n// ── Content Ratings ──\n\nexport type ContentRating = \"G\" | \"PG\" | \"PG-13\" | \"R\" | \"NC-17\";\n\nexport interface ContentRatingDefinition {\n id: ContentRating;\n label: string;\n description: string;\n}\n\n// ── Realm Config ──\n\nexport type RealmId = \"cosmos\" | \"wilds\";\n\n/** Supported UI locales — matches PHP `chuzi_realms.supported_locales`. */\nexport type LocaleId = \"en\" | \"es\" | \"fr\" | \"de\" | \"pt\";\n\nexport interface RealmDefinition {\n label: string;\n short_label: string;\n /** Canonical English lexicon (always present). */\n lexicon: Record<string, string>;\n /** Optional per-locale overrides; missing keys fall through to `lexicon`. */\n locales?: Partial<Record<LocaleId, Record<string, string>>>;\n}\n\nexport interface RealmConfigResponse {\n realms: Record<RealmId, RealmDefinition>;\n fallback_lexicon: Record<string, string>;\n fallback_locales?: Partial<Record<LocaleId, Record<string, string>>>;\n intro: {\n line1: string;\n line2: string;\n };\n intro_locales?: Partial<Record<LocaleId, { line1: string; line2: string }>>;\n profile: {\n title: string;\n current_prefix: string;\n switch_prompt: string;\n };\n profile_locales?: Partial<Record<LocaleId, { title: string; current_prefix: string; switch_prompt: string }>>;\n allowed_realm_ids: RealmId[];\n supported_locales: LocaleId[];\n locale_labels?: Partial<Record<LocaleId, string>>;\n}\n\nexport interface UpdateLocaleRequest {\n locale: LocaleId;\n}\n\nexport interface UpdateLocaleResponse {\n locale: LocaleId;\n}\n\n// ── Scene Visibility ──\n\nexport interface SceneVisibility {\n /** Whether the user can navigate to this scene-star. */\n navigable: boolean;\n /** Whether the star/edge should render at reduced opacity. */\n dimmed: boolean;\n}\n\n/**\n * Compute per-scene navigable/dimmed flags for a constellation.\n *\n * Rules:\n * - If `isCreator` is true, everything is navigable and bright.\n * - Title scenes are always navigable and bright.\n * - If the user has watched the ending (`endingSeen`), all scenes unlock.\n * - Otherwise non-title scenes are locked and dimmed.\n */\nexport function computeSceneVisibility(\n sceneList: Pick<SceneListItem, \"is_title\" | \"is_end\">[],\n opts: { isCreator: boolean; endingSeen: boolean },\n): SceneVisibility[] {\n if (opts.isCreator || opts.endingSeen) {\n return sceneList.map(() => ({ navigable: true, dimmed: false }));\n }\n return sceneList.map((scene) => ({\n navigable: scene.is_title,\n dimmed: !scene.is_title,\n }));\n}\n","import type { CreditPool } from \"../types/index.js\";\n\n/**\n * Standard sell rates from credit-policy.md §9.\n * Watch: $0.05/credit → $1 buys 20 credits.\n * Create: $0.10/credit → $1 buys 10 credits.\n */\nexport const CREDIT_CENTS_PER_UNIT: Record<CreditPool, number> = {\n watch: 5,\n create: 10,\n};\n\nexport const CREDITS_PER_DOLLAR: Record<CreditPool, number> = {\n watch: 20,\n create: 10,\n};\n\nexport function defaultPurchaseCredits(pool: CreditPool): number {\n return CREDITS_PER_DOLLAR[pool];\n}\n\nexport function priceCentsForCredits(pool: CreditPool, credits: number): number {\n return Math.max(1, credits) * CREDIT_CENTS_PER_UNIT[pool];\n}\n\nexport function formatCreditPrice(cents: number): string {\n return `$${(cents / 100).toFixed(2)}`;\n}\n","/**\n * Guided prompts for Chuzi AI story creation.\n * Based on Dan Harmon's Story Circle and Joseph Campbell's Hero's Journey.\n */\n\nexport interface ChuziAiPromptStep {\n key: string;\n lexicon_title: string;\n lexicon_hint: string;\n /** Monomyth stage reference shown in the UI */\n monomyth_ref?: string;\n required?: boolean;\n}\n\nexport const CHUZI_AI_PROMPT_STEPS: ChuziAiPromptStep[] = [\n {\n key: \"hero\",\n lexicon_title: \"chuzi_ai_step_hero\",\n lexicon_hint: \"chuzi_ai_step_hero_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_hero\",\n required: true,\n },\n {\n key: \"world\",\n lexicon_title: \"chuzi_ai_step_world\",\n lexicon_hint: \"chuzi_ai_step_world_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_world\",\n required: true,\n },\n {\n key: \"you\",\n lexicon_title: \"chuzi_ai_step_you\",\n lexicon_hint: \"chuzi_ai_step_you_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_you\",\n required: true,\n },\n {\n key: \"need\",\n lexicon_title: \"chuzi_ai_step_need\",\n lexicon_hint: \"chuzi_ai_step_need_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_need\",\n required: true,\n },\n {\n key: \"go\",\n lexicon_title: \"chuzi_ai_step_go\",\n lexicon_hint: \"chuzi_ai_step_go_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_go\",\n required: true,\n },\n {\n key: \"search\",\n lexicon_title: \"chuzi_ai_step_search\",\n lexicon_hint: \"chuzi_ai_step_search_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_search\",\n required: false,\n },\n {\n key: \"find\",\n lexicon_title: \"chuzi_ai_step_find\",\n lexicon_hint: \"chuzi_ai_step_find_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_find\",\n required: false,\n },\n {\n key: \"take\",\n lexicon_title: \"chuzi_ai_step_take\",\n lexicon_hint: \"chuzi_ai_step_take_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_take\",\n required: false,\n },\n {\n key: \"return\",\n lexicon_title: \"chuzi_ai_step_return\",\n lexicon_hint: \"chuzi_ai_step_return_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_return\",\n required: false,\n },\n {\n key: \"change\",\n lexicon_title: \"chuzi_ai_step_change\",\n lexicon_hint: \"chuzi_ai_step_change_hint\",\n monomyth_ref: \"chuzi_ai_monomyth_change\",\n required: false,\n },\n {\n key: \"tone\",\n lexicon_title: \"chuzi_ai_step_tone\",\n lexicon_hint: \"chuzi_ai_step_tone_hint\",\n required: false,\n },\n];\n","import type {\n RealmId,\n RealmDefinition,\n ContentRating,\n ContentRatingDefinition,\n LocaleId,\n} from \"../types/index.js\";\n\nexport * from \"./credits.js\";\nexport * from \"./chuzi-ai-prompts.js\";\n\nexport const REALM_IDS: readonly RealmId[] = [\"cosmos\", \"wilds\"] as const;\n\nexport const SUPPORTED_LOCALES: readonly LocaleId[] = [\n \"en\",\n \"es\",\n \"fr\",\n \"de\",\n \"pt\",\n] as const;\n\nexport const LOCALE_LABELS: Record<LocaleId, string> = {\n en: \"English\",\n es: \"Español\",\n fr: \"Français\",\n de: \"Deutsch\",\n pt: \"Português\",\n};\n\nexport const DEFAULT_LOCALE: LocaleId = \"en\";\n\ntype RealmLexiconOverrides = Partial<Record<RealmId, Record<string, string>>>;\nlet runtimeRealmLexiconOverrides: RealmLexiconOverrides = {};\n\nexport function getRealmLexiconOverrides(): RealmLexiconOverrides {\n return {\n cosmos: runtimeRealmLexiconOverrides.cosmos\n ? { ...runtimeRealmLexiconOverrides.cosmos }\n : undefined,\n wilds: runtimeRealmLexiconOverrides.wilds\n ? { ...runtimeRealmLexiconOverrides.wilds }\n : undefined,\n };\n}\n\nexport function setRealmLexiconOverrides(overrides: RealmLexiconOverrides): void {\n runtimeRealmLexiconOverrides = {\n cosmos: overrides.cosmos ? { ...overrides.cosmos } : undefined,\n wilds: overrides.wilds ? { ...overrides.wilds } : undefined,\n };\n}\n\nexport function isSupportedLocale(value: unknown): value is LocaleId {\n return (\n typeof value === \"string\" &&\n SUPPORTED_LOCALES.includes(value as LocaleId)\n );\n}\n\n/**\n * Normalize a raw locale tag (e.g. \"en-US\", \"pt_BR\") to a supported LocaleId,\n * matching the PHP `LocaleResolver::normalize` behavior.\n */\nexport function normalizeLocale(value: string | null | undefined): LocaleId | null {\n if (!value) return null;\n const lower = value.toLowerCase().trim();\n if (isSupportedLocale(lower)) return lower;\n const base = lower.split(/[-_]/, 1)[0];\n return isSupportedLocale(base) ? base : null;\n}\n\n/**\n * Pick the best supported locale from a browser Accept-Language string.\n * Mirrors PHP `LocaleResolver::matchAcceptLanguage` (q-value aware).\n */\nexport function matchAcceptLanguage(\n accept: string | null | undefined\n): LocaleId | null {\n if (!accept) return null;\n const tags = accept\n .split(\",\")\n .map((part) => {\n const [tag, ...params] = part.trim().split(\";\");\n const qParam = params.find((p) => p.trim().startsWith(\"q=\"));\n const q = qParam ? parseFloat(qParam.split(\"=\")[1]) || 0 : 1;\n return { tag: tag.trim(), q };\n })\n .filter((c) => c.tag && c.tag !== \"*\")\n .sort((a, b) => b.q - a.q);\n\n for (const c of tags) {\n const normalized = normalizeLocale(c.tag);\n if (normalized) return normalized;\n }\n return null;\n}\n\nexport const CONTENT_RATING_IDS: readonly ContentRating[] = [\n \"G\",\n \"PG\",\n \"PG-13\",\n \"R\",\n \"NC-17\",\n] as const;\n\nexport const CONTENT_RATINGS: Record<ContentRating, ContentRatingDefinition> = {\n G: {\n id: \"G\",\n label: \"G\",\n description: \"General Audiences — all ages admitted.\",\n },\n PG: {\n id: \"PG\",\n label: \"PG\",\n description: \"Parental Guidance Suggested — some material may not be suitable for children.\",\n },\n \"PG-13\": {\n id: \"PG-13\",\n label: \"PG-13\",\n description: \"Parents Strongly Cautioned — some material may be inappropriate for children under 13.\",\n },\n R: {\n id: \"R\",\n label: \"R\",\n description: \"Restricted — under 17 requires accompanying parent or adult guardian.\",\n },\n \"NC-17\": {\n id: \"NC-17\",\n label: \"NC-17\",\n description: \"Adults Only — no one 17 and under admitted.\",\n },\n};\n\nexport function isContentRating(value: unknown): value is ContentRating {\n return typeof value === \"string\" && CONTENT_RATING_IDS.includes(value as ContentRating);\n}\n\nexport const REALMS: Record<RealmId, RealmDefinition> = {\n cosmos: {\n label: \"CHUZI COSMOS\",\n short_label: \"Cosmos\",\n lexicon: {\n genre: \"Galaxy\",\n story: \"Star System\",\n scene: \"Planet\",\n scene_choice: \"Trajectory\",\n node: \"Signal\",\n node_type_choice: \"Trajectory\",\n node_type_media: \"Transmission\",\n node_type_go_to_scene: \"Warp\",\n player: \"Voyager\",\n library: \"Star Chart\",\n library_open: \"Open Star Chart\",\n library_close: \"Close Star Chart\",\n editor: \"Mission Control\",\n publish: \"Launch\",\n experience_realm_idea: \"Outer Space\",\n the_end: \"The End\",\n media_pool: \"Cargo Bay\",\n scene_graph: \"Star Chart\",\n watch_path: \"Your trajectory\",\n untitled_story: \"Untitled Star System\",\n unknown_genre: \"Unknown Galaxy\",\n scenes_count: \"planets\",\n choices_count: \"trajectories\",\n drafts_published: \"Drafts + Launched\",\n published_ver: \"Launched ver.\",\n draft: \"Draft\",\n no_scenes_yet: \"No planets in this chart yet.\",\n no_path_yet: \"No trajectory to show yet.\",\n menu_empty_drafts: \"No star systems yet. Chart one to begin.\",\n menu_empty_published: \"No launched systems in the chart.\",\n menu_published_heading: \"Launched constellations\",\n menu_create_story: \"New star system\",\n menu_create_film: \"Create film\",\n film_title_placeholder: \"Star system title\",\n select_genre: \"Select galaxy\",\n genre_field_aria: \"Galaxy\",\n delete_story_verb: \"Delete star system\",\n title_scene_default: \"Launch\",\n choices_made_stat: \"trajectories taken\",\n content_rating: \"Audience Class\",\n content_rating_field_aria: \"Audience class\",\n select_content_rating: \"Select audience class\",\n unrated: \"Unclassified\",\n viewer_credits: \"Fuel Cells\",\n creator_credits: \"Stardust\",\n editor_media_upload: \"Upload Transmission\",\n editor_media_preview: \"Transmission Preview\",\n editor_alt_media: \"Effects\",\n editor_choices: \"Choices\",\n editor_scene_settings: \"Star Settings\",\n editor_title_scene: \"Start\",\n editor_film_title: \"Star System Title\",\n editor_film_title_hint: \"Click to rename this star system\",\n editor_ending_scene: \"End\",\n editor_play: \"Engage\",\n editor_pause: \"Hold\",\n editor_prev_frame: \"Previous Frame\",\n editor_next_frame: \"Next Frame\",\n editor_seek: \"Seek\",\n editor_no_media: \"No transmission assigned\",\n editor_uploading: \"Transmitting\\u2026\",\n editor_drop_media: \"Drop transmission here\",\n editor_scene_type: \"Star Type\",\n editor_save: \"Lock In\",\n editor_cancel: \"Abort\",\n editor_create_scene: \"Chart Planet\",\n editor_create_scene_plain: \"Create New Scene\",\n editor_create_scene_cost: \"1 Stardust\",\n editor_delete_scene_cta: \"Delete Scene\",\n editor_delete_scene_confirm: \"Click again to confirm\",\n editor_scene_locked_delete: \"Start and end scenes cannot be deleted.\",\n editor_scene_color: \"Star Hue\",\n chuzi_ai_name: \"Chuzi AI\",\n chuzi_ai_create_with: \"Create with Chuzi AI\",\n chuzi_ai_create_manual: \"Enter title manually\",\n chuzi_ai_intro: \"Answer story-circle prompts and Chuzi AI will chart your short story.\",\n chuzi_ai_step_of: \"Step\",\n chuzi_ai_back: \"Back\",\n chuzi_ai_next: \"Next\",\n chuzi_ai_scenes_label: \"scenes\",\n chuzi_ai_creating: \"Creating\\u2026\",\n chuzi_ai_generate_failed: \"Story generation failed.\",\n chuzi_ai_build_failed: \"Failed to build story.\",\n chuzi_ai_generate: \"Generate story\",\n chuzi_ai_generating: \"Generating\\u2026\",\n chuzi_ai_token_in: \"Tokens in\",\n chuzi_ai_token_out: \"Tokens out\",\n chuzi_ai_credits_cost: \"AI credits\",\n chuzi_ai_scene_credits: \"Scene credits\",\n chuzi_ai_total_cost: \"Total create credits\",\n chuzi_ai_insufficient: \"Not enough create credits for this generation.\",\n chuzi_ai_apply: \"Build story\",\n chuzi_ai_applying: \"Building scenes\\u2026\",\n chuzi_ai_scene_create: \"Create scene with Chuzi AI\",\n chuzi_ai_scene_overwrite: \"Rewrite scene with Chuzi AI\",\n chuzi_ai_scene_brief: \"Scene direction\",\n chuzi_ai_scene_brief_hint: \"Describe what should happen in this scene. Chuzi AI reads your existing story for characters, tone, and style.\",\n chuzi_ai_scene_context_note: \"Uses your story\\u2019s existing scenes, typography, and art direction as context.\",\n chuzi_ai_scene_overwrite_confirm: \"I understand this replaces this scene\\u2019s text and styling.\",\n chuzi_ai_scene_apply_create: \"Create scene\",\n chuzi_ai_scene_apply_overwrite: \"Replace scene\",\n chuzi_ai_step_hero: \"Hero\",\n chuzi_ai_step_hero_hint: \"Who is your protagonist? Name, age, personality, and what makes them relatable.\",\n chuzi_ai_step_world: \"Ordinary world\",\n chuzi_ai_step_world_hint: \"Where does the story begin? Describe the setting and daily life before adventure calls.\",\n chuzi_ai_step_you: \"You\",\n chuzi_ai_step_you_hint: \"The character in a zone of comfort. What is their normal life like right now?\",\n chuzi_ai_step_need: \"Need\",\n chuzi_ai_step_need_hint: \"Something isn\\u2019t right. What problem, longing, or imbalance disrupts their comfort?\",\n chuzi_ai_step_go: \"Go\",\n chuzi_ai_step_go_hint: \"Crossing the threshold. What event pushes them into the unknown?\",\n chuzi_ai_step_search: \"Search\",\n chuzi_ai_step_search_hint: \"Trials, growth, and exploration. What challenges and discoveries shape them?\",\n chuzi_ai_step_find: \"Find\",\n chuzi_ai_step_find_hint: \"The thing is found or revealed. What truth, object, or insight do they uncover?\",\n chuzi_ai_step_take: \"Take\",\n chuzi_ai_step_take_hint: \"Pay the price. What must they sacrifice or confront to claim their goal?\",\n chuzi_ai_step_return: \"Return\",\n chuzi_ai_step_return_hint: \"Back to the known world. How do they bring what they learned home?\",\n chuzi_ai_step_change: \"Change\",\n chuzi_ai_step_change_hint: \"Transformation achieved. How is the hero different from who they were at the start?\",\n chuzi_ai_step_tone: \"Tone & mood\",\n chuzi_ai_step_tone_hint: \"Genre, mood, and atmosphere (e.g. bittersweet sci-fi, cozy mystery, epic fantasy).\",\n chuzi_ai_monomyth_hero: \"Hero\\u2019s Journey: the protagonist\",\n chuzi_ai_monomyth_world: \"Monomyth: ordinary world\",\n chuzi_ai_monomyth_you: \"Story Circle: zone of comfort\",\n chuzi_ai_monomyth_need: \"Story Circle: something isn\\u2019t right\",\n chuzi_ai_monomyth_go: \"Monomyth: crossing the first threshold\",\n chuzi_ai_monomyth_search: \"Monomyth: road of trials\",\n chuzi_ai_monomyth_find: \"Monomyth: the ultimate boon\",\n chuzi_ai_monomyth_take: \"Monomyth: atonement with the father\",\n chuzi_ai_monomyth_return: \"Monomyth: crossing the return threshold\",\n chuzi_ai_monomyth_change: \"Monomyth: freedom to live\",\n editor_ai_generate: \"Generate Transmission\",\n editor_ai_generating: \"Transmitting Signal\\u2026\",\n editor_ai_mood_question: \"What energy should this planet radiate?\",\n editor_ai_style_question: \"What vision style for this transmission?\",\n editor_ai_prompt_question: \"Describe this planet\\u2019s landscape\",\n editor_ai_accept: \"Lock Transmission\",\n editor_ai_reject: \"Reject Signal\",\n editor_ai_retry: \"Retransmit\",\n editor_ai_feedback_prompt: \"How should we adjust the signal?\",\n editor_ai_credit_cost: \"1 Stardust per signal\",\n spending_modal_title: \"Refuel Your Mission\",\n spending_modal_body: \"You need more credits to continue. Choose how many to add.\",\n spending_modal_no_payment: \"Add a payment method to purchase credits.\",\n spending_modal_credits_label: \"Credits to add\",\n spending_modal_price_label: \"Total\",\n spending_modal_admin_note: \"Admin — credits are granted free of charge.\",\n spending_modal_purchase: \"Purchase Credits\",\n spending_modal_grant: \"Grant Credits\",\n spending_modal_add_card: \"Add Payment Method\",\n spending_modal_card_last_four: \"Card last four digits\",\n spending_modal_card_label: \"Card label (optional)\",\n spending_modal_processing: \"Processing\\u2026\",\n spending_modal_success: \"Credits added.\",\n spending_modal_error: \"Could not complete purchase. Try again.\",\n spending_modal_cancel: \"Not now\",\n spending_insufficient_credits: \"Not enough credits. Purchase more to continue.\",\n editor_ai_generating_scene: \"Planet forming\\u2026\",\n editor_ai_style_badge: \"Signal Style\",\n editor_ai_failed: \"Signal lost. Try retransmitting.\",\n editor_media_attached: \"This star already has a transmission locked in.\",\n editor_remove_media: \"Remove Transmission\",\n editor_media_question: \"What's this scene's media?\",\n editor_media_type_text: \"Text\",\n editor_media_type_imagery: \"Imagery\",\n editor_media_type_film: \"Film\",\n editor_media_preview_cta: \"Preview\",\n editor_media_preview_disabled: \"Add text to enable preview.\",\n editor_text_toolbar_label: \"Generator\",\n editor_text_font_label: \"Font\",\n editor_text_color_label: \"Text Color\",\n editor_text_background_label: \"Background\",\n editor_text_placeholder: \"Start writing scene media...\",\n editor_line_add: \"Add Text\",\n editor_text_lines_section: \"Transmission Lines\",\n editor_line_editor_label: \"Editor\",\n editor_line_number: \"Line\",\n editor_select_line_hint: \"Select a transmission line to edit\",\n editor_select_effect_hint: \"Select an effect to edit\",\n editor_select_choice_hint: \"Select a choice to edit\",\n editor_line_timestamp: \"Appears at\",\n editor_line_fade_in: \"Fade In\",\n editor_line_fade_out: \"Fade Out\",\n editor_line_duration: \"Duration\",\n editor_line_persist: \"Stay on Screen\",\n editor_effects_section: \"Effects\",\n editor_effects_add: \"Add sounds, effects, etc\",\n editor_effect_fade_in_sound: \"Fade In Sound\",\n editor_effect_fade_out_sound: \"Fade Out Sound\",\n editor_effect_fade_in_visual: \"Fade In\",\n editor_effect_fade_out_visual: \"Fade Out\",\n editor_timeline_label: \"Timeline\",\n editor_preview_label: \"Preview\",\n editor_preview_play: \"Play\",\n editor_preview_pause: \"Pause\",\n editor_media_placeholder_imagery: \"Imagery authoring is coming soon.\",\n editor_media_placeholder_film: \"Film authoring is coming soon.\",\n editor_goto_scene: \"Goto Star\",\n editor_scene_duration: \"Transmission Duration\",\n editor_add_choice: \"Add Trajectory\",\n editor_arrow_tool: \"Place Arrow\",\n editor_goto_nullified: \"Disabled — trajectories override goto\",\n editor_remove_choice: \"Remove Trajectory\",\n editor_choice_target: \"Destination Star\",\n editor_choices_empty_hint: \"Set a goto star or add a trajectory to branch the story.\",\n editor_goto_none: \"None\",\n editor_choice_label: \"Trajectory\",\n editor_flow_timeline: \"Story Flow\",\n editor_flow_goto_path: \"Default Goto\",\n editor_flow_add_choice_here: \"Add Trajectory Here\",\n editor_flow_choice_branch: \"Branch\",\n editor_flow_content_ref: \"Content\",\n editor_scene_duration_unit: \"seconds\",\n editor_scene_duration_override_hint: \"Overrides transmission length. Signal runtime: {duration}s\",\n editor_arrow_scale: \"Span\",\n editor_arrow_rotation: \"Bearing\",\n editor_arrow_rotate_hint: \"Drag the beacon above the arrow in preview to rotate\",\n constellation_no_coverbox: \"Uncharted\",\n hud_edit_control: \"Engage\",\n hud_delete_control: \"Jettison\",\n hud_publish_control: \"Launch\",\n hud_launch_control: \"Launch\",\n editor_publish_story: \"Release\",\n viewer_loading: \"Loading transmission…\",\n viewer_preparing: \"Spooling media…\",\n viewer_close: \"Exit\",\n viewer_complete: \"Transmission complete\",\n viewer_stage_label: \"Viewport\",\n viewer_choose_path: \"Choose\",\n create_button: \"CREATE\",\n publish_form_heading: \"Launch readiness\",\n tags_label: \"Signal Tags\",\n tags_placeholder: \"Search signal tags\\u2026\",\n tags_empty: \"No signal tags yet\",\n tags_required: \"At least one signal tag is required.\",\n story_picker_label: \"Constellations\",\n created_by: \"Directed by\",\n chosen_by: \"Chosen by\",\n story_metadata_heading: \"Star system details\",\n story_metadata_save: \"Save\",\n constellation_title_edit_hint: \"Edit star system title and details\",\n director_profile_title: \"Director profile\",\n director_profile_name_label: \"Name\",\n director_profile_realm_label: \"Experience realm\",\n director_profile_image_label: \"Image\",\n director_profile_image_hint:\n \"Realm-themed seal — switching the realm above swaps the seal. Custom uploads land with the V1 avatar endpoints.\",\n director_profile_tab_profile: \"Profile\",\n director_profile_tab_experience_mapping: \"Experience Mapping\",\n director_profile_admin_only: \"Admin only\",\n director_profile_cancel: \"Cancel\",\n director_profile_close: \"Close\",\n director_profile_save: \"Save\",\n director_profile_saving: \"Saving…\",\n director_profile_name_required: \"Name is required.\",\n director_profile_save_failed: \"Save failed\",\n experience_mapping_loading: \"Loading experience mapping…\",\n experience_mapping_empty: \"No template hierarchy available yet.\",\n experience_mapping_retry: \"Retry\",\n experience_mapping_story_label: \"Story\",\n experience_mapping_scene_label: \"Scene\",\n experience_mapping_action_label: \"Action\",\n experience_mapping_field_title: \"Title\",\n experience_mapping_field_description: \"Description\",\n experience_mapping_field_genre: \"Genre\",\n experience_mapping_field_content_rating: \"Content rating\",\n experience_mapping_field_color: \"Color\",\n experience_mapping_field_name: \"Name\",\n experience_mapping_field_type: \"Type\",\n experience_mapping_field_order: \"Order\",\n experience_mapping_field_duration: \"Duration\",\n experience_mapping_field_properties: \"Properties\",\n experience_mapping_field_subproperties: \"Subproperties\",\n experience_mapping_save_changes: \"Save changes\",\n experience_mapping_saved: \"Saved\",\n experience_mapping_save_error: \"Could not save changes.\",\n experience_mapping_delete_story: \"Delete story\",\n experience_mapping_delete_scene: \"Delete scene\",\n experience_mapping_delete_action: \"Delete action\",\n experience_mapping_delete_confirm: \"Click again to confirm\",\n experience_mapping_delete_error: \"Delete failed.\",\n experience_mapping_expand_all: \"Expand all\",\n experience_mapping_collapse_all: \"Collapse all\",\n experience_mapping_forbidden: \"You do not have admin access for this section.\",\n experience_mapping_bad_json: \"JSON must be valid before saving.\",\n experience_mapping_intro:\n \"Edit realm vocabulary from largest to smallest. Generate JSON and paste it in chat for code application.\",\n experience_mapping_dirty: \"dirty changes\",\n experience_mapping_export_ready: \"No unsaved mapping edits yet.\",\n experience_mapping_export_json: \"Generate JSON export\",\n experience_mapping_copy_json: \"Copy JSON\",\n experience_mapping_copied: \"Copied\",\n experience_mapping_paste_instruction:\n \"Paste this JSON in chat and I will apply it to chuzi-shared.\",\n experience_mapping_export_empty: \"Export output appears here.\",\n experience_mapping_select_realm: \"Select realm\",\n experience_mapping_group_major_idea: \"Major Idea\",\n experience_mapping_helper_realm_idea:\n \"Highest-level concept for this realm.\",\n experience_mapping_save_experience: \"Save to experience\",\n experience_mapping_saved_experience:\n \"Saved to current experience. Some labels appear immediately.\",\n auth_email_placeholder: \"Email\",\n auth_password_input_placeholder: \"Password\",\n auth_password_sign_in_button: \"Sign In\",\n auth_password_signing_in: \"Signing in...\",\n auth_signin_tab: \"Sign in\",\n auth_signup_tab: \"Sign up\",\n auth_signup_subtitle: \"Create your account with secure sign-in.\",\n auth_signin_subtitle: \"Sign in with your account provider.\",\n auth_sign_up_button: \"Continue with Google\",\n auth_username_placeholder: \"Username\",\n auth_sign_in_button: \"Continue with Google\",\n auth_signing_in: \"Signing in...\",\n auth_oidc_redirecting: \"Redirecting to secure sign-in...\",\n auth_oidc_failed: \"Could not start sign-in.\",\n auth_oidc_callback_processing: \"Completing sign-in...\",\n auth_oidc_verified: \"Signed in. Redirecting...\",\n auth_oidc_callback_failed: \"Could not complete sign-in.\",\n auth_oidc_token_missing: \"Sign-in token was missing.\",\n auth_magic_link_sent:\n \"If that email is registered, a magic link has been sent.\",\n auth_magic_link_sent_signup: \"Check your email for your sign-up link.\",\n auth_magic_link_verifying: \"Verifying magic link...\",\n auth_magic_link_verified: \"Signed in. Redirecting...\",\n auth_magic_link_failed: \"This magic link is invalid or expired.\",\n auth_magic_link_cta: \"Use another email\",\n auth_login_failed: \"Sign-in failed.\",\n auth_username_checking: \"Checking username availability...\",\n auth_username_available: \"Username is available.\",\n auth_username_unavailable: \"Username is taken; updated to an available suggestion.\",\n auth_username_required: \"Username is required.\",\n auth_username_update_failed: \"Could not reserve a unique username.\",\n experience_mapping_group_experience_root: \"Experience Root\",\n experience_mapping_group_node_types: \"Node Types\",\n experience_mapping_group_scene_structure: \"Scene Structure\",\n experience_mapping_group_media: \"Media Terms\",\n experience_mapping_group_counts: \"Counts and Adjacent Labels\",\n experience_mapping_helper_story: \"Largest narrative unit.\",\n experience_mapping_helper_scene: \"Contained unit under story.\",\n experience_mapping_helper_scene_choice: \"Branching choice in a scene.\",\n experience_mapping_helper_node: \"Smallest flow node.\",\n experience_mapping_helper_alt_media: \"Smallest related media label.\",\n },\n locales: {\n es: {\n genre: \"Galaxia\",\n story: \"Sistema Estelar\",\n scene: \"Planeta\",\n scene_choice: \"Trayectoria\",\n player: \"Viajero\",\n library: \"Carta Estelar\",\n editor: \"Control de Misión\",\n publish: \"Lanzar\",\n the_end: \"Órbita Final\",\n untitled_story: \"Sistema Estelar sin título\",\n menu_create_story: \"Nuevo sistema estelar\",\n film_title_placeholder: \"Título del sistema estelar\",\n select_genre: \"Seleccionar galaxia\",\n created_by: \"Dirigido por\",\n },\n fr: {\n genre: \"Galaxie\",\n story: \"Système Stellaire\",\n scene: \"Planète\",\n scene_choice: \"Trajectoire\",\n player: \"Voyageur\",\n library: \"Carte Stellaire\",\n editor: \"Contrôle de Mission\",\n publish: \"Lancer\",\n the_end: \"Orbite Finale\",\n untitled_story: \"Système stellaire sans titre\",\n menu_create_story: \"Nouveau système stellaire\",\n film_title_placeholder: \"Titre du système stellaire\",\n select_genre: \"Sélectionner une galaxie\",\n created_by: \"Réalisé par\",\n },\n de: {\n genre: \"Galaxie\",\n story: \"Sternsystem\",\n scene: \"Planet\",\n player: \"Reisender\",\n publish: \"Starten\",\n },\n pt: {\n genre: \"Galáxia\",\n story: \"Sistema Estelar\",\n scene: \"Planeta\",\n player: \"Viajante\",\n publish: \"Lançar\",\n },\n },\n },\n wilds: {\n label: \"CHUZI WILDS\",\n short_label: \"Wilds\",\n lexicon: {\n genre: \"Biome\",\n story: \"Grove\",\n scene: \"Clearing\",\n scene_choice: \"Trail\",\n node: \"Seed\",\n node_type_choice: \"Trail\",\n node_type_media: \"Bloom\",\n node_type_go_to_scene: \"Crossing\",\n player: \"Wanderer\",\n library: \"Canopy\",\n library_open: \"Open Canopy\",\n library_close: \"Close Canopy\",\n editor: \"Heartwood\",\n publish: \"Plant\",\n experience_realm_idea: \"Untamed Nature\",\n the_end: \"Roots\",\n media_pool: \"Undergrowth\",\n scene_graph: \"Canopy\",\n watch_path: \"Your trail\",\n untitled_story: \"Untitled Grove\",\n unknown_genre: \"Unknown Biome\",\n scenes_count: \"clearings\",\n choices_count: \"trails\",\n drafts_published: \"Drafts + Planted\",\n published_ver: \"Planted ver.\",\n draft: \"Draft\",\n no_scenes_yet: \"No clearings in this canopy yet.\",\n no_path_yet: \"No trail to show yet.\",\n menu_empty_drafts: \"No groves yet. Plant one to begin.\",\n menu_empty_published: \"No planted groves in the canopy.\",\n menu_published_heading: \"Planted groves\",\n menu_create_story: \"New grove\",\n menu_create_film: \"Create film\",\n film_title_placeholder: \"Grove title\",\n select_genre: \"Select biome\",\n genre_field_aria: \"Biome\",\n delete_story_verb: \"Delete grove\",\n title_scene_default: \"Trailhead\",\n choices_made_stat: \"trails taken\",\n content_rating: \"Field Guide\",\n content_rating_field_aria: \"Field guide\",\n select_content_rating: \"Select field guide\",\n unrated: \"Unmarked\",\n viewer_credits: \"Sap\",\n creator_credits: \"Pollen\",\n editor_media_upload: \"Upload Bloom\",\n editor_media_preview: \"Bloom Preview\",\n editor_alt_media: \"Effects\",\n editor_choices: \"Choices\",\n editor_scene_settings: \"Clearing Settings\",\n editor_title_scene: \"Start\",\n editor_film_title: \"Grove Title\",\n editor_film_title_hint: \"Click to rename this grove\",\n editor_ending_scene: \"End\",\n editor_play: \"Unfurl\",\n editor_pause: \"Rest\",\n editor_prev_frame: \"Previous Frame\",\n editor_next_frame: \"Next Frame\",\n editor_seek: \"Seek\",\n editor_no_media: \"No bloom assigned\",\n editor_uploading: \"Blooming\\u2026\",\n editor_drop_media: \"Drop bloom here\",\n editor_scene_type: \"Clearing Type\",\n editor_save: \"Engrave\",\n editor_cancel: \"Cancel\",\n editor_create_scene: \"Plant Clearing\",\n editor_create_scene_plain: \"Create New Scene\",\n editor_create_scene_cost: \"1 Pollen\",\n editor_delete_scene_cta: \"Delete Scene\",\n editor_delete_scene_confirm: \"Click again to confirm\",\n editor_scene_locked_delete: \"Start and end scenes cannot be deleted.\",\n editor_scene_color: \"Clearing Tint\",\n chuzi_ai_name: \"Chuzi AI\",\n chuzi_ai_create_with: \"Create with Chuzi AI\",\n chuzi_ai_create_manual: \"Enter title manually\",\n chuzi_ai_intro: \"Answer story-circle prompts and Chuzi AI will grow your short story.\",\n chuzi_ai_step_of: \"Step\",\n chuzi_ai_back: \"Back\",\n chuzi_ai_next: \"Next\",\n chuzi_ai_scenes_label: \"scenes\",\n chuzi_ai_creating: \"Creating\\u2026\",\n chuzi_ai_generate_failed: \"Story generation failed.\",\n chuzi_ai_build_failed: \"Failed to build story.\",\n chuzi_ai_generate: \"Generate story\",\n chuzi_ai_generating: \"Generating\\u2026\",\n chuzi_ai_token_in: \"Tokens in\",\n chuzi_ai_token_out: \"Tokens out\",\n chuzi_ai_credits_cost: \"AI credits\",\n chuzi_ai_scene_credits: \"Scene credits\",\n chuzi_ai_total_cost: \"Total create credits\",\n chuzi_ai_insufficient: \"Not enough create credits for this generation.\",\n chuzi_ai_apply: \"Build story\",\n chuzi_ai_applying: \"Building scenes\\u2026\",\n chuzi_ai_scene_create: \"Create scene with Chuzi AI\",\n chuzi_ai_scene_overwrite: \"Rewrite scene with Chuzi AI\",\n chuzi_ai_scene_brief: \"Scene direction\",\n chuzi_ai_scene_brief_hint: \"Describe what should happen in this scene. Chuzi AI reads your existing story for characters, tone, and style.\",\n chuzi_ai_scene_context_note: \"Uses your story\\u2019s existing scenes, typography, and art direction as context.\",\n chuzi_ai_scene_overwrite_confirm: \"I understand this replaces this scene\\u2019s text and styling.\",\n chuzi_ai_scene_apply_create: \"Create scene\",\n chuzi_ai_scene_apply_overwrite: \"Replace scene\",\n chuzi_ai_step_hero: \"Hero\",\n chuzi_ai_step_hero_hint: \"Who is your protagonist? Name, age, personality, and what makes them relatable.\",\n chuzi_ai_step_world: \"Ordinary world\",\n chuzi_ai_step_world_hint: \"Where does the story begin? Describe the setting and daily life before adventure calls.\",\n chuzi_ai_step_you: \"You\",\n chuzi_ai_step_you_hint: \"The character in a zone of comfort. What is their normal life like right now?\",\n chuzi_ai_step_need: \"Need\",\n chuzi_ai_step_need_hint: \"Something isn\\u2019t right. What problem, longing, or imbalance disrupts their comfort?\",\n chuzi_ai_step_go: \"Go\",\n chuzi_ai_step_go_hint: \"Crossing the threshold. What event pushes them into the unknown?\",\n chuzi_ai_step_search: \"Search\",\n chuzi_ai_step_search_hint: \"Trials, growth, and exploration. What challenges and discoveries shape them?\",\n chuzi_ai_step_find: \"Find\",\n chuzi_ai_step_find_hint: \"The thing is found or revealed. What truth, object, or insight do they uncover?\",\n chuzi_ai_step_take: \"Take\",\n chuzi_ai_step_take_hint: \"Pay the price. What must they sacrifice or confront to claim their goal?\",\n chuzi_ai_step_return: \"Return\",\n chuzi_ai_step_return_hint: \"Back to the known world. How do they bring what they learned home?\",\n chuzi_ai_step_change: \"Change\",\n chuzi_ai_step_change_hint: \"Transformation achieved. How is the hero different from who they were at the start?\",\n chuzi_ai_step_tone: \"Tone & mood\",\n chuzi_ai_step_tone_hint: \"Genre, mood, and atmosphere (e.g. bittersweet sci-fi, cozy mystery, epic fantasy).\",\n chuzi_ai_monomyth_hero: \"Hero\\u2019s Journey: the protagonist\",\n chuzi_ai_monomyth_world: \"Monomyth: ordinary world\",\n chuzi_ai_monomyth_you: \"Story Circle: zone of comfort\",\n chuzi_ai_monomyth_need: \"Story Circle: something isn\\u2019t right\",\n chuzi_ai_monomyth_go: \"Monomyth: crossing the first threshold\",\n chuzi_ai_monomyth_search: \"Monomyth: road of trials\",\n chuzi_ai_monomyth_find: \"Monomyth: the ultimate boon\",\n chuzi_ai_monomyth_take: \"Monomyth: atonement with the father\",\n chuzi_ai_monomyth_return: \"Monomyth: crossing the return threshold\",\n chuzi_ai_monomyth_change: \"Monomyth: freedom to live\",\n editor_ai_generate: \"Grow Bloom\",\n editor_ai_generating: \"Seed Sprouting\\u2026\",\n editor_ai_mood_question: \"What feeling should this clearing evoke?\",\n editor_ai_style_question: \"What growth pattern for this bloom?\",\n editor_ai_prompt_question: \"Describe this clearing\",\n editor_ai_accept: \"Root Bloom\",\n editor_ai_reject: \"Prune Bloom\",\n editor_ai_retry: \"Regrow\",\n editor_ai_feedback_prompt: \"How should we reshape the growth?\",\n editor_ai_credit_cost: \"1 Pollen per bloom\",\n spending_modal_title: \"Gather More Pollen\",\n spending_modal_body: \"You need more credits to continue. Choose how many to add.\",\n spending_modal_no_payment: \"Add a payment method to purchase credits.\",\n spending_modal_credits_label: \"Credits to add\",\n spending_modal_price_label: \"Total\",\n spending_modal_admin_note: \"Admin — credits are granted free of charge.\",\n spending_modal_purchase: \"Purchase Credits\",\n spending_modal_grant: \"Grant Credits\",\n spending_modal_add_card: \"Add Payment Method\",\n spending_modal_card_last_four: \"Card last four digits\",\n spending_modal_card_label: \"Card label (optional)\",\n spending_modal_processing: \"Processing\\u2026\",\n spending_modal_success: \"Credits added.\",\n spending_modal_error: \"Could not complete purchase. Try again.\",\n spending_modal_cancel: \"Not now\",\n spending_insufficient_credits: \"Not enough credits. Purchase more to continue.\",\n editor_ai_generating_scene: \"Clearing emerging\\u2026\",\n editor_ai_style_badge: \"Growth Style\",\n editor_ai_failed: \"Growth withered. Try regrowing.\",\n editor_media_attached: \"This clearing already has a bloom rooted.\",\n editor_remove_media: \"Uproot Bloom\",\n editor_media_question: \"What's this scene's media?\",\n editor_media_type_text: \"Text\",\n editor_media_type_imagery: \"Imagery\",\n editor_media_type_film: \"Film\",\n editor_media_preview_cta: \"Preview\",\n editor_media_preview_disabled: \"Add text to enable preview.\",\n editor_text_toolbar_label: \"Generator\",\n editor_text_font_label: \"Font\",\n editor_text_color_label: \"Text Color\",\n editor_text_background_label: \"Background\",\n editor_text_placeholder: \"Start writing scene media...\",\n editor_line_add: \"Add Text\",\n editor_text_lines_section: \"Transmission Lines\",\n editor_line_editor_label: \"Editor\",\n editor_line_number: \"Line\",\n editor_select_line_hint: \"Select a transmission line to edit\",\n editor_select_effect_hint: \"Select an effect to edit\",\n editor_select_choice_hint: \"Select a choice to edit\",\n editor_line_timestamp: \"Appears at\",\n editor_line_fade_in: \"Fade In\",\n editor_line_fade_out: \"Fade Out\",\n editor_line_duration: \"Duration\",\n editor_line_persist: \"Stay on Screen\",\n editor_effects_section: \"Effects\",\n editor_effects_add: \"Add sounds, effects, etc\",\n editor_effect_fade_in_sound: \"Fade In Sound\",\n editor_effect_fade_out_sound: \"Fade Out Sound\",\n editor_effect_fade_in_visual: \"Fade In\",\n editor_effect_fade_out_visual: \"Fade Out\",\n editor_timeline_label: \"Timeline\",\n editor_preview_label: \"Preview\",\n editor_preview_play: \"Play\",\n editor_preview_pause: \"Pause\",\n editor_media_placeholder_imagery: \"Imagery authoring is coming soon.\",\n editor_media_placeholder_film: \"Film authoring is coming soon.\",\n editor_goto_scene: \"Goto Clearing\",\n editor_scene_duration: \"Bloom Duration\",\n editor_add_choice: \"Add Trail\",\n editor_arrow_tool: \"Place Indicator\",\n editor_goto_nullified: \"Disabled — trails override goto\",\n editor_remove_choice: \"Remove Trail\",\n editor_choice_target: \"Destination Clearing\",\n editor_choices_empty_hint: \"Set a goto clearing or add a trail to branch the story.\",\n editor_goto_none: \"None\",\n editor_choice_label: \"Trail\",\n editor_flow_timeline: \"Story Flow\",\n editor_flow_goto_path: \"Default Goto\",\n editor_flow_add_choice_here: \"Add Trail Here\",\n editor_flow_choice_branch: \"Branch\",\n editor_flow_content_ref: \"Content\",\n editor_scene_duration_unit: \"seconds\",\n editor_scene_duration_override_hint: \"Overrides bloom length. Content runtime: {duration}s\",\n editor_arrow_scale: \"Span\",\n editor_arrow_rotation: \"Bearing\",\n editor_arrow_rotate_hint: \"Drag the beacon above the indicator in preview to rotate\",\n constellation_no_coverbox: \"Unseen\",\n hud_edit_control: \"Tend\",\n hud_delete_control: \"Uproot\",\n hud_publish_control: \"Plant\",\n hud_launch_control: \"Enter\",\n editor_publish_story: \"Share\",\n viewer_loading: \"Entering the grove…\",\n viewer_preparing: \"Gathering blooms…\",\n viewer_close: \"Leave\",\n viewer_complete: \"Journey complete\",\n viewer_stage_label: \"Canopy\",\n viewer_choose_path: \"Choose\",\n create_button: \"CREATE\",\n publish_form_heading: \"Planting check\",\n tags_label: \"Root Tags\",\n tags_placeholder: \"Search root tags\\u2026\",\n tags_empty: \"No root tags yet\",\n tags_required: \"At least one root tag is required.\",\n story_picker_label: \"Groves\",\n created_by: \"Tended by\",\n chosen_by: \"Chosen by\",\n story_metadata_heading: \"Grove details\",\n story_metadata_save: \"Save\",\n constellation_title_edit_hint: \"Edit grove title and details\",\n director_profile_title: \"Director profile\",\n director_profile_name_label: \"Name\",\n director_profile_realm_label: \"Experience realm\",\n director_profile_image_label: \"Image\",\n director_profile_image_hint:\n \"Realm-themed seal — switching the realm above swaps the seal. Custom uploads land with the V1 avatar endpoints.\",\n director_profile_tab_profile: \"Profile\",\n director_profile_tab_experience_mapping: \"Experience Mapping\",\n director_profile_admin_only: \"Admin only\",\n director_profile_cancel: \"Cancel\",\n director_profile_close: \"Close\",\n director_profile_save: \"Save\",\n director_profile_saving: \"Saving…\",\n director_profile_name_required: \"Name is required.\",\n director_profile_save_failed: \"Save failed\",\n experience_mapping_loading: \"Loading experience mapping…\",\n experience_mapping_empty: \"No template hierarchy available yet.\",\n experience_mapping_retry: \"Retry\",\n experience_mapping_story_label: \"Story\",\n experience_mapping_scene_label: \"Scene\",\n experience_mapping_action_label: \"Action\",\n experience_mapping_field_title: \"Title\",\n experience_mapping_field_description: \"Description\",\n experience_mapping_field_genre: \"Genre\",\n experience_mapping_field_content_rating: \"Content rating\",\n experience_mapping_field_color: \"Color\",\n experience_mapping_field_name: \"Name\",\n experience_mapping_field_type: \"Type\",\n experience_mapping_field_order: \"Order\",\n experience_mapping_field_duration: \"Duration\",\n experience_mapping_field_properties: \"Properties\",\n experience_mapping_field_subproperties: \"Subproperties\",\n experience_mapping_save_changes: \"Save changes\",\n experience_mapping_saved: \"Saved\",\n experience_mapping_save_error: \"Could not save changes.\",\n experience_mapping_delete_story: \"Delete story\",\n experience_mapping_delete_scene: \"Delete scene\",\n experience_mapping_delete_action: \"Delete action\",\n experience_mapping_delete_confirm: \"Click again to confirm\",\n experience_mapping_delete_error: \"Delete failed.\",\n experience_mapping_expand_all: \"Expand all\",\n experience_mapping_collapse_all: \"Collapse all\",\n experience_mapping_forbidden: \"You do not have admin access for this section.\",\n experience_mapping_bad_json: \"JSON must be valid before saving.\",\n experience_mapping_intro:\n \"Edit realm vocabulary from largest to smallest. Generate JSON and paste it in chat for code application.\",\n experience_mapping_dirty: \"dirty changes\",\n experience_mapping_export_ready: \"No unsaved mapping edits yet.\",\n experience_mapping_export_json: \"Generate JSON export\",\n experience_mapping_copy_json: \"Copy JSON\",\n experience_mapping_copied: \"Copied\",\n experience_mapping_paste_instruction:\n \"Paste this JSON in chat and I will apply it to chuzi-shared.\",\n experience_mapping_export_empty: \"Export output appears here.\",\n experience_mapping_select_realm: \"Select realm\",\n experience_mapping_group_major_idea: \"Major Idea\",\n experience_mapping_helper_realm_idea:\n \"Highest-level concept for this realm.\",\n experience_mapping_save_experience: \"Save to experience\",\n experience_mapping_saved_experience:\n \"Saved to current experience. Some labels appear immediately.\",\n auth_email_placeholder: \"Email\",\n auth_password_input_placeholder: \"Password\",\n auth_password_sign_in_button: \"Sign In\",\n auth_password_signing_in: \"Signing in...\",\n auth_signin_tab: \"Sign in\",\n auth_signup_tab: \"Sign up\",\n auth_signup_subtitle: \"Create your account with secure sign-in.\",\n auth_signin_subtitle: \"Sign in with your account provider.\",\n auth_sign_up_button: \"Continue with Google\",\n auth_username_placeholder: \"Username\",\n auth_sign_in_button: \"Continue with Google\",\n auth_signing_in: \"Signing in...\",\n auth_oidc_redirecting: \"Redirecting to secure sign-in...\",\n auth_oidc_failed: \"Could not start sign-in.\",\n auth_oidc_callback_processing: \"Completing sign-in...\",\n auth_oidc_verified: \"Signed in. Redirecting...\",\n auth_oidc_callback_failed: \"Could not complete sign-in.\",\n auth_oidc_token_missing: \"Sign-in token was missing.\",\n auth_magic_link_sent:\n \"If that email is registered, a magic link has been sent.\",\n auth_magic_link_sent_signup: \"Check your email for your sign-up link.\",\n auth_magic_link_verifying: \"Verifying magic link...\",\n auth_magic_link_verified: \"Signed in. Redirecting...\",\n auth_magic_link_failed: \"This magic link is invalid or expired.\",\n auth_magic_link_cta: \"Use another email\",\n auth_login_failed: \"Sign-in failed.\",\n auth_username_checking: \"Checking username availability...\",\n auth_username_available: \"Username is available.\",\n auth_username_unavailable: \"Username is taken; updated to an available suggestion.\",\n auth_username_required: \"Username is required.\",\n auth_username_update_failed: \"Could not reserve a unique username.\",\n experience_mapping_group_experience_root: \"Experience Root\",\n experience_mapping_group_node_types: \"Node Types\",\n experience_mapping_group_scene_structure: \"Scene Structure\",\n experience_mapping_group_media: \"Media Terms\",\n experience_mapping_group_counts: \"Counts and Adjacent Labels\",\n experience_mapping_helper_story: \"Largest narrative unit.\",\n experience_mapping_helper_scene: \"Contained unit under story.\",\n experience_mapping_helper_scene_choice: \"Branching choice in a scene.\",\n experience_mapping_helper_node: \"Smallest flow node.\",\n experience_mapping_helper_alt_media: \"Smallest related media label.\",\n },\n locales: {\n es: {\n genre: \"Bioma\",\n story: \"Arboleda\",\n scene: \"Claro\",\n scene_choice: \"Sendero\",\n player: \"Errante\",\n library: \"Dosel\",\n editor: \"Duramen\",\n publish: \"Plantar\",\n the_end: \"Raíces\",\n untitled_story: \"Arboleda sin título\",\n menu_create_story: \"Nueva arboleda\",\n film_title_placeholder: \"Título de la arboleda\",\n select_genre: \"Seleccionar bioma\",\n created_by: \"Cuidado por\",\n },\n fr: {\n genre: \"Biome\",\n story: \"Bosquet\",\n scene: \"Clairière\",\n scene_choice: \"Sentier\",\n player: \"Vagabond\",\n library: \"Canopée\",\n editor: \"Cœur de bois\",\n publish: \"Planter\",\n the_end: \"Racines\",\n untitled_story: \"Bosquet sans titre\",\n menu_create_story: \"Nouveau bosquet\",\n film_title_placeholder: \"Titre du bosquet\",\n select_genre: \"Sélectionner un biome\",\n created_by: \"Soigné par\",\n },\n de: {\n genre: \"Biom\",\n story: \"Hain\",\n scene: \"Lichtung\",\n player: \"Wanderer\",\n publish: \"Pflanzen\",\n },\n pt: {\n genre: \"Bioma\",\n story: \"Bosque\",\n scene: \"Clareira\",\n player: \"Andarilho\",\n publish: \"Plantar\",\n },\n },\n },\n};\n\nexport const FALLBACK_LEXICON: Record<string, string> = {\n genre: \"Genre\",\n story: \"Story\",\n scene: \"Scene\",\n scene_choice: \"Choice\",\n node: \"Node\",\n node_type_choice: \"Choice\",\n node_type_media: \"Media\",\n node_type_go_to_scene: \"Go to scene\",\n player: \"Player\",\n library: \"Library\",\n library_open: \"Open scene tree\",\n library_close: \"Close scene tree\",\n editor: \"Editor\",\n publish: \"Publish\",\n experience_realm_idea: \"Experience Theme\",\n the_end: \"The End\",\n media_pool: \"Media Pool\",\n scene_graph: \"Scene tree\",\n watch_path: \"Your path\",\n untitled_story: \"Untitled Story\",\n unknown_genre: \"Unknown Genre\",\n scenes_count: \"scenes\",\n choices_count: \"choices\",\n drafts_published: \"Drafts + Published\",\n published_ver: \"Published ver.\",\n draft: \"Draft\",\n no_scenes_yet: \"No scenes available yet.\",\n no_path_yet: \"No path to show yet.\",\n menu_empty_drafts: \"No films yet. Create one to get started.\",\n menu_empty_published: \"No published films found.\",\n menu_published_heading: \"Published Films\",\n menu_create_story: \"Create Story\",\n menu_create_film: \"Create Film\",\n film_title_placeholder: \"Film title\",\n select_genre: \"Select genre\",\n genre_field_aria: \"Film genre\",\n delete_story_verb: \"Delete film\",\n title_scene_default: \"Start\",\n choices_made_stat: \"choices made\",\n content_rating: \"Rating\",\n content_rating_field_aria: \"Content rating\",\n select_content_rating: \"Select rating\",\n unrated: \"Not Rated\",\n viewer_credits: \"Viewer Credits\",\n creator_credits: \"Creator Credits\",\n editor_media_upload: \"Upload Media\",\n editor_media_preview: \"Media Preview\",\n editor_alt_media: \"Effects\",\n editor_choices: \"Choices\",\n editor_scene_settings: \"Scene Settings\",\n editor_title_scene: \"Start\",\n editor_film_title: \"Film Title\",\n editor_film_title_hint: \"Click to rename this film\",\n editor_ending_scene: \"End\",\n editor_play: \"Play\",\n editor_pause: \"Pause\",\n editor_prev_frame: \"Previous Frame\",\n editor_next_frame: \"Next Frame\",\n editor_seek: \"Seek\",\n editor_no_media: \"No media assigned\",\n editor_uploading: \"Uploading\\u2026\",\n editor_drop_media: \"Drop media here\",\n editor_scene_type: \"Scene Type\",\n editor_save: \"Save\",\n editor_cancel: \"Cancel\",\n editor_create_scene: \"Create Scene\",\n editor_create_scene_plain: \"Create New Scene\",\n editor_create_scene_cost: \"1 credit\",\n editor_delete_scene_cta: \"Delete Scene\",\n editor_delete_scene_confirm: \"Click again to confirm\",\n editor_scene_locked_delete: \"Start and end scenes cannot be deleted.\",\n editor_scene_color: \"Scene Color\",\n chuzi_ai_name: \"Chuzi AI\",\n chuzi_ai_create_with: \"Create with Chuzi AI\",\n chuzi_ai_create_manual: \"Enter title manually\",\n chuzi_ai_intro: \"Answer a few story-circle prompts and Chuzi AI will draft your short story.\",\n chuzi_ai_step_of: \"Step\",\n chuzi_ai_back: \"Back\",\n chuzi_ai_next: \"Next\",\n chuzi_ai_scenes_label: \"scenes\",\n chuzi_ai_creating: \"Creating\\u2026\",\n chuzi_ai_generate_failed: \"Story generation failed.\",\n chuzi_ai_build_failed: \"Failed to build story.\",\n chuzi_ai_generate: \"Generate story\",\n chuzi_ai_generating: \"Generating\\u2026\",\n chuzi_ai_token_in: \"Tokens in\",\n chuzi_ai_token_out: \"Tokens out\",\n chuzi_ai_credits_cost: \"AI credits\",\n chuzi_ai_scene_credits: \"Scene credits\",\n chuzi_ai_total_cost: \"Total create credits\",\n chuzi_ai_insufficient: \"Not enough create credits for this generation.\",\n chuzi_ai_apply: \"Build story\",\n chuzi_ai_applying: \"Building scenes\\u2026\",\n chuzi_ai_scene_create: \"Create scene with Chuzi AI\",\n chuzi_ai_scene_overwrite: \"Rewrite scene with Chuzi AI\",\n chuzi_ai_scene_brief: \"Scene direction\",\n chuzi_ai_scene_brief_hint: \"Describe what should happen in this scene. Chuzi AI reads your existing story for characters, tone, and style.\",\n chuzi_ai_scene_context_note: \"Uses your story\\u2019s existing scenes, typography, and art direction as context.\",\n chuzi_ai_scene_overwrite_confirm: \"I understand this replaces this scene\\u2019s text and styling.\",\n chuzi_ai_scene_apply_create: \"Create scene\",\n chuzi_ai_scene_apply_overwrite: \"Replace scene\",\n chuzi_ai_step_hero: \"Hero\",\n chuzi_ai_step_hero_hint: \"Who is your protagonist? Name, age, personality, and what makes them relatable.\",\n chuzi_ai_step_world: \"Ordinary world\",\n chuzi_ai_step_world_hint: \"Where does the story begin? Describe the setting and daily life before adventure calls.\",\n chuzi_ai_step_you: \"You\",\n chuzi_ai_step_you_hint: \"The character in a zone of comfort. What is their normal life like right now?\",\n chuzi_ai_step_need: \"Need\",\n chuzi_ai_step_need_hint: \"Something isn\\u2019t right. What problem, longing, or imbalance disrupts their comfort?\",\n chuzi_ai_step_go: \"Go\",\n chuzi_ai_step_go_hint: \"Crossing the threshold. What event pushes them into the unknown?\",\n chuzi_ai_step_search: \"Search\",\n chuzi_ai_step_search_hint: \"Trials, growth, and exploration. What challenges and discoveries shape them?\",\n chuzi_ai_step_find: \"Find\",\n chuzi_ai_step_find_hint: \"The thing is found or revealed. What truth, object, or insight do they uncover?\",\n chuzi_ai_step_take: \"Take\",\n chuzi_ai_step_take_hint: \"Pay the price. What must they sacrifice or confront to claim their goal?\",\n chuzi_ai_step_return: \"Return\",\n chuzi_ai_step_return_hint: \"Back to the known world. How do they bring what they learned home?\",\n chuzi_ai_step_change: \"Change\",\n chuzi_ai_step_change_hint: \"Transformation achieved. How is the hero different from who they were at the start?\",\n chuzi_ai_step_tone: \"Tone & mood\",\n chuzi_ai_step_tone_hint: \"Genre, mood, and atmosphere (e.g. bittersweet sci-fi, cozy mystery, epic fantasy).\",\n chuzi_ai_monomyth_hero: \"Hero\\u2019s Journey: the protagonist\",\n chuzi_ai_monomyth_world: \"Monomyth: ordinary world\",\n chuzi_ai_monomyth_you: \"Story Circle: zone of comfort\",\n chuzi_ai_monomyth_need: \"Story Circle: something isn\\u2019t right\",\n chuzi_ai_monomyth_go: \"Monomyth: crossing the first threshold\",\n chuzi_ai_monomyth_search: \"Monomyth: road of trials\",\n chuzi_ai_monomyth_find: \"Monomyth: the ultimate boon\",\n chuzi_ai_monomyth_take: \"Monomyth: atonement with the father\",\n chuzi_ai_monomyth_return: \"Monomyth: crossing the return threshold\",\n chuzi_ai_monomyth_change: \"Monomyth: freedom to live\",\n editor_ai_generate: \"Generate with AI\",\n editor_ai_generating: \"Generating\\u2026\",\n editor_ai_mood_question: \"What mood should this scene convey?\",\n editor_ai_style_question: \"What visual style do you want?\",\n editor_ai_prompt_question: \"Describe this scene\",\n editor_ai_accept: \"Accept\",\n editor_ai_reject: \"Reject\",\n editor_ai_retry: \"Try Again\",\n editor_ai_feedback_prompt: \"What should we change?\",\n editor_ai_credit_cost: \"1 credit per generation\",\n spending_modal_title: \"Purchase Credits\",\n spending_modal_body: \"You need more credits to continue. Choose how many to add.\",\n spending_modal_no_payment: \"Add a payment method to purchase credits.\",\n spending_modal_credits_label: \"Credits to add\",\n spending_modal_price_label: \"Total\",\n spending_modal_admin_note: \"Admin — credits are granted free of charge.\",\n spending_modal_purchase: \"Purchase Credits\",\n spending_modal_grant: \"Grant Credits\",\n spending_modal_add_card: \"Add Payment Method\",\n spending_modal_card_last_four: \"Card last four digits\",\n spending_modal_card_label: \"Card label (optional)\",\n spending_modal_processing: \"Processing\\u2026\",\n spending_modal_success: \"Credits added.\",\n spending_modal_error: \"Could not complete purchase. Try again.\",\n spending_modal_cancel: \"Not now\",\n spending_insufficient_credits: \"Not enough credits. Purchase more to continue.\",\n editor_ai_generating_scene: \"Scene generating\\u2026\",\n editor_ai_style_badge: \"Style\",\n editor_ai_failed: \"Generation failed. Please try again.\",\n editor_media_attached: \"This scene already has media attached.\",\n editor_remove_media: \"Remove Media\",\n editor_media_question: \"What's this scene's media?\",\n editor_media_type_text: \"Text\",\n editor_media_type_imagery: \"Imagery\",\n editor_media_type_film: \"Film\",\n editor_media_preview_cta: \"Preview\",\n editor_media_preview_disabled: \"Add text to enable preview.\",\n editor_text_toolbar_label: \"Generator\",\n editor_text_font_label: \"Font\",\n editor_text_color_label: \"Text Color\",\n editor_text_background_label: \"Background\",\n editor_text_placeholder: \"Start writing scene media...\",\n editor_line_add: \"Add Text\",\n editor_text_lines_section: \"Text Lines\",\n editor_line_editor_label: \"Editor\",\n editor_line_number: \"Line\",\n editor_select_line_hint: \"Select a line to edit\",\n editor_select_effect_hint: \"Select an effect to edit\",\n editor_select_choice_hint: \"Select a choice to edit\",\n editor_line_timestamp: \"Appears at\",\n editor_line_fade_in: \"Fade In\",\n editor_line_fade_out: \"Fade Out\",\n editor_line_duration: \"Duration\",\n editor_line_persist: \"Stay on Screen\",\n editor_effects_section: \"Effects\",\n editor_effects_add: \"Add sounds, effects, etc\",\n editor_effect_fade_in_sound: \"Fade In Sound\",\n editor_effect_fade_out_sound: \"Fade Out Sound\",\n editor_effect_fade_in_visual: \"Fade In\",\n editor_effect_fade_out_visual: \"Fade Out\",\n editor_timeline_label: \"Timeline\",\n editor_preview_label: \"Preview\",\n editor_preview_play: \"Play\",\n editor_preview_pause: \"Pause\",\n editor_media_placeholder_imagery: \"Imagery authoring is coming soon.\",\n editor_media_placeholder_film: \"Film authoring is coming soon.\",\n editor_goto_scene: \"Goto Scene\",\n editor_scene_duration: \"Scene Duration\",\n editor_add_choice: \"Add Choice\",\n editor_arrow_tool: \"Place Arrow\",\n editor_goto_nullified: \"Disabled — choices override goto\",\n editor_remove_choice: \"Remove Choice\",\n editor_choice_target: \"Destination Scene\",\n editor_choices_empty_hint: \"Set a goto scene or add a choice to create branching paths.\",\n editor_goto_none: \"None\",\n editor_choice_label: \"Choice\",\n editor_flow_timeline: \"Story Flow\",\n editor_flow_goto_path: \"Default Goto\",\n editor_flow_add_choice_here: \"Add Choice Here\",\n editor_flow_choice_branch: \"Branch\",\n editor_flow_content_ref: \"Content\",\n editor_scene_duration_unit: \"seconds\",\n editor_scene_duration_override_hint: \"Overrides preview playback length. Content: {duration}s\",\n editor_arrow_scale: \"Scale\",\n editor_arrow_rotation: \"Rotation\",\n editor_arrow_rotate_hint: \"Drag the handle above the arrow in preview to rotate\",\n constellation_no_coverbox: \"No cover\",\n hud_edit_control: \"Edit\",\n hud_delete_control: \"Delete\",\n hud_publish_control: \"Publish\",\n hud_launch_control: \"Launch\",\n editor_publish_story: \"Publish\",\n viewer_loading: \"Loading experience…\",\n viewer_preparing: \"Cueing media…\",\n viewer_close: \"Exit\",\n viewer_complete: \"Experience complete\",\n viewer_stage_label: \"Experience\",\n viewer_choose_path: \"Choose\",\n create_button: \"CREATE\",\n publish_form_heading: \"Publish checklist\",\n tags_label: \"Tags\",\n tags_placeholder: \"Search tags\\u2026\",\n tags_empty: \"No tags yet\",\n tags_required: \"At least one tag is required.\",\n story_picker_label: \"Stories\",\n created_by: \"Created by\",\n chosen_by: \"Chosen by\",\n story_metadata_heading: \"Story details\",\n story_metadata_save: \"Save\",\n constellation_title_edit_hint: \"Edit story title and details\",\n director_profile_title: \"Director profile\",\n director_profile_name_label: \"Name\",\n director_profile_realm_label: \"Experience realm\",\n director_profile_image_label: \"Image\",\n director_profile_image_hint:\n \"Realm-themed seal — switching the realm above swaps the seal. Custom uploads land with the V1 avatar endpoints.\",\n director_profile_tab_profile: \"Profile\",\n director_profile_tab_experience_mapping: \"Experience Mapping\",\n director_profile_admin_only: \"Admin only\",\n director_profile_cancel: \"Cancel\",\n director_profile_close: \"Close\",\n director_profile_save: \"Save\",\n director_profile_saving: \"Saving…\",\n director_profile_name_required: \"Name is required.\",\n director_profile_save_failed: \"Save failed\",\n experience_mapping_loading: \"Loading experience mapping…\",\n experience_mapping_empty: \"No template hierarchy available yet.\",\n experience_mapping_retry: \"Retry\",\n experience_mapping_story_label: \"Story\",\n experience_mapping_scene_label: \"Scene\",\n experience_mapping_action_label: \"Action\",\n experience_mapping_field_title: \"Title\",\n experience_mapping_field_description: \"Description\",\n experience_mapping_field_genre: \"Genre\",\n experience_mapping_field_content_rating: \"Content rating\",\n experience_mapping_field_color: \"Color\",\n experience_mapping_field_name: \"Name\",\n experience_mapping_field_type: \"Type\",\n experience_mapping_field_order: \"Order\",\n experience_mapping_field_duration: \"Duration\",\n experience_mapping_field_properties: \"Properties\",\n experience_mapping_field_subproperties: \"Subproperties\",\n experience_mapping_save_changes: \"Save changes\",\n experience_mapping_saved: \"Saved\",\n experience_mapping_save_error: \"Could not save changes.\",\n experience_mapping_delete_story: \"Delete story\",\n experience_mapping_delete_scene: \"Delete scene\",\n experience_mapping_delete_action: \"Delete action\",\n experience_mapping_delete_confirm: \"Click again to confirm\",\n experience_mapping_delete_error: \"Delete failed.\",\n experience_mapping_expand_all: \"Expand all\",\n experience_mapping_collapse_all: \"Collapse all\",\n experience_mapping_forbidden: \"You do not have admin access for this section.\",\n experience_mapping_bad_json: \"JSON must be valid before saving.\",\n experience_mapping_intro:\n \"Edit realm vocabulary from largest to smallest. Generate JSON and paste it in chat for code application.\",\n experience_mapping_dirty: \"dirty changes\",\n experience_mapping_export_ready: \"No unsaved mapping edits yet.\",\n experience_mapping_export_json: \"Generate JSON export\",\n experience_mapping_copy_json: \"Copy JSON\",\n experience_mapping_copied: \"Copied\",\n experience_mapping_paste_instruction:\n \"Paste this JSON in chat and I will apply it to chuzi-shared.\",\n experience_mapping_export_empty: \"Export output appears here.\",\n experience_mapping_select_realm: \"Select realm\",\n experience_mapping_group_major_idea: \"Major Idea\",\n experience_mapping_helper_realm_idea:\n \"Highest-level concept for this realm.\",\n experience_mapping_save_experience: \"Save to experience\",\n experience_mapping_saved_experience:\n \"Saved to current experience. Some labels appear immediately.\",\n auth_email_placeholder: \"Email\",\n auth_password_input_placeholder: \"Password\",\n auth_password_sign_in_button: \"Sign In\",\n auth_password_signing_in: \"Signing in...\",\n auth_signin_tab: \"Sign in\",\n auth_signup_tab: \"Sign up\",\n auth_signup_subtitle: \"Create your account with secure sign-in.\",\n auth_signin_subtitle: \"Sign in with your account provider.\",\n auth_sign_up_button: \"Continue with Google\",\n auth_username_placeholder: \"Username\",\n auth_sign_in_button: \"Continue with Google\",\n auth_signing_in: \"Signing in...\",\n auth_oidc_redirecting: \"Redirecting to secure sign-in...\",\n auth_oidc_failed: \"Could not start sign-in.\",\n auth_oidc_callback_processing: \"Completing sign-in...\",\n auth_oidc_verified: \"Signed in. Redirecting...\",\n auth_oidc_callback_failed: \"Could not complete sign-in.\",\n auth_oidc_token_missing: \"Sign-in token was missing.\",\n auth_magic_link_sent:\n \"If that email is registered, a magic link has been sent.\",\n auth_magic_link_sent_signup: \"Check your email for your sign-up link.\",\n auth_magic_link_verifying: \"Verifying magic link...\",\n auth_magic_link_verified: \"Signed in. Redirecting...\",\n auth_magic_link_failed: \"This magic link is invalid or expired.\",\n auth_magic_link_cta: \"Use another email\",\n auth_login_failed: \"Sign-in failed.\",\n auth_username_checking: \"Checking username availability...\",\n auth_username_available: \"Username is available.\",\n auth_username_unavailable: \"Username is taken; updated to an available suggestion.\",\n auth_username_required: \"Username is required.\",\n auth_username_update_failed: \"Could not reserve a unique username.\",\n experience_mapping_group_experience_root: \"Experience Root\",\n experience_mapping_group_node_types: \"Node Types\",\n experience_mapping_group_scene_structure: \"Scene Structure\",\n experience_mapping_group_media: \"Media Terms\",\n experience_mapping_group_counts: \"Counts and Adjacent Labels\",\n experience_mapping_helper_story: \"Largest narrative unit.\",\n experience_mapping_helper_scene: \"Contained unit under story.\",\n experience_mapping_helper_scene_choice: \"Branching choice in a scene.\",\n experience_mapping_helper_node: \"Smallest flow node.\",\n experience_mapping_helper_alt_media: \"Smallest related media label.\",\n};\n\n/**\n * Per-locale overrides for FALLBACK_LEXICON. Missing keys fall through to\n * the English fallback. Mirrors PHP `chuzi_realms.fallback_locales`.\n */\nexport const FALLBACK_LOCALES: Partial<\n Record<LocaleId, Record<string, string>>\n> = {\n es: {\n genre: \"Género\",\n story: \"Historia\",\n scene: \"Escena\",\n scene_choice: \"Elección\",\n player: \"Reproductor\",\n library: \"Biblioteca\",\n editor: \"Editor\",\n publish: \"Publicar\",\n the_end: \"Fin\",\n untitled_story: \"Historia sin título\",\n menu_create_story: \"Crear historia\",\n menu_create_film: \"Crear película\",\n film_title_placeholder: \"Título de la película\",\n select_genre: \"Seleccionar género\",\n delete_story_verb: \"Eliminar película\",\n created_by: \"Creado por\",\n },\n fr: {\n genre: \"Genre\",\n story: \"Histoire\",\n scene: \"Scène\",\n scene_choice: \"Choix\",\n player: \"Lecteur\",\n library: \"Bibliothèque\",\n editor: \"Éditeur\",\n publish: \"Publier\",\n the_end: \"Fin\",\n untitled_story: \"Histoire sans titre\",\n menu_create_story: \"Créer une histoire\",\n menu_create_film: \"Créer un film\",\n film_title_placeholder: \"Titre du film\",\n select_genre: \"Sélectionner un genre\",\n delete_story_verb: \"Supprimer le film\",\n created_by: \"Créé par\",\n },\n de: {\n genre: \"Genre\",\n story: \"Geschichte\",\n scene: \"Szene\",\n publish: \"Veröffentlichen\",\n the_end: \"Ende\",\n untitled_story: \"Unbenannte Geschichte\",\n menu_create_story: \"Geschichte erstellen\",\n film_title_placeholder: \"Filmtitel\",\n select_genre: \"Genre auswählen\",\n created_by: \"Erstellt von\",\n },\n pt: {\n genre: \"Gênero\",\n story: \"História\",\n scene: \"Cena\",\n publish: \"Publicar\",\n the_end: \"Fim\",\n untitled_story: \"História sem título\",\n menu_create_story: \"Criar história\",\n film_title_placeholder: \"Título do filme\",\n select_genre: \"Selecionar gênero\",\n created_by: \"Criado por\",\n },\n};\n\nfunction resolveFallback(locale: LocaleId | null | undefined): Record<string, string> {\n const overrides = locale && FALLBACK_LOCALES[locale];\n return overrides ? { ...FALLBACK_LEXICON, ...overrides } : { ...FALLBACK_LEXICON };\n}\n\nfunction resolveRealm(\n realmId: RealmId,\n locale: LocaleId | null | undefined\n): Record<string, string> {\n const realm = REALMS[realmId];\n const overrides = locale && realm.locales ? realm.locales[locale] : undefined;\n const runtimeOverrides = runtimeRealmLexiconOverrides[realmId];\n return {\n ...realm.lexicon,\n ...(overrides ?? {}),\n ...(runtimeOverrides ?? {}),\n };\n}\n\n/**\n * Get a lexicon value for a realm + locale, falling back to the neutral\n * lexicon (which itself respects locale).\n */\nexport function t(\n realmId: RealmId | null | undefined,\n key: string,\n fallback = \"\",\n locale: LocaleId | null | undefined = null\n): string {\n if (realmId && REALMS[realmId]) {\n const realmLex = resolveRealm(realmId, locale);\n if (realmLex[key] !== undefined) return realmLex[key];\n }\n const fb = resolveFallback(locale);\n return fb[key] ?? fallback;\n}\n\n/**\n * Get the full merged lexicon for a realm + locale (realm lexicon on top of\n * locale-aware fallback).\n */\nexport function lexiconForRealm(\n realmId: RealmId | null | undefined,\n locale: LocaleId | null | undefined = null\n): Record<string, string> {\n const fb = resolveFallback(locale);\n if (!realmId || !REALMS[realmId]) {\n return fb;\n }\n return { ...fb, ...resolveRealm(realmId, locale) };\n}\n","import type { RealmId } from \"../types/index.js\";\n\n/**\n * CSS custom property tokens, mirroring public/css/chuzi-realms.css.\n * Use these for any non-DOM rendering (e.g. React Native, canvas).\n */\nexport interface RealmThemeTokens {\n bgDeep: string;\n bgMid: string;\n accent: string;\n accentSoft: string;\n text: string;\n muted: string;\n effectLine: string;\n}\n\nexport const THEME_TOKENS: Record<RealmId, RealmThemeTokens> = {\n cosmos: {\n bgDeep: \"#04070d\",\n bgMid: \"#0a1020\",\n accent: \"#7eb8ff\",\n accentSoft: \"rgba(126, 184, 255, 0.35)\",\n text: \"#e8f0ff\",\n muted: \"rgba(232, 240, 255, 0.65)\",\n effectLine: \"#ffb347\",\n },\n wilds: {\n bgDeep: \"#0d120c\",\n bgMid: \"#152018\",\n accent: \"#7bc96f\",\n accentSoft: \"rgba(123, 201, 111, 0.35)\",\n text: \"#eef6ea\",\n muted: \"rgba(238, 246, 234, 0.7)\",\n effectLine: \"#b78aff\",\n },\n};\n\n/**\n * Scene tree visualization theme, mirroring the THEMES object in\n * resources/js/scene-tree-viewer.js.\n */\nexport interface SceneTreeTheme {\n bg: string;\n edgeChoice: string;\n edgeGoto: string;\n nodeDefault: string;\n nodeActive: string;\n borderDefault: string;\n borderActive: string;\n labelDefault: string;\n labelActive: string;\n nodeLockedFill: string;\n nodeLockedBorder: string;\n labelLocked: string;\n nodeShape: \"star\" | \"rect\";\n rectRx: number;\n}\n\nexport const SCENE_TREE_THEMES: Record<RealmId, SceneTreeTheme> = {\n cosmos: {\n bg: \"#020408\",\n edgeChoice: \"#e8f0ff\",\n edgeGoto: \"#4a9fff\",\n nodeDefault: \"#ffffff\",\n nodeActive: \"#ffd47e\",\n borderDefault: \"#3a5080\",\n borderActive: \"#fff6d0\",\n labelDefault: \"rgba(220, 232, 255, 0.92)\",\n labelActive: \"rgba(255, 246, 220, 0.98)\",\n nodeLockedFill: \"#151a28\",\n nodeLockedBorder: \"#2a3348\",\n labelLocked: \"rgba(200, 210, 230, 0.35)\",\n nodeShape: \"star\",\n rectRx: 2,\n },\n wilds: {\n bg: \"#04070d\",\n edgeChoice: \"#ffffff\",\n edgeGoto: \"#6ecf7a\",\n nodeDefault: \"#e8f5e4\",\n nodeActive: \"#d31e2f\",\n borderDefault: \"#2d4a32\",\n borderActive: \"#ff9ea8\",\n labelDefault: \"rgba(232, 245, 228, 0.92)\",\n labelActive: \"rgba(255, 214, 219, 0.98)\",\n nodeLockedFill: \"#1a221c\",\n nodeLockedBorder: \"#2a3d30\",\n labelLocked: \"rgba(200, 220, 200, 0.38)\",\n nodeShape: \"rect\",\n rectRx: 3,\n },\n};\n\n/**\n * Get theme tokens for a realm, defaulting to wilds.\n */\nexport function getThemeTokens(realmId: RealmId | null | undefined): RealmThemeTokens {\n return THEME_TOKENS[realmId ?? \"wilds\"] ?? THEME_TOKENS.wilds;\n}\n\n/**\n * Get scene tree theme for a realm, defaulting to wilds.\n */\nexport function getSceneTreeTheme(realmId: RealmId | null | undefined): SceneTreeTheme {\n return SCENE_TREE_THEMES[realmId ?? \"wilds\"] ?? SCENE_TREE_THEMES.wilds;\n}\n","import type {\n AcceptGenerationRequest,\n AcceptGenerationResponse,\n AiGenerationShowResponse,\n BookmarkListResponse,\n BookmarkResponse,\n CatalogResponse,\n CreateSceneActionRequest,\n CreateSceneRequest,\n CreateStoryRequest,\n EngagementResponse,\n GenerateImageRequest,\n GenerateImageResponse,\n LocaleId,\n MagicLinkRequest,\n MagicLinkRequestResponse,\n MagicLinkVerifyRequest,\n MagicLinkVerifyResponse,\n MediaItem,\n MineResponse,\n OidcExchangeRequest,\n OidcExchangeResponse,\n PasswordLoginRequest,\n PasswordLoginResponse,\n PaginatedResponse,\n PlayUrlResponse,\n PublicDirectorProfile,\n RealmConfigResponse,\n RegisterMediaRequest,\n RegisterMediaResponse,\n RejectGenerationRequest,\n RejectGenerationResponse,\n SaveBookmarkRequest,\n SceneActionItem,\n SceneListItem,\n SceneMapResponse,\n SourceUrlResponse,\n StoryListItem,\n StoryStyleResponse,\n TagListResponse,\n TrackEngagementRequest,\n TranscodeRequest,\n TranscodeResponse,\n UsernameAvailabilityResponse,\n UpdateLocaleRequest,\n UpdateLocaleResponse,\n UpdateProfileRequest,\n UpdateProfileResponse,\n UpdateRealmRequest,\n UpdateRealmResponse,\n UpdateSceneActionRequest,\n UpdateSceneRequest,\n UpdateStoryRequest,\n UploadUrlRequest,\n UploadUrlResponse,\n UserProfile,\n CreditBalanceResponse,\n CreditPool,\n GrantCreditsRequest,\n GrantCreditsResponse,\n PaymentMethod,\n PurchaseAmountRequest,\n PurchaseCreditsRequest,\n PurchaseCreditsResponse,\n StorePaymentMethodRequest,\n UploadCostResponse,\n} from \"../types/index.js\";\n\n/**\n * Token resolver returned by the host app. Called on every request; may be\n * synchronous (in-memory) or async (SecureStore on RN-tvOS, AsyncStorage on\n * RN). Return null when the user is unauthenticated.\n */\nexport type TokenResolver = () => string | null | Promise<string | null>;\n\nexport interface ChuziClientConfig {\n /** Base URL of the CHUZI API — no trailing slash required. */\n baseUrl: string;\n /** Returns the current bearer token, or null if unauthenticated. */\n getToken?: TokenResolver;\n /** Override fetch for testing or RN polyfills. Defaults to globalThis.fetch. */\n fetch?: typeof fetch;\n /** Sent as User-Agent (web), or X-Client header (RN). Optional. */\n client?: string;\n}\n\nexport class ChuziApiError extends Error {\n constructor(\n public status: number,\n public body: unknown,\n message?: string,\n ) {\n super(message ?? `chuzi-api ${status}`);\n this.name = \"ChuziApiError\";\n }\n}\n\nexport function isInsufficientCreditsError(err: unknown): err is ChuziApiError {\n if (!(err instanceof ChuziApiError) || err.status !== 403) {\n return false;\n }\n const body = err.body as { error?: string } | null;\n return typeof body?.error === \"string\" && /insufficient/i.test(body.error);\n}\n\nexport function insufficientCreditsPool(err: unknown): CreditPool | null {\n if (!isInsufficientCreditsError(err)) {\n return null;\n }\n const body = err.body as { error?: string };\n const message = body.error ?? \"\";\n if (/watch/i.test(message)) return \"watch\";\n if (/create/i.test(message)) return \"create\";\n return null;\n}\n\ninterface RequestOptions {\n query?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n signal?: AbortSignal;\n}\n\nfunction buildQuery(query: RequestOptions[\"query\"]): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined) continue;\n params.set(k, String(v));\n }\n const s = params.toString();\n return s ? `?${s}` : \"\";\n}\n\nfunction makeRequester(config: ChuziClientConfig) {\n const fetchFn = config.fetch ?? globalThis.fetch;\n const baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n\n return async function request<T>(\n method: string,\n path: string,\n opts: RequestOptions = {},\n ): Promise<T> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n };\n if (config.client) headers[\"X-Chuzi-Client\"] = config.client;\n if (config.getToken) {\n const token = await config.getToken();\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n }\n if (opts.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const res = await fetchFn(`${baseUrl}${path}${buildQuery(opts.query)}`, {\n method,\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,\n signal: opts.signal,\n });\n\n if (res.status === 204) return undefined as T;\n\n let parsed: unknown = null;\n const text = await res.text();\n if (text.length > 0) {\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n }\n\n if (!res.ok) {\n throw new ChuziApiError(res.status, parsed);\n }\n return parsed as T;\n };\n}\n\nexport interface ChuziClient {\n auth: {\n login(req: PasswordLoginRequest): Promise<PasswordLoginResponse>;\n exchangeOidcCode(req: OidcExchangeRequest): Promise<OidcExchangeResponse>;\n requestMagicLink(req: MagicLinkRequest): Promise<MagicLinkRequestResponse>;\n verifyMagicLink(req: MagicLinkVerifyRequest): Promise<MagicLinkVerifyResponse>;\n usernameAvailability(username: string, opts?: { signal?: AbortSignal }): Promise<UsernameAvailabilityResponse>;\n logout(): Promise<void>;\n user(): Promise<UserProfile>;\n };\n catalog: {\n index(opts?: { signal?: AbortSignal }): Promise<CatalogResponse>;\n byCreator(userId: string, opts?: { signal?: AbortSignal }): Promise<CatalogResponse>;\n };\n config: {\n realms(opts?: { locale?: LocaleId; signal?: AbortSignal }): Promise<RealmConfigResponse>;\n };\n stories: {\n index(opts?: { signal?: AbortSignal }): Promise<PaginatedResponse<StoryListItem>>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<StoryListItem>;\n mine(opts?: { signal?: AbortSignal }): Promise<MineResponse>;\n create(req: CreateStoryRequest): Promise<{ data: StoryListItem }>;\n update(id: string, req: UpdateStoryRequest): Promise<{ data: StoryListItem }>;\n destroy(id: string): Promise<void>;\n };\n tags: {\n index(opts?: { signal?: AbortSignal }): Promise<TagListResponse>;\n };\n scenes: {\n index(storyId: string, opts?: { signal?: AbortSignal }): Promise<SceneListItem[]>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<SceneListItem>;\n create(req: CreateSceneRequest): Promise<SceneListItem>;\n update(id: string, req: UpdateSceneRequest): Promise<SceneListItem>;\n destroy(id: string): Promise<void>;\n };\n sceneActions: {\n index(opts?: {\n sceneId?: string;\n signal?: AbortSignal;\n }): Promise<SceneActionItem[]>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<SceneActionItem>;\n create(req: CreateSceneActionRequest): Promise<SceneActionItem>;\n update(id: string, req: UpdateSceneActionRequest): Promise<SceneActionItem>;\n destroy(id: string): Promise<{ message: string }>;\n };\n media: {\n uploadUrl(req: UploadUrlRequest): Promise<UploadUrlResponse>;\n register(req: RegisterMediaRequest): Promise<RegisterMediaResponse>;\n transcode(req: TranscodeRequest): Promise<TranscodeResponse>;\n playUrl(id: string, opts?: { signal?: AbortSignal }): Promise<PlayUrlResponse>;\n sourceUrl(id: string, opts?: { signal?: AbortSignal }): Promise<SourceUrlResponse>;\n };\n watch: {\n sceneMap(storyId: string, opts?: { signal?: AbortSignal }): Promise<SceneMapResponse>;\n trackEngagement(storyId: string, req: TrackEngagementRequest): Promise<EngagementResponse>;\n saveBookmark(storyId: string, req: SaveBookmarkRequest): Promise<BookmarkResponse>;\n listBookmarks(storyId: string, opts?: { signal?: AbortSignal }): Promise<BookmarkListResponse>;\n };\n user: {\n profile(opts?: { signal?: AbortSignal }): Promise<UserProfile>;\n publicProfile(userId: string, opts?: { signal?: AbortSignal }): Promise<PublicDirectorProfile>;\n updateRealm(req: UpdateRealmRequest): Promise<UpdateRealmResponse>;\n updateLocale(req: UpdateLocaleRequest): Promise<UpdateLocaleResponse>;\n updateProfile(req: UpdateProfileRequest): Promise<UpdateProfileResponse>;\n usernameAvailability(username: string, opts?: { signal?: AbortSignal }): Promise<UsernameAvailabilityResponse>;\n };\n credits: {\n balance(opts?: { signal?: AbortSignal }): Promise<CreditBalanceResponse>;\n ledger(opts?: {\n signal?: AbortSignal;\n pool?: CreditPool;\n }): Promise<{ transactions: unknown[] }>;\n packs(opts?: { signal?: AbortSignal }): Promise<{ packs: import(\"../types/index.js\").CreditPack[] }>;\n uploadCost(fileSize: number, opts?: { signal?: AbortSignal }): Promise<UploadCostResponse>;\n purchase(req: PurchaseCreditsRequest): Promise<PurchaseCreditsResponse>;\n purchaseAmount(req: PurchaseAmountRequest): Promise<PurchaseCreditsResponse>;\n unlockScene(sceneId: string, opts?: { signal?: AbortSignal }): Promise<{\n unlocked: boolean;\n already_watched?: boolean;\n balance: import(\"../types/index.js\").CreditBalance;\n error?: string;\n }>;\n };\n payments: {\n list(opts?: { signal?: AbortSignal }): Promise<{ payment_methods: PaymentMethod[] }>;\n store(req: StorePaymentMethodRequest): Promise<{ payment_method: PaymentMethod }>;\n remove(paymentMethodId: string): Promise<{ message: string }>;\n setDefault(paymentMethodId: string): Promise<{ message: string }>;\n };\n admin: {\n credits: {\n grant(req: GrantCreditsRequest): Promise<GrantCreditsResponse>;\n };\n };\n ai: {\n generateImage(req: GenerateImageRequest): Promise<GenerateImageResponse>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<AiGenerationShowResponse>;\n accept(id: string, req: AcceptGenerationRequest): Promise<AcceptGenerationResponse>;\n reject(id: string, req: RejectGenerationRequest): Promise<RejectGenerationResponse>;\n storyStyle(storyId: string, opts?: { signal?: AbortSignal }): Promise<StoryStyleResponse>;\n storyEstimate(req: import(\"../types/index.js\").AiStoryEstimateRequest): Promise<import(\"../types/index.js\").AiStoryEstimateResponse>;\n storyGenerate(req: import(\"../types/index.js\").AiStoryGenerateRequest): Promise<import(\"../types/index.js\").AiStoryGenerateResponse>;\n sceneEstimate(req: import(\"../types/index.js\").AiSceneEstimateRequest): Promise<import(\"../types/index.js\").AiSceneEstimateResponse>;\n sceneGenerate(req: import(\"../types/index.js\").AiSceneGenerateRequest): Promise<import(\"../types/index.js\").AiSceneGenerateResponse>;\n };\n}\n\n/**\n * Construct a typed CHUZI API client. Bearer-token auth via Authorization\n * header (works for web/SPA and native apps). The host owns token storage\n * and lifecycle — pass `getToken` to plug in localStorage / AsyncStorage /\n * SecureStore as appropriate.\n *\n * Surfaces not yet wired: scene-actions, exports, admin, reports.\n * Add them here as the migration reaches each surface; the route shapes\n * are documented in chuzi-api/routes/api.php.\n */\nexport function createChuziClient(config: ChuziClientConfig): ChuziClient {\n const request = makeRequester(config);\n\n return {\n auth: {\n login: (req) =>\n request(\"POST\", \"/api/v1/auth/login\", { body: req }),\n exchangeOidcCode: (req) =>\n request(\"POST\", \"/api/v1/auth/oidc/exchange\", { body: req }),\n requestMagicLink: (req) =>\n request(\"POST\", \"/api/v1/auth/magic-link/request\", { body: req }),\n verifyMagicLink: (req) =>\n request(\"POST\", \"/api/v1/auth/magic-link/verify\", { body: req }),\n usernameAvailability: (username, opts) =>\n request(\"GET\", \"/api/v1/auth/username-availability\", {\n signal: opts?.signal,\n query: { username },\n }),\n logout: () => request(\"POST\", \"/api/v1/auth/logout\"),\n user: () => request(\"GET\", \"/api/v1/auth/user\"),\n },\n catalog: {\n index: (opts) => request(\"GET\", \"/api/v1/catalog\", opts),\n byCreator: (userId, opts) =>\n request(\"GET\", \"/api/v1/catalog\", {\n signal: opts?.signal,\n query: { creator_id: userId },\n }),\n },\n config: {\n realms: (opts) =>\n request(\"GET\", \"/api/v1/config/realms\", {\n signal: opts?.signal,\n query: opts?.locale ? { locale: opts.locale } : undefined,\n }),\n },\n stories: {\n index: (opts) => request(\"GET\", \"/api/v1/stories\", opts),\n show: (id, opts) => request(\"GET\", `/api/v1/stories/${encodeURIComponent(id)}`, opts),\n mine: (opts) => request(\"GET\", \"/api/v1/stories/mine\", opts),\n create: (req) => request(\"POST\", \"/api/v1/stories\", { body: req }),\n update: (id, req) => request(\"PATCH\", `/api/v1/stories/${encodeURIComponent(id)}`, { body: req }),\n destroy: (id) => request(\"DELETE\", `/api/v1/stories/${encodeURIComponent(id)}`),\n },\n tags: {\n index: (opts) => request(\"GET\", \"/api/v1/tags\", opts),\n },\n scenes: {\n index: (storyId, opts) =>\n request(\"GET\", \"/api/v1/scenes\", {\n signal: opts?.signal,\n query: { story_id: storyId },\n }),\n show: (id, opts) =>\n request(\"GET\", `/api/v1/scenes/${encodeURIComponent(id)}`, opts),\n create: (req) =>\n request(\"POST\", \"/api/v1/scenes\", { body: req }),\n update: (id, req) =>\n request(\"PATCH\", `/api/v1/scenes/${encodeURIComponent(id)}`, { body: req }),\n destroy: (id) =>\n request(\"DELETE\", `/api/v1/scenes/${encodeURIComponent(id)}`),\n },\n sceneActions: {\n index: (opts) =>\n request(\"GET\", \"/api/v1/scene-actions\", {\n signal: opts?.signal,\n query: opts?.sceneId ? { scene_id: opts.sceneId } : undefined,\n }),\n show: (id, opts) =>\n request(\"GET\", `/api/v1/scene-actions/${encodeURIComponent(id)}`, opts),\n create: (req) =>\n request(\"POST\", \"/api/v1/scene-actions\", { body: req }),\n update: (id, req) =>\n request(\"PATCH\", `/api/v1/scene-actions/${encodeURIComponent(id)}`, {\n body: req,\n }),\n destroy: (id) =>\n request(\"DELETE\", `/api/v1/scene-actions/${encodeURIComponent(id)}`),\n },\n media: {\n uploadUrl: (req) =>\n request(\"POST\", \"/api/v1/media/upload-url\", { body: req }),\n register: (req) =>\n request(\"POST\", \"/api/v1/media/register\", { body: req }),\n transcode: (req) =>\n request(\"POST\", \"/api/v1/media/transcode\", { body: req }),\n playUrl: (id, opts) =>\n request(\"GET\", `/api/v1/media/${encodeURIComponent(id)}/play`, opts),\n sourceUrl: (id, opts) =>\n request(\"GET\", `/api/v1/media/${encodeURIComponent(id)}/source-url`, opts),\n },\n watch: {\n sceneMap: (storyId, opts) =>\n request(\"GET\", `/api/v1/stories/${encodeURIComponent(storyId)}/scene-map`, opts),\n trackEngagement: (storyId, req) =>\n request(\"POST\", `/api/v1/stories/${encodeURIComponent(storyId)}/engagement`, { body: req }),\n saveBookmark: (storyId, req) =>\n request(\"POST\", `/api/v1/stories/${encodeURIComponent(storyId)}/bookmark`, { body: req }),\n listBookmarks: (storyId, opts) =>\n request(\"GET\", `/api/v1/stories/${encodeURIComponent(storyId)}/bookmarks`, opts),\n },\n user: {\n profile: (opts) => request(\"GET\", \"/api/v1/user/profile\", opts),\n publicProfile: (userId, opts) =>\n request(\"GET\", `/api/v1/users/${encodeURIComponent(userId)}/public`, opts),\n updateRealm: (req) => request(\"PUT\", \"/api/v1/user/realm\", { body: req }),\n updateLocale: (req) => request(\"PUT\", \"/api/v1/user/locale\", { body: req }),\n updateProfile: (req) => request(\"PUT\", \"/api/v1/user/profile\", { body: req }),\n usernameAvailability: (username, opts) =>\n request(\"GET\", \"/api/v1/user/username-availability\", {\n signal: opts?.signal,\n query: { username },\n }),\n },\n credits: {\n balance: (opts) => request(\"GET\", \"/api/v1/credits/balance\", opts),\n ledger: (opts) =>\n request(\"GET\", \"/api/v1/credits/ledger\", {\n signal: opts?.signal,\n query: opts?.pool ? { pool: opts.pool } : undefined,\n }),\n packs: (opts) => request(\"GET\", \"/api/v1/credits/packs\", opts),\n uploadCost: (fileSize, opts) =>\n request(\"GET\", \"/api/v1/credits/upload-cost\", {\n signal: opts?.signal,\n query: { file_size: fileSize },\n }),\n purchase: (req) =>\n request(\"POST\", \"/api/v1/credits/purchase\", { body: req }),\n purchaseAmount: (req) =>\n request(\"POST\", \"/api/v1/credits/purchase-amount\", { body: req }),\n unlockScene: (sceneId, opts) =>\n request(\"POST\", `/api/v1/scenes/${encodeURIComponent(sceneId)}/unlock`, opts),\n },\n payments: {\n list: (opts) => request(\"GET\", \"/api/v1/payments/methods\", opts),\n store: (req) =>\n request(\"POST\", \"/api/v1/payments/methods\", { body: req }),\n remove: (paymentMethodId) =>\n request(\"DELETE\", `/api/v1/payments/methods/${encodeURIComponent(paymentMethodId)}`),\n setDefault: (paymentMethodId) =>\n request(\n \"POST\",\n `/api/v1/payments/methods/${encodeURIComponent(paymentMethodId)}/default`,\n ),\n },\n admin: {\n credits: {\n grant: (req) =>\n request(\"POST\", \"/api/v1/admin/credits/grant\", { body: req }),\n },\n },\n ai: {\n generateImage: (req) =>\n request(\"POST\", \"/api/v1/ai/generate-image\", { body: req }),\n show: (id, opts) =>\n request(\"GET\", `/api/v1/ai/generations/${encodeURIComponent(id)}`, opts),\n accept: (id, req) =>\n request(\"POST\", `/api/v1/ai/generations/${encodeURIComponent(id)}/accept`, { body: req }),\n reject: (id, req) =>\n request(\"POST\", `/api/v1/ai/generations/${encodeURIComponent(id)}/reject`, { body: req }),\n storyStyle: (storyId, opts) =>\n request(\"GET\", `/api/v1/ai/stories/${encodeURIComponent(storyId)}/style`, opts),\n storyEstimate: (req) =>\n request(\"POST\", \"/api/v1/ai/story/estimate\", { body: req }),\n storyGenerate: (req) =>\n request(\"POST\", \"/api/v1/ai/story/generate\", { body: req }),\n sceneEstimate: (req) =>\n request(\"POST\", `/api/v1/ai/stories/${encodeURIComponent(req.story_id)}/scene/estimate`, {\n body: { brief: req.brief, mode: req.mode, scene_id: req.scene_id },\n }),\n sceneGenerate: (req) =>\n request(\"POST\", `/api/v1/ai/stories/${encodeURIComponent(req.story_id)}/scene/generate`, {\n body: { brief: req.brief, mode: req.mode, scene_id: req.scene_id },\n }),\n },\n };\n}\n","/**\n * Input abstraction. Pointer / touch / D-pad / accessibility nav all emit\n * the *same* `IntentEvent` stream. Realm components and the navigation rig\n * consume intents only — they never know which physical device produced\n * them.\n *\n * This is the load-bearing primitive for cross-platform UX: the TV D-pad\n * does focus-snap, the mouse does free flight, but both speak `MOVE`.\n */\n\nexport const Intent = {\n /** Free-flight delta (pointer/touch) OR discrete direction-snap (dpad). */\n MOVE: \"MOVE\",\n /** Engage the focused atom — open the player / detail view. */\n ENGAGE: \"ENGAGE\",\n /** Pop one level (close detail, exit search, leave realm-switcher). */\n BACK: \"BACK\",\n /** Open filter / search overlay. */\n FILTER: \"FILTER\",\n /** Hold-to-peek: preview detail without committing to ENGAGE. */\n PEEK: \"PEEK\",\n /** Pull camera back to a wider zoom level. */\n ZOOM_OUT: \"ZOOM_OUT\",\n /** Push camera forward to a tighter zoom level. */\n ZOOM_IN: \"ZOOM_IN\",\n /** Move focus to next/prev atom in current group (sibling cycling). */\n CYCLE_NEXT: \"CYCLE_NEXT\",\n CYCLE_PREV: \"CYCLE_PREV\",\n /** Auto-tour: fly between matches/recommendations hands-free. */\n TOUR_START: \"TOUR_START\",\n TOUR_STOP: \"TOUR_STOP\",\n} as const;\n\nexport type IntentName = (typeof Intent)[keyof typeof Intent];\n\nexport type InputMode = \"pointer\" | \"touch\" | \"dpad\" | \"a11y\";\n\nexport type Direction = \"up\" | \"down\" | \"left\" | \"right\";\n\nexport interface IntentEvent {\n intent: IntentName;\n /** For pointer/touch MOVE: continuous look/thrust delta in normalized units. */\n delta?: { x: number; y: number; z?: number };\n /** For ZOOM_IN/ZOOM_OUT: amount in normalized units. */\n amount?: number;\n /** For dpad MOVE: discrete direction. */\n direction?: Direction;\n /** Which physical device produced this intent. */\n source: InputMode;\n /** performance.now() at emission, for timing-sensitive consumers. */\n at: number;\n}\n\n/**\n * Bridge between a physical input (pointerlock, touch handlers, key events,\n * D-pad on remote, screen reader) and the realm's nav rig. Implementations\n * own their own listeners; consumers only subscribe.\n */\nexport interface IntentSource {\n subscribe(handler: (e: IntentEvent) => void): () => void;\n /** Begin listening to the underlying physical input (called by host). */\n start?(): void;\n /** Tear down listeners (called when realm or app unmounts). */\n stop?(): void;\n}\n\n/**\n * Compose multiple sources into one. Useful for surfaces that accept both\n * pointer and gamepad input simultaneously (e.g. desktop dev mode).\n */\nexport function mergeIntentSources(...sources: IntentSource[]): IntentSource {\n return {\n subscribe(handler) {\n const unsubs = sources.map((s) => s.subscribe(handler));\n return () => unsubs.forEach((u) => u());\n },\n start() {\n sources.forEach((s) => s.start?.());\n },\n stop() {\n sources.forEach((s) => s.stop?.());\n },\n };\n}\n","import type { RealmId, StoryListItem } from \"../types/index.js\";\n\n/**\n * Realm rendering contract. Each realm (cosmos, wilds, future depths/etc)\n * implements this interface and ships as a self-contained subpath module\n * (`@chuzi/shared/realms/cosmos`, `@chuzi/shared/realms/wilds`, ...).\n *\n * Apps don't import realms directly — they read `user.realm`, then dynamic-\n * import the matching module. Adding a new realm is a one-package change\n * with zero modifications to app code.\n *\n * The `Component` generic is left abstract so this contract works for any\n * renderer. Web/TV apps satisfy it with `React.ComponentType`; React Native\n * apps satisfy it with their own component type. chuzi-shared itself stays\n * dependency-free.\n */\n\n/** State badge applied to an atom regardless of realm. Realms render it\n * in their own visual language (orbit ring, marker post, glow, etc.). */\nexport type AtomState = \"default\" | \"watched\" | \"bookmarked\" | \"in_progress\" | \"new\";\n\n/** Continuous zoom levels. Camera flies smoothly between them; LOD swaps\n * geometry/asset quality as it crosses thresholds. */\nexport type ZoomLevel = \"overview\" | \"sector\" | \"atom\";\n\nexport interface AtomVisualProps {\n /** Position in realm-space (the realm decides the coordinate convention). */\n position: [number, number, number];\n /** Relative scale, 0–1 normalized. Realms map this to height/girth/etc. */\n scale: number;\n /** Realm-interpretable hue, 0–360. Cosmos: stellar class. Wilds: foliage. */\n hue: number;\n /** Realm-interpretable intensity, 0–1. Cosmos: luminosity. Wilds: density. */\n intensity: number;\n /** Cross-realm state badge. */\n state: AtomState;\n /** Pass-through metadata for realm-specific rendering. */\n metadata: {\n title: string;\n runtime?: number;\n popularity?: number;\n mood?: string;\n genre?: string | null;\n };\n}\n\nexport type AtomMapping = (film: StoryListItem) => AtomVisualProps;\n\nexport interface AudioPalette {\n /** Looping ambient bed (deep-space rumble, forest wind, ocean swell, ...). */\n ambientLoop?: string;\n /** Plays when focus moves to a new atom. */\n focusChime?: string;\n /** Plays during the engage transition into the player. */\n engageImpact?: string;\n /** Plays during the back transition out of the player. */\n backWhoosh?: string;\n}\n\nexport interface MotionTokens {\n /** Free-flight responsiveness (pointer/touch). */\n flightAcceleration: number;\n flightDamping: number;\n /** D-pad / focus-snap easing duration in ms. */\n focusEaseMs: number;\n /** Length of the engage transition (atom → player) in ms. */\n engageDurationMs: number;\n /** Length of the back transition (player → atom) in ms. Should equal\n * engageDurationMs by default — symmetric transitions feel grounded. */\n backDurationMs: number;\n}\n\n/** A geometric atom in realm-space, used by `focusSnap` to compute the\n * best neighbor in a given direction. Realms get the bare minimum and\n * decide how to weight (e.g. cosmos prefers angular alignment, wilds\n * prefers walking distance along the floor plane). */\nexport interface AtomLocation {\n id: string;\n position: [number, number, number];\n}\n\nexport type FocusSnap = (\n currentId: string,\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n atoms: AtomLocation[],\n) => string | null;\n\n/**\n * The full realm module. `Component` is whatever component type the host\n * renderer expects (see file-level doc).\n */\nexport interface RealmModule<Component = unknown> {\n id: RealmId;\n\n /** The environment: skybox / canopy / ocean / city. */\n World: Component;\n /** A single film embodied (Star, Tree, Bioluminescent organism, ...). */\n Atom: Component;\n /** A curated grouping (Constellation, Grove, Reef, ...). */\n Group: Component;\n /** Camera + motion controller. Receives an `IntentSource` prop and\n * maps intents to realm-specific motion. */\n NavRig: Component;\n /** The signature transition: atom expands to fill the screen and\n * hands off to the player surface. Reverses on close. */\n EngageTransition: Component;\n\n /** Maps shared catalog data → realm-specific visual props. */\n mapping: AtomMapping;\n\n /** Realm-specific audio bed and stingers. */\n audio: AudioPalette;\n\n /** Realm-specific timing/easing constants. */\n motion: MotionTokens;\n\n /** D-pad neighbor selection algorithm. Realms own the spatial weighting. */\n focusSnap: FocusSnap;\n}\n\n/**\n * Default focus-snap implementation: pick the atom closest to a 60°\n * directional cone from the current atom. Realms can replace this when\n * their geometry calls for different weighting.\n */\nexport function defaultFocusSnap(\n currentId: string,\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n atoms: AtomLocation[],\n): string | null {\n const current = atoms.find((a) => a.id === currentId);\n if (!current) return null;\n\n const dirVec: [number, number] =\n direction === \"left\" ? [-1, 0]\n : direction === \"right\" ? [1, 0]\n : direction === \"up\" ? [0, 1]\n : [0, -1];\n\n let best: { id: string; score: number } | null = null;\n for (const a of atoms) {\n if (a.id === currentId) continue;\n const dx = a.position[0] - current.position[0];\n const dy = a.position[1] - current.position[1];\n const dist = Math.hypot(dx, dy);\n if (dist === 0) continue;\n const dot = (dx * dirVec[0] + dy * dirVec[1]) / dist;\n // Cone of acceptance: dot > 0.5 ≈ within 60° of direction.\n if (dot < 0.5) continue;\n // Score: closer is better, more aligned is better.\n const score = dist / Math.max(dot, 0.001);\n if (!best || score < best.score) best = { id: a.id, score };\n }\n return best?.id ?? null;\n}\n","import type { SceneChoice, SceneListItem, TextLine } from \"./types/index.js\";\n\n/** Playhead position where timed content is fully visible (after fade-in). */\nexport function previewMsWhenVisible(timing: {\n appear_at_ms: number;\n fade_in_ms: number;\n}): number {\n return timing.appear_at_ms + timing.fade_in_ms;\n}\n\nexport interface ChoiceTiming {\n appear_at_ms: number;\n fade_in_ms: number;\n duration_ms: number;\n fade_out_ms: number;\n}\n\nexport function resolveChoiceTiming(\n choice: SceneChoice,\n fallbackAppearMs: number,\n): ChoiceTiming {\n const appearMs =\n choice.start_time_seconds != null\n ? Math.round(choice.start_time_seconds * 1000)\n : fallbackAppearMs;\n const fadeIn = choice.fade_in_ms ?? 400;\n const fadeOut = choice.fade_out_ms ?? 400;\n const endMs =\n choice.end_time_seconds != null\n ? Math.round(choice.end_time_seconds * 1000)\n : appearMs + fadeIn + (choice.duration_ms ?? 2000) + fadeOut;\n const duration =\n choice.duration_ms ?? Math.max(500, endMs - appearMs - fadeIn - fadeOut);\n return {\n appear_at_ms: appearMs,\n fade_in_ms: fadeIn,\n duration_ms: duration,\n fade_out_ms: fadeOut,\n };\n}\n\nfunction lineHasVisiblePayload(line: TextLine): boolean {\n if (line.type === \"sound\" || line.type === \"image\") {\n return Boolean(line.media_id);\n }\n return line.html.replace(/<[^>]*>/g, \"\").trim().length > 0;\n}\n\nfunction fallbackAppearMsFromLines(lines: TextLine[]): number {\n if (lines.length === 0) return 0;\n const last = lines[lines.length - 1];\n return previewMsWhenVisible(last) + last.duration_ms;\n}\n\n/**\n * Pick the playhead instant where the most scene content is on screen —\n * text lines, choices, and other timed elements at full opacity.\n */\nexport function computeScenePreviewMs(\n scene: SceneListItem,\n choices: SceneChoice[],\n textLines: TextLine[],\n): number {\n const fallback = fallbackAppearMsFromLines(textLines);\n const candidates: number[] = [0];\n\n for (const line of textLines) {\n if (lineHasVisiblePayload(line)) {\n candidates.push(previewMsWhenVisible(line));\n }\n }\n\n for (const choice of choices) {\n if (choice.label.trim().length > 0 || choice.target_scene_id) {\n candidates.push(previewMsWhenVisible(resolveChoiceTiming(choice, fallback)));\n }\n }\n\n return Math.max(...candidates);\n}\n\nexport function isLikelyImageUrl(url: string, mediaType?: string | null): boolean {\n if (mediaType?.startsWith(\"image/\")) return true;\n return /\\.(png|jpe?g|gif|webp|avif)(\\?|$)/i.test(url);\n}\n\nexport function isLikelyVideoUrl(url: string, mediaType?: string | null): boolean {\n if (mediaType?.startsWith(\"video/\")) return true;\n return /\\.(mp4|webm|mov|m3u8)(\\?|$)/i.test(url);\n}\n"]}
1
+ {"version":3,"sources":["../src/types/index.ts","../src/config/credits.ts","../src/config/chuzi-ai-prompts.ts","../src/config/index.ts","../src/themes/index.ts","../src/api/index.ts","../src/input/index.ts","../src/realms/index.ts","../src/scene-preview.ts"],"names":[],"mappings":";AAg1BO,SAAS,sBAAA,CACd,WACA,IAAA,EACmB;AACnB,EAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,UAAA,EAAY;AACrC,IAAA,OAAO,SAAA,CAAU,IAAI,OAAO,EAAE,WAAW,IAAA,EAAM,MAAA,EAAQ,OAAM,CAAE,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC/B,WAAW,KAAA,CAAM,QAAA;AAAA,IACjB,MAAA,EAAQ,CAAC,KAAA,CAAM;AAAA,GACjB,CAAE,CAAA;AACJ;;;ACp1BO,IAAM,qBAAA,GAAoD;AAAA,EAC/D,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ;AACV;AAEO,IAAM,kBAAA,GAAiD;AAAA,EAC5D,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ;AACV;AAEO,SAAS,uBAAuB,IAAA,EAA0B;AAC/D,EAAA,OAAO,mBAAmB,IAAI,CAAA;AAChC;AAEO,SAAS,oBAAA,CAAqB,MAAkB,OAAA,EAAyB;AAC9E,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA,GAAI,sBAAsB,IAAI,CAAA;AAC1D;AAEO,SAAS,kBAAkB,KAAA,EAAuB;AACvD,EAAA,OAAO,CAAA,CAAA,EAAA,CAAK,KAAA,GAAQ,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACrC;;;AChBO,IAAM,qBAAA,GAA6C;AAAA,EACxD;AAAA,IACE,GAAA,EAAK,aAAA;AAAA,IACL,aAAA,EAAe,2BAAA;AAAA,IACf,YAAA,EAAc,gCAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,GAAA,EAAK,SAAA;AAAA,IACL,aAAA,EAAe,uBAAA;AAAA,IACf,YAAA,EAAc,4BAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,GAAA,EAAK,UAAA;AAAA,IACL,aAAA,EAAe,wBAAA;AAAA,IACf,YAAA,EAAc,6BAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,GAAA,EAAK,SAAA;AAAA,IACL,aAAA,EAAe,uBAAA;AAAA,IACf,YAAA,EAAc,4BAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA;AAAA,IACE,GAAA,EAAK,MAAA;AAAA,IACL,aAAA,EAAe,oBAAA;AAAA,IACf,YAAA,EAAc,yBAAA;AAAA,IACd,QAAA,EAAU;AAAA;AAEd;;;AC/BO,IAAM,SAAA,GAAgC,CAAC,QAAA,EAAU,OAAO;AAExD,IAAM,iBAAA,GAAyC;AAAA,EACpD,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF;AAEO,IAAM,aAAA,GAA0C;AAAA,EACrD,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,YAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAEO,IAAM,cAAA,GAA2B;AAGxC,IAAI,+BAAsD,EAAC;AAEpD,SAAS,wBAAA,GAAkD;AAChE,EAAA,OAAO;AAAA,IACL,QAAQ,4BAAA,CAA6B,MAAA,GACjC,EAAE,GAAG,4BAAA,CAA6B,QAAO,GACzC,MAAA;AAAA,IACJ,OAAO,4BAAA,CAA6B,KAAA,GAChC,EAAE,GAAG,4BAAA,CAA6B,OAAM,GACxC;AAAA,GACN;AACF;AAEO,SAAS,yBAAyB,SAAA,EAAwC;AAC/E,EAAA,4BAAA,GAA+B;AAAA,IAC7B,QAAQ,SAAA,CAAU,MAAA,GAAS,EAAE,GAAG,SAAA,CAAU,QAAO,GAAI,MAAA;AAAA,IACrD,OAAO,SAAA,CAAU,KAAA,GAAQ,EAAE,GAAG,SAAA,CAAU,OAAM,GAAI;AAAA,GACpD;AACF;AAEO,SAAS,kBAAkB,KAAA,EAAmC;AACnE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,iBAAA,CAAkB,SAAS,KAAiB,CAAA;AAEhD;AAMO,SAAS,gBAAgB,KAAA,EAAmD;AACjF,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,WAAA,EAAY,CAAE,IAAA,EAAK;AACvC,EAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG,OAAO,KAAA;AACrC,EAAA,MAAM,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,CAAC,EAAE,CAAC,CAAA;AACrC,EAAA,OAAO,iBAAA,CAAkB,IAAI,CAAA,GAAI,IAAA,GAAO,IAAA;AAC1C;AAMO,SAAS,oBACd,MAAA,EACiB;AACjB,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,OAAO,MAAA,CACV,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,IAAA,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,CAAA;AAC9C,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,CAAE,UAAA,CAAW,IAAI,CAAC,CAAA;AAC3D,IAAA,MAAM,CAAA,GAAI,MAAA,GAAS,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,IAAK,CAAA,GAAI,CAAA;AAC3D,IAAA,OAAO,EAAE,GAAA,EAAK,GAAA,CAAI,IAAA,IAAQ,CAAA,EAAE;AAAA,EAC9B,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,CAAE,GAAA,KAAQ,GAAG,CAAA,CACpC,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA,GAAI,EAAE,CAAC,CAAA;AAE3B,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,CAAA,CAAE,GAAG,CAAA;AACxC,IAAA,IAAI,YAAY,OAAO,UAAA;AAAA,EACzB;AACA,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,kBAAA,GAA+C;AAAA,EAC1D,GAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF;AAEO,IAAM,eAAA,GAAkE;AAAA,EAC7E,CAAA,EAAG;AAAA,IACD,EAAA,EAAI,GAAA;AAAA,IACJ,KAAA,EAAO,GAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,EAAA,EAAI;AAAA,IACF,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,IAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAA,EAAI,OAAA;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,CAAA,EAAG;AAAA,IACD,EAAA,EAAI,GAAA;AAAA,IACJ,KAAA,EAAO,GAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAA,EAAI,OAAA;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,WAAA,EAAa;AAAA;AAEjB;AAEO,SAAS,gBAAgB,KAAA,EAAwC;AACtE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,kBAAA,CAAmB,SAAS,KAAsB,CAAA;AACxF;AAEO,IAAM,MAAA,GAA2C;AAAA,EACtD,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAa,QAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,QAAA;AAAA,MACP,KAAA,EAAO,aAAA;AAAA,MACP,KAAA,EAAO,QAAA;AAAA,MACP,YAAA,EAAc,YAAA;AAAA,MACd,IAAA,EAAM,QAAA;AAAA,MACN,gBAAA,EAAkB,YAAA;AAAA,MAClB,eAAA,EAAiB,cAAA;AAAA,MACjB,qBAAA,EAAuB,MAAA;AAAA,MACvB,MAAA,EAAQ,SAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,YAAA,EAAc,iBAAA;AAAA,MACd,aAAA,EAAe,kBAAA;AAAA,MACf,MAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAS,QAAA;AAAA,MACT,qBAAA,EAAuB,aAAA;AAAA,MACvB,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,WAAA;AAAA,MACZ,WAAA,EAAa,YAAA;AAAA,MACb,UAAA,EAAY,iBAAA;AAAA,MACZ,cAAA,EAAgB,sBAAA;AAAA,MAChB,aAAA,EAAe,gBAAA;AAAA,MACf,YAAA,EAAc,SAAA;AAAA,MACd,aAAA,EAAe,cAAA;AAAA,MACf,gBAAA,EAAkB,mBAAA;AAAA,MAClB,aAAA,EAAe,eAAA;AAAA,MACf,KAAA,EAAO,OAAA;AAAA,MACP,aAAA,EAAe,+BAAA;AAAA,MACf,WAAA,EAAa,4BAAA;AAAA,MACb,iBAAA,EAAmB,0CAAA;AAAA,MACnB,oBAAA,EAAsB,mCAAA;AAAA,MACtB,sBAAA,EAAwB,yBAAA;AAAA,MACxB,iBAAA,EAAmB,iBAAA;AAAA,MACnB,gBAAA,EAAkB,aAAA;AAAA,MAClB,sBAAA,EAAwB,mBAAA;AAAA,MACxB,YAAA,EAAc,eAAA;AAAA,MACd,gBAAA,EAAkB,QAAA;AAAA,MAClB,iBAAA,EAAmB,oBAAA;AAAA,MACnB,mBAAA,EAAqB,QAAA;AAAA,MACrB,iBAAA,EAAmB,oBAAA;AAAA,MACnB,cAAA,EAAgB,gBAAA;AAAA,MAChB,yBAAA,EAA2B,gBAAA;AAAA,MAC3B,qBAAA,EAAuB,uBAAA;AAAA,MACvB,OAAA,EAAS,cAAA;AAAA,MACT,cAAA,EAAgB,YAAA;AAAA,MAChB,eAAA,EAAiB,UAAA;AAAA,MACjB,mBAAA,EAAqB,qBAAA;AAAA,MACrB,oBAAA,EAAsB,sBAAA;AAAA,MACtB,gBAAA,EAAkB,SAAA;AAAA,MAClB,cAAA,EAAgB,SAAA;AAAA,MAChB,qBAAA,EAAuB,eAAA;AAAA,MACvB,kBAAA,EAAoB,OAAA;AAAA,MACpB,iBAAA,EAAmB,mBAAA;AAAA,MACnB,sBAAA,EAAwB,kCAAA;AAAA,MACxB,mBAAA,EAAqB,KAAA;AAAA,MACrB,WAAA,EAAa,QAAA;AAAA,MACb,YAAA,EAAc,MAAA;AAAA,MACd,iBAAA,EAAmB,gBAAA;AAAA,MACnB,iBAAA,EAAmB,YAAA;AAAA,MACnB,WAAA,EAAa,MAAA;AAAA,MACb,eAAA,EAAiB,0BAAA;AAAA,MACjB,gBAAA,EAAkB,oBAAA;AAAA,MAClB,iBAAA,EAAmB,wBAAA;AAAA,MACnB,iBAAA,EAAmB,WAAA;AAAA,MACnB,WAAA,EAAa,SAAA;AAAA,MACb,aAAA,EAAe,OAAA;AAAA,MACf,mBAAA,EAAqB,cAAA;AAAA,MACrB,yBAAA,EAA2B,kBAAA;AAAA,MAC3B,wBAAA,EAA0B,YAAA;AAAA,MAC1B,uBAAA,EAAyB,cAAA;AAAA,MACzB,2BAAA,EAA6B,wBAAA;AAAA,MAC7B,0BAAA,EAA4B,yCAAA;AAAA,MAC5B,kBAAA,EAAoB,UAAA;AAAA,MACpB,eAAA,EAAiB,iBAAA;AAAA,MACjB,aAAA,EAAe,UAAA;AAAA,MACf,oBAAA,EAAsB,sBAAA;AAAA,MACtB,sBAAA,EAAwB,sBAAA;AAAA,MACxB,cAAA,EAAgB,sEAAA;AAAA,MAChB,gBAAA,EAAkB,MAAA;AAAA,MAClB,aAAA,EAAe,MAAA;AAAA,MACf,aAAA,EAAe,MAAA;AAAA,MACf,qBAAA,EAAuB,QAAA;AAAA,MACvB,iBAAA,EAAmB,gBAAA;AAAA,MACnB,wBAAA,EAA0B,0BAAA;AAAA,MAC1B,qBAAA,EAAuB,wBAAA;AAAA,MACvB,iBAAA,EAAmB,gBAAA;AAAA,MACnB,mBAAA,EAAqB,kBAAA;AAAA,MACrB,iBAAA,EAAmB,WAAA;AAAA,MACnB,kBAAA,EAAoB,YAAA;AAAA,MACpB,qBAAA,EAAuB,YAAA;AAAA,MACvB,sBAAA,EAAwB,eAAA;AAAA,MACxB,mBAAA,EAAqB,sBAAA;AAAA,MACrB,qBAAA,EAAuB,gDAAA;AAAA,MACvB,cAAA,EAAgB,aAAA;AAAA,MAChB,iBAAA,EAAmB,uBAAA;AAAA,MACnB,qBAAA,EAAuB,4BAAA;AAAA,MACvB,wBAAA,EAA0B,6BAAA;AAAA,MAC1B,oBAAA,EAAsB,iBAAA;AAAA,MACtB,yBAAA,EAA2B,gHAAA;AAAA,MAC3B,2BAAA,EAA6B,mFAAA;AAAA,MAC7B,gCAAA,EAAkC,gEAAA;AAAA,MAClC,2BAAA,EAA6B,cAAA;AAAA,MAC7B,8BAAA,EAAgC,eAAA;AAAA,MAChC,yBAAA,EAA2B,aAAA;AAAA,MAC3B,8BAAA,EAAgC,sFAAA;AAAA,MAChC,qBAAA,EAAuB,SAAA;AAAA,MACvB,0BAAA,EAA4B,kFAAA;AAAA,MAC5B,sBAAA,EAAwB,UAAA;AAAA,MACxB,2BAAA,EAA6B,oDAAA;AAAA,MAC7B,qBAAA,EAAuB,SAAA;AAAA,MACvB,0BAAA,EAA4B,0EAAA;AAAA,MAC5B,kBAAA,EAAoB,aAAA;AAAA,MACpB,uBAAA,EAAyB,oFAAA;AAAA,MACzB,sBAAA,EAAwB,sCAAA;AAAA,MACxB,uBAAA,EAAyB,0BAAA;AAAA,MACzB,qBAAA,EAAuB,+BAAA;AAAA,MACvB,sBAAA,EAAwB,0CAAA;AAAA,MACxB,oBAAA,EAAsB,wCAAA;AAAA,MACtB,wBAAA,EAA0B,0BAAA;AAAA,MAC1B,sBAAA,EAAwB,6BAAA;AAAA,MACxB,sBAAA,EAAwB,qCAAA;AAAA,MACxB,wBAAA,EAA0B,yCAAA;AAAA,MAC1B,wBAAA,EAA0B,2BAAA;AAAA,MAC1B,kBAAA,EAAoB,uBAAA;AAAA,MACpB,oBAAA,EAAsB,2BAAA;AAAA,MACtB,uBAAA,EAAyB,yCAAA;AAAA,MACzB,wBAAA,EAA0B,0CAAA;AAAA,MAC1B,yBAAA,EAA2B,uCAAA;AAAA,MAC3B,gBAAA,EAAkB,mBAAA;AAAA,MAClB,gBAAA,EAAkB,eAAA;AAAA,MAClB,eAAA,EAAiB,YAAA;AAAA,MACjB,yBAAA,EAA2B,kCAAA;AAAA,MAC3B,qBAAA,EAAuB,uBAAA;AAAA,MACvB,oBAAA,EAAsB,qBAAA;AAAA,MACtB,mBAAA,EAAqB,4DAAA;AAAA,MACrB,yBAAA,EAA2B,2CAAA;AAAA,MAC3B,4BAAA,EAA8B,gBAAA;AAAA,MAC9B,0BAAA,EAA4B,OAAA;AAAA,MAC5B,yBAAA,EAA2B,kDAAA;AAAA,MAC3B,uBAAA,EAAyB,kBAAA;AAAA,MACzB,oBAAA,EAAsB,eAAA;AAAA,MACtB,uBAAA,EAAyB,oBAAA;AAAA,MACzB,6BAAA,EAA+B,uBAAA;AAAA,MAC/B,yBAAA,EAA2B,uBAAA;AAAA,MAC3B,yBAAA,EAA2B,kBAAA;AAAA,MAC3B,sBAAA,EAAwB,gBAAA;AAAA,MACxB,oBAAA,EAAsB,yCAAA;AAAA,MACtB,qBAAA,EAAuB,SAAA;AAAA,MACvB,6BAAA,EAA+B,gDAAA;AAAA,MAC/B,0BAAA,EAA4B,sBAAA;AAAA,MAC5B,qBAAA,EAAuB,cAAA;AAAA,MACvB,gBAAA,EAAkB,kCAAA;AAAA,MAClB,qBAAA,EAAuB,iDAAA;AAAA,MACvB,mBAAA,EAAqB,qBAAA;AAAA,MACrB,qBAAA,EAAuB,4BAAA;AAAA,MACvB,sBAAA,EAAwB,MAAA;AAAA,MACxB,yBAAA,EAA2B,SAAA;AAAA,MAC3B,sBAAA,EAAwB,MAAA;AAAA,MACxB,wBAAA,EAA0B,SAAA;AAAA,MAC1B,6BAAA,EAA+B,6BAAA;AAAA,MAC/B,yBAAA,EAA2B,WAAA;AAAA,MAC3B,sBAAA,EAAwB,MAAA;AAAA,MACxB,uBAAA,EAAyB,YAAA;AAAA,MACzB,4BAAA,EAA8B,YAAA;AAAA,MAC9B,uBAAA,EAAyB,8BAAA;AAAA,MACzB,eAAA,EAAiB,UAAA;AAAA,MACjB,yBAAA,EAA2B,oBAAA;AAAA,MAC3B,wBAAA,EAA0B,QAAA;AAAA,MAC1B,kBAAA,EAAoB,MAAA;AAAA,MACpB,uBAAA,EAAyB,oCAAA;AAAA,MACzB,yBAAA,EAA2B,0BAAA;AAAA,MAC3B,yBAAA,EAA2B,yBAAA;AAAA,MAC3B,qBAAA,EAAuB,YAAA;AAAA,MACvB,mBAAA,EAAqB,SAAA;AAAA,MACrB,oBAAA,EAAsB,UAAA;AAAA,MACtB,oBAAA,EAAsB,UAAA;AAAA,MACtB,mBAAA,EAAqB,gBAAA;AAAA,MACrB,sBAAA,EAAwB,SAAA;AAAA,MACxB,kBAAA,EAAoB,0BAAA;AAAA,MACpB,2BAAA,EAA6B,eAAA;AAAA,MAC7B,4BAAA,EAA8B,gBAAA;AAAA,MAC9B,4BAAA,EAA8B,SAAA;AAAA,MAC9B,6BAAA,EAA+B,UAAA;AAAA,MAC/B,qBAAA,EAAuB,UAAA;AAAA,MACvB,oBAAA,EAAsB,SAAA;AAAA,MACtB,mBAAA,EAAqB,MAAA;AAAA,MACrB,oBAAA,EAAsB,OAAA;AAAA,MACtB,gCAAA,EAAkC,mCAAA;AAAA,MAClC,6BAAA,EAA+B,gCAAA;AAAA,MAC/B,iBAAA,EAAmB,WAAA;AAAA,MACnB,qBAAA,EAAuB,uBAAA;AAAA,MACvB,iBAAA,EAAmB,gBAAA;AAAA,MACnB,iBAAA,EAAmB,aAAA;AAAA,MACnB,qBAAA,EAAuB,4CAAA;AAAA,MACvB,oBAAA,EAAsB,mBAAA;AAAA,MACtB,oBAAA,EAAsB,kBAAA;AAAA,MACtB,yBAAA,EAA2B,0DAAA;AAAA,MAC3B,gBAAA,EAAkB,MAAA;AAAA,MAClB,mBAAA,EAAqB,YAAA;AAAA,MACrB,oBAAA,EAAsB,YAAA;AAAA,MACtB,qBAAA,EAAuB,cAAA;AAAA,MACvB,2BAAA,EAA6B,qBAAA;AAAA,MAC7B,yBAAA,EAA2B,QAAA;AAAA,MAC3B,uBAAA,EAAyB,SAAA;AAAA,MACzB,0BAAA,EAA4B,SAAA;AAAA,MAC5B,mCAAA,EAAqC,4DAAA;AAAA,MACrC,kBAAA,EAAoB,MAAA;AAAA,MACpB,qBAAA,EAAuB,SAAA;AAAA,MACvB,wBAAA,EAA0B,sDAAA;AAAA,MAC1B,yBAAA,EAA2B,WAAA;AAAA,MAC3B,gBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,UAAA;AAAA,MACpB,mBAAA,EAAqB,QAAA;AAAA,MACrB,kBAAA,EAAoB,QAAA;AAAA,MACpB,oBAAA,EAAsB,SAAA;AAAA,MACtB,cAAA,EAAgB,4BAAA;AAAA,MAChB,gBAAA,EAAkB,sBAAA;AAAA,MAClB,YAAA,EAAc,MAAA;AAAA,MACd,eAAA,EAAiB,uBAAA;AAAA,MACjB,kBAAA,EAAoB,UAAA;AAAA,MACpB,kBAAA,EAAoB,QAAA;AAAA,MACpB,aAAA,EAAe,QAAA;AAAA,MACf,oBAAA,EAAsB,kBAAA;AAAA,MACtB,UAAA,EAAY,aAAA;AAAA,MACZ,gBAAA,EAAkB,0BAAA;AAAA,MAClB,UAAA,EAAY,oBAAA;AAAA,MACZ,aAAA,EAAe,sCAAA;AAAA,MACf,kBAAA,EAAoB,gBAAA;AAAA,MACpB,UAAA,EAAY,aAAA;AAAA,MACZ,SAAA,EAAW,WAAA;AAAA,MACX,sBAAA,EAAwB,qBAAA;AAAA,MACxB,mBAAA,EAAqB,MAAA;AAAA,MACrB,6BAAA,EAA+B,oCAAA;AAAA,MAC/B,sBAAA,EAAwB,kBAAA;AAAA,MACxB,2BAAA,EAA6B,MAAA;AAAA,MAC7B,4BAAA,EAA8B,kBAAA;AAAA,MAC9B,4BAAA,EAA8B,OAAA;AAAA,MAC9B,2BAAA,EACE,sHAAA;AAAA,MACF,4BAAA,EAA8B,SAAA;AAAA,MAC9B,uCAAA,EAAyC,oBAAA;AAAA,MACzC,2BAAA,EAA6B,YAAA;AAAA,MAC7B,uBAAA,EAAyB,QAAA;AAAA,MACzB,sBAAA,EAAwB,OAAA;AAAA,MACxB,qBAAA,EAAuB,MAAA;AAAA,MACvB,uBAAA,EAAyB,cAAA;AAAA,MACzB,8BAAA,EAAgC,mBAAA;AAAA,MAChC,4BAAA,EAA8B,aAAA;AAAA,MAC9B,0BAAA,EAA4B,kCAAA;AAAA,MAC5B,wBAAA,EAA0B,sCAAA;AAAA,MAC1B,wBAAA,EAA0B,OAAA;AAAA,MAC1B,8BAAA,EAAgC,OAAA;AAAA,MAChC,8BAAA,EAAgC,OAAA;AAAA,MAChC,+BAAA,EAAiC,QAAA;AAAA,MACjC,8BAAA,EAAgC,OAAA;AAAA,MAChC,oCAAA,EAAsC,aAAA;AAAA,MACtC,8BAAA,EAAgC,OAAA;AAAA,MAChC,uCAAA,EAAyC,gBAAA;AAAA,MACzC,8BAAA,EAAgC,OAAA;AAAA,MAChC,6BAAA,EAA+B,MAAA;AAAA,MAC/B,6BAAA,EAA+B,MAAA;AAAA,MAC/B,8BAAA,EAAgC,OAAA;AAAA,MAChC,iCAAA,EAAmC,UAAA;AAAA,MACnC,mCAAA,EAAqC,YAAA;AAAA,MACrC,sCAAA,EAAwC,eAAA;AAAA,MACxC,+BAAA,EAAiC,cAAA;AAAA,MACjC,wBAAA,EAA0B,OAAA;AAAA,MAC1B,6BAAA,EAA+B,yBAAA;AAAA,MAC/B,+BAAA,EAAiC,cAAA;AAAA,MACjC,+BAAA,EAAiC,cAAA;AAAA,MACjC,gCAAA,EAAkC,eAAA;AAAA,MAClC,iCAAA,EAAmC,wBAAA;AAAA,MACnC,+BAAA,EAAiC,gBAAA;AAAA,MACjC,6BAAA,EAA+B,YAAA;AAAA,MAC/B,+BAAA,EAAiC,cAAA;AAAA,MACjC,4BAAA,EAA8B,gDAAA;AAAA,MAC9B,2BAAA,EAA6B,mCAAA;AAAA,MAC7B,wBAAA,EACE,0GAAA;AAAA,MACF,wBAAA,EAA0B,eAAA;AAAA,MAC1B,+BAAA,EAAiC,+BAAA;AAAA,MACjC,8BAAA,EAAgC,sBAAA;AAAA,MAChC,4BAAA,EAA8B,WAAA;AAAA,MAC9B,yBAAA,EAA2B,QAAA;AAAA,MAC3B,oCAAA,EACE,8DAAA;AAAA,MACF,+BAAA,EAAiC,6BAAA;AAAA,MACjC,+BAAA,EAAiC,cAAA;AAAA,MACjC,mCAAA,EAAqC,YAAA;AAAA,MACrC,oCAAA,EACE,uCAAA;AAAA,MACF,kCAAA,EAAoC,oBAAA;AAAA,MACpC,mCAAA,EACE,8DAAA;AAAA,MACF,sBAAA,EAAwB,OAAA;AAAA,MACxB,+BAAA,EAAiC,UAAA;AAAA,MACjC,4BAAA,EAA8B,SAAA;AAAA,MAC9B,wBAAA,EAA0B,eAAA;AAAA,MAC1B,eAAA,EAAiB,SAAA;AAAA,MACjB,eAAA,EAAiB,SAAA;AAAA,MACjB,oBAAA,EAAsB,0CAAA;AAAA,MACtB,oBAAA,EAAsB,qCAAA;AAAA,MACtB,mBAAA,EAAqB,sBAAA;AAAA,MACrB,yBAAA,EAA2B,UAAA;AAAA,MAC3B,mBAAA,EAAqB,sBAAA;AAAA,MACrB,eAAA,EAAiB,eAAA;AAAA,MACjB,qBAAA,EAAuB,kCAAA;AAAA,MACvB,gBAAA,EAAkB,0BAAA;AAAA,MAClB,6BAAA,EAA+B,uBAAA;AAAA,MAC/B,kBAAA,EAAoB,2BAAA;AAAA,MACpB,yBAAA,EAA2B,6BAAA;AAAA,MAC3B,uBAAA,EAAyB,4BAAA;AAAA,MACzB,oBAAA,EACE,0DAAA;AAAA,MACF,2BAAA,EAA6B,yCAAA;AAAA,MAC7B,yBAAA,EAA2B,yBAAA;AAAA,MAC3B,wBAAA,EAA0B,2BAAA;AAAA,MAC1B,sBAAA,EAAwB,wCAAA;AAAA,MACxB,mBAAA,EAAqB,mBAAA;AAAA,MACrB,iBAAA,EAAmB,iBAAA;AAAA,MACnB,sBAAA,EAAwB,mCAAA;AAAA,MACxB,uBAAA,EAAyB,wBAAA;AAAA,MACzB,yBAAA,EAA2B,wDAAA;AAAA,MAC3B,sBAAA,EAAwB,uBAAA;AAAA,MACxB,2BAAA,EAA6B,sCAAA;AAAA,MAC7B,wCAAA,EAA0C,iBAAA;AAAA,MAC1C,mCAAA,EAAqC,YAAA;AAAA,MACrC,wCAAA,EAA0C,iBAAA;AAAA,MAC1C,8BAAA,EAAgC,aAAA;AAAA,MAChC,+BAAA,EAAiC,4BAAA;AAAA,MACjC,+BAAA,EAAiC,yBAAA;AAAA,MACjC,+BAAA,EAAiC,6BAAA;AAAA,MACjC,sCAAA,EAAwC,8BAAA;AAAA,MACxC,8BAAA,EAAgC,qBAAA;AAAA,MAChC,mCAAA,EAAqC;AAAA,KACvC;AAAA,IACA,OAAA,EAAS;AAAA,MACP,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAO,iBAAA;AAAA,QACP,KAAA,EAAO,SAAA;AAAA,QACP,YAAA,EAAc,aAAA;AAAA,QACd,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,eAAA;AAAA,QACT,MAAA,EAAQ,sBAAA;AAAA,QACR,OAAA,EAAS,QAAA;AAAA,QACT,OAAA,EAAS,iBAAA;AAAA,QACT,cAAA,EAAgB,+BAAA;AAAA,QAChB,iBAAA,EAAmB,uBAAA;AAAA,QACnB,sBAAA,EAAwB,+BAAA;AAAA,QACxB,YAAA,EAAc,qBAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AAAA,MACA,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAO,sBAAA;AAAA,QACP,KAAA,EAAO,YAAA;AAAA,QACP,YAAA,EAAc,aAAA;AAAA,QACd,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS,iBAAA;AAAA,QACT,MAAA,EAAQ,wBAAA;AAAA,QACR,OAAA,EAAS,QAAA;AAAA,QACT,OAAA,EAAS,eAAA;AAAA,QACT,cAAA,EAAgB,iCAAA;AAAA,QAChB,iBAAA,EAAmB,8BAAA;AAAA,QACnB,sBAAA,EAAwB,+BAAA;AAAA,QACxB,YAAA,EAAc,6BAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AAAA,MACA,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAO,aAAA;AAAA,QACP,KAAA,EAAO,QAAA;AAAA,QACP,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AAAA,MACA,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,YAAA;AAAA,QACP,KAAA,EAAO,iBAAA;AAAA,QACP,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS;AAAA;AACX;AACF,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,WAAA,EAAa,OAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,OAAA;AAAA,MACP,KAAA,EAAO,OAAA;AAAA,MACP,KAAA,EAAO,UAAA;AAAA,MACP,YAAA,EAAc,OAAA;AAAA,MACd,IAAA,EAAM,MAAA;AAAA,MACN,gBAAA,EAAkB,OAAA;AAAA,MAClB,eAAA,EAAiB,OAAA;AAAA,MACjB,qBAAA,EAAuB,UAAA;AAAA,MACvB,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,QAAA;AAAA,MACT,YAAA,EAAc,aAAA;AAAA,MACd,aAAA,EAAe,cAAA;AAAA,MACf,MAAA,EAAQ,WAAA;AAAA,MACR,OAAA,EAAS,OAAA;AAAA,MACT,qBAAA,EAAuB,gBAAA;AAAA,MACvB,OAAA,EAAS,OAAA;AAAA,MACT,UAAA,EAAY,aAAA;AAAA,MACZ,WAAA,EAAa,QAAA;AAAA,MACb,UAAA,EAAY,YAAA;AAAA,MACZ,cAAA,EAAgB,gBAAA;AAAA,MAChB,aAAA,EAAe,eAAA;AAAA,MACf,YAAA,EAAc,WAAA;AAAA,MACd,aAAA,EAAe,QAAA;AAAA,MACf,gBAAA,EAAkB,kBAAA;AAAA,MAClB,aAAA,EAAe,cAAA;AAAA,MACf,KAAA,EAAO,OAAA;AAAA,MACP,aAAA,EAAe,kCAAA;AAAA,MACf,WAAA,EAAa,uBAAA;AAAA,MACb,iBAAA,EAAmB,oCAAA;AAAA,MACnB,oBAAA,EAAsB,kCAAA;AAAA,MACtB,sBAAA,EAAwB,gBAAA;AAAA,MACxB,iBAAA,EAAmB,WAAA;AAAA,MACnB,gBAAA,EAAkB,aAAA;AAAA,MAClB,sBAAA,EAAwB,aAAA;AAAA,MACxB,YAAA,EAAc,cAAA;AAAA,MACd,gBAAA,EAAkB,OAAA;AAAA,MAClB,iBAAA,EAAmB,cAAA;AAAA,MACnB,mBAAA,EAAqB,WAAA;AAAA,MACrB,iBAAA,EAAmB,cAAA;AAAA,MACnB,cAAA,EAAgB,aAAA;AAAA,MAChB,yBAAA,EAA2B,aAAA;AAAA,MAC3B,qBAAA,EAAuB,oBAAA;AAAA,MACvB,OAAA,EAAS,UAAA;AAAA,MACT,cAAA,EAAgB,KAAA;AAAA,MAChB,eAAA,EAAiB,QAAA;AAAA,MACjB,mBAAA,EAAqB,cAAA;AAAA,MACrB,oBAAA,EAAsB,eAAA;AAAA,MACtB,gBAAA,EAAkB,SAAA;AAAA,MAClB,cAAA,EAAgB,SAAA;AAAA,MAChB,qBAAA,EAAuB,mBAAA;AAAA,MACvB,kBAAA,EAAoB,OAAA;AAAA,MACpB,iBAAA,EAAmB,aAAA;AAAA,MACnB,sBAAA,EAAwB,4BAAA;AAAA,MACxB,mBAAA,EAAqB,KAAA;AAAA,MACrB,WAAA,EAAa,QAAA;AAAA,MACb,YAAA,EAAc,MAAA;AAAA,MACd,iBAAA,EAAmB,gBAAA;AAAA,MACnB,iBAAA,EAAmB,YAAA;AAAA,MACnB,WAAA,EAAa,MAAA;AAAA,MACb,eAAA,EAAiB,mBAAA;AAAA,MACjB,gBAAA,EAAkB,gBAAA;AAAA,MAClB,iBAAA,EAAmB,iBAAA;AAAA,MACnB,iBAAA,EAAmB,eAAA;AAAA,MACnB,WAAA,EAAa,SAAA;AAAA,MACb,aAAA,EAAe,QAAA;AAAA,MACf,mBAAA,EAAqB,gBAAA;AAAA,MACrB,yBAAA,EAA2B,kBAAA;AAAA,MAC3B,wBAAA,EAA0B,UAAA;AAAA,MAC1B,uBAAA,EAAyB,cAAA;AAAA,MACzB,2BAAA,EAA6B,wBAAA;AAAA,MAC7B,0BAAA,EAA4B,yCAAA;AAAA,MAC5B,kBAAA,EAAoB,eAAA;AAAA,MACpB,eAAA,EAAiB,UAAA;AAAA,MACjB,aAAA,EAAe,UAAA;AAAA,MACf,oBAAA,EAAsB,sBAAA;AAAA,MACtB,sBAAA,EAAwB,sBAAA;AAAA,MACxB,cAAA,EAAgB,qEAAA;AAAA,MAChB,gBAAA,EAAkB,MAAA;AAAA,MAClB,aAAA,EAAe,MAAA;AAAA,MACf,aAAA,EAAe,MAAA;AAAA,MACf,qBAAA,EAAuB,QAAA;AAAA,MACvB,iBAAA,EAAmB,gBAAA;AAAA,MACnB,wBAAA,EAA0B,0BAAA;AAAA,MAC1B,qBAAA,EAAuB,wBAAA;AAAA,MACvB,iBAAA,EAAmB,gBAAA;AAAA,MACnB,mBAAA,EAAqB,kBAAA;AAAA,MACrB,iBAAA,EAAmB,WAAA;AAAA,MACnB,kBAAA,EAAoB,YAAA;AAAA,MACpB,qBAAA,EAAuB,YAAA;AAAA,MACvB,sBAAA,EAAwB,eAAA;AAAA,MACxB,mBAAA,EAAqB,sBAAA;AAAA,MACrB,qBAAA,EAAuB,gDAAA;AAAA,MACvB,cAAA,EAAgB,aAAA;AAAA,MAChB,iBAAA,EAAmB,uBAAA;AAAA,MACnB,qBAAA,EAAuB,4BAAA;AAAA,MACvB,wBAAA,EAA0B,6BAAA;AAAA,MAC1B,oBAAA,EAAsB,iBAAA;AAAA,MACtB,yBAAA,EAA2B,gHAAA;AAAA,MAC3B,2BAAA,EAA6B,mFAAA;AAAA,MAC7B,gCAAA,EAAkC,gEAAA;AAAA,MAClC,2BAAA,EAA6B,cAAA;AAAA,MAC7B,8BAAA,EAAgC,eAAA;AAAA,MAChC,yBAAA,EAA2B,aAAA;AAAA,MAC3B,8BAAA,EAAgC,sFAAA;AAAA,MAChC,qBAAA,EAAuB,SAAA;AAAA,MACvB,0BAAA,EAA4B,kFAAA;AAAA,MAC5B,sBAAA,EAAwB,UAAA;AAAA,MACxB,2BAAA,EAA6B,oDAAA;AAAA,MAC7B,qBAAA,EAAuB,SAAA;AAAA,MACvB,0BAAA,EAA4B,0EAAA;AAAA,MAC5B,kBAAA,EAAoB,aAAA;AAAA,MACpB,uBAAA,EAAyB,oFAAA;AAAA,MACzB,sBAAA,EAAwB,sCAAA;AAAA,MACxB,uBAAA,EAAyB,0BAAA;AAAA,MACzB,qBAAA,EAAuB,+BAAA;AAAA,MACvB,sBAAA,EAAwB,0CAAA;AAAA,MACxB,oBAAA,EAAsB,wCAAA;AAAA,MACtB,wBAAA,EAA0B,0BAAA;AAAA,MAC1B,sBAAA,EAAwB,6BAAA;AAAA,MACxB,sBAAA,EAAwB,qCAAA;AAAA,MACxB,wBAAA,EAA0B,yCAAA;AAAA,MAC1B,wBAAA,EAA0B,2BAAA;AAAA,MAC1B,kBAAA,EAAoB,YAAA;AAAA,MACpB,oBAAA,EAAsB,sBAAA;AAAA,MACtB,uBAAA,EAAyB,0CAAA;AAAA,MACzB,wBAAA,EAA0B,qCAAA;AAAA,MAC1B,yBAAA,EAA2B,wBAAA;AAAA,MAC3B,gBAAA,EAAkB,YAAA;AAAA,MAClB,gBAAA,EAAkB,aAAA;AAAA,MAClB,eAAA,EAAiB,QAAA;AAAA,MACjB,yBAAA,EAA2B,mCAAA;AAAA,MAC3B,qBAAA,EAAuB,oBAAA;AAAA,MACvB,oBAAA,EAAsB,oBAAA;AAAA,MACtB,mBAAA,EAAqB,4DAAA;AAAA,MACrB,yBAAA,EAA2B,2CAAA;AAAA,MAC3B,4BAAA,EAA8B,gBAAA;AAAA,MAC9B,0BAAA,EAA4B,OAAA;AAAA,MAC5B,yBAAA,EAA2B,kDAAA;AAAA,MAC3B,uBAAA,EAAyB,kBAAA;AAAA,MACzB,oBAAA,EAAsB,eAAA;AAAA,MACtB,uBAAA,EAAyB,oBAAA;AAAA,MACzB,6BAAA,EAA+B,uBAAA;AAAA,MAC/B,yBAAA,EAA2B,uBAAA;AAAA,MAC3B,yBAAA,EAA2B,kBAAA;AAAA,MAC3B,sBAAA,EAAwB,gBAAA;AAAA,MACxB,oBAAA,EAAsB,yCAAA;AAAA,MACtB,qBAAA,EAAuB,SAAA;AAAA,MACvB,6BAAA,EAA+B,gDAAA;AAAA,MAC/B,0BAAA,EAA4B,yBAAA;AAAA,MAC5B,qBAAA,EAAuB,cAAA;AAAA,MACvB,gBAAA,EAAkB,iCAAA;AAAA,MAClB,qBAAA,EAAuB,2CAAA;AAAA,MACvB,mBAAA,EAAqB,cAAA;AAAA,MACrB,qBAAA,EAAuB,4BAAA;AAAA,MACvB,sBAAA,EAAwB,MAAA;AAAA,MACxB,yBAAA,EAA2B,SAAA;AAAA,MAC3B,sBAAA,EAAwB,MAAA;AAAA,MACxB,wBAAA,EAA0B,SAAA;AAAA,MAC1B,6BAAA,EAA+B,6BAAA;AAAA,MAC/B,yBAAA,EAA2B,WAAA;AAAA,MAC3B,sBAAA,EAAwB,MAAA;AAAA,MACxB,uBAAA,EAAyB,YAAA;AAAA,MACzB,4BAAA,EAA8B,YAAA;AAAA,MAC9B,uBAAA,EAAyB,8BAAA;AAAA,MACzB,eAAA,EAAiB,UAAA;AAAA,MACjB,yBAAA,EAA2B,oBAAA;AAAA,MAC3B,wBAAA,EAA0B,QAAA;AAAA,MAC1B,kBAAA,EAAoB,MAAA;AAAA,MACpB,uBAAA,EAAyB,oCAAA;AAAA,MACzB,yBAAA,EAA2B,0BAAA;AAAA,MAC3B,yBAAA,EAA2B,yBAAA;AAAA,MAC3B,qBAAA,EAAuB,YAAA;AAAA,MACvB,mBAAA,EAAqB,SAAA;AAAA,MACrB,oBAAA,EAAsB,UAAA;AAAA,MACtB,oBAAA,EAAsB,UAAA;AAAA,MACtB,mBAAA,EAAqB,gBAAA;AAAA,MACrB,sBAAA,EAAwB,SAAA;AAAA,MACxB,kBAAA,EAAoB,0BAAA;AAAA,MACpB,2BAAA,EAA6B,eAAA;AAAA,MAC7B,4BAAA,EAA8B,gBAAA;AAAA,MAC9B,4BAAA,EAA8B,SAAA;AAAA,MAC9B,6BAAA,EAA+B,UAAA;AAAA,MAC/B,qBAAA,EAAuB,UAAA;AAAA,MACvB,oBAAA,EAAsB,SAAA;AAAA,MACtB,mBAAA,EAAqB,MAAA;AAAA,MACrB,oBAAA,EAAsB,OAAA;AAAA,MACtB,gCAAA,EAAkC,mCAAA;AAAA,MAClC,6BAAA,EAA+B,gCAAA;AAAA,MAC/B,iBAAA,EAAmB,eAAA;AAAA,MACnB,qBAAA,EAAuB,gBAAA;AAAA,MACvB,iBAAA,EAAmB,WAAA;AAAA,MACnB,iBAAA,EAAmB,iBAAA;AAAA,MACnB,qBAAA,EAAuB,sCAAA;AAAA,MACvB,oBAAA,EAAsB,cAAA;AAAA,MACtB,oBAAA,EAAsB,sBAAA;AAAA,MACtB,yBAAA,EAA2B,yDAAA;AAAA,MAC3B,gBAAA,EAAkB,MAAA;AAAA,MAClB,mBAAA,EAAqB,OAAA;AAAA,MACrB,oBAAA,EAAsB,YAAA;AAAA,MACtB,qBAAA,EAAuB,cAAA;AAAA,MACvB,2BAAA,EAA6B,gBAAA;AAAA,MAC7B,yBAAA,EAA2B,QAAA;AAAA,MAC3B,uBAAA,EAAyB,SAAA;AAAA,MACzB,0BAAA,EAA4B,SAAA;AAAA,MAC5B,mCAAA,EAAqC,sDAAA;AAAA,MACrC,kBAAA,EAAoB,MAAA;AAAA,MACpB,qBAAA,EAAuB,SAAA;AAAA,MACvB,wBAAA,EAA0B,0DAAA;AAAA,MAC1B,yBAAA,EAA2B,QAAA;AAAA,MAC3B,gBAAA,EAAkB,MAAA;AAAA,MAClB,kBAAA,EAAoB,QAAA;AAAA,MACpB,mBAAA,EAAqB,OAAA;AAAA,MACrB,kBAAA,EAAoB,OAAA;AAAA,MACpB,oBAAA,EAAsB,OAAA;AAAA,MACtB,cAAA,EAAgB,0BAAA;AAAA,MAChB,gBAAA,EAAkB,wBAAA;AAAA,MAClB,YAAA,EAAc,OAAA;AAAA,MACd,eAAA,EAAiB,kBAAA;AAAA,MACjB,kBAAA,EAAoB,QAAA;AAAA,MACpB,kBAAA,EAAoB,QAAA;AAAA,MACpB,aAAA,EAAe,QAAA;AAAA,MACf,oBAAA,EAAsB,gBAAA;AAAA,MACtB,UAAA,EAAY,WAAA;AAAA,MACZ,gBAAA,EAAkB,wBAAA;AAAA,MAClB,UAAA,EAAY,kBAAA;AAAA,MACZ,aAAA,EAAe,oCAAA;AAAA,MACf,kBAAA,EAAoB,QAAA;AAAA,MACpB,UAAA,EAAY,WAAA;AAAA,MACZ,SAAA,EAAW,WAAA;AAAA,MACX,sBAAA,EAAwB,eAAA;AAAA,MACxB,mBAAA,EAAqB,MAAA;AAAA,MACrB,6BAAA,EAA+B,8BAAA;AAAA,MAC/B,sBAAA,EAAwB,kBAAA;AAAA,MACxB,2BAAA,EAA6B,MAAA;AAAA,MAC7B,4BAAA,EAA8B,kBAAA;AAAA,MAC9B,4BAAA,EAA8B,OAAA;AAAA,MAC9B,2BAAA,EACE,sHAAA;AAAA,MACF,4BAAA,EAA8B,SAAA;AAAA,MAC9B,uCAAA,EAAyC,oBAAA;AAAA,MACzC,2BAAA,EAA6B,YAAA;AAAA,MAC7B,uBAAA,EAAyB,QAAA;AAAA,MACzB,sBAAA,EAAwB,OAAA;AAAA,MACxB,qBAAA,EAAuB,MAAA;AAAA,MACvB,uBAAA,EAAyB,cAAA;AAAA,MACzB,8BAAA,EAAgC,mBAAA;AAAA,MAChC,4BAAA,EAA8B,aAAA;AAAA,MAC9B,0BAAA,EAA4B,kCAAA;AAAA,MAC5B,wBAAA,EAA0B,sCAAA;AAAA,MAC1B,wBAAA,EAA0B,OAAA;AAAA,MAC1B,8BAAA,EAAgC,OAAA;AAAA,MAChC,8BAAA,EAAgC,OAAA;AAAA,MAChC,+BAAA,EAAiC,QAAA;AAAA,MACjC,8BAAA,EAAgC,OAAA;AAAA,MAChC,oCAAA,EAAsC,aAAA;AAAA,MACtC,8BAAA,EAAgC,OAAA;AAAA,MAChC,uCAAA,EAAyC,gBAAA;AAAA,MACzC,8BAAA,EAAgC,OAAA;AAAA,MAChC,6BAAA,EAA+B,MAAA;AAAA,MAC/B,6BAAA,EAA+B,MAAA;AAAA,MAC/B,8BAAA,EAAgC,OAAA;AAAA,MAChC,iCAAA,EAAmC,UAAA;AAAA,MACnC,mCAAA,EAAqC,YAAA;AAAA,MACrC,sCAAA,EAAwC,eAAA;AAAA,MACxC,+BAAA,EAAiC,cAAA;AAAA,MACjC,wBAAA,EAA0B,OAAA;AAAA,MAC1B,6BAAA,EAA+B,yBAAA;AAAA,MAC/B,+BAAA,EAAiC,cAAA;AAAA,MACjC,+BAAA,EAAiC,cAAA;AAAA,MACjC,gCAAA,EAAkC,eAAA;AAAA,MAClC,iCAAA,EAAmC,wBAAA;AAAA,MACnC,+BAAA,EAAiC,gBAAA;AAAA,MACjC,6BAAA,EAA+B,YAAA;AAAA,MAC/B,+BAAA,EAAiC,cAAA;AAAA,MACjC,4BAAA,EAA8B,gDAAA;AAAA,MAC9B,2BAAA,EAA6B,mCAAA;AAAA,MAC7B,wBAAA,EACE,0GAAA;AAAA,MACF,wBAAA,EAA0B,eAAA;AAAA,MAC1B,+BAAA,EAAiC,+BAAA;AAAA,MACjC,8BAAA,EAAgC,sBAAA;AAAA,MAChC,4BAAA,EAA8B,WAAA;AAAA,MAC9B,yBAAA,EAA2B,QAAA;AAAA,MAC3B,oCAAA,EACE,8DAAA;AAAA,MACF,+BAAA,EAAiC,6BAAA;AAAA,MACjC,+BAAA,EAAiC,cAAA;AAAA,MACjC,mCAAA,EAAqC,YAAA;AAAA,MACrC,oCAAA,EACE,uCAAA;AAAA,MACF,kCAAA,EAAoC,oBAAA;AAAA,MACpC,mCAAA,EACE,8DAAA;AAAA,MACF,sBAAA,EAAwB,OAAA;AAAA,MACxB,+BAAA,EAAiC,UAAA;AAAA,MACjC,4BAAA,EAA8B,SAAA;AAAA,MAC9B,wBAAA,EAA0B,eAAA;AAAA,MAC1B,eAAA,EAAiB,SAAA;AAAA,MACjB,eAAA,EAAiB,SAAA;AAAA,MACjB,oBAAA,EAAsB,0CAAA;AAAA,MACtB,oBAAA,EAAsB,qCAAA;AAAA,MACtB,mBAAA,EAAqB,sBAAA;AAAA,MACrB,yBAAA,EAA2B,UAAA;AAAA,MAC3B,mBAAA,EAAqB,sBAAA;AAAA,MACrB,eAAA,EAAiB,eAAA;AAAA,MACjB,qBAAA,EAAuB,kCAAA;AAAA,MACvB,gBAAA,EAAkB,0BAAA;AAAA,MAClB,6BAAA,EAA+B,uBAAA;AAAA,MAC/B,kBAAA,EAAoB,2BAAA;AAAA,MACpB,yBAAA,EAA2B,6BAAA;AAAA,MAC3B,uBAAA,EAAyB,4BAAA;AAAA,MACzB,oBAAA,EACE,0DAAA;AAAA,MACF,2BAAA,EAA6B,yCAAA;AAAA,MAC7B,yBAAA,EAA2B,yBAAA;AAAA,MAC3B,wBAAA,EAA0B,2BAAA;AAAA,MAC1B,sBAAA,EAAwB,wCAAA;AAAA,MACxB,mBAAA,EAAqB,mBAAA;AAAA,MACrB,iBAAA,EAAmB,iBAAA;AAAA,MACnB,sBAAA,EAAwB,mCAAA;AAAA,MACxB,uBAAA,EAAyB,wBAAA;AAAA,MACzB,yBAAA,EAA2B,wDAAA;AAAA,MAC3B,sBAAA,EAAwB,uBAAA;AAAA,MACxB,2BAAA,EAA6B,sCAAA;AAAA,MAC7B,wCAAA,EAA0C,iBAAA;AAAA,MAC1C,mCAAA,EAAqC,YAAA;AAAA,MACrC,wCAAA,EAA0C,iBAAA;AAAA,MAC1C,8BAAA,EAAgC,aAAA;AAAA,MAChC,+BAAA,EAAiC,4BAAA;AAAA,MACjC,+BAAA,EAAiC,yBAAA;AAAA,MACjC,+BAAA,EAAiC,6BAAA;AAAA,MACjC,sCAAA,EAAwC,8BAAA;AAAA,MACxC,8BAAA,EAAgC,qBAAA;AAAA,MAChC,mCAAA,EAAqC;AAAA,KACvC;AAAA,IACA,OAAA,EAAS;AAAA,MACP,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,OAAA;AAAA,QACP,KAAA,EAAO,UAAA;AAAA,QACP,KAAA,EAAO,OAAA;AAAA,QACP,YAAA,EAAc,SAAA;AAAA,QACd,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,OAAA;AAAA,QACT,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,SAAA;AAAA,QACT,OAAA,EAAS,WAAA;AAAA,QACT,cAAA,EAAgB,wBAAA;AAAA,QAChB,iBAAA,EAAmB,gBAAA;AAAA,QACnB,sBAAA,EAAwB,0BAAA;AAAA,QACxB,YAAA,EAAc,mBAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AAAA,MACA,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,OAAA;AAAA,QACP,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAO,cAAA;AAAA,QACP,YAAA,EAAc,SAAA;AAAA,QACd,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS,YAAA;AAAA,QACT,MAAA,EAAQ,mBAAA;AAAA,QACR,OAAA,EAAS,SAAA;AAAA,QACT,OAAA,EAAS,SAAA;AAAA,QACT,cAAA,EAAgB,oBAAA;AAAA,QAChB,iBAAA,EAAmB,iBAAA;AAAA,QACnB,sBAAA,EAAwB,kBAAA;AAAA,QACxB,YAAA,EAAc,0BAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AAAA,MACA,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AAAA,MACA,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,OAAA;AAAA,QACP,KAAA,EAAO,QAAA;AAAA,QACP,KAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS;AAAA;AACX;AACF;AAEJ;AAEO,IAAM,gBAAA,GAA2C;AAAA,EACtD,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,YAAA,EAAc,QAAA;AAAA,EACd,IAAA,EAAM,MAAA;AAAA,EACN,gBAAA,EAAkB,QAAA;AAAA,EAClB,eAAA,EAAiB,OAAA;AAAA,EACjB,qBAAA,EAAuB,aAAA;AAAA,EACvB,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,YAAA,EAAc,iBAAA;AAAA,EACd,aAAA,EAAe,kBAAA;AAAA,EACf,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,qBAAA,EAAuB,kBAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,YAAA;AAAA,EACZ,WAAA,EAAa,YAAA;AAAA,EACb,UAAA,EAAY,WAAA;AAAA,EACZ,cAAA,EAAgB,gBAAA;AAAA,EAChB,aAAA,EAAe,eAAA;AAAA,EACf,YAAA,EAAc,QAAA;AAAA,EACd,aAAA,EAAe,SAAA;AAAA,EACf,gBAAA,EAAkB,oBAAA;AAAA,EAClB,aAAA,EAAe,gBAAA;AAAA,EACf,KAAA,EAAO,OAAA;AAAA,EACP,aAAA,EAAe,0BAAA;AAAA,EACf,WAAA,EAAa,sBAAA;AAAA,EACb,iBAAA,EAAmB,0CAAA;AAAA,EACnB,oBAAA,EAAsB,2BAAA;AAAA,EACtB,sBAAA,EAAwB,iBAAA;AAAA,EACxB,iBAAA,EAAmB,cAAA;AAAA,EACnB,gBAAA,EAAkB,aAAA;AAAA,EAClB,sBAAA,EAAwB,YAAA;AAAA,EACxB,YAAA,EAAc,cAAA;AAAA,EACd,gBAAA,EAAkB,YAAA;AAAA,EAClB,iBAAA,EAAmB,aAAA;AAAA,EACnB,mBAAA,EAAqB,OAAA;AAAA,EACrB,iBAAA,EAAmB,cAAA;AAAA,EACnB,cAAA,EAAgB,QAAA;AAAA,EAChB,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,qBAAA,EAAuB,eAAA;AAAA,EACvB,OAAA,EAAS,WAAA;AAAA,EACT,cAAA,EAAgB,gBAAA;AAAA,EAChB,eAAA,EAAiB,iBAAA;AAAA,EACjB,mBAAA,EAAqB,cAAA;AAAA,EACrB,oBAAA,EAAsB,eAAA;AAAA,EACtB,gBAAA,EAAkB,SAAA;AAAA,EAClB,cAAA,EAAgB,SAAA;AAAA,EAChB,qBAAA,EAAuB,gBAAA;AAAA,EACvB,kBAAA,EAAoB,OAAA;AAAA,EACpB,iBAAA,EAAmB,YAAA;AAAA,EACnB,sBAAA,EAAwB,2BAAA;AAAA,EACxB,mBAAA,EAAqB,KAAA;AAAA,EACrB,WAAA,EAAa,MAAA;AAAA,EACb,YAAA,EAAc,OAAA;AAAA,EACd,iBAAA,EAAmB,gBAAA;AAAA,EACnB,iBAAA,EAAmB,YAAA;AAAA,EACnB,WAAA,EAAa,MAAA;AAAA,EACb,eAAA,EAAiB,mBAAA;AAAA,EACjB,gBAAA,EAAkB,iBAAA;AAAA,EAClB,iBAAA,EAAmB,iBAAA;AAAA,EACnB,iBAAA,EAAmB,YAAA;AAAA,EACnB,WAAA,EAAa,MAAA;AAAA,EACb,aAAA,EAAe,QAAA;AAAA,EACf,mBAAA,EAAqB,cAAA;AAAA,EACrB,yBAAA,EAA2B,kBAAA;AAAA,EAC3B,wBAAA,EAA0B,UAAA;AAAA,EAC1B,uBAAA,EAAyB,cAAA;AAAA,EACzB,2BAAA,EAA6B,wBAAA;AAAA,EAC7B,0BAAA,EAA4B,yCAAA;AAAA,EAC5B,kBAAA,EAAoB,aAAA;AAAA,EACpB,aAAA,EAAe,UAAA;AAAA,EACf,oBAAA,EAAsB,sBAAA;AAAA,EACtB,sBAAA,EAAwB,sBAAA;AAAA,EACxB,cAAA,EAAgB,sEAAA;AAAA,EAChB,gBAAA,EAAkB,MAAA;AAAA,EAClB,aAAA,EAAe,MAAA;AAAA,EACf,aAAA,EAAe,MAAA;AAAA,EACf,qBAAA,EAAuB,QAAA;AAAA,EACvB,iBAAA,EAAmB,gBAAA;AAAA,EACnB,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,qBAAA,EAAuB,wBAAA;AAAA,EACvB,iBAAA,EAAmB,gBAAA;AAAA,EACnB,mBAAA,EAAqB,kBAAA;AAAA,EACrB,iBAAA,EAAmB,WAAA;AAAA,EACnB,kBAAA,EAAoB,YAAA;AAAA,EACpB,qBAAA,EAAuB,YAAA;AAAA,EACvB,sBAAA,EAAwB,eAAA;AAAA,EACxB,mBAAA,EAAqB,sBAAA;AAAA,EACrB,qBAAA,EAAuB,gDAAA;AAAA,EACvB,cAAA,EAAgB,aAAA;AAAA,EAChB,iBAAA,EAAmB,uBAAA;AAAA,EACnB,qBAAA,EAAuB,4BAAA;AAAA,EACvB,wBAAA,EAA0B,6BAAA;AAAA,EAC1B,oBAAA,EAAsB,iBAAA;AAAA,EACtB,yBAAA,EAA2B,gHAAA;AAAA,EAC3B,2BAAA,EAA6B,mFAAA;AAAA,EAC7B,gCAAA,EAAkC,gEAAA;AAAA,EAClC,2BAAA,EAA6B,cAAA;AAAA,EAC7B,8BAAA,EAAgC,eAAA;AAAA,EAChC,yBAAA,EAA2B,aAAA;AAAA,EAC3B,8BAAA,EAAgC,sFAAA;AAAA,EAChC,qBAAA,EAAuB,SAAA;AAAA,EACvB,0BAAA,EAA4B,kFAAA;AAAA,EAC5B,sBAAA,EAAwB,UAAA;AAAA,EACxB,2BAAA,EAA6B,oDAAA;AAAA,EAC7B,qBAAA,EAAuB,SAAA;AAAA,EACvB,0BAAA,EAA4B,0EAAA;AAAA,EAC5B,kBAAA,EAAoB,aAAA;AAAA,EACpB,uBAAA,EAAyB,oFAAA;AAAA,EACzB,eAAA,EAAiB,UAAA;AAAA,EACjB,sBAAA,EAAwB,sCAAA;AAAA,EACxB,uBAAA,EAAyB,0BAAA;AAAA,EACzB,qBAAA,EAAuB,+BAAA;AAAA,EACvB,sBAAA,EAAwB,0CAAA;AAAA,EACxB,oBAAA,EAAsB,wCAAA;AAAA,EACtB,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,sBAAA,EAAwB,6BAAA;AAAA,EACxB,sBAAA,EAAwB,qCAAA;AAAA,EACxB,wBAAA,EAA0B,yCAAA;AAAA,EAC1B,wBAAA,EAA0B,2BAAA;AAAA,EAC1B,kBAAA,EAAoB,kBAAA;AAAA,EACpB,oBAAA,EAAsB,kBAAA;AAAA,EACtB,uBAAA,EAAyB,qCAAA;AAAA,EACzB,wBAAA,EAA0B,gCAAA;AAAA,EAC1B,yBAAA,EAA2B,qBAAA;AAAA,EAC3B,gBAAA,EAAkB,QAAA;AAAA,EAClB,gBAAA,EAAkB,QAAA;AAAA,EAClB,eAAA,EAAiB,WAAA;AAAA,EACjB,yBAAA,EAA2B,wBAAA;AAAA,EAC3B,qBAAA,EAAuB,yBAAA;AAAA,EACvB,oBAAA,EAAsB,kBAAA;AAAA,EACtB,mBAAA,EAAqB,4DAAA;AAAA,EACrB,yBAAA,EAA2B,2CAAA;AAAA,EAC3B,4BAAA,EAA8B,gBAAA;AAAA,EAC9B,0BAAA,EAA4B,OAAA;AAAA,EAC5B,yBAAA,EAA2B,kDAAA;AAAA,EAC3B,uBAAA,EAAyB,kBAAA;AAAA,EACzB,oBAAA,EAAsB,eAAA;AAAA,EACtB,uBAAA,EAAyB,oBAAA;AAAA,EACzB,6BAAA,EAA+B,uBAAA;AAAA,EAC/B,yBAAA,EAA2B,uBAAA;AAAA,EAC3B,yBAAA,EAA2B,kBAAA;AAAA,EAC3B,sBAAA,EAAwB,gBAAA;AAAA,EACxB,oBAAA,EAAsB,yCAAA;AAAA,EACtB,qBAAA,EAAuB,SAAA;AAAA,EACvB,6BAAA,EAA+B,gDAAA;AAAA,EAC/B,0BAAA,EAA4B,wBAAA;AAAA,EAC5B,qBAAA,EAAuB,OAAA;AAAA,EACvB,gBAAA,EAAkB,sCAAA;AAAA,EAClB,qBAAA,EAAuB,wCAAA;AAAA,EACvB,mBAAA,EAAqB,cAAA;AAAA,EACrB,qBAAA,EAAuB,4BAAA;AAAA,EACvB,sBAAA,EAAwB,MAAA;AAAA,EACxB,yBAAA,EAA2B,SAAA;AAAA,EAC3B,sBAAA,EAAwB,MAAA;AAAA,EACxB,wBAAA,EAA0B,SAAA;AAAA,EAC1B,6BAAA,EAA+B,6BAAA;AAAA,EAC/B,yBAAA,EAA2B,WAAA;AAAA,EAC3B,sBAAA,EAAwB,MAAA;AAAA,EACxB,uBAAA,EAAyB,YAAA;AAAA,EACzB,4BAAA,EAA8B,YAAA;AAAA,EAC9B,uBAAA,EAAyB,8BAAA;AAAA,EACzB,eAAA,EAAiB,UAAA;AAAA,EACjB,yBAAA,EAA2B,YAAA;AAAA,EAC3B,wBAAA,EAA0B,QAAA;AAAA,EAC1B,kBAAA,EAAoB,MAAA;AAAA,EACpB,uBAAA,EAAyB,uBAAA;AAAA,EACzB,yBAAA,EAA2B,0BAAA;AAAA,EAC3B,yBAAA,EAA2B,yBAAA;AAAA,EAC3B,qBAAA,EAAuB,YAAA;AAAA,EACvB,mBAAA,EAAqB,SAAA;AAAA,EACrB,oBAAA,EAAsB,UAAA;AAAA,EACtB,oBAAA,EAAsB,UAAA;AAAA,EACtB,mBAAA,EAAqB,gBAAA;AAAA,EACrB,sBAAA,EAAwB,SAAA;AAAA,EACxB,kBAAA,EAAoB,0BAAA;AAAA,EACpB,2BAAA,EAA6B,eAAA;AAAA,EAC7B,4BAAA,EAA8B,gBAAA;AAAA,EAC9B,4BAAA,EAA8B,SAAA;AAAA,EAC9B,6BAAA,EAA+B,UAAA;AAAA,EAC/B,qBAAA,EAAuB,UAAA;AAAA,EACvB,oBAAA,EAAsB,SAAA;AAAA,EACtB,mBAAA,EAAqB,MAAA;AAAA,EACrB,oBAAA,EAAsB,OAAA;AAAA,EACtB,gCAAA,EAAkC,mCAAA;AAAA,EAClC,6BAAA,EAA+B,gCAAA;AAAA,EAC/B,iBAAA,EAAmB,YAAA;AAAA,EACnB,qBAAA,EAAuB,gBAAA;AAAA,EACvB,iBAAA,EAAmB,YAAA;AAAA,EACnB,iBAAA,EAAmB,aAAA;AAAA,EACnB,qBAAA,EAAuB,uCAAA;AAAA,EACvB,oBAAA,EAAsB,eAAA;AAAA,EACtB,oBAAA,EAAsB,mBAAA;AAAA,EACtB,yBAAA,EAA2B,6DAAA;AAAA,EAC3B,gBAAA,EAAkB,MAAA;AAAA,EAClB,mBAAA,EAAqB,QAAA;AAAA,EACrB,oBAAA,EAAsB,YAAA;AAAA,EACtB,qBAAA,EAAuB,cAAA;AAAA,EACvB,2BAAA,EAA6B,iBAAA;AAAA,EAC7B,yBAAA,EAA2B,QAAA;AAAA,EAC3B,uBAAA,EAAyB,SAAA;AAAA,EACzB,0BAAA,EAA4B,SAAA;AAAA,EAC5B,mCAAA,EAAqC,yDAAA;AAAA,EACrC,kBAAA,EAAoB,OAAA;AAAA,EACpB,qBAAA,EAAuB,UAAA;AAAA,EACvB,wBAAA,EAA0B,sDAAA;AAAA,EAC1B,yBAAA,EAA2B,UAAA;AAAA,EAC3B,gBAAA,EAAkB,MAAA;AAAA,EAClB,kBAAA,EAAoB,QAAA;AAAA,EACpB,mBAAA,EAAqB,SAAA;AAAA,EACrB,kBAAA,EAAoB,QAAA;AAAA,EACpB,oBAAA,EAAsB,SAAA;AAAA,EACtB,cAAA,EAAgB,0BAAA;AAAA,EAChB,gBAAA,EAAkB,oBAAA;AAAA,EAClB,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,qBAAA;AAAA,EACjB,kBAAA,EAAoB,YAAA;AAAA,EACpB,kBAAA,EAAoB,QAAA;AAAA,EACpB,aAAA,EAAe,QAAA;AAAA,EACf,oBAAA,EAAsB,mBAAA;AAAA,EACtB,UAAA,EAAY,MAAA;AAAA,EACZ,gBAAA,EAAkB,mBAAA;AAAA,EAClB,UAAA,EAAY,aAAA;AAAA,EACZ,aAAA,EAAe,+BAAA;AAAA,EACf,kBAAA,EAAoB,SAAA;AAAA,EACpB,UAAA,EAAY,YAAA;AAAA,EACZ,SAAA,EAAW,WAAA;AAAA,EACX,sBAAA,EAAwB,eAAA;AAAA,EACxB,mBAAA,EAAqB,MAAA;AAAA,EACrB,6BAAA,EAA+B,8BAAA;AAAA,EAC/B,sBAAA,EAAwB,kBAAA;AAAA,EACxB,2BAAA,EAA6B,MAAA;AAAA,EAC7B,4BAAA,EAA8B,kBAAA;AAAA,EAC9B,4BAAA,EAA8B,OAAA;AAAA,EAC9B,2BAAA,EACE,sHAAA;AAAA,EACF,4BAAA,EAA8B,SAAA;AAAA,EAC9B,uCAAA,EAAyC,oBAAA;AAAA,EACzC,2BAAA,EAA6B,YAAA;AAAA,EAC7B,uBAAA,EAAyB,QAAA;AAAA,EACzB,sBAAA,EAAwB,OAAA;AAAA,EACxB,qBAAA,EAAuB,MAAA;AAAA,EACvB,uBAAA,EAAyB,cAAA;AAAA,EACzB,8BAAA,EAAgC,mBAAA;AAAA,EAChC,4BAAA,EAA8B,aAAA;AAAA,EAC9B,0BAAA,EAA4B,kCAAA;AAAA,EAC5B,wBAAA,EAA0B,sCAAA;AAAA,EAC1B,wBAAA,EAA0B,OAAA;AAAA,EAC1B,8BAAA,EAAgC,OAAA;AAAA,EAChC,8BAAA,EAAgC,OAAA;AAAA,EAChC,+BAAA,EAAiC,QAAA;AAAA,EACjC,8BAAA,EAAgC,OAAA;AAAA,EAChC,oCAAA,EAAsC,aAAA;AAAA,EACtC,8BAAA,EAAgC,OAAA;AAAA,EAChC,uCAAA,EAAyC,gBAAA;AAAA,EACzC,8BAAA,EAAgC,OAAA;AAAA,EAChC,6BAAA,EAA+B,MAAA;AAAA,EAC/B,6BAAA,EAA+B,MAAA;AAAA,EAC/B,8BAAA,EAAgC,OAAA;AAAA,EAChC,iCAAA,EAAmC,UAAA;AAAA,EACnC,mCAAA,EAAqC,YAAA;AAAA,EACrC,sCAAA,EAAwC,eAAA;AAAA,EACxC,+BAAA,EAAiC,cAAA;AAAA,EACjC,wBAAA,EAA0B,OAAA;AAAA,EAC1B,6BAAA,EAA+B,yBAAA;AAAA,EAC/B,+BAAA,EAAiC,cAAA;AAAA,EACjC,+BAAA,EAAiC,cAAA;AAAA,EACjC,gCAAA,EAAkC,eAAA;AAAA,EAClC,iCAAA,EAAmC,wBAAA;AAAA,EACnC,+BAAA,EAAiC,gBAAA;AAAA,EACjC,6BAAA,EAA+B,YAAA;AAAA,EAC/B,+BAAA,EAAiC,cAAA;AAAA,EACjC,4BAAA,EAA8B,gDAAA;AAAA,EAC9B,2BAAA,EAA6B,mCAAA;AAAA,EAC7B,wBAAA,EACE,0GAAA;AAAA,EACF,wBAAA,EAA0B,eAAA;AAAA,EAC1B,+BAAA,EAAiC,+BAAA;AAAA,EACjC,8BAAA,EAAgC,sBAAA;AAAA,EAChC,4BAAA,EAA8B,WAAA;AAAA,EAC9B,yBAAA,EAA2B,QAAA;AAAA,EAC3B,oCAAA,EACE,8DAAA;AAAA,EACF,+BAAA,EAAiC,6BAAA;AAAA,EACjC,+BAAA,EAAiC,cAAA;AAAA,EACjC,mCAAA,EAAqC,YAAA;AAAA,EACrC,oCAAA,EACE,uCAAA;AAAA,EACF,kCAAA,EAAoC,oBAAA;AAAA,EACpC,mCAAA,EACE,8DAAA;AAAA,EACF,sBAAA,EAAwB,OAAA;AAAA,EACxB,+BAAA,EAAiC,UAAA;AAAA,EACjC,4BAAA,EAA8B,SAAA;AAAA,EAC9B,wBAAA,EAA0B,eAAA;AAAA,EAC1B,eAAA,EAAiB,SAAA;AAAA,EACjB,eAAA,EAAiB,SAAA;AAAA,EACjB,oBAAA,EAAsB,0CAAA;AAAA,EACtB,oBAAA,EAAsB,qCAAA;AAAA,EACtB,mBAAA,EAAqB,sBAAA;AAAA,EACrB,yBAAA,EAA2B,UAAA;AAAA,EAC3B,mBAAA,EAAqB,sBAAA;AAAA,EACrB,eAAA,EAAiB,eAAA;AAAA,EACjB,qBAAA,EAAuB,kCAAA;AAAA,EACvB,gBAAA,EAAkB,0BAAA;AAAA,EAClB,6BAAA,EAA+B,uBAAA;AAAA,EAC/B,kBAAA,EAAoB,2BAAA;AAAA,EACpB,yBAAA,EAA2B,6BAAA;AAAA,EAC3B,uBAAA,EAAyB,4BAAA;AAAA,EACzB,oBAAA,EACE,0DAAA;AAAA,EACF,2BAAA,EAA6B,yCAAA;AAAA,EAC7B,yBAAA,EAA2B,yBAAA;AAAA,EAC3B,wBAAA,EAA0B,2BAAA;AAAA,EAC1B,sBAAA,EAAwB,wCAAA;AAAA,EACxB,mBAAA,EAAqB,mBAAA;AAAA,EACrB,iBAAA,EAAmB,iBAAA;AAAA,EACnB,sBAAA,EAAwB,mCAAA;AAAA,EACxB,uBAAA,EAAyB,wBAAA;AAAA,EACzB,yBAAA,EAA2B,wDAAA;AAAA,EAC3B,sBAAA,EAAwB,uBAAA;AAAA,EACxB,2BAAA,EAA6B,sCAAA;AAAA,EAC7B,wCAAA,EAA0C,iBAAA;AAAA,EAC1C,mCAAA,EAAqC,YAAA;AAAA,EACrC,wCAAA,EAA0C,iBAAA;AAAA,EAC1C,8BAAA,EAAgC,aAAA;AAAA,EAChC,+BAAA,EAAiC,4BAAA;AAAA,EACjC,+BAAA,EAAiC,yBAAA;AAAA,EACjC,+BAAA,EAAiC,6BAAA;AAAA,EACjC,sCAAA,EAAwC,8BAAA;AAAA,EACxC,8BAAA,EAAgC,qBAAA;AAAA,EAChC,mCAAA,EAAqC;AACvC;AAMO,IAAM,gBAAA,GAET;AAAA,EACF,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO,QAAA;AAAA,IACP,YAAA,EAAc,aAAA;AAAA,IACd,MAAA,EAAQ,aAAA;AAAA,IACR,OAAA,EAAS,YAAA;AAAA,IACT,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,UAAA;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,cAAA,EAAgB,wBAAA;AAAA,IAChB,iBAAA,EAAmB,gBAAA;AAAA,IACnB,gBAAA,EAAkB,mBAAA;AAAA,IAClB,sBAAA,EAAwB,6BAAA;AAAA,IACxB,YAAA,EAAc,uBAAA;AAAA,IACd,iBAAA,EAAmB,sBAAA;AAAA,IACnB,UAAA,EAAY;AAAA,GACd;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO,UAAA;AAAA,IACP,YAAA,EAAc,OAAA;AAAA,IACd,MAAA,EAAQ,SAAA;AAAA,IACR,OAAA,EAAS,iBAAA;AAAA,IACT,MAAA,EAAQ,YAAA;AAAA,IACR,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,cAAA,EAAgB,qBAAA;AAAA,IAChB,iBAAA,EAAmB,uBAAA;AAAA,IACnB,gBAAA,EAAkB,kBAAA;AAAA,IAClB,sBAAA,EAAwB,eAAA;AAAA,IACxB,YAAA,EAAc,0BAAA;AAAA,IACd,iBAAA,EAAmB,mBAAA;AAAA,IACnB,UAAA,EAAY;AAAA,GACd;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO,YAAA;AAAA,IACP,KAAA,EAAO,OAAA;AAAA,IACP,OAAA,EAAS,oBAAA;AAAA,IACT,OAAA,EAAS,MAAA;AAAA,IACT,cAAA,EAAgB,uBAAA;AAAA,IAChB,iBAAA,EAAmB,sBAAA;AAAA,IACnB,sBAAA,EAAwB,WAAA;AAAA,IACxB,YAAA,EAAc,oBAAA;AAAA,IACd,UAAA,EAAY;AAAA,GACd;AAAA,EACA,EAAA,EAAI;AAAA,IACF,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,aAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,UAAA;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,cAAA,EAAgB,2BAAA;AAAA,IAChB,iBAAA,EAAmB,mBAAA;AAAA,IACnB,sBAAA,EAAwB,oBAAA;AAAA,IACxB,YAAA,EAAc,sBAAA;AAAA,IACd,UAAA,EAAY;AAAA;AAEhB;AAEA,SAAS,gBAAgB,MAAA,EAA6D;AACpF,EAAA,MAAM,SAAA,GAAY,MAAA,IAAU,gBAAA,CAAiB,MAAM,CAAA;AACnD,EAAA,OAAO,SAAA,GAAY,EAAE,GAAG,gBAAA,EAAkB,GAAG,SAAA,EAAU,GAAI,EAAE,GAAG,gBAAA,EAAiB;AACnF;AAEA,SAAS,YAAA,CACP,SACA,MAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAAQ,OAAO,OAAO,CAAA;AAC5B,EAAA,MAAM,YAAY,MAAA,IAAU,KAAA,CAAM,UAAU,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA;AACpE,EAAA,MAAM,gBAAA,GAAmB,6BAA6B,OAAO,CAAA;AAC7D,EAAA,OAAO;AAAA,IACL,GAAG,KAAA,CAAM,OAAA;AAAA,IACT,GAAI,aAAa,EAAC;AAAA,IAClB,GAAI,oBAAoB;AAAC,GAC3B;AACF;AAMO,SAAS,EACd,OAAA,EACA,GAAA,EACA,QAAA,GAAW,EAAA,EACX,SAAsC,IAAA,EAC9B;AACR,EAAA,IAAI,OAAA,IAAW,MAAA,CAAO,OAAO,CAAA,EAAG;AAC9B,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAC7C,IAAA,IAAI,SAAS,GAAG,CAAA,KAAM,MAAA,EAAW,OAAO,SAAS,GAAG,CAAA;AAAA,EACtD;AACA,EAAA,MAAM,EAAA,GAAK,gBAAgB,MAAM,CAAA;AACjC,EAAA,OAAO,EAAA,CAAG,GAAG,CAAA,IAAK,QAAA;AACpB;AAMO,SAAS,eAAA,CACd,OAAA,EACA,MAAA,GAAsC,IAAA,EACd;AACxB,EAAA,MAAM,EAAA,GAAK,gBAAgB,MAAM,CAAA;AACjC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,CAAO,OAAO,CAAA,EAAG;AAChC,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,GAAG,EAAA,EAAI,GAAG,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA,EAAE;AACnD;;;AC50CO,IAAM,YAAA,GAAkD;AAAA,EAC7D,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,2BAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,2BAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,2BAAA;AAAA,IACZ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,0BAAA;AAAA,IACP,UAAA,EAAY;AAAA;AAEhB;AAuBO,IAAM,iBAAA,GAAqD;AAAA,EAChE,MAAA,EAAQ;AAAA,IACN,EAAA,EAAI,SAAA;AAAA,IACJ,UAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,WAAA,EAAa,SAAA;AAAA,IACb,UAAA,EAAY,SAAA;AAAA,IACZ,aAAA,EAAe,SAAA;AAAA,IACf,YAAA,EAAc,SAAA;AAAA,IACd,YAAA,EAAc,2BAAA;AAAA,IACd,WAAA,EAAa,2BAAA;AAAA,IACb,cAAA,EAAgB,SAAA;AAAA,IAChB,gBAAA,EAAkB,SAAA;AAAA,IAClB,WAAA,EAAa,2BAAA;AAAA,IACb,SAAA,EAAW,MAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,UAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,WAAA,EAAa,SAAA;AAAA,IACb,UAAA,EAAY,SAAA;AAAA,IACZ,aAAA,EAAe,SAAA;AAAA,IACf,YAAA,EAAc,SAAA;AAAA,IACd,YAAA,EAAc,2BAAA;AAAA,IACd,WAAA,EAAa,2BAAA;AAAA,IACb,cAAA,EAAgB,SAAA;AAAA,IAChB,gBAAA,EAAkB,SAAA;AAAA,IAClB,WAAA,EAAa,2BAAA;AAAA,IACb,SAAA,EAAW,MAAA;AAAA,IACX,MAAA,EAAQ;AAAA;AAEZ;AAKO,SAAS,eAAe,OAAA,EAAuD;AACpF,EAAA,OAAO,YAAA,CAAa,OAAA,IAAW,OAAO,CAAA,IAAK,YAAA,CAAa,KAAA;AAC1D;AAKO,SAAS,kBAAkB,OAAA,EAAqD;AACrF,EAAA,OAAO,iBAAA,CAAkB,OAAA,IAAW,OAAO,CAAA,IAAK,iBAAA,CAAkB,KAAA;AACpE;;;ACnBO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EACvC,WAAA,CACS,MAAA,EACA,IAAA,EACP,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAA,IAAW,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE,CAAA;AAJ/B,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAIP,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AAAA,EANS,MAAA;AAAA,EACA,IAAA;AAMX;AAEO,SAAS,2BAA2B,GAAA,EAAoC;AAC7E,EAAA,IAAI,EAAE,GAAA,YAAe,aAAA,CAAA,IAAkB,GAAA,CAAI,WAAW,GAAA,EAAK;AACzD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,OAAO,OAAO,IAAA,EAAM,KAAA,KAAU,YAAY,eAAA,CAAgB,IAAA,CAAK,KAAK,KAAK,CAAA;AAC3E;AAEO,SAAS,wBAAwB,GAAA,EAAiC;AACvE,EAAA,IAAI,CAAC,0BAAA,CAA2B,GAAG,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,IAAS,EAAA;AAC9B,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,OAAA;AACnC,EAAA,IAAI,SAAA,CAAU,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,QAAA;AACpC,EAAA,OAAO,IAAA;AACT;AAQA,SAAS,WAAW,KAAA,EAAwC;AAC1D,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACzB;AACA,EAAA,MAAM,CAAA,GAAI,OAAO,QAAA,EAAS;AAC1B,EAAA,OAAO,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,GAAK,EAAA;AACvB;AAEA,SAAS,cAAc,MAAA,EAA2B;AAChD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAEjD,EAAA,OAAO,eAAe,OAAA,CACpB,MAAA,EACA,IAAA,EACA,IAAA,GAAuB,EAAC,EACZ;AACZ,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,OAAA,CAAQ,gBAAgB,IAAI,MAAA,CAAO,MAAA;AACtD,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,QAAA,EAAS;AACpC,MAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,eAAe,CAAA,GAAI,UAAU,KAAK,CAAA,CAAA;AAAA,IACvD;AACA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAEvD,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,MACtE,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM,KAAK,IAAA,KAAS,MAAA,GAAY,KAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAAA,MAC5D,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAED,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK,OAAO,MAAA;AAE/B,IAAA,IAAI,MAAA,GAAkB,IAAA;AACtB,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,GAAS,IAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAI,aAAA,CAAc,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAuHO,SAAS,kBAAkB,MAAA,EAAwC;AACxE,EAAA,MAAM,OAAA,GAAU,cAAc,MAAM,CAAA;AAEpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,CAAC,GAAA,KACN,OAAA,CAAQ,QAAQ,oBAAA,EAAsB,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MACrD,gBAAA,EAAkB,CAAC,GAAA,KACjB,OAAA,CAAQ,QAAQ,4BAAA,EAA8B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC7D,gBAAA,EAAkB,CAAC,GAAA,KACjB,OAAA,CAAQ,QAAQ,iCAAA,EAAmC,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAClE,eAAA,EAAiB,CAAC,GAAA,KAChB,OAAA,CAAQ,QAAQ,gCAAA,EAAkC,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MACjE,sBAAsB,CAAC,QAAA,EAAU,IAAA,KAC/B,OAAA,CAAQ,OAAO,oCAAA,EAAsC;AAAA,QACnD,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,KAAA,EAAO,EAAE,QAAA;AAAS,OACnB,CAAA;AAAA,MACH,MAAA,EAAQ,MAAM,OAAA,CAAQ,MAAA,EAAQ,qBAAqB,CAAA;AAAA,MACnD,IAAA,EAAM,MAAM,OAAA,CAAQ,KAAA,EAAO,mBAAmB;AAAA,KAChD;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,mBAAmB,IAAI,CAAA;AAAA,MACvD,WAAW,CAAC,MAAA,EAAQ,IAAA,KAClB,OAAA,CAAQ,OAAO,iBAAA,EAAmB;AAAA,QAChC,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,KAAA,EAAO,EAAE,UAAA,EAAY,MAAA;AAAO,OAC7B;AAAA,KACL;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAC,IAAA,KACP,OAAA,CAAQ,OAAO,uBAAA,EAAyB;AAAA,QACtC,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,OAAO,IAAA,EAAM,MAAA,GAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAO,GAAI;AAAA,OACjD;AAAA,KACL;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,mBAAmB,IAAI,CAAA;AAAA,MACvD,IAAA,EAAM,CAAC,EAAA,EAAI,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,MACpF,MAAM,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,wBAAwB,IAAI,CAAA;AAAA,MAC3D,MAAA,EAAQ,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAQ,iBAAA,EAAmB,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MACjE,MAAA,EAAQ,CAAC,EAAA,EAAI,GAAA,KAAQ,QAAQ,OAAA,EAAS,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA,MAChG,OAAA,EAAS,CAAC,EAAA,KAAO,OAAA,CAAQ,UAAU,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAE;AAAA,KAChF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,OAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,gBAAgB,IAAI;AAAA,KACtD;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAO,CAAC,OAAA,EAAS,IAAA,KACf,OAAA,CAAQ,OAAO,gBAAA,EAAkB;AAAA,QAC/B,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA;AAAQ,OAC5B,CAAA;AAAA,MACH,IAAA,EAAM,CAAC,EAAA,EAAI,IAAA,KACT,OAAA,CAAQ,KAAA,EAAO,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,MACjE,MAAA,EAAQ,CAAC,GAAA,KACP,OAAA,CAAQ,QAAQ,gBAAA,EAAkB,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MACjD,MAAA,EAAQ,CAAC,EAAA,EAAI,GAAA,KACX,QAAQ,OAAA,EAAS,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA,MAC5E,OAAA,EAAS,CAAC,EAAA,KACR,OAAA,CAAQ,UAAU,CAAA,eAAA,EAAkB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAE;AAAA,KAChE;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO,CAAC,IAAA,KACN,OAAA,CAAQ,OAAO,uBAAA,EAAyB;AAAA,QACtC,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,OAAO,IAAA,EAAM,OAAA,GAAU,EAAE,QAAA,EAAU,IAAA,CAAK,SAAQ,GAAI;AAAA,OACrD,CAAA;AAAA,MACH,IAAA,EAAM,CAAC,EAAA,EAAI,IAAA,KACT,OAAA,CAAQ,KAAA,EAAO,CAAA,sBAAA,EAAyB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,MACxE,MAAA,EAAQ,CAAC,GAAA,KACP,OAAA,CAAQ,QAAQ,uBAAA,EAAyB,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MACxD,MAAA,EAAQ,CAAC,EAAA,EAAI,GAAA,KACX,OAAA,CAAQ,SAAS,CAAA,sBAAA,EAAyB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI;AAAA,QAClE,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,MACH,OAAA,EAAS,CAAC,EAAA,KACR,OAAA,CAAQ,UAAU,CAAA,sBAAA,EAAyB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAE;AAAA,KACvE;AAAA,IACA,KAAA,EAAO;AAAA,MACL,SAAA,EAAW,CAAC,GAAA,KACV,OAAA,CAAQ,QAAQ,0BAAA,EAA4B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC3D,QAAA,EAAU,CAAC,GAAA,KACT,OAAA,CAAQ,QAAQ,wBAAA,EAA0B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MACzD,SAAA,EAAW,CAAC,GAAA,KACV,OAAA,CAAQ,QAAQ,yBAAA,EAA2B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC1D,OAAA,EAAS,CAAC,EAAA,EAAI,IAAA,KACZ,OAAA,CAAQ,KAAA,EAAO,CAAA,cAAA,EAAiB,kBAAA,CAAmB,EAAE,CAAC,CAAA,KAAA,CAAA,EAAS,IAAI,CAAA;AAAA,MACrE,SAAA,EAAW,CAAC,EAAA,EAAI,IAAA,KACd,OAAA,CAAQ,KAAA,EAAO,CAAA,cAAA,EAAiB,kBAAA,CAAmB,EAAE,CAAC,CAAA,WAAA,CAAA,EAAe,IAAI;AAAA,KAC7E;AAAA,IACA,KAAA,EAAO;AAAA,MACL,QAAA,EAAU,CAAC,OAAA,EAAS,IAAA,KAClB,OAAA,CAAQ,KAAA,EAAO,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,OAAO,CAAC,CAAA,UAAA,CAAA,EAAc,IAAI,CAAA;AAAA,MACjF,eAAA,EAAiB,CAAC,OAAA,EAAS,GAAA,KACzB,QAAQ,MAAA,EAAQ,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,OAAO,CAAC,CAAA,WAAA,CAAA,EAAe,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA,MAC5F,YAAA,EAAc,CAAC,OAAA,EAAS,GAAA,KACtB,QAAQ,MAAA,EAAQ,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,OAAO,CAAC,CAAA,SAAA,CAAA,EAAa,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA,MAC1F,aAAA,EAAe,CAAC,OAAA,EAAS,IAAA,KACvB,OAAA,CAAQ,KAAA,EAAO,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,OAAO,CAAC,CAAA,UAAA,CAAA,EAAc,IAAI;AAAA,KACnF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,SAAS,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,wBAAwB,IAAI,CAAA;AAAA,MAC9D,aAAA,EAAe,CAAC,MAAA,EAAQ,IAAA,KACtB,OAAA,CAAQ,KAAA,EAAO,CAAA,cAAA,EAAiB,kBAAA,CAAmB,MAAM,CAAC,CAAA,OAAA,CAAA,EAAW,IAAI,CAAA;AAAA,MAC3E,WAAA,EAAa,CAAC,GAAA,KAAQ,OAAA,CAAQ,OAAO,oBAAA,EAAsB,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MACxE,YAAA,EAAc,CAAC,GAAA,KAAQ,OAAA,CAAQ,OAAO,qBAAA,EAAuB,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC1E,aAAA,EAAe,CAAC,GAAA,KAAQ,OAAA,CAAQ,OAAO,sBAAA,EAAwB,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC5E,sBAAsB,CAAC,QAAA,EAAU,IAAA,KAC/B,OAAA,CAAQ,OAAO,oCAAA,EAAsC;AAAA,QACnD,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,KAAA,EAAO,EAAE,QAAA;AAAS,OACnB;AAAA,KACL;AAAA,IACA,OAAA,EAAS;AAAA,MACP,SAAS,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,2BAA2B,IAAI,CAAA;AAAA,MACjE,MAAA,EAAQ,CAAC,IAAA,KACP,OAAA,CAAQ,OAAO,wBAAA,EAA0B;AAAA,QACvC,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,OAAO,IAAA,EAAM,IAAA,GAAO,EAAE,IAAA,EAAM,IAAA,CAAK,MAAK,GAAI;AAAA,OAC3C,CAAA;AAAA,MACH,OAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,yBAAyB,IAAI,CAAA;AAAA,MAC7D,YAAY,CAAC,QAAA,EAAU,IAAA,KACrB,OAAA,CAAQ,OAAO,6BAAA,EAA+B;AAAA,QAC5C,QAAQ,IAAA,EAAM,MAAA;AAAA,QACd,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA;AAAS,OAC9B,CAAA;AAAA,MACH,QAAA,EAAU,CAAC,GAAA,KACT,OAAA,CAAQ,QAAQ,0BAAA,EAA4B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC3D,cAAA,EAAgB,CAAC,GAAA,KACf,OAAA,CAAQ,QAAQ,iCAAA,EAAmC,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAClE,WAAA,EAAa,CAAC,OAAA,EAAS,IAAA,KACrB,OAAA,CAAQ,MAAA,EAAQ,CAAA,eAAA,EAAkB,kBAAA,CAAmB,OAAO,CAAC,CAAA,OAAA,CAAA,EAAW,IAAI;AAAA,KAChF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,MAAM,CAAC,IAAA,KAAS,OAAA,CAAQ,KAAA,EAAO,4BAA4B,IAAI,CAAA;AAAA,MAC/D,KAAA,EAAO,CAAC,GAAA,KACN,OAAA,CAAQ,QAAQ,0BAAA,EAA4B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC3D,MAAA,EAAQ,CAAC,eAAA,KACP,OAAA,CAAQ,UAAU,CAAA,yBAAA,EAA4B,kBAAA,CAAmB,eAAe,CAAC,CAAA,CAAE,CAAA;AAAA,MACrF,UAAA,EAAY,CAAC,eAAA,KACX,OAAA;AAAA,QACE,MAAA;AAAA,QACA,CAAA,yBAAA,EAA4B,kBAAA,CAAmB,eAAe,CAAC,CAAA,QAAA;AAAA;AACjE,KACJ;AAAA,IACA,KAAA,EAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,KAAA,EAAO,CAAC,GAAA,KACN,OAAA,CAAQ,QAAQ,6BAAA,EAA+B,EAAE,IAAA,EAAM,GAAA,EAAK;AAAA;AAChE,KACF;AAAA,IACA,EAAA,EAAI;AAAA,MACF,aAAA,EAAe,CAAC,GAAA,KACd,OAAA,CAAQ,QAAQ,2BAAA,EAA6B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC5D,IAAA,EAAM,CAAC,EAAA,EAAI,IAAA,KACT,OAAA,CAAQ,KAAA,EAAO,CAAA,uBAAA,EAA0B,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,MACzE,MAAA,EAAQ,CAAC,EAAA,EAAI,GAAA,KACX,QAAQ,MAAA,EAAQ,CAAA,uBAAA,EAA0B,kBAAA,CAAmB,EAAE,CAAC,CAAA,OAAA,CAAA,EAAW,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA,MAC1F,MAAA,EAAQ,CAAC,EAAA,EAAI,GAAA,KACX,QAAQ,MAAA,EAAQ,CAAA,uBAAA,EAA0B,kBAAA,CAAmB,EAAE,CAAC,CAAA,OAAA,CAAA,EAAW,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA,MAC1F,UAAA,EAAY,CAAC,OAAA,EAAS,IAAA,KACpB,OAAA,CAAQ,KAAA,EAAO,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,OAAO,CAAC,CAAA,MAAA,CAAA,EAAU,IAAI,CAAA;AAAA,MAChF,aAAA,EAAe,CAAC,GAAA,KACd,OAAA,CAAQ,QAAQ,2BAAA,EAA6B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC5D,aAAA,EAAe,CAAC,GAAA,KACd,OAAA,CAAQ,QAAQ,2BAAA,EAA6B,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA;AAAA,MAC5D,aAAA,EAAe,CAAC,GAAA,KACd,OAAA,CAAQ,MAAA,EAAQ,sBAAsB,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAC,CAAA,eAAA,CAAA,EAAmB;AAAA,QACvF,IAAA,EAAM,EAAE,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,MAAM,GAAA,CAAI,IAAA,EAAM,QAAA,EAAU,GAAA,CAAI,QAAA;AAAS,OAClE,CAAA;AAAA,MACH,aAAA,EAAe,CAAC,GAAA,KACd,OAAA,CAAQ,MAAA,EAAQ,sBAAsB,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAC,CAAA,eAAA,CAAA,EAAmB;AAAA,QACvF,IAAA,EAAM,EAAE,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,MAAM,GAAA,CAAI,IAAA,EAAM,QAAA,EAAU,GAAA,CAAI,QAAA;AAAS,OAClE;AAAA;AACL,GACF;AACF;;;AC9cO,IAAM,MAAA,GAAS;AAAA;AAAA,EAEpB,IAAA,EAAM,MAAA;AAAA;AAAA,EAEN,MAAA,EAAQ,QAAA;AAAA;AAAA,EAER,IAAA,EAAM,MAAA;AAAA;AAAA,EAEN,MAAA,EAAQ,QAAA;AAAA;AAAA,EAER,IAAA,EAAM,MAAA;AAAA;AAAA,EAEN,QAAA,EAAU,UAAA;AAAA;AAAA,EAEV,OAAA,EAAS,SAAA;AAAA;AAAA,EAET,UAAA,EAAY,YAAA;AAAA,EACZ,UAAA,EAAY,YAAA;AAAA;AAAA,EAEZ,UAAA,EAAY,YAAA;AAAA,EACZ,SAAA,EAAW;AACb;AAuCO,SAAS,sBAAsB,OAAA,EAAuC;AAC3E,EAAA,OAAO;AAAA,IACL,UAAU,OAAA,EAAS;AACjB,MAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,SAAA,CAAU,OAAO,CAAC,CAAA;AACtD,MAAA,OAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,GAAG,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,IAAA,GAAO;AACL,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,IACnC;AAAA,GACF;AACF;;;AC0CO,SAAS,gBAAA,CACd,SAAA,EACA,SAAA,EACA,KAAA,EACe;AACf,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AACpD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,MAAM,MAAA,GACJ,cAAc,MAAA,GAAS,CAAC,IAAI,CAAC,CAAA,GAC3B,cAAc,OAAA,GAAU,CAAC,GAAG,CAAC,CAAA,GAC7B,cAAc,IAAA,GAAO,CAAC,GAAG,CAAC,CAAA,GAC1B,CAAC,CAAA,EAAG,EAAE,CAAA;AAEV,EAAA,IAAI,IAAA,GAA6C,IAAA;AACjD,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,OAAO,SAAA,EAAW;AACxB,IAAA,MAAM,KAAK,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC7C,IAAA,MAAM,KAAK,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC7C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAC9B,IAAA,IAAI,SAAS,CAAA,EAAG;AAChB,IAAA,MAAM,GAAA,GAAA,CAAO,KAAK,MAAA,CAAO,CAAC,IAAI,EAAA,GAAK,MAAA,CAAO,CAAC,CAAA,IAAK,IAAA;AAEhD,IAAA,IAAI,MAAM,GAAA,EAAK;AAEf,IAAA,MAAM,KAAA,GAAQ,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,KAAK,IAAK,CAAA;AACxC,IAAA,IAAI,CAAC,IAAA,IAAQ,KAAA,GAAQ,IAAA,CAAK,KAAA,SAAc,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,KAAA,EAAM;AAAA,EAC5D;AACA,EAAA,OAAO,MAAM,EAAA,IAAM,IAAA;AACrB;;;ACvJO,SAAS,qBAAqB,MAAA,EAG1B;AACT,EAAA,OAAO,MAAA,CAAO,eAAe,MAAA,CAAO,UAAA;AACtC;AASO,SAAS,mBAAA,CACd,QACA,gBAAA,EACc;AACd,EAAA,MAAM,QAAA,GACJ,OAAO,kBAAA,IAAsB,IAAA,GACzB,KAAK,KAAA,CAAM,MAAA,CAAO,kBAAA,GAAqB,GAAI,CAAA,GAC3C,gBAAA;AACN,EAAA,MAAM,MAAA,GAAS,OAAO,UAAA,IAAc,GAAA;AACpC,EAAA,MAAM,OAAA,GAAU,OAAO,WAAA,IAAe,GAAA;AACtC,EAAA,MAAM,KAAA,GACJ,MAAA,CAAO,gBAAA,IAAoB,IAAA,GACvB,KAAK,KAAA,CAAM,MAAA,CAAO,gBAAA,GAAmB,GAAI,CAAA,GACzC,QAAA,GAAW,MAAA,IAAU,MAAA,CAAO,eAAe,GAAA,CAAA,GAAQ,OAAA;AACzD,EAAA,MAAM,QAAA,GACJ,OAAO,WAAA,IAAe,IAAA,CAAK,IAAI,GAAA,EAAK,KAAA,GAAQ,QAAA,GAAW,MAAA,GAAS,OAAO,CAAA;AACzE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,QAAA;AAAA,IACd,UAAA,EAAY,MAAA;AAAA,IACZ,WAAA,EAAa,QAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AACF;AAEA,SAAS,sBAAsB,IAAA,EAAyB;AACtD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,IAAW,IAAA,CAAK,SAAS,OAAA,EAAS;AAClD,IAAA,OAAO,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA,CAAK,KAAK,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,CAAE,IAAA,GAAO,MAAA,GAAS,CAAA;AAC3D;AAEA,SAAS,0BAA0B,KAAA,EAA2B;AAC5D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,EAAA,OAAO,oBAAA,CAAqB,IAAI,CAAA,GAAI,IAAA,CAAK,WAAA;AAC3C;AAMO,SAAS,qBAAA,CACd,KAAA,EACA,OAAA,EACA,SAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,0BAA0B,SAAS,CAAA;AACpD,EAAA,MAAM,UAAA,GAAuB,CAAC,CAAC,CAAA;AAE/B,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,IAAI,qBAAA,CAAsB,IAAI,CAAA,EAAG;AAC/B,MAAA,UAAA,CAAW,IAAA,CAAK,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAAA,IAC5C;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,OAAO,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA,IAAK,OAAO,eAAA,EAAiB;AAC5D,MAAA,UAAA,CAAW,KAAK,oBAAA,CAAqB,mBAAA,CAAoB,MAAA,EAAQ,QAAQ,CAAC,CAAC,CAAA;AAAA,IAC7E;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,UAAU,CAAA;AAC/B;AAEO,SAAS,gBAAA,CAAiB,KAAa,SAAA,EAAoC;AAChF,EAAA,IAAI,SAAA,EAAW,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,IAAA;AAC5C,EAAA,OAAO,oCAAA,CAAqC,KAAK,GAAG,CAAA;AACtD;AAEO,SAAS,gBAAA,CAAiB,KAAa,SAAA,EAAoC;AAChF,EAAA,IAAI,SAAA,EAAW,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,IAAA;AAC5C,EAAA,OAAO,8BAAA,CAA+B,KAAK,GAAG,CAAA;AAChD","file":"index.js","sourcesContent":["// ── Auth ──\n\nexport interface MagicLinkRequest {\n email: string;\n username?: string;\n device_name?: string;\n}\n\nexport interface MagicLinkRequestResponse {\n message: string;\n}\n\nexport interface MagicLinkVerifyRequest {\n email: string;\n token: string;\n device_name?: string;\n}\n\nexport interface MagicLinkVerifyResponse {\n token?: string;\n user: UserProfile;\n}\n\nexport interface OidcExchangeRequest {\n code: string;\n code_verifier: string;\n redirect_uri: string;\n device_name?: string;\n}\n\nexport interface OidcExchangeResponse {\n token?: string;\n user: UserProfile;\n}\n\nexport interface PasswordLoginRequest {\n email: string;\n password: string;\n device_name?: string;\n}\n\nexport interface PasswordLoginResponse {\n token?: string;\n user: UserProfile;\n}\n\n// ── User ──\n\nexport interface UserProfile {\n id: string;\n name: string;\n username: string;\n email: string;\n realm: RealmId | null;\n needs_realm_choice: boolean;\n locale: LocaleId | null;\n avatar_url: string | null;\n is_admin: boolean;\n created_at: string;\n}\n\nexport interface UpdateRealmRequest {\n realm: RealmId;\n}\n\nexport interface UpdateRealmResponse {\n realm: RealmId;\n user: UserProfile;\n}\n\nexport interface UpdateProfileRequest {\n name?: string;\n username?: string;\n}\n\nexport interface UpdateProfileResponse {\n user: UserProfile;\n}\n\nexport interface UsernameAvailabilityResponse {\n username: string;\n available: boolean;\n suggestion?: string;\n}\n\nexport interface PublicDirectorProfile {\n id: string;\n name: string;\n avatar_url: string | null;\n realm: RealmId | null;\n stories_count: number;\n}\n\n// ── Credits & payments ──\n\nexport type CreditPool = \"watch\" | \"create\";\n\nexport interface CreditBalance {\n watch: number;\n create: number;\n}\n\nexport interface CreditPack {\n id: string;\n pool: CreditPool;\n name: string;\n credits: number;\n price_cents: number;\n price: string;\n}\n\nexport interface PaymentMethod {\n id: string;\n type: string;\n last_four: string;\n label: string | null;\n is_default: boolean;\n created_at: string;\n}\n\nexport interface CreditBalanceResponse {\n balance: CreditBalance;\n}\n\nexport interface UploadCostResponse {\n file_size_bytes: number;\n file_size_mb: number;\n base_size_mb: number;\n credits_needed: number;\n balance: CreditBalance;\n can_afford: boolean;\n}\n\nexport interface PurchaseCreditsRequest {\n pack_id: string;\n payment_method_id?: string;\n}\n\nexport interface PurchaseAmountRequest {\n pool: CreditPool;\n credits: number;\n payment_method_id?: string;\n}\n\nexport interface PurchaseCreditsResponse {\n message: string;\n transaction_id?: string;\n balance: CreditBalance;\n}\n\nexport interface StorePaymentMethodRequest {\n type?: string;\n last_four: string;\n label?: string;\n}\n\nexport interface GrantCreditsRequest {\n user_id: string;\n pool: CreditPool;\n amount: number;\n note?: string;\n}\n\nexport interface GrantCreditsResponse {\n message: string;\n balance: CreditBalance;\n}\n\n// ── Catalog ──\n\nexport interface StoryListItem {\n id: string;\n title: string;\n description: string | null;\n genre: string | null;\n content_rating: ContentRating | null;\n published: boolean;\n published_version: number;\n watch_starts_count: number;\n choice_clicks_count: number;\n scenes_count: number;\n choices_count: number;\n tags: string[];\n creator: {\n id: string;\n name: string;\n } | null;\n created_at: string;\n updated_at: string;\n}\n\nexport interface StoryPreview {\n source: \"trailer\" | \"title_scene\" | \"none\";\n title: string;\n preview_url: string | null;\n media_type: string | null;\n is_ready: boolean;\n}\n\nexport interface PopularChoice {\n label: string;\n click_count: number;\n}\n\nexport interface StoryProgress {\n last_scene_id: string | null;\n bookmark_code: string | null;\n playback_seconds: number;\n watched_version: number;\n last_watched_at: string | null;\n}\n\nexport interface CatalogResponse {\n data: StoryListItem[];\n meta: {\n previews: Record<string, StoryPreview>;\n popular_choices: Record<string, PopularChoice[]>;\n creator_avatars: Record<string, string>;\n coverboxes: Record<string, string | null>;\n progress: Record<string, StoryProgress>;\n };\n}\n\nexport interface MineResponse {\n stories: StoryListItem[];\n data?: StoryListItem[];\n progress?: Record<string, StoryProgress>;\n meta: {\n coverboxes: Record<string, string | null>;\n };\n}\n\n// ── Watch / Scene Map ──\n\nexport interface SceneChoice {\n id: string;\n label: string;\n choice_type: string;\n choice_icon: string | null;\n choice_icon_media_id: string | null;\n choice_icon_url: string | null;\n reveal_mode: string;\n start_time_seconds: number | null;\n pause_for_choice: boolean;\n end_time_seconds: number | null;\n target_scene_id: string;\n x: number;\n y: number;\n w: number;\n h: number;\n arrow_rotation: number;\n arrow_scale: number;\n fade_in_ms?: number | null;\n fade_out_ms?: number | null;\n duration_ms?: number | null;\n visibility_rules: VisibilityRules | null;\n state_updates: StateUpdate[];\n}\n\nexport interface VisibilityRules {\n mode: \"all\" | \"any\";\n conditions: VisibilityCondition[];\n}\n\nexport interface VisibilityCondition {\n variable?: string;\n key?: string;\n operator?: string;\n value?: string;\n}\n\nexport interface StateUpdate {\n variable?: string;\n key?: string;\n action?: string;\n value?: string;\n}\n\nexport interface SceneNode {\n type: string;\n properties?: Record<string, unknown>;\n children?: SceneNode[];\n}\n\nexport type SceneActionPayload = Record<string, unknown> | unknown[];\n\nexport interface SceneMapEntry {\n scene_id: string;\n scene_title: string;\n color: string | null;\n is_title: boolean;\n media_title: string | null;\n media_type: string | null;\n media_url: string | null;\n stream_status: string | null;\n choice_style: string;\n choice_overlay_mode: string;\n goto_scene_id: string | null;\n choices: SceneChoice[];\n nodes: SceneNode[];\n}\n\nexport interface TreeGraphNode {\n id: string;\n title: string;\n is_title: boolean;\n is_end: boolean;\n level: number;\n index: number;\n x: number;\n y: number;\n color: string | null;\n}\n\nexport interface TreeGraphEdge {\n id: string;\n source: string;\n target: string;\n type: \"choice\" | \"go_to_scene\";\n}\n\nexport interface TreeGraph {\n nodes: TreeGraphNode[];\n edges: TreeGraphEdge[];\n meta: {\n root_id: string | null;\n level_count: number;\n };\n}\n\nexport interface WatchSnapshot {\n scene_id: string | null;\n state: Record<string, string>;\n history: HistoryEntry[];\n path: string[];\n visited_scene_ids?: string[];\n playback_seconds: number;\n}\n\nexport interface HistoryEntry {\n choice_id: string;\n scene_id: string;\n target_scene_id: string | null;\n at: string | null;\n path_index: number | null;\n}\n\nexport interface SceneMapResponse {\n story: {\n id: string;\n title: string;\n description: string | null;\n genre: string | null;\n content_rating: ContentRating | null;\n published_version: number;\n watch_starts_count: number;\n choice_clicks_count: number;\n };\n start_scene_id: string;\n scene_map: Record<string, SceneMapEntry>;\n tree_graph: TreeGraph;\n initial_snapshot: WatchSnapshot;\n initial_bookmark_code: string | null;\n}\n\n// ── Engagement ──\n\nexport interface TrackEngagementRequest {\n event: \"play_start\" | \"choice_click\";\n choice_id?: string;\n}\n\nexport interface EngagementResponse {\n watch_starts_count: number;\n choice_clicks_count: number;\n}\n\n// ── Bookmarks ──\n\nexport interface SaveBookmarkRequest {\n snapshot: WatchSnapshot;\n}\n\nexport interface BookmarkResponse {\n code: string;\n snapshot: WatchSnapshot;\n}\n\nexport interface BookmarkListItem {\n code: string;\n snapshot: WatchSnapshot;\n updated_at: string;\n}\n\nexport interface BookmarkListResponse {\n bookmarks: BookmarkListItem[];\n}\n\n// ── Pagination ──\n\nexport interface PaginatedLink {\n url: string | null;\n label: string;\n active: boolean;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n current_page: number;\n first_page_url: string;\n from: number | null;\n last_page: number;\n last_page_url: string;\n links: PaginatedLink[];\n next_page_url: string | null;\n path: string;\n per_page: number;\n prev_page_url: string | null;\n to: number | null;\n total: number;\n}\n\n// ── Scenes ──\n\nexport type LineType = \"text\" | \"sound\" | \"image\";\n\nexport interface TextLine {\n id: string;\n type?: LineType;\n media_id?: string;\n html: string;\n appear_at_ms: number;\n fade_in_ms: number;\n fade_out_ms: number;\n duration_ms: number;\n position_x?: number;\n position_y?: number;\n width_pct?: number;\n height_pct?: number;\n persist?: boolean;\n}\n\nexport interface SceneTextContent {\n html: string;\n lines?: TextLine[];\n}\n\nexport interface SceneListItem {\n id: string;\n story_id: string;\n title: string;\n order: number;\n is_title: boolean;\n is_end: boolean;\n color: string | null;\n media_id: string | null;\n alt_media_id: string | null;\n media_mode: \"text\" | \"imagery\" | \"film\" | null;\n text_content: SceneTextContent | null;\n text_style: {\n font_family?: string | null;\n text_color?: string | null;\n background_color?: string | null;\n } | null;\n goto_scene_id?: string | null;\n choice_end_time_seconds?: number | null;\n created_at: string;\n updated_at: string;\n}\n\nexport interface UpdateSceneRequest {\n title?: string;\n order?: number;\n media_id?: string | null;\n alt_media_id?: string | null;\n media_mode?: \"text\" | \"imagery\" | \"film\" | null;\n text_content?: SceneTextContent | null;\n text_style?: {\n font_family?: string | null;\n text_color?: string | null;\n background_color?: string | null;\n } | null;\n color?: string | null;\n is_title?: boolean;\n is_end?: boolean;\n goto_scene_id?: string | null;\n choice_style?: string | null;\n choice_overlay_mode?: string | null;\n choice_reveal_mode?: string | null;\n choice_start_time_seconds?: number | null;\n choice_pause_for_choice?: boolean;\n choice_end_time_seconds?: number | null;\n}\n\nexport interface CreateSceneRequest {\n story_id: string;\n title: string;\n order?: number;\n is_title?: boolean;\n is_end?: boolean;\n}\n\nexport interface SceneActionItem {\n id: string;\n scene_id: string;\n name: string;\n type: string | null;\n scene_choice_id: string | null;\n order: number;\n duration: number;\n properties: SceneActionPayload | null;\n subproperties: SceneActionPayload | null;\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface CreateSceneActionRequest {\n scene_id: string;\n name: string;\n type?: string | null;\n order?: number;\n duration?: number;\n properties?: SceneActionPayload | null;\n subproperties?: SceneActionPayload | null;\n}\n\nexport interface UpdateSceneActionRequest {\n name?: string;\n type?: string | null;\n order?: number;\n duration?: number;\n properties?: SceneActionPayload;\n subproperties?: SceneActionPayload;\n}\n\n// ── AI Generation ──\n\nexport type AiGenerationStatus =\n | \"pending\"\n | \"generating\"\n | \"ready\"\n | \"failed\"\n | \"accepted\"\n | \"rejected\";\n\nexport interface GenerateImageRequest {\n story_id: string;\n scene_id?: string;\n prompt: string;\n mood?: string;\n visual_style?: string;\n rejection_feedback?: string;\n previous_generation_id?: string;\n}\n\nexport interface AiGeneration {\n id: string;\n story_id: string;\n scene_id: string | null;\n status: AiGenerationStatus;\n user_prompt: string;\n style_context: {\n mood?: string;\n visual_style?: string;\n subject_prompt: string;\n full_prompt: string;\n negative_prompt?: string;\n };\n preview_url?: string;\n rejection_feedback: string | null;\n media_id: string | null;\n attempt_number: number;\n credits_charged: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface GenerateImageResponse {\n generation: AiGeneration;\n balance: { watch: number; create: number };\n}\n\nexport interface AiGenerationShowResponse {\n generation: AiGeneration;\n}\n\nexport interface AcceptGenerationRequest {\n scene_id: string;\n}\n\nexport interface AcceptGenerationResponse {\n generation: AiGeneration;\n scene: SceneListItem;\n media: MediaItem;\n}\n\nexport interface RejectGenerationRequest {\n feedback: string;\n}\n\nexport interface RejectGenerationResponse {\n generation: AiGeneration;\n}\n\nexport interface StoryStyleResponse {\n has_style: boolean;\n style_context: AiGeneration[\"style_context\"] | null;\n}\n\n// ── Chuzi AI (Bedrock short-story generation) ──\n\nexport interface AiStoryScenePayload {\n title: string;\n text: string;\n font_family: string;\n text_color: string;\n background_color: string;\n scene_color: string | null;\n}\n\nexport interface AiStoryEstimateRequest {\n answers: Record<string, string>;\n}\n\nexport interface AiStoryTokenEstimate {\n input_tokens: number;\n output_tokens: number;\n credits_needed: number;\n}\n\nexport interface AiStoryEstimateResponse {\n estimate: AiStoryTokenEstimate;\n balance: CreditBalance;\n can_afford: boolean;\n}\n\nexport interface AiStoryGenerateRequest {\n answers: Record<string, string>;\n}\n\nexport interface AiStoryGenerationResult {\n id: string;\n title: string;\n scenes: AiStoryScenePayload[];\n input_tokens: number;\n output_tokens: number;\n credits_charged: number;\n model_id: string;\n}\n\nexport interface AiStoryGenerateResponse {\n generation: AiStoryGenerationResult;\n balance: CreditBalance;\n}\n\nexport type AiSceneMode = \"create\" | \"overwrite\";\n\nexport interface AiSceneEstimateRequest {\n story_id: string;\n brief: string;\n mode: AiSceneMode;\n scene_id?: string;\n}\n\nexport interface AiSceneEstimateResponse {\n estimate: AiStoryTokenEstimate;\n scene_credits: number;\n total_credits: number;\n balance: CreditBalance;\n can_afford: boolean;\n}\n\nexport interface AiSceneGenerateRequest {\n story_id: string;\n brief: string;\n mode: AiSceneMode;\n scene_id?: string;\n}\n\nexport interface AiSceneGenerationResult {\n id: string;\n story_id: string;\n mode: AiSceneMode;\n scene: AiStoryScenePayload;\n input_tokens: number;\n output_tokens: number;\n credits_charged: number;\n scene_credits: number;\n model_id: string;\n}\n\nexport interface AiSceneGenerateResponse {\n generation: AiSceneGenerationResult;\n balance: CreditBalance;\n}\n\n// ── Media ──\n\nexport interface MediaItem {\n id: string;\n user_id: string;\n s3_key: string;\n source_path: string;\n output_prefix: string | null;\n status: \"uploaded\" | \"processing\" | \"ready\" | \"error\";\n meta: Record<string, unknown>;\n order: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface UploadUrlRequest {\n filename: string;\n contentType: string;\n}\n\nexport interface UploadUrlResponse {\n key: string;\n uploadUrl: string;\n}\n\nexport interface RegisterMediaRequest {\n key: string;\n s3_key: string;\n filename: string;\n content_type?: string;\n title?: string;\n file_size?: number;\n}\n\nexport interface RegisterMediaResponse extends MediaItem {\n credits_charged: number;\n balance: number;\n}\n\nexport interface TranscodeRequest {\n media_id: string;\n}\n\nexport interface TranscodeResponse {\n message: string;\n job_id: string | null;\n manifest_path?: string;\n}\n\nexport interface PlayUrlResponse {\n play_url: string;\n status: string;\n}\n\nexport interface SourceUrlResponse {\n url: string;\n}\n\n// ── Story authoring ──\n\nexport interface CreateStoryRequest {\n title: string;\n description?: string | null;\n genre?: string | null;\n content_rating?: ContentRating | null;\n}\n\nexport interface UpdateStoryRequest {\n title?: string;\n description?: string | null;\n genre?: string | null;\n content_rating?: ContentRating | null;\n published?: boolean;\n tags?: string[];\n}\n\nexport interface TagListResponse {\n data: string[];\n}\n\n// ── Content Ratings ──\n\nexport type ContentRating = \"G\" | \"PG\" | \"PG-13\" | \"R\" | \"NC-17\";\n\nexport interface ContentRatingDefinition {\n id: ContentRating;\n label: string;\n description: string;\n}\n\n// ── Realm Config ──\n\nexport type RealmId = \"cosmos\" | \"wilds\";\n\n/** Supported UI locales — matches PHP `chuzi_realms.supported_locales`. */\nexport type LocaleId = \"en\" | \"es\" | \"fr\" | \"de\" | \"pt\";\n\nexport interface RealmDefinition {\n label: string;\n short_label: string;\n /** Canonical English lexicon (always present). */\n lexicon: Record<string, string>;\n /** Optional per-locale overrides; missing keys fall through to `lexicon`. */\n locales?: Partial<Record<LocaleId, Record<string, string>>>;\n}\n\nexport interface RealmConfigResponse {\n realms: Record<RealmId, RealmDefinition>;\n fallback_lexicon: Record<string, string>;\n fallback_locales?: Partial<Record<LocaleId, Record<string, string>>>;\n intro: {\n line1: string;\n line2: string;\n };\n intro_locales?: Partial<Record<LocaleId, { line1: string; line2: string }>>;\n profile: {\n title: string;\n current_prefix: string;\n switch_prompt: string;\n };\n profile_locales?: Partial<Record<LocaleId, { title: string; current_prefix: string; switch_prompt: string }>>;\n allowed_realm_ids: RealmId[];\n supported_locales: LocaleId[];\n locale_labels?: Partial<Record<LocaleId, string>>;\n}\n\nexport interface UpdateLocaleRequest {\n locale: LocaleId;\n}\n\nexport interface UpdateLocaleResponse {\n locale: LocaleId;\n}\n\n// ── Scene Visibility ──\n\nexport interface SceneVisibility {\n /** Whether the user can navigate to this scene-star. */\n navigable: boolean;\n /** Whether the star/edge should render at reduced opacity. */\n dimmed: boolean;\n}\n\n/**\n * Compute per-scene navigable/dimmed flags for a constellation.\n *\n * Rules:\n * - If `isCreator` is true, everything is navigable and bright.\n * - Title scenes are always navigable and bright.\n * - If the user has watched the ending (`endingSeen`), all scenes unlock.\n * - Otherwise non-title scenes are locked and dimmed.\n */\nexport function computeSceneVisibility(\n sceneList: Pick<SceneListItem, \"is_title\" | \"is_end\">[],\n opts: { isCreator: boolean; endingSeen: boolean },\n): SceneVisibility[] {\n if (opts.isCreator || opts.endingSeen) {\n return sceneList.map(() => ({ navigable: true, dimmed: false }));\n }\n return sceneList.map((scene) => ({\n navigable: scene.is_title,\n dimmed: !scene.is_title,\n }));\n}\n","import type { CreditPool } from \"../types/index.js\";\n\n/**\n * Standard sell rates from credit-policy.md §9.\n * Watch: $0.05/credit → $1 buys 20 credits.\n * Create: $0.10/credit → $1 buys 10 credits.\n */\nexport const CREDIT_CENTS_PER_UNIT: Record<CreditPool, number> = {\n watch: 5,\n create: 10,\n};\n\nexport const CREDITS_PER_DOLLAR: Record<CreditPool, number> = {\n watch: 20,\n create: 10,\n};\n\nexport function defaultPurchaseCredits(pool: CreditPool): number {\n return CREDITS_PER_DOLLAR[pool];\n}\n\nexport function priceCentsForCredits(pool: CreditPool, credits: number): number {\n return Math.max(1, credits) * CREDIT_CENTS_PER_UNIT[pool];\n}\n\nexport function formatCreditPrice(cents: number): string {\n return `$${(cents / 100).toFixed(2)}`;\n}\n","/**\n * Guided prompts for Chuzi AI story creation.\n */\n\nexport interface ChuziAiPromptStep {\n key: string;\n lexicon_title: string;\n lexicon_hint: string;\n required?: boolean;\n}\n\nexport const CHUZI_AI_PROMPT_STEPS: ChuziAiPromptStep[] = [\n {\n key: \"protagonist\",\n lexicon_title: \"chuzi_ai_step_protagonist\",\n lexicon_hint: \"chuzi_ai_step_protagonist_hint\",\n required: true,\n },\n {\n key: \"setting\",\n lexicon_title: \"chuzi_ai_step_setting\",\n lexicon_hint: \"chuzi_ai_step_setting_hint\",\n required: true,\n },\n {\n key: \"conflict\",\n lexicon_title: \"chuzi_ai_step_conflict\",\n lexicon_hint: \"chuzi_ai_step_conflict_hint\",\n required: true,\n },\n {\n key: \"journey\",\n lexicon_title: \"chuzi_ai_step_journey\",\n lexicon_hint: \"chuzi_ai_step_journey_hint\",\n required: true,\n },\n {\n key: \"tone\",\n lexicon_title: \"chuzi_ai_step_tone\",\n lexicon_hint: \"chuzi_ai_step_tone_hint\",\n required: false,\n },\n];\n","import type {\n RealmId,\n RealmDefinition,\n ContentRating,\n ContentRatingDefinition,\n LocaleId,\n} from \"../types/index.js\";\n\nexport * from \"./credits.js\";\nexport * from \"./chuzi-ai-prompts.js\";\n\nexport const REALM_IDS: readonly RealmId[] = [\"cosmos\", \"wilds\"] as const;\n\nexport const SUPPORTED_LOCALES: readonly LocaleId[] = [\n \"en\",\n \"es\",\n \"fr\",\n \"de\",\n \"pt\",\n] as const;\n\nexport const LOCALE_LABELS: Record<LocaleId, string> = {\n en: \"English\",\n es: \"Español\",\n fr: \"Français\",\n de: \"Deutsch\",\n pt: \"Português\",\n};\n\nexport const DEFAULT_LOCALE: LocaleId = \"en\";\n\ntype RealmLexiconOverrides = Partial<Record<RealmId, Record<string, string>>>;\nlet runtimeRealmLexiconOverrides: RealmLexiconOverrides = {};\n\nexport function getRealmLexiconOverrides(): RealmLexiconOverrides {\n return {\n cosmos: runtimeRealmLexiconOverrides.cosmos\n ? { ...runtimeRealmLexiconOverrides.cosmos }\n : undefined,\n wilds: runtimeRealmLexiconOverrides.wilds\n ? { ...runtimeRealmLexiconOverrides.wilds }\n : undefined,\n };\n}\n\nexport function setRealmLexiconOverrides(overrides: RealmLexiconOverrides): void {\n runtimeRealmLexiconOverrides = {\n cosmos: overrides.cosmos ? { ...overrides.cosmos } : undefined,\n wilds: overrides.wilds ? { ...overrides.wilds } : undefined,\n };\n}\n\nexport function isSupportedLocale(value: unknown): value is LocaleId {\n return (\n typeof value === \"string\" &&\n SUPPORTED_LOCALES.includes(value as LocaleId)\n );\n}\n\n/**\n * Normalize a raw locale tag (e.g. \"en-US\", \"pt_BR\") to a supported LocaleId,\n * matching the PHP `LocaleResolver::normalize` behavior.\n */\nexport function normalizeLocale(value: string | null | undefined): LocaleId | null {\n if (!value) return null;\n const lower = value.toLowerCase().trim();\n if (isSupportedLocale(lower)) return lower;\n const base = lower.split(/[-_]/, 1)[0];\n return isSupportedLocale(base) ? base : null;\n}\n\n/**\n * Pick the best supported locale from a browser Accept-Language string.\n * Mirrors PHP `LocaleResolver::matchAcceptLanguage` (q-value aware).\n */\nexport function matchAcceptLanguage(\n accept: string | null | undefined\n): LocaleId | null {\n if (!accept) return null;\n const tags = accept\n .split(\",\")\n .map((part) => {\n const [tag, ...params] = part.trim().split(\";\");\n const qParam = params.find((p) => p.trim().startsWith(\"q=\"));\n const q = qParam ? parseFloat(qParam.split(\"=\")[1]) || 0 : 1;\n return { tag: tag.trim(), q };\n })\n .filter((c) => c.tag && c.tag !== \"*\")\n .sort((a, b) => b.q - a.q);\n\n for (const c of tags) {\n const normalized = normalizeLocale(c.tag);\n if (normalized) return normalized;\n }\n return null;\n}\n\nexport const CONTENT_RATING_IDS: readonly ContentRating[] = [\n \"G\",\n \"PG\",\n \"PG-13\",\n \"R\",\n \"NC-17\",\n] as const;\n\nexport const CONTENT_RATINGS: Record<ContentRating, ContentRatingDefinition> = {\n G: {\n id: \"G\",\n label: \"G\",\n description: \"General Audiences — all ages admitted.\",\n },\n PG: {\n id: \"PG\",\n label: \"PG\",\n description: \"Parental Guidance Suggested — some material may not be suitable for children.\",\n },\n \"PG-13\": {\n id: \"PG-13\",\n label: \"PG-13\",\n description: \"Parents Strongly Cautioned — some material may be inappropriate for children under 13.\",\n },\n R: {\n id: \"R\",\n label: \"R\",\n description: \"Restricted — under 17 requires accompanying parent or adult guardian.\",\n },\n \"NC-17\": {\n id: \"NC-17\",\n label: \"NC-17\",\n description: \"Adults Only — no one 17 and under admitted.\",\n },\n};\n\nexport function isContentRating(value: unknown): value is ContentRating {\n return typeof value === \"string\" && CONTENT_RATING_IDS.includes(value as ContentRating);\n}\n\nexport const REALMS: Record<RealmId, RealmDefinition> = {\n cosmos: {\n label: \"CHUZI COSMOS\",\n short_label: \"Cosmos\",\n lexicon: {\n genre: \"Galaxy\",\n story: \"Star System\",\n scene: \"Planet\",\n scene_choice: \"Trajectory\",\n node: \"Signal\",\n node_type_choice: \"Trajectory\",\n node_type_media: \"Transmission\",\n node_type_go_to_scene: \"Warp\",\n player: \"Voyager\",\n library: \"Star Chart\",\n library_open: \"Open Star Chart\",\n library_close: \"Close Star Chart\",\n editor: \"Mission Control\",\n publish: \"Launch\",\n experience_realm_idea: \"Outer Space\",\n the_end: \"The End\",\n media_pool: \"Cargo Bay\",\n scene_graph: \"Star Chart\",\n watch_path: \"Your trajectory\",\n untitled_story: \"Untitled Star System\",\n unknown_genre: \"Unknown Galaxy\",\n scenes_count: \"planets\",\n choices_count: \"trajectories\",\n drafts_published: \"Drafts + Launched\",\n published_ver: \"Launched ver.\",\n draft: \"Draft\",\n no_scenes_yet: \"No planets in this chart yet.\",\n no_path_yet: \"No trajectory to show yet.\",\n menu_empty_drafts: \"No star systems yet. Chart one to begin.\",\n menu_empty_published: \"No launched systems in the chart.\",\n menu_published_heading: \"Launched constellations\",\n menu_create_story: \"New star system\",\n menu_create_film: \"Create film\",\n film_title_placeholder: \"Star system title\",\n select_genre: \"Select galaxy\",\n genre_field_aria: \"Galaxy\",\n delete_story_verb: \"Delete star system\",\n title_scene_default: \"Launch\",\n choices_made_stat: \"trajectories taken\",\n content_rating: \"Audience Class\",\n content_rating_field_aria: \"Audience class\",\n select_content_rating: \"Select audience class\",\n unrated: \"Unclassified\",\n viewer_credits: \"Fuel Cells\",\n creator_credits: \"Stardust\",\n editor_media_upload: \"Upload Transmission\",\n editor_media_preview: \"Transmission Preview\",\n editor_alt_media: \"Effects\",\n editor_choices: \"Choices\",\n editor_scene_settings: \"Star Settings\",\n editor_title_scene: \"Start\",\n editor_film_title: \"Star System Title\",\n editor_film_title_hint: \"Click to rename this star system\",\n editor_ending_scene: \"End\",\n editor_play: \"Engage\",\n editor_pause: \"Hold\",\n editor_prev_frame: \"Previous Frame\",\n editor_next_frame: \"Next Frame\",\n editor_seek: \"Seek\",\n editor_no_media: \"No transmission assigned\",\n editor_uploading: \"Transmitting\\u2026\",\n editor_drop_media: \"Drop transmission here\",\n editor_scene_type: \"Star Type\",\n editor_save: \"Lock In\",\n editor_cancel: \"Abort\",\n editor_create_scene: \"Chart Planet\",\n editor_create_scene_plain: \"Create New Scene\",\n editor_create_scene_cost: \"1 Stardust\",\n editor_delete_scene_cta: \"Delete Scene\",\n editor_delete_scene_confirm: \"Click again to confirm\",\n editor_scene_locked_delete: \"Start and end scenes cannot be deleted.\",\n editor_scene_color: \"Star Hue\",\n viewer_continue: \"Continue Signal\",\n chuzi_ai_name: \"Chuzi AI\",\n chuzi_ai_create_with: \"Create with Chuzi AI\",\n chuzi_ai_create_manual: \"Enter title manually\",\n chuzi_ai_intro: \"Answer a few story prompts and Chuzi AI will chart your short story.\",\n chuzi_ai_step_of: \"Step\",\n chuzi_ai_back: \"Back\",\n chuzi_ai_next: \"Next\",\n chuzi_ai_scenes_label: \"scenes\",\n chuzi_ai_creating: \"Creating\\u2026\",\n chuzi_ai_generate_failed: \"Story generation failed.\",\n chuzi_ai_build_failed: \"Failed to build story.\",\n chuzi_ai_generate: \"Generate story\",\n chuzi_ai_generating: \"Generating\\u2026\",\n chuzi_ai_token_in: \"Tokens in\",\n chuzi_ai_token_out: \"Tokens out\",\n chuzi_ai_credits_cost: \"AI credits\",\n chuzi_ai_scene_credits: \"Scene credits\",\n chuzi_ai_total_cost: \"Total create credits\",\n chuzi_ai_insufficient: \"Not enough create credits for this generation.\",\n chuzi_ai_apply: \"Build story\",\n chuzi_ai_applying: \"Building scenes\\u2026\",\n chuzi_ai_scene_create: \"Create scene with Chuzi AI\",\n chuzi_ai_scene_overwrite: \"Rewrite scene with Chuzi AI\",\n chuzi_ai_scene_brief: \"Scene direction\",\n chuzi_ai_scene_brief_hint: \"Describe what should happen in this scene. Chuzi AI reads your existing story for characters, tone, and style.\",\n chuzi_ai_scene_context_note: \"Uses your story\\u2019s existing scenes, typography, and art direction as context.\",\n chuzi_ai_scene_overwrite_confirm: \"I understand this replaces this scene\\u2019s text and styling.\",\n chuzi_ai_scene_apply_create: \"Create scene\",\n chuzi_ai_scene_apply_overwrite: \"Replace scene\",\n chuzi_ai_step_protagonist: \"Protagonist\",\n chuzi_ai_step_protagonist_hint: \"Who is your main character? Name, age, personality, and what makes them interesting.\",\n chuzi_ai_step_setting: \"Setting\",\n chuzi_ai_step_setting_hint: \"Where and when does the story begin? Describe the world and their everyday life.\",\n chuzi_ai_step_conflict: \"Conflict\",\n chuzi_ai_step_conflict_hint: \"What event or problem kicks the story into motion?\",\n chuzi_ai_step_journey: \"Journey\",\n chuzi_ai_step_journey_hint: \"What challenges, turning points, climax, and resolution shape the story?\",\n chuzi_ai_step_tone: \"Tone & mood\",\n chuzi_ai_step_tone_hint: \"Genre, mood, and atmosphere (e.g. bittersweet sci-fi, cozy mystery, epic fantasy).\",\n chuzi_ai_monomyth_hero: \"Hero\\u2019s Journey: the protagonist\",\n chuzi_ai_monomyth_world: \"Monomyth: ordinary world\",\n chuzi_ai_monomyth_you: \"Story Circle: zone of comfort\",\n chuzi_ai_monomyth_need: \"Story Circle: something isn\\u2019t right\",\n chuzi_ai_monomyth_go: \"Monomyth: crossing the first threshold\",\n chuzi_ai_monomyth_search: \"Monomyth: road of trials\",\n chuzi_ai_monomyth_find: \"Monomyth: the ultimate boon\",\n chuzi_ai_monomyth_take: \"Monomyth: atonement with the father\",\n chuzi_ai_monomyth_return: \"Monomyth: crossing the return threshold\",\n chuzi_ai_monomyth_change: \"Monomyth: freedom to live\",\n editor_ai_generate: \"Generate Transmission\",\n editor_ai_generating: \"Transmitting Signal\\u2026\",\n editor_ai_mood_question: \"What energy should this planet radiate?\",\n editor_ai_style_question: \"What vision style for this transmission?\",\n editor_ai_prompt_question: \"Describe this planet\\u2019s landscape\",\n editor_ai_accept: \"Lock Transmission\",\n editor_ai_reject: \"Reject Signal\",\n editor_ai_retry: \"Retransmit\",\n editor_ai_feedback_prompt: \"How should we adjust the signal?\",\n editor_ai_credit_cost: \"1 Stardust per signal\",\n spending_modal_title: \"Refuel Your Mission\",\n spending_modal_body: \"You need more credits to continue. Choose how many to add.\",\n spending_modal_no_payment: \"Add a payment method to purchase credits.\",\n spending_modal_credits_label: \"Credits to add\",\n spending_modal_price_label: \"Total\",\n spending_modal_admin_note: \"Admin — credits are granted free of charge.\",\n spending_modal_purchase: \"Purchase Credits\",\n spending_modal_grant: \"Grant Credits\",\n spending_modal_add_card: \"Add Payment Method\",\n spending_modal_card_last_four: \"Card last four digits\",\n spending_modal_card_label: \"Card label (optional)\",\n spending_modal_processing: \"Processing\\u2026\",\n spending_modal_success: \"Credits added.\",\n spending_modal_error: \"Could not complete purchase. Try again.\",\n spending_modal_cancel: \"Not now\",\n spending_insufficient_credits: \"Not enough credits. Purchase more to continue.\",\n editor_ai_generating_scene: \"Planet forming\\u2026\",\n editor_ai_style_badge: \"Signal Style\",\n editor_ai_failed: \"Signal lost. Try retransmitting.\",\n editor_media_attached: \"This star already has a transmission locked in.\",\n editor_remove_media: \"Remove Transmission\",\n editor_media_question: \"What's this scene's media?\",\n editor_media_type_text: \"Text\",\n editor_media_type_imagery: \"Imagery\",\n editor_media_type_film: \"Film\",\n editor_media_preview_cta: \"Preview\",\n editor_media_preview_disabled: \"Add text to enable preview.\",\n editor_text_toolbar_label: \"Generator\",\n editor_text_font_label: \"Font\",\n editor_text_color_label: \"Text Color\",\n editor_text_background_label: \"Background\",\n editor_text_placeholder: \"Start writing scene media...\",\n editor_line_add: \"Add Text\",\n editor_text_lines_section: \"Transmission Lines\",\n editor_line_editor_label: \"Editor\",\n editor_line_number: \"Line\",\n editor_select_line_hint: \"Select a transmission line to edit\",\n editor_select_effect_hint: \"Select an effect to edit\",\n editor_select_choice_hint: \"Select a choice to edit\",\n editor_line_timestamp: \"Appears at\",\n editor_line_fade_in: \"Fade In\",\n editor_line_fade_out: \"Fade Out\",\n editor_line_duration: \"Duration\",\n editor_line_persist: \"Stay on Screen\",\n editor_effects_section: \"Effects\",\n editor_effects_add: \"Add sounds, effects, etc\",\n editor_effect_fade_in_sound: \"Fade In Sound\",\n editor_effect_fade_out_sound: \"Fade Out Sound\",\n editor_effect_fade_in_visual: \"Fade In\",\n editor_effect_fade_out_visual: \"Fade Out\",\n editor_timeline_label: \"Timeline\",\n editor_preview_label: \"Preview\",\n editor_preview_play: \"Play\",\n editor_preview_pause: \"Pause\",\n editor_media_placeholder_imagery: \"Imagery authoring is coming soon.\",\n editor_media_placeholder_film: \"Film authoring is coming soon.\",\n editor_goto_scene: \"Goto Star\",\n editor_scene_duration: \"Transmission Duration\",\n editor_add_choice: \"Add Trajectory\",\n editor_arrow_tool: \"Place Arrow\",\n editor_goto_nullified: \"Disabled — trajectories override goto\",\n editor_remove_choice: \"Remove Trajectory\",\n editor_choice_target: \"Destination Star\",\n editor_choices_empty_hint: \"Set a goto star or add a trajectory to branch the story.\",\n editor_goto_none: \"None\",\n editor_choice_label: \"Trajectory\",\n editor_flow_timeline: \"Story Flow\",\n editor_flow_goto_path: \"Default Goto\",\n editor_flow_add_choice_here: \"Add Trajectory Here\",\n editor_flow_choice_branch: \"Branch\",\n editor_flow_content_ref: \"Content\",\n editor_scene_duration_unit: \"seconds\",\n editor_scene_duration_override_hint: \"Overrides transmission length. Signal runtime: {duration}s\",\n editor_arrow_scale: \"Span\",\n editor_arrow_rotation: \"Bearing\",\n editor_arrow_rotate_hint: \"Drag the beacon above the arrow in preview to rotate\",\n constellation_no_coverbox: \"Uncharted\",\n hud_edit_control: \"Engage\",\n hud_delete_control: \"Jettison\",\n hud_publish_control: \"Launch\",\n hud_launch_control: \"Launch\",\n editor_publish_story: \"Release\",\n viewer_loading: \"Loading transmission…\",\n viewer_preparing: \"Spooling media…\",\n viewer_close: \"Exit\",\n viewer_complete: \"Transmission complete\",\n viewer_stage_label: \"Viewport\",\n viewer_choose_path: \"Choose\",\n create_button: \"CREATE\",\n publish_form_heading: \"Launch readiness\",\n tags_label: \"Signal Tags\",\n tags_placeholder: \"Search signal tags\\u2026\",\n tags_empty: \"No signal tags yet\",\n tags_required: \"At least one signal tag is required.\",\n story_picker_label: \"Constellations\",\n created_by: \"Directed by\",\n chosen_by: \"Chosen by\",\n story_metadata_heading: \"Star system details\",\n story_metadata_save: \"Save\",\n constellation_title_edit_hint: \"Edit star system title and details\",\n director_profile_title: \"Director profile\",\n director_profile_name_label: \"Name\",\n director_profile_realm_label: \"Experience realm\",\n director_profile_image_label: \"Image\",\n director_profile_image_hint:\n \"Realm-themed seal — switching the realm above swaps the seal. Custom uploads land with the V1 avatar endpoints.\",\n director_profile_tab_profile: \"Profile\",\n director_profile_tab_experience_mapping: \"Experience Mapping\",\n director_profile_admin_only: \"Admin only\",\n director_profile_cancel: \"Cancel\",\n director_profile_close: \"Close\",\n director_profile_save: \"Save\",\n director_profile_saving: \"Saving…\",\n director_profile_name_required: \"Name is required.\",\n director_profile_save_failed: \"Save failed\",\n experience_mapping_loading: \"Loading experience mapping…\",\n experience_mapping_empty: \"No template hierarchy available yet.\",\n experience_mapping_retry: \"Retry\",\n experience_mapping_story_label: \"Story\",\n experience_mapping_scene_label: \"Scene\",\n experience_mapping_action_label: \"Action\",\n experience_mapping_field_title: \"Title\",\n experience_mapping_field_description: \"Description\",\n experience_mapping_field_genre: \"Genre\",\n experience_mapping_field_content_rating: \"Content rating\",\n experience_mapping_field_color: \"Color\",\n experience_mapping_field_name: \"Name\",\n experience_mapping_field_type: \"Type\",\n experience_mapping_field_order: \"Order\",\n experience_mapping_field_duration: \"Duration\",\n experience_mapping_field_properties: \"Properties\",\n experience_mapping_field_subproperties: \"Subproperties\",\n experience_mapping_save_changes: \"Save changes\",\n experience_mapping_saved: \"Saved\",\n experience_mapping_save_error: \"Could not save changes.\",\n experience_mapping_delete_story: \"Delete story\",\n experience_mapping_delete_scene: \"Delete scene\",\n experience_mapping_delete_action: \"Delete action\",\n experience_mapping_delete_confirm: \"Click again to confirm\",\n experience_mapping_delete_error: \"Delete failed.\",\n experience_mapping_expand_all: \"Expand all\",\n experience_mapping_collapse_all: \"Collapse all\",\n experience_mapping_forbidden: \"You do not have admin access for this section.\",\n experience_mapping_bad_json: \"JSON must be valid before saving.\",\n experience_mapping_intro:\n \"Edit realm vocabulary from largest to smallest. Generate JSON and paste it in chat for code application.\",\n experience_mapping_dirty: \"dirty changes\",\n experience_mapping_export_ready: \"No unsaved mapping edits yet.\",\n experience_mapping_export_json: \"Generate JSON export\",\n experience_mapping_copy_json: \"Copy JSON\",\n experience_mapping_copied: \"Copied\",\n experience_mapping_paste_instruction:\n \"Paste this JSON in chat and I will apply it to chuzi-shared.\",\n experience_mapping_export_empty: \"Export output appears here.\",\n experience_mapping_select_realm: \"Select realm\",\n experience_mapping_group_major_idea: \"Major Idea\",\n experience_mapping_helper_realm_idea:\n \"Highest-level concept for this realm.\",\n experience_mapping_save_experience: \"Save to experience\",\n experience_mapping_saved_experience:\n \"Saved to current experience. Some labels appear immediately.\",\n auth_email_placeholder: \"Email\",\n auth_password_input_placeholder: \"Password\",\n auth_password_sign_in_button: \"Sign In\",\n auth_password_signing_in: \"Signing in...\",\n auth_signin_tab: \"Sign in\",\n auth_signup_tab: \"Sign up\",\n auth_signup_subtitle: \"Create your account with secure sign-in.\",\n auth_signin_subtitle: \"Sign in with your account provider.\",\n auth_sign_up_button: \"Continue with Google\",\n auth_username_placeholder: \"Username\",\n auth_sign_in_button: \"Continue with Google\",\n auth_signing_in: \"Signing in...\",\n auth_oidc_redirecting: \"Redirecting to secure sign-in...\",\n auth_oidc_failed: \"Could not start sign-in.\",\n auth_oidc_callback_processing: \"Completing sign-in...\",\n auth_oidc_verified: \"Signed in. Redirecting...\",\n auth_oidc_callback_failed: \"Could not complete sign-in.\",\n auth_oidc_token_missing: \"Sign-in token was missing.\",\n auth_magic_link_sent:\n \"If that email is registered, a magic link has been sent.\",\n auth_magic_link_sent_signup: \"Check your email for your sign-up link.\",\n auth_magic_link_verifying: \"Verifying magic link...\",\n auth_magic_link_verified: \"Signed in. Redirecting...\",\n auth_magic_link_failed: \"This magic link is invalid or expired.\",\n auth_magic_link_cta: \"Use another email\",\n auth_login_failed: \"Sign-in failed.\",\n auth_username_checking: \"Checking username availability...\",\n auth_username_available: \"Username is available.\",\n auth_username_unavailable: \"Username is taken; updated to an available suggestion.\",\n auth_username_required: \"Username is required.\",\n auth_username_update_failed: \"Could not reserve a unique username.\",\n experience_mapping_group_experience_root: \"Experience Root\",\n experience_mapping_group_node_types: \"Node Types\",\n experience_mapping_group_scene_structure: \"Scene Structure\",\n experience_mapping_group_media: \"Media Terms\",\n experience_mapping_group_counts: \"Counts and Adjacent Labels\",\n experience_mapping_helper_story: \"Largest narrative unit.\",\n experience_mapping_helper_scene: \"Contained unit under story.\",\n experience_mapping_helper_scene_choice: \"Branching choice in a scene.\",\n experience_mapping_helper_node: \"Smallest flow node.\",\n experience_mapping_helper_alt_media: \"Smallest related media label.\",\n },\n locales: {\n es: {\n genre: \"Galaxia\",\n story: \"Sistema Estelar\",\n scene: \"Planeta\",\n scene_choice: \"Trayectoria\",\n player: \"Viajero\",\n library: \"Carta Estelar\",\n editor: \"Control de Misión\",\n publish: \"Lanzar\",\n the_end: \"Órbita Final\",\n untitled_story: \"Sistema Estelar sin título\",\n menu_create_story: \"Nuevo sistema estelar\",\n film_title_placeholder: \"Título del sistema estelar\",\n select_genre: \"Seleccionar galaxia\",\n created_by: \"Dirigido por\",\n },\n fr: {\n genre: \"Galaxie\",\n story: \"Système Stellaire\",\n scene: \"Planète\",\n scene_choice: \"Trajectoire\",\n player: \"Voyageur\",\n library: \"Carte Stellaire\",\n editor: \"Contrôle de Mission\",\n publish: \"Lancer\",\n the_end: \"Orbite Finale\",\n untitled_story: \"Système stellaire sans titre\",\n menu_create_story: \"Nouveau système stellaire\",\n film_title_placeholder: \"Titre du système stellaire\",\n select_genre: \"Sélectionner une galaxie\",\n created_by: \"Réalisé par\",\n },\n de: {\n genre: \"Galaxie\",\n story: \"Sternsystem\",\n scene: \"Planet\",\n player: \"Reisender\",\n publish: \"Starten\",\n },\n pt: {\n genre: \"Galáxia\",\n story: \"Sistema Estelar\",\n scene: \"Planeta\",\n player: \"Viajante\",\n publish: \"Lançar\",\n },\n },\n },\n wilds: {\n label: \"CHUZI WILDS\",\n short_label: \"Wilds\",\n lexicon: {\n genre: \"Biome\",\n story: \"Grove\",\n scene: \"Clearing\",\n scene_choice: \"Trail\",\n node: \"Seed\",\n node_type_choice: \"Trail\",\n node_type_media: \"Bloom\",\n node_type_go_to_scene: \"Crossing\",\n player: \"Wanderer\",\n library: \"Canopy\",\n library_open: \"Open Canopy\",\n library_close: \"Close Canopy\",\n editor: \"Heartwood\",\n publish: \"Plant\",\n experience_realm_idea: \"Untamed Nature\",\n the_end: \"Roots\",\n media_pool: \"Undergrowth\",\n scene_graph: \"Canopy\",\n watch_path: \"Your trail\",\n untitled_story: \"Untitled Grove\",\n unknown_genre: \"Unknown Biome\",\n scenes_count: \"clearings\",\n choices_count: \"trails\",\n drafts_published: \"Drafts + Planted\",\n published_ver: \"Planted ver.\",\n draft: \"Draft\",\n no_scenes_yet: \"No clearings in this canopy yet.\",\n no_path_yet: \"No trail to show yet.\",\n menu_empty_drafts: \"No groves yet. Plant one to begin.\",\n menu_empty_published: \"No planted groves in the canopy.\",\n menu_published_heading: \"Planted groves\",\n menu_create_story: \"New grove\",\n menu_create_film: \"Create film\",\n film_title_placeholder: \"Grove title\",\n select_genre: \"Select biome\",\n genre_field_aria: \"Biome\",\n delete_story_verb: \"Delete grove\",\n title_scene_default: \"Trailhead\",\n choices_made_stat: \"trails taken\",\n content_rating: \"Field Guide\",\n content_rating_field_aria: \"Field guide\",\n select_content_rating: \"Select field guide\",\n unrated: \"Unmarked\",\n viewer_credits: \"Sap\",\n creator_credits: \"Pollen\",\n editor_media_upload: \"Upload Bloom\",\n editor_media_preview: \"Bloom Preview\",\n editor_alt_media: \"Effects\",\n editor_choices: \"Choices\",\n editor_scene_settings: \"Clearing Settings\",\n editor_title_scene: \"Start\",\n editor_film_title: \"Grove Title\",\n editor_film_title_hint: \"Click to rename this grove\",\n editor_ending_scene: \"End\",\n editor_play: \"Unfurl\",\n editor_pause: \"Rest\",\n editor_prev_frame: \"Previous Frame\",\n editor_next_frame: \"Next Frame\",\n editor_seek: \"Seek\",\n editor_no_media: \"No bloom assigned\",\n editor_uploading: \"Blooming\\u2026\",\n editor_drop_media: \"Drop bloom here\",\n editor_scene_type: \"Clearing Type\",\n editor_save: \"Engrave\",\n editor_cancel: \"Cancel\",\n editor_create_scene: \"Plant Clearing\",\n editor_create_scene_plain: \"Create New Scene\",\n editor_create_scene_cost: \"1 Pollen\",\n editor_delete_scene_cta: \"Delete Scene\",\n editor_delete_scene_confirm: \"Click again to confirm\",\n editor_scene_locked_delete: \"Start and end scenes cannot be deleted.\",\n editor_scene_color: \"Clearing Tint\",\n viewer_continue: \"Press On\",\n chuzi_ai_name: \"Chuzi AI\",\n chuzi_ai_create_with: \"Create with Chuzi AI\",\n chuzi_ai_create_manual: \"Enter title manually\",\n chuzi_ai_intro: \"Answer a few story prompts and Chuzi AI will grow your short story.\",\n chuzi_ai_step_of: \"Step\",\n chuzi_ai_back: \"Back\",\n chuzi_ai_next: \"Next\",\n chuzi_ai_scenes_label: \"scenes\",\n chuzi_ai_creating: \"Creating\\u2026\",\n chuzi_ai_generate_failed: \"Story generation failed.\",\n chuzi_ai_build_failed: \"Failed to build story.\",\n chuzi_ai_generate: \"Generate story\",\n chuzi_ai_generating: \"Generating\\u2026\",\n chuzi_ai_token_in: \"Tokens in\",\n chuzi_ai_token_out: \"Tokens out\",\n chuzi_ai_credits_cost: \"AI credits\",\n chuzi_ai_scene_credits: \"Scene credits\",\n chuzi_ai_total_cost: \"Total create credits\",\n chuzi_ai_insufficient: \"Not enough create credits for this generation.\",\n chuzi_ai_apply: \"Build story\",\n chuzi_ai_applying: \"Building scenes\\u2026\",\n chuzi_ai_scene_create: \"Create scene with Chuzi AI\",\n chuzi_ai_scene_overwrite: \"Rewrite scene with Chuzi AI\",\n chuzi_ai_scene_brief: \"Scene direction\",\n chuzi_ai_scene_brief_hint: \"Describe what should happen in this scene. Chuzi AI reads your existing story for characters, tone, and style.\",\n chuzi_ai_scene_context_note: \"Uses your story\\u2019s existing scenes, typography, and art direction as context.\",\n chuzi_ai_scene_overwrite_confirm: \"I understand this replaces this scene\\u2019s text and styling.\",\n chuzi_ai_scene_apply_create: \"Create scene\",\n chuzi_ai_scene_apply_overwrite: \"Replace scene\",\n chuzi_ai_step_protagonist: \"Protagonist\",\n chuzi_ai_step_protagonist_hint: \"Who is your main character? Name, age, personality, and what makes them interesting.\",\n chuzi_ai_step_setting: \"Setting\",\n chuzi_ai_step_setting_hint: \"Where and when does the story begin? Describe the world and their everyday life.\",\n chuzi_ai_step_conflict: \"Conflict\",\n chuzi_ai_step_conflict_hint: \"What event or problem kicks the story into motion?\",\n chuzi_ai_step_journey: \"Journey\",\n chuzi_ai_step_journey_hint: \"What challenges, turning points, climax, and resolution shape the story?\",\n chuzi_ai_step_tone: \"Tone & mood\",\n chuzi_ai_step_tone_hint: \"Genre, mood, and atmosphere (e.g. bittersweet sci-fi, cozy mystery, epic fantasy).\",\n chuzi_ai_monomyth_hero: \"Hero\\u2019s Journey: the protagonist\",\n chuzi_ai_monomyth_world: \"Monomyth: ordinary world\",\n chuzi_ai_monomyth_you: \"Story Circle: zone of comfort\",\n chuzi_ai_monomyth_need: \"Story Circle: something isn\\u2019t right\",\n chuzi_ai_monomyth_go: \"Monomyth: crossing the first threshold\",\n chuzi_ai_monomyth_search: \"Monomyth: road of trials\",\n chuzi_ai_monomyth_find: \"Monomyth: the ultimate boon\",\n chuzi_ai_monomyth_take: \"Monomyth: atonement with the father\",\n chuzi_ai_monomyth_return: \"Monomyth: crossing the return threshold\",\n chuzi_ai_monomyth_change: \"Monomyth: freedom to live\",\n editor_ai_generate: \"Grow Bloom\",\n editor_ai_generating: \"Seed Sprouting\\u2026\",\n editor_ai_mood_question: \"What feeling should this clearing evoke?\",\n editor_ai_style_question: \"What growth pattern for this bloom?\",\n editor_ai_prompt_question: \"Describe this clearing\",\n editor_ai_accept: \"Root Bloom\",\n editor_ai_reject: \"Prune Bloom\",\n editor_ai_retry: \"Regrow\",\n editor_ai_feedback_prompt: \"How should we reshape the growth?\",\n editor_ai_credit_cost: \"1 Pollen per bloom\",\n spending_modal_title: \"Gather More Pollen\",\n spending_modal_body: \"You need more credits to continue. Choose how many to add.\",\n spending_modal_no_payment: \"Add a payment method to purchase credits.\",\n spending_modal_credits_label: \"Credits to add\",\n spending_modal_price_label: \"Total\",\n spending_modal_admin_note: \"Admin — credits are granted free of charge.\",\n spending_modal_purchase: \"Purchase Credits\",\n spending_modal_grant: \"Grant Credits\",\n spending_modal_add_card: \"Add Payment Method\",\n spending_modal_card_last_four: \"Card last four digits\",\n spending_modal_card_label: \"Card label (optional)\",\n spending_modal_processing: \"Processing\\u2026\",\n spending_modal_success: \"Credits added.\",\n spending_modal_error: \"Could not complete purchase. Try again.\",\n spending_modal_cancel: \"Not now\",\n spending_insufficient_credits: \"Not enough credits. Purchase more to continue.\",\n editor_ai_generating_scene: \"Clearing emerging\\u2026\",\n editor_ai_style_badge: \"Growth Style\",\n editor_ai_failed: \"Growth withered. Try regrowing.\",\n editor_media_attached: \"This clearing already has a bloom rooted.\",\n editor_remove_media: \"Uproot Bloom\",\n editor_media_question: \"What's this scene's media?\",\n editor_media_type_text: \"Text\",\n editor_media_type_imagery: \"Imagery\",\n editor_media_type_film: \"Film\",\n editor_media_preview_cta: \"Preview\",\n editor_media_preview_disabled: \"Add text to enable preview.\",\n editor_text_toolbar_label: \"Generator\",\n editor_text_font_label: \"Font\",\n editor_text_color_label: \"Text Color\",\n editor_text_background_label: \"Background\",\n editor_text_placeholder: \"Start writing scene media...\",\n editor_line_add: \"Add Text\",\n editor_text_lines_section: \"Transmission Lines\",\n editor_line_editor_label: \"Editor\",\n editor_line_number: \"Line\",\n editor_select_line_hint: \"Select a transmission line to edit\",\n editor_select_effect_hint: \"Select an effect to edit\",\n editor_select_choice_hint: \"Select a choice to edit\",\n editor_line_timestamp: \"Appears at\",\n editor_line_fade_in: \"Fade In\",\n editor_line_fade_out: \"Fade Out\",\n editor_line_duration: \"Duration\",\n editor_line_persist: \"Stay on Screen\",\n editor_effects_section: \"Effects\",\n editor_effects_add: \"Add sounds, effects, etc\",\n editor_effect_fade_in_sound: \"Fade In Sound\",\n editor_effect_fade_out_sound: \"Fade Out Sound\",\n editor_effect_fade_in_visual: \"Fade In\",\n editor_effect_fade_out_visual: \"Fade Out\",\n editor_timeline_label: \"Timeline\",\n editor_preview_label: \"Preview\",\n editor_preview_play: \"Play\",\n editor_preview_pause: \"Pause\",\n editor_media_placeholder_imagery: \"Imagery authoring is coming soon.\",\n editor_media_placeholder_film: \"Film authoring is coming soon.\",\n editor_goto_scene: \"Goto Clearing\",\n editor_scene_duration: \"Bloom Duration\",\n editor_add_choice: \"Add Trail\",\n editor_arrow_tool: \"Place Indicator\",\n editor_goto_nullified: \"Disabled — trails override goto\",\n editor_remove_choice: \"Remove Trail\",\n editor_choice_target: \"Destination Clearing\",\n editor_choices_empty_hint: \"Set a goto clearing or add a trail to branch the story.\",\n editor_goto_none: \"None\",\n editor_choice_label: \"Trail\",\n editor_flow_timeline: \"Story Flow\",\n editor_flow_goto_path: \"Default Goto\",\n editor_flow_add_choice_here: \"Add Trail Here\",\n editor_flow_choice_branch: \"Branch\",\n editor_flow_content_ref: \"Content\",\n editor_scene_duration_unit: \"seconds\",\n editor_scene_duration_override_hint: \"Overrides bloom length. Content runtime: {duration}s\",\n editor_arrow_scale: \"Span\",\n editor_arrow_rotation: \"Bearing\",\n editor_arrow_rotate_hint: \"Drag the beacon above the indicator in preview to rotate\",\n constellation_no_coverbox: \"Unseen\",\n hud_edit_control: \"Tend\",\n hud_delete_control: \"Uproot\",\n hud_publish_control: \"Plant\",\n hud_launch_control: \"Enter\",\n editor_publish_story: \"Share\",\n viewer_loading: \"Entering the grove…\",\n viewer_preparing: \"Gathering blooms…\",\n viewer_close: \"Leave\",\n viewer_complete: \"Journey complete\",\n viewer_stage_label: \"Canopy\",\n viewer_choose_path: \"Choose\",\n create_button: \"CREATE\",\n publish_form_heading: \"Planting check\",\n tags_label: \"Root Tags\",\n tags_placeholder: \"Search root tags\\u2026\",\n tags_empty: \"No root tags yet\",\n tags_required: \"At least one root tag is required.\",\n story_picker_label: \"Groves\",\n created_by: \"Tended by\",\n chosen_by: \"Chosen by\",\n story_metadata_heading: \"Grove details\",\n story_metadata_save: \"Save\",\n constellation_title_edit_hint: \"Edit grove title and details\",\n director_profile_title: \"Director profile\",\n director_profile_name_label: \"Name\",\n director_profile_realm_label: \"Experience realm\",\n director_profile_image_label: \"Image\",\n director_profile_image_hint:\n \"Realm-themed seal — switching the realm above swaps the seal. Custom uploads land with the V1 avatar endpoints.\",\n director_profile_tab_profile: \"Profile\",\n director_profile_tab_experience_mapping: \"Experience Mapping\",\n director_profile_admin_only: \"Admin only\",\n director_profile_cancel: \"Cancel\",\n director_profile_close: \"Close\",\n director_profile_save: \"Save\",\n director_profile_saving: \"Saving…\",\n director_profile_name_required: \"Name is required.\",\n director_profile_save_failed: \"Save failed\",\n experience_mapping_loading: \"Loading experience mapping…\",\n experience_mapping_empty: \"No template hierarchy available yet.\",\n experience_mapping_retry: \"Retry\",\n experience_mapping_story_label: \"Story\",\n experience_mapping_scene_label: \"Scene\",\n experience_mapping_action_label: \"Action\",\n experience_mapping_field_title: \"Title\",\n experience_mapping_field_description: \"Description\",\n experience_mapping_field_genre: \"Genre\",\n experience_mapping_field_content_rating: \"Content rating\",\n experience_mapping_field_color: \"Color\",\n experience_mapping_field_name: \"Name\",\n experience_mapping_field_type: \"Type\",\n experience_mapping_field_order: \"Order\",\n experience_mapping_field_duration: \"Duration\",\n experience_mapping_field_properties: \"Properties\",\n experience_mapping_field_subproperties: \"Subproperties\",\n experience_mapping_save_changes: \"Save changes\",\n experience_mapping_saved: \"Saved\",\n experience_mapping_save_error: \"Could not save changes.\",\n experience_mapping_delete_story: \"Delete story\",\n experience_mapping_delete_scene: \"Delete scene\",\n experience_mapping_delete_action: \"Delete action\",\n experience_mapping_delete_confirm: \"Click again to confirm\",\n experience_mapping_delete_error: \"Delete failed.\",\n experience_mapping_expand_all: \"Expand all\",\n experience_mapping_collapse_all: \"Collapse all\",\n experience_mapping_forbidden: \"You do not have admin access for this section.\",\n experience_mapping_bad_json: \"JSON must be valid before saving.\",\n experience_mapping_intro:\n \"Edit realm vocabulary from largest to smallest. Generate JSON and paste it in chat for code application.\",\n experience_mapping_dirty: \"dirty changes\",\n experience_mapping_export_ready: \"No unsaved mapping edits yet.\",\n experience_mapping_export_json: \"Generate JSON export\",\n experience_mapping_copy_json: \"Copy JSON\",\n experience_mapping_copied: \"Copied\",\n experience_mapping_paste_instruction:\n \"Paste this JSON in chat and I will apply it to chuzi-shared.\",\n experience_mapping_export_empty: \"Export output appears here.\",\n experience_mapping_select_realm: \"Select realm\",\n experience_mapping_group_major_idea: \"Major Idea\",\n experience_mapping_helper_realm_idea:\n \"Highest-level concept for this realm.\",\n experience_mapping_save_experience: \"Save to experience\",\n experience_mapping_saved_experience:\n \"Saved to current experience. Some labels appear immediately.\",\n auth_email_placeholder: \"Email\",\n auth_password_input_placeholder: \"Password\",\n auth_password_sign_in_button: \"Sign In\",\n auth_password_signing_in: \"Signing in...\",\n auth_signin_tab: \"Sign in\",\n auth_signup_tab: \"Sign up\",\n auth_signup_subtitle: \"Create your account with secure sign-in.\",\n auth_signin_subtitle: \"Sign in with your account provider.\",\n auth_sign_up_button: \"Continue with Google\",\n auth_username_placeholder: \"Username\",\n auth_sign_in_button: \"Continue with Google\",\n auth_signing_in: \"Signing in...\",\n auth_oidc_redirecting: \"Redirecting to secure sign-in...\",\n auth_oidc_failed: \"Could not start sign-in.\",\n auth_oidc_callback_processing: \"Completing sign-in...\",\n auth_oidc_verified: \"Signed in. Redirecting...\",\n auth_oidc_callback_failed: \"Could not complete sign-in.\",\n auth_oidc_token_missing: \"Sign-in token was missing.\",\n auth_magic_link_sent:\n \"If that email is registered, a magic link has been sent.\",\n auth_magic_link_sent_signup: \"Check your email for your sign-up link.\",\n auth_magic_link_verifying: \"Verifying magic link...\",\n auth_magic_link_verified: \"Signed in. Redirecting...\",\n auth_magic_link_failed: \"This magic link is invalid or expired.\",\n auth_magic_link_cta: \"Use another email\",\n auth_login_failed: \"Sign-in failed.\",\n auth_username_checking: \"Checking username availability...\",\n auth_username_available: \"Username is available.\",\n auth_username_unavailable: \"Username is taken; updated to an available suggestion.\",\n auth_username_required: \"Username is required.\",\n auth_username_update_failed: \"Could not reserve a unique username.\",\n experience_mapping_group_experience_root: \"Experience Root\",\n experience_mapping_group_node_types: \"Node Types\",\n experience_mapping_group_scene_structure: \"Scene Structure\",\n experience_mapping_group_media: \"Media Terms\",\n experience_mapping_group_counts: \"Counts and Adjacent Labels\",\n experience_mapping_helper_story: \"Largest narrative unit.\",\n experience_mapping_helper_scene: \"Contained unit under story.\",\n experience_mapping_helper_scene_choice: \"Branching choice in a scene.\",\n experience_mapping_helper_node: \"Smallest flow node.\",\n experience_mapping_helper_alt_media: \"Smallest related media label.\",\n },\n locales: {\n es: {\n genre: \"Bioma\",\n story: \"Arboleda\",\n scene: \"Claro\",\n scene_choice: \"Sendero\",\n player: \"Errante\",\n library: \"Dosel\",\n editor: \"Duramen\",\n publish: \"Plantar\",\n the_end: \"Raíces\",\n untitled_story: \"Arboleda sin título\",\n menu_create_story: \"Nueva arboleda\",\n film_title_placeholder: \"Título de la arboleda\",\n select_genre: \"Seleccionar bioma\",\n created_by: \"Cuidado por\",\n },\n fr: {\n genre: \"Biome\",\n story: \"Bosquet\",\n scene: \"Clairière\",\n scene_choice: \"Sentier\",\n player: \"Vagabond\",\n library: \"Canopée\",\n editor: \"Cœur de bois\",\n publish: \"Planter\",\n the_end: \"Racines\",\n untitled_story: \"Bosquet sans titre\",\n menu_create_story: \"Nouveau bosquet\",\n film_title_placeholder: \"Titre du bosquet\",\n select_genre: \"Sélectionner un biome\",\n created_by: \"Soigné par\",\n },\n de: {\n genre: \"Biom\",\n story: \"Hain\",\n scene: \"Lichtung\",\n player: \"Wanderer\",\n publish: \"Pflanzen\",\n },\n pt: {\n genre: \"Bioma\",\n story: \"Bosque\",\n scene: \"Clareira\",\n player: \"Andarilho\",\n publish: \"Plantar\",\n },\n },\n },\n};\n\nexport const FALLBACK_LEXICON: Record<string, string> = {\n genre: \"Genre\",\n story: \"Story\",\n scene: \"Scene\",\n scene_choice: \"Choice\",\n node: \"Node\",\n node_type_choice: \"Choice\",\n node_type_media: \"Media\",\n node_type_go_to_scene: \"Go to scene\",\n player: \"Player\",\n library: \"Library\",\n library_open: \"Open scene tree\",\n library_close: \"Close scene tree\",\n editor: \"Editor\",\n publish: \"Publish\",\n experience_realm_idea: \"Experience Theme\",\n the_end: \"The End\",\n media_pool: \"Media Pool\",\n scene_graph: \"Scene tree\",\n watch_path: \"Your path\",\n untitled_story: \"Untitled Story\",\n unknown_genre: \"Unknown Genre\",\n scenes_count: \"scenes\",\n choices_count: \"choices\",\n drafts_published: \"Drafts + Published\",\n published_ver: \"Published ver.\",\n draft: \"Draft\",\n no_scenes_yet: \"No scenes available yet.\",\n no_path_yet: \"No path to show yet.\",\n menu_empty_drafts: \"No films yet. Create one to get started.\",\n menu_empty_published: \"No published films found.\",\n menu_published_heading: \"Published Films\",\n menu_create_story: \"Create Story\",\n menu_create_film: \"Create Film\",\n film_title_placeholder: \"Film title\",\n select_genre: \"Select genre\",\n genre_field_aria: \"Film genre\",\n delete_story_verb: \"Delete film\",\n title_scene_default: \"Start\",\n choices_made_stat: \"choices made\",\n content_rating: \"Rating\",\n content_rating_field_aria: \"Content rating\",\n select_content_rating: \"Select rating\",\n unrated: \"Not Rated\",\n viewer_credits: \"Viewer Credits\",\n creator_credits: \"Creator Credits\",\n editor_media_upload: \"Upload Media\",\n editor_media_preview: \"Media Preview\",\n editor_alt_media: \"Effects\",\n editor_choices: \"Choices\",\n editor_scene_settings: \"Scene Settings\",\n editor_title_scene: \"Start\",\n editor_film_title: \"Film Title\",\n editor_film_title_hint: \"Click to rename this film\",\n editor_ending_scene: \"End\",\n editor_play: \"Play\",\n editor_pause: \"Pause\",\n editor_prev_frame: \"Previous Frame\",\n editor_next_frame: \"Next Frame\",\n editor_seek: \"Seek\",\n editor_no_media: \"No media assigned\",\n editor_uploading: \"Uploading\\u2026\",\n editor_drop_media: \"Drop media here\",\n editor_scene_type: \"Scene Type\",\n editor_save: \"Save\",\n editor_cancel: \"Cancel\",\n editor_create_scene: \"Create Scene\",\n editor_create_scene_plain: \"Create New Scene\",\n editor_create_scene_cost: \"1 credit\",\n editor_delete_scene_cta: \"Delete Scene\",\n editor_delete_scene_confirm: \"Click again to confirm\",\n editor_scene_locked_delete: \"Start and end scenes cannot be deleted.\",\n editor_scene_color: \"Scene Color\",\n chuzi_ai_name: \"Chuzi AI\",\n chuzi_ai_create_with: \"Create with Chuzi AI\",\n chuzi_ai_create_manual: \"Enter title manually\",\n chuzi_ai_intro: \"Answer a few story prompts and Chuzi AI will draft your short story.\",\n chuzi_ai_step_of: \"Step\",\n chuzi_ai_back: \"Back\",\n chuzi_ai_next: \"Next\",\n chuzi_ai_scenes_label: \"scenes\",\n chuzi_ai_creating: \"Creating\\u2026\",\n chuzi_ai_generate_failed: \"Story generation failed.\",\n chuzi_ai_build_failed: \"Failed to build story.\",\n chuzi_ai_generate: \"Generate story\",\n chuzi_ai_generating: \"Generating\\u2026\",\n chuzi_ai_token_in: \"Tokens in\",\n chuzi_ai_token_out: \"Tokens out\",\n chuzi_ai_credits_cost: \"AI credits\",\n chuzi_ai_scene_credits: \"Scene credits\",\n chuzi_ai_total_cost: \"Total create credits\",\n chuzi_ai_insufficient: \"Not enough create credits for this generation.\",\n chuzi_ai_apply: \"Build story\",\n chuzi_ai_applying: \"Building scenes\\u2026\",\n chuzi_ai_scene_create: \"Create scene with Chuzi AI\",\n chuzi_ai_scene_overwrite: \"Rewrite scene with Chuzi AI\",\n chuzi_ai_scene_brief: \"Scene direction\",\n chuzi_ai_scene_brief_hint: \"Describe what should happen in this scene. Chuzi AI reads your existing story for characters, tone, and style.\",\n chuzi_ai_scene_context_note: \"Uses your story\\u2019s existing scenes, typography, and art direction as context.\",\n chuzi_ai_scene_overwrite_confirm: \"I understand this replaces this scene\\u2019s text and styling.\",\n chuzi_ai_scene_apply_create: \"Create scene\",\n chuzi_ai_scene_apply_overwrite: \"Replace scene\",\n chuzi_ai_step_protagonist: \"Protagonist\",\n chuzi_ai_step_protagonist_hint: \"Who is your main character? Name, age, personality, and what makes them interesting.\",\n chuzi_ai_step_setting: \"Setting\",\n chuzi_ai_step_setting_hint: \"Where and when does the story begin? Describe the world and their everyday life.\",\n chuzi_ai_step_conflict: \"Conflict\",\n chuzi_ai_step_conflict_hint: \"What event or problem kicks the story into motion?\",\n chuzi_ai_step_journey: \"Journey\",\n chuzi_ai_step_journey_hint: \"What challenges, turning points, climax, and resolution shape the story?\",\n chuzi_ai_step_tone: \"Tone & mood\",\n chuzi_ai_step_tone_hint: \"Genre, mood, and atmosphere (e.g. bittersweet sci-fi, cozy mystery, epic fantasy).\",\n viewer_continue: \"Continue\",\n chuzi_ai_monomyth_hero: \"Hero\\u2019s Journey: the protagonist\",\n chuzi_ai_monomyth_world: \"Monomyth: ordinary world\",\n chuzi_ai_monomyth_you: \"Story Circle: zone of comfort\",\n chuzi_ai_monomyth_need: \"Story Circle: something isn\\u2019t right\",\n chuzi_ai_monomyth_go: \"Monomyth: crossing the first threshold\",\n chuzi_ai_monomyth_search: \"Monomyth: road of trials\",\n chuzi_ai_monomyth_find: \"Monomyth: the ultimate boon\",\n chuzi_ai_monomyth_take: \"Monomyth: atonement with the father\",\n chuzi_ai_monomyth_return: \"Monomyth: crossing the return threshold\",\n chuzi_ai_monomyth_change: \"Monomyth: freedom to live\",\n editor_ai_generate: \"Generate with AI\",\n editor_ai_generating: \"Generating\\u2026\",\n editor_ai_mood_question: \"What mood should this scene convey?\",\n editor_ai_style_question: \"What visual style do you want?\",\n editor_ai_prompt_question: \"Describe this scene\",\n editor_ai_accept: \"Accept\",\n editor_ai_reject: \"Reject\",\n editor_ai_retry: \"Try Again\",\n editor_ai_feedback_prompt: \"What should we change?\",\n editor_ai_credit_cost: \"1 credit per generation\",\n spending_modal_title: \"Purchase Credits\",\n spending_modal_body: \"You need more credits to continue. Choose how many to add.\",\n spending_modal_no_payment: \"Add a payment method to purchase credits.\",\n spending_modal_credits_label: \"Credits to add\",\n spending_modal_price_label: \"Total\",\n spending_modal_admin_note: \"Admin — credits are granted free of charge.\",\n spending_modal_purchase: \"Purchase Credits\",\n spending_modal_grant: \"Grant Credits\",\n spending_modal_add_card: \"Add Payment Method\",\n spending_modal_card_last_four: \"Card last four digits\",\n spending_modal_card_label: \"Card label (optional)\",\n spending_modal_processing: \"Processing\\u2026\",\n spending_modal_success: \"Credits added.\",\n spending_modal_error: \"Could not complete purchase. Try again.\",\n spending_modal_cancel: \"Not now\",\n spending_insufficient_credits: \"Not enough credits. Purchase more to continue.\",\n editor_ai_generating_scene: \"Scene generating\\u2026\",\n editor_ai_style_badge: \"Style\",\n editor_ai_failed: \"Generation failed. Please try again.\",\n editor_media_attached: \"This scene already has media attached.\",\n editor_remove_media: \"Remove Media\",\n editor_media_question: \"What's this scene's media?\",\n editor_media_type_text: \"Text\",\n editor_media_type_imagery: \"Imagery\",\n editor_media_type_film: \"Film\",\n editor_media_preview_cta: \"Preview\",\n editor_media_preview_disabled: \"Add text to enable preview.\",\n editor_text_toolbar_label: \"Generator\",\n editor_text_font_label: \"Font\",\n editor_text_color_label: \"Text Color\",\n editor_text_background_label: \"Background\",\n editor_text_placeholder: \"Start writing scene media...\",\n editor_line_add: \"Add Text\",\n editor_text_lines_section: \"Text Lines\",\n editor_line_editor_label: \"Editor\",\n editor_line_number: \"Line\",\n editor_select_line_hint: \"Select a line to edit\",\n editor_select_effect_hint: \"Select an effect to edit\",\n editor_select_choice_hint: \"Select a choice to edit\",\n editor_line_timestamp: \"Appears at\",\n editor_line_fade_in: \"Fade In\",\n editor_line_fade_out: \"Fade Out\",\n editor_line_duration: \"Duration\",\n editor_line_persist: \"Stay on Screen\",\n editor_effects_section: \"Effects\",\n editor_effects_add: \"Add sounds, effects, etc\",\n editor_effect_fade_in_sound: \"Fade In Sound\",\n editor_effect_fade_out_sound: \"Fade Out Sound\",\n editor_effect_fade_in_visual: \"Fade In\",\n editor_effect_fade_out_visual: \"Fade Out\",\n editor_timeline_label: \"Timeline\",\n editor_preview_label: \"Preview\",\n editor_preview_play: \"Play\",\n editor_preview_pause: \"Pause\",\n editor_media_placeholder_imagery: \"Imagery authoring is coming soon.\",\n editor_media_placeholder_film: \"Film authoring is coming soon.\",\n editor_goto_scene: \"Goto Scene\",\n editor_scene_duration: \"Scene Duration\",\n editor_add_choice: \"Add Choice\",\n editor_arrow_tool: \"Place Arrow\",\n editor_goto_nullified: \"Disabled — choices override goto\",\n editor_remove_choice: \"Remove Choice\",\n editor_choice_target: \"Destination Scene\",\n editor_choices_empty_hint: \"Set a goto scene or add a choice to create branching paths.\",\n editor_goto_none: \"None\",\n editor_choice_label: \"Choice\",\n editor_flow_timeline: \"Story Flow\",\n editor_flow_goto_path: \"Default Goto\",\n editor_flow_add_choice_here: \"Add Choice Here\",\n editor_flow_choice_branch: \"Branch\",\n editor_flow_content_ref: \"Content\",\n editor_scene_duration_unit: \"seconds\",\n editor_scene_duration_override_hint: \"Overrides preview playback length. Content: {duration}s\",\n editor_arrow_scale: \"Scale\",\n editor_arrow_rotation: \"Rotation\",\n editor_arrow_rotate_hint: \"Drag the handle above the arrow in preview to rotate\",\n constellation_no_coverbox: \"No cover\",\n hud_edit_control: \"Edit\",\n hud_delete_control: \"Delete\",\n hud_publish_control: \"Publish\",\n hud_launch_control: \"Launch\",\n editor_publish_story: \"Publish\",\n viewer_loading: \"Loading experience…\",\n viewer_preparing: \"Cueing media…\",\n viewer_close: \"Exit\",\n viewer_complete: \"Experience complete\",\n viewer_stage_label: \"Experience\",\n viewer_choose_path: \"Choose\",\n create_button: \"CREATE\",\n publish_form_heading: \"Publish checklist\",\n tags_label: \"Tags\",\n tags_placeholder: \"Search tags\\u2026\",\n tags_empty: \"No tags yet\",\n tags_required: \"At least one tag is required.\",\n story_picker_label: \"Stories\",\n created_by: \"Created by\",\n chosen_by: \"Chosen by\",\n story_metadata_heading: \"Story details\",\n story_metadata_save: \"Save\",\n constellation_title_edit_hint: \"Edit story title and details\",\n director_profile_title: \"Director profile\",\n director_profile_name_label: \"Name\",\n director_profile_realm_label: \"Experience realm\",\n director_profile_image_label: \"Image\",\n director_profile_image_hint:\n \"Realm-themed seal — switching the realm above swaps the seal. Custom uploads land with the V1 avatar endpoints.\",\n director_profile_tab_profile: \"Profile\",\n director_profile_tab_experience_mapping: \"Experience Mapping\",\n director_profile_admin_only: \"Admin only\",\n director_profile_cancel: \"Cancel\",\n director_profile_close: \"Close\",\n director_profile_save: \"Save\",\n director_profile_saving: \"Saving…\",\n director_profile_name_required: \"Name is required.\",\n director_profile_save_failed: \"Save failed\",\n experience_mapping_loading: \"Loading experience mapping…\",\n experience_mapping_empty: \"No template hierarchy available yet.\",\n experience_mapping_retry: \"Retry\",\n experience_mapping_story_label: \"Story\",\n experience_mapping_scene_label: \"Scene\",\n experience_mapping_action_label: \"Action\",\n experience_mapping_field_title: \"Title\",\n experience_mapping_field_description: \"Description\",\n experience_mapping_field_genre: \"Genre\",\n experience_mapping_field_content_rating: \"Content rating\",\n experience_mapping_field_color: \"Color\",\n experience_mapping_field_name: \"Name\",\n experience_mapping_field_type: \"Type\",\n experience_mapping_field_order: \"Order\",\n experience_mapping_field_duration: \"Duration\",\n experience_mapping_field_properties: \"Properties\",\n experience_mapping_field_subproperties: \"Subproperties\",\n experience_mapping_save_changes: \"Save changes\",\n experience_mapping_saved: \"Saved\",\n experience_mapping_save_error: \"Could not save changes.\",\n experience_mapping_delete_story: \"Delete story\",\n experience_mapping_delete_scene: \"Delete scene\",\n experience_mapping_delete_action: \"Delete action\",\n experience_mapping_delete_confirm: \"Click again to confirm\",\n experience_mapping_delete_error: \"Delete failed.\",\n experience_mapping_expand_all: \"Expand all\",\n experience_mapping_collapse_all: \"Collapse all\",\n experience_mapping_forbidden: \"You do not have admin access for this section.\",\n experience_mapping_bad_json: \"JSON must be valid before saving.\",\n experience_mapping_intro:\n \"Edit realm vocabulary from largest to smallest. Generate JSON and paste it in chat for code application.\",\n experience_mapping_dirty: \"dirty changes\",\n experience_mapping_export_ready: \"No unsaved mapping edits yet.\",\n experience_mapping_export_json: \"Generate JSON export\",\n experience_mapping_copy_json: \"Copy JSON\",\n experience_mapping_copied: \"Copied\",\n experience_mapping_paste_instruction:\n \"Paste this JSON in chat and I will apply it to chuzi-shared.\",\n experience_mapping_export_empty: \"Export output appears here.\",\n experience_mapping_select_realm: \"Select realm\",\n experience_mapping_group_major_idea: \"Major Idea\",\n experience_mapping_helper_realm_idea:\n \"Highest-level concept for this realm.\",\n experience_mapping_save_experience: \"Save to experience\",\n experience_mapping_saved_experience:\n \"Saved to current experience. Some labels appear immediately.\",\n auth_email_placeholder: \"Email\",\n auth_password_input_placeholder: \"Password\",\n auth_password_sign_in_button: \"Sign In\",\n auth_password_signing_in: \"Signing in...\",\n auth_signin_tab: \"Sign in\",\n auth_signup_tab: \"Sign up\",\n auth_signup_subtitle: \"Create your account with secure sign-in.\",\n auth_signin_subtitle: \"Sign in with your account provider.\",\n auth_sign_up_button: \"Continue with Google\",\n auth_username_placeholder: \"Username\",\n auth_sign_in_button: \"Continue with Google\",\n auth_signing_in: \"Signing in...\",\n auth_oidc_redirecting: \"Redirecting to secure sign-in...\",\n auth_oidc_failed: \"Could not start sign-in.\",\n auth_oidc_callback_processing: \"Completing sign-in...\",\n auth_oidc_verified: \"Signed in. Redirecting...\",\n auth_oidc_callback_failed: \"Could not complete sign-in.\",\n auth_oidc_token_missing: \"Sign-in token was missing.\",\n auth_magic_link_sent:\n \"If that email is registered, a magic link has been sent.\",\n auth_magic_link_sent_signup: \"Check your email for your sign-up link.\",\n auth_magic_link_verifying: \"Verifying magic link...\",\n auth_magic_link_verified: \"Signed in. Redirecting...\",\n auth_magic_link_failed: \"This magic link is invalid or expired.\",\n auth_magic_link_cta: \"Use another email\",\n auth_login_failed: \"Sign-in failed.\",\n auth_username_checking: \"Checking username availability...\",\n auth_username_available: \"Username is available.\",\n auth_username_unavailable: \"Username is taken; updated to an available suggestion.\",\n auth_username_required: \"Username is required.\",\n auth_username_update_failed: \"Could not reserve a unique username.\",\n experience_mapping_group_experience_root: \"Experience Root\",\n experience_mapping_group_node_types: \"Node Types\",\n experience_mapping_group_scene_structure: \"Scene Structure\",\n experience_mapping_group_media: \"Media Terms\",\n experience_mapping_group_counts: \"Counts and Adjacent Labels\",\n experience_mapping_helper_story: \"Largest narrative unit.\",\n experience_mapping_helper_scene: \"Contained unit under story.\",\n experience_mapping_helper_scene_choice: \"Branching choice in a scene.\",\n experience_mapping_helper_node: \"Smallest flow node.\",\n experience_mapping_helper_alt_media: \"Smallest related media label.\",\n};\n\n/**\n * Per-locale overrides for FALLBACK_LEXICON. Missing keys fall through to\n * the English fallback. Mirrors PHP `chuzi_realms.fallback_locales`.\n */\nexport const FALLBACK_LOCALES: Partial<\n Record<LocaleId, Record<string, string>>\n> = {\n es: {\n genre: \"Género\",\n story: \"Historia\",\n scene: \"Escena\",\n scene_choice: \"Elección\",\n player: \"Reproductor\",\n library: \"Biblioteca\",\n editor: \"Editor\",\n publish: \"Publicar\",\n the_end: \"Fin\",\n untitled_story: \"Historia sin título\",\n menu_create_story: \"Crear historia\",\n menu_create_film: \"Crear película\",\n film_title_placeholder: \"Título de la película\",\n select_genre: \"Seleccionar género\",\n delete_story_verb: \"Eliminar película\",\n created_by: \"Creado por\",\n },\n fr: {\n genre: \"Genre\",\n story: \"Histoire\",\n scene: \"Scène\",\n scene_choice: \"Choix\",\n player: \"Lecteur\",\n library: \"Bibliothèque\",\n editor: \"Éditeur\",\n publish: \"Publier\",\n the_end: \"Fin\",\n untitled_story: \"Histoire sans titre\",\n menu_create_story: \"Créer une histoire\",\n menu_create_film: \"Créer un film\",\n film_title_placeholder: \"Titre du film\",\n select_genre: \"Sélectionner un genre\",\n delete_story_verb: \"Supprimer le film\",\n created_by: \"Créé par\",\n },\n de: {\n genre: \"Genre\",\n story: \"Geschichte\",\n scene: \"Szene\",\n publish: \"Veröffentlichen\",\n the_end: \"Ende\",\n untitled_story: \"Unbenannte Geschichte\",\n menu_create_story: \"Geschichte erstellen\",\n film_title_placeholder: \"Filmtitel\",\n select_genre: \"Genre auswählen\",\n created_by: \"Erstellt von\",\n },\n pt: {\n genre: \"Gênero\",\n story: \"História\",\n scene: \"Cena\",\n publish: \"Publicar\",\n the_end: \"Fim\",\n untitled_story: \"História sem título\",\n menu_create_story: \"Criar história\",\n film_title_placeholder: \"Título do filme\",\n select_genre: \"Selecionar gênero\",\n created_by: \"Criado por\",\n },\n};\n\nfunction resolveFallback(locale: LocaleId | null | undefined): Record<string, string> {\n const overrides = locale && FALLBACK_LOCALES[locale];\n return overrides ? { ...FALLBACK_LEXICON, ...overrides } : { ...FALLBACK_LEXICON };\n}\n\nfunction resolveRealm(\n realmId: RealmId,\n locale: LocaleId | null | undefined\n): Record<string, string> {\n const realm = REALMS[realmId];\n const overrides = locale && realm.locales ? realm.locales[locale] : undefined;\n const runtimeOverrides = runtimeRealmLexiconOverrides[realmId];\n return {\n ...realm.lexicon,\n ...(overrides ?? {}),\n ...(runtimeOverrides ?? {}),\n };\n}\n\n/**\n * Get a lexicon value for a realm + locale, falling back to the neutral\n * lexicon (which itself respects locale).\n */\nexport function t(\n realmId: RealmId | null | undefined,\n key: string,\n fallback = \"\",\n locale: LocaleId | null | undefined = null\n): string {\n if (realmId && REALMS[realmId]) {\n const realmLex = resolveRealm(realmId, locale);\n if (realmLex[key] !== undefined) return realmLex[key];\n }\n const fb = resolveFallback(locale);\n return fb[key] ?? fallback;\n}\n\n/**\n * Get the full merged lexicon for a realm + locale (realm lexicon on top of\n * locale-aware fallback).\n */\nexport function lexiconForRealm(\n realmId: RealmId | null | undefined,\n locale: LocaleId | null | undefined = null\n): Record<string, string> {\n const fb = resolveFallback(locale);\n if (!realmId || !REALMS[realmId]) {\n return fb;\n }\n return { ...fb, ...resolveRealm(realmId, locale) };\n}\n","import type { RealmId } from \"../types/index.js\";\n\n/**\n * CSS custom property tokens, mirroring public/css/chuzi-realms.css.\n * Use these for any non-DOM rendering (e.g. React Native, canvas).\n */\nexport interface RealmThemeTokens {\n bgDeep: string;\n bgMid: string;\n accent: string;\n accentSoft: string;\n text: string;\n muted: string;\n effectLine: string;\n}\n\nexport const THEME_TOKENS: Record<RealmId, RealmThemeTokens> = {\n cosmos: {\n bgDeep: \"#04070d\",\n bgMid: \"#0a1020\",\n accent: \"#7eb8ff\",\n accentSoft: \"rgba(126, 184, 255, 0.35)\",\n text: \"#e8f0ff\",\n muted: \"rgba(232, 240, 255, 0.65)\",\n effectLine: \"#ffb347\",\n },\n wilds: {\n bgDeep: \"#0d120c\",\n bgMid: \"#152018\",\n accent: \"#7bc96f\",\n accentSoft: \"rgba(123, 201, 111, 0.35)\",\n text: \"#eef6ea\",\n muted: \"rgba(238, 246, 234, 0.7)\",\n effectLine: \"#b78aff\",\n },\n};\n\n/**\n * Scene tree visualization theme, mirroring the THEMES object in\n * resources/js/scene-tree-viewer.js.\n */\nexport interface SceneTreeTheme {\n bg: string;\n edgeChoice: string;\n edgeGoto: string;\n nodeDefault: string;\n nodeActive: string;\n borderDefault: string;\n borderActive: string;\n labelDefault: string;\n labelActive: string;\n nodeLockedFill: string;\n nodeLockedBorder: string;\n labelLocked: string;\n nodeShape: \"star\" | \"rect\";\n rectRx: number;\n}\n\nexport const SCENE_TREE_THEMES: Record<RealmId, SceneTreeTheme> = {\n cosmos: {\n bg: \"#020408\",\n edgeChoice: \"#e8f0ff\",\n edgeGoto: \"#4a9fff\",\n nodeDefault: \"#ffffff\",\n nodeActive: \"#ffd47e\",\n borderDefault: \"#3a5080\",\n borderActive: \"#fff6d0\",\n labelDefault: \"rgba(220, 232, 255, 0.92)\",\n labelActive: \"rgba(255, 246, 220, 0.98)\",\n nodeLockedFill: \"#151a28\",\n nodeLockedBorder: \"#2a3348\",\n labelLocked: \"rgba(200, 210, 230, 0.35)\",\n nodeShape: \"star\",\n rectRx: 2,\n },\n wilds: {\n bg: \"#04070d\",\n edgeChoice: \"#ffffff\",\n edgeGoto: \"#6ecf7a\",\n nodeDefault: \"#e8f5e4\",\n nodeActive: \"#d31e2f\",\n borderDefault: \"#2d4a32\",\n borderActive: \"#ff9ea8\",\n labelDefault: \"rgba(232, 245, 228, 0.92)\",\n labelActive: \"rgba(255, 214, 219, 0.98)\",\n nodeLockedFill: \"#1a221c\",\n nodeLockedBorder: \"#2a3d30\",\n labelLocked: \"rgba(200, 220, 200, 0.38)\",\n nodeShape: \"rect\",\n rectRx: 3,\n },\n};\n\n/**\n * Get theme tokens for a realm, defaulting to wilds.\n */\nexport function getThemeTokens(realmId: RealmId | null | undefined): RealmThemeTokens {\n return THEME_TOKENS[realmId ?? \"wilds\"] ?? THEME_TOKENS.wilds;\n}\n\n/**\n * Get scene tree theme for a realm, defaulting to wilds.\n */\nexport function getSceneTreeTheme(realmId: RealmId | null | undefined): SceneTreeTheme {\n return SCENE_TREE_THEMES[realmId ?? \"wilds\"] ?? SCENE_TREE_THEMES.wilds;\n}\n","import type {\n AcceptGenerationRequest,\n AcceptGenerationResponse,\n AiGenerationShowResponse,\n BookmarkListResponse,\n BookmarkResponse,\n CatalogResponse,\n CreateSceneActionRequest,\n CreateSceneRequest,\n CreateStoryRequest,\n EngagementResponse,\n GenerateImageRequest,\n GenerateImageResponse,\n LocaleId,\n MagicLinkRequest,\n MagicLinkRequestResponse,\n MagicLinkVerifyRequest,\n MagicLinkVerifyResponse,\n MediaItem,\n MineResponse,\n OidcExchangeRequest,\n OidcExchangeResponse,\n PasswordLoginRequest,\n PasswordLoginResponse,\n PaginatedResponse,\n PlayUrlResponse,\n PublicDirectorProfile,\n RealmConfigResponse,\n RegisterMediaRequest,\n RegisterMediaResponse,\n RejectGenerationRequest,\n RejectGenerationResponse,\n SaveBookmarkRequest,\n SceneActionItem,\n SceneListItem,\n SceneMapResponse,\n SourceUrlResponse,\n StoryListItem,\n StoryStyleResponse,\n TagListResponse,\n TrackEngagementRequest,\n TranscodeRequest,\n TranscodeResponse,\n UsernameAvailabilityResponse,\n UpdateLocaleRequest,\n UpdateLocaleResponse,\n UpdateProfileRequest,\n UpdateProfileResponse,\n UpdateRealmRequest,\n UpdateRealmResponse,\n UpdateSceneActionRequest,\n UpdateSceneRequest,\n UpdateStoryRequest,\n UploadUrlRequest,\n UploadUrlResponse,\n UserProfile,\n CreditBalanceResponse,\n CreditPool,\n GrantCreditsRequest,\n GrantCreditsResponse,\n PaymentMethod,\n PurchaseAmountRequest,\n PurchaseCreditsRequest,\n PurchaseCreditsResponse,\n StorePaymentMethodRequest,\n UploadCostResponse,\n} from \"../types/index.js\";\n\n/**\n * Token resolver returned by the host app. Called on every request; may be\n * synchronous (in-memory) or async (SecureStore on RN-tvOS, AsyncStorage on\n * RN). Return null when the user is unauthenticated.\n */\nexport type TokenResolver = () => string | null | Promise<string | null>;\n\nexport interface ChuziClientConfig {\n /** Base URL of the CHUZI API — no trailing slash required. */\n baseUrl: string;\n /** Returns the current bearer token, or null if unauthenticated. */\n getToken?: TokenResolver;\n /** Override fetch for testing or RN polyfills. Defaults to globalThis.fetch. */\n fetch?: typeof fetch;\n /** Sent as User-Agent (web), or X-Client header (RN). Optional. */\n client?: string;\n}\n\nexport class ChuziApiError extends Error {\n constructor(\n public status: number,\n public body: unknown,\n message?: string,\n ) {\n super(message ?? `chuzi-api ${status}`);\n this.name = \"ChuziApiError\";\n }\n}\n\nexport function isInsufficientCreditsError(err: unknown): err is ChuziApiError {\n if (!(err instanceof ChuziApiError) || err.status !== 403) {\n return false;\n }\n const body = err.body as { error?: string } | null;\n return typeof body?.error === \"string\" && /insufficient/i.test(body.error);\n}\n\nexport function insufficientCreditsPool(err: unknown): CreditPool | null {\n if (!isInsufficientCreditsError(err)) {\n return null;\n }\n const body = err.body as { error?: string };\n const message = body.error ?? \"\";\n if (/watch/i.test(message)) return \"watch\";\n if (/create/i.test(message)) return \"create\";\n return null;\n}\n\ninterface RequestOptions {\n query?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n signal?: AbortSignal;\n}\n\nfunction buildQuery(query: RequestOptions[\"query\"]): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined) continue;\n params.set(k, String(v));\n }\n const s = params.toString();\n return s ? `?${s}` : \"\";\n}\n\nfunction makeRequester(config: ChuziClientConfig) {\n const fetchFn = config.fetch ?? globalThis.fetch;\n const baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n\n return async function request<T>(\n method: string,\n path: string,\n opts: RequestOptions = {},\n ): Promise<T> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n };\n if (config.client) headers[\"X-Chuzi-Client\"] = config.client;\n if (config.getToken) {\n const token = await config.getToken();\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n }\n if (opts.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const res = await fetchFn(`${baseUrl}${path}${buildQuery(opts.query)}`, {\n method,\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,\n signal: opts.signal,\n });\n\n if (res.status === 204) return undefined as T;\n\n let parsed: unknown = null;\n const text = await res.text();\n if (text.length > 0) {\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n }\n\n if (!res.ok) {\n throw new ChuziApiError(res.status, parsed);\n }\n return parsed as T;\n };\n}\n\nexport interface ChuziClient {\n auth: {\n login(req: PasswordLoginRequest): Promise<PasswordLoginResponse>;\n exchangeOidcCode(req: OidcExchangeRequest): Promise<OidcExchangeResponse>;\n requestMagicLink(req: MagicLinkRequest): Promise<MagicLinkRequestResponse>;\n verifyMagicLink(req: MagicLinkVerifyRequest): Promise<MagicLinkVerifyResponse>;\n usernameAvailability(username: string, opts?: { signal?: AbortSignal }): Promise<UsernameAvailabilityResponse>;\n logout(): Promise<void>;\n user(): Promise<UserProfile>;\n };\n catalog: {\n index(opts?: { signal?: AbortSignal }): Promise<CatalogResponse>;\n byCreator(userId: string, opts?: { signal?: AbortSignal }): Promise<CatalogResponse>;\n };\n config: {\n realms(opts?: { locale?: LocaleId; signal?: AbortSignal }): Promise<RealmConfigResponse>;\n };\n stories: {\n index(opts?: { signal?: AbortSignal }): Promise<PaginatedResponse<StoryListItem>>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<StoryListItem>;\n mine(opts?: { signal?: AbortSignal }): Promise<MineResponse>;\n create(req: CreateStoryRequest): Promise<{ data: StoryListItem }>;\n update(id: string, req: UpdateStoryRequest): Promise<{ data: StoryListItem }>;\n destroy(id: string): Promise<void>;\n };\n tags: {\n index(opts?: { signal?: AbortSignal }): Promise<TagListResponse>;\n };\n scenes: {\n index(storyId: string, opts?: { signal?: AbortSignal }): Promise<SceneListItem[]>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<SceneListItem>;\n create(req: CreateSceneRequest): Promise<SceneListItem>;\n update(id: string, req: UpdateSceneRequest): Promise<SceneListItem>;\n destroy(id: string): Promise<void>;\n };\n sceneActions: {\n index(opts?: {\n sceneId?: string;\n signal?: AbortSignal;\n }): Promise<SceneActionItem[]>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<SceneActionItem>;\n create(req: CreateSceneActionRequest): Promise<SceneActionItem>;\n update(id: string, req: UpdateSceneActionRequest): Promise<SceneActionItem>;\n destroy(id: string): Promise<{ message: string }>;\n };\n media: {\n uploadUrl(req: UploadUrlRequest): Promise<UploadUrlResponse>;\n register(req: RegisterMediaRequest): Promise<RegisterMediaResponse>;\n transcode(req: TranscodeRequest): Promise<TranscodeResponse>;\n playUrl(id: string, opts?: { signal?: AbortSignal }): Promise<PlayUrlResponse>;\n sourceUrl(id: string, opts?: { signal?: AbortSignal }): Promise<SourceUrlResponse>;\n };\n watch: {\n sceneMap(storyId: string, opts?: { signal?: AbortSignal }): Promise<SceneMapResponse>;\n trackEngagement(storyId: string, req: TrackEngagementRequest): Promise<EngagementResponse>;\n saveBookmark(storyId: string, req: SaveBookmarkRequest): Promise<BookmarkResponse>;\n listBookmarks(storyId: string, opts?: { signal?: AbortSignal }): Promise<BookmarkListResponse>;\n };\n user: {\n profile(opts?: { signal?: AbortSignal }): Promise<UserProfile>;\n publicProfile(userId: string, opts?: { signal?: AbortSignal }): Promise<PublicDirectorProfile>;\n updateRealm(req: UpdateRealmRequest): Promise<UpdateRealmResponse>;\n updateLocale(req: UpdateLocaleRequest): Promise<UpdateLocaleResponse>;\n updateProfile(req: UpdateProfileRequest): Promise<UpdateProfileResponse>;\n usernameAvailability(username: string, opts?: { signal?: AbortSignal }): Promise<UsernameAvailabilityResponse>;\n };\n credits: {\n balance(opts?: { signal?: AbortSignal }): Promise<CreditBalanceResponse>;\n ledger(opts?: {\n signal?: AbortSignal;\n pool?: CreditPool;\n }): Promise<{ transactions: unknown[] }>;\n packs(opts?: { signal?: AbortSignal }): Promise<{ packs: import(\"../types/index.js\").CreditPack[] }>;\n uploadCost(fileSize: number, opts?: { signal?: AbortSignal }): Promise<UploadCostResponse>;\n purchase(req: PurchaseCreditsRequest): Promise<PurchaseCreditsResponse>;\n purchaseAmount(req: PurchaseAmountRequest): Promise<PurchaseCreditsResponse>;\n unlockScene(sceneId: string, opts?: { signal?: AbortSignal }): Promise<{\n unlocked: boolean;\n already_watched?: boolean;\n balance: import(\"../types/index.js\").CreditBalance;\n error?: string;\n }>;\n };\n payments: {\n list(opts?: { signal?: AbortSignal }): Promise<{ payment_methods: PaymentMethod[] }>;\n store(req: StorePaymentMethodRequest): Promise<{ payment_method: PaymentMethod }>;\n remove(paymentMethodId: string): Promise<{ message: string }>;\n setDefault(paymentMethodId: string): Promise<{ message: string }>;\n };\n admin: {\n credits: {\n grant(req: GrantCreditsRequest): Promise<GrantCreditsResponse>;\n };\n };\n ai: {\n generateImage(req: GenerateImageRequest): Promise<GenerateImageResponse>;\n show(id: string, opts?: { signal?: AbortSignal }): Promise<AiGenerationShowResponse>;\n accept(id: string, req: AcceptGenerationRequest): Promise<AcceptGenerationResponse>;\n reject(id: string, req: RejectGenerationRequest): Promise<RejectGenerationResponse>;\n storyStyle(storyId: string, opts?: { signal?: AbortSignal }): Promise<StoryStyleResponse>;\n storyEstimate(req: import(\"../types/index.js\").AiStoryEstimateRequest): Promise<import(\"../types/index.js\").AiStoryEstimateResponse>;\n storyGenerate(req: import(\"../types/index.js\").AiStoryGenerateRequest): Promise<import(\"../types/index.js\").AiStoryGenerateResponse>;\n sceneEstimate(req: import(\"../types/index.js\").AiSceneEstimateRequest): Promise<import(\"../types/index.js\").AiSceneEstimateResponse>;\n sceneGenerate(req: import(\"../types/index.js\").AiSceneGenerateRequest): Promise<import(\"../types/index.js\").AiSceneGenerateResponse>;\n };\n}\n\n/**\n * Construct a typed CHUZI API client. Bearer-token auth via Authorization\n * header (works for web/SPA and native apps). The host owns token storage\n * and lifecycle — pass `getToken` to plug in localStorage / AsyncStorage /\n * SecureStore as appropriate.\n *\n * Surfaces not yet wired: scene-actions, exports, admin, reports.\n * Add them here as the migration reaches each surface; the route shapes\n * are documented in chuzi-api/routes/api.php.\n */\nexport function createChuziClient(config: ChuziClientConfig): ChuziClient {\n const request = makeRequester(config);\n\n return {\n auth: {\n login: (req) =>\n request(\"POST\", \"/api/v1/auth/login\", { body: req }),\n exchangeOidcCode: (req) =>\n request(\"POST\", \"/api/v1/auth/oidc/exchange\", { body: req }),\n requestMagicLink: (req) =>\n request(\"POST\", \"/api/v1/auth/magic-link/request\", { body: req }),\n verifyMagicLink: (req) =>\n request(\"POST\", \"/api/v1/auth/magic-link/verify\", { body: req }),\n usernameAvailability: (username, opts) =>\n request(\"GET\", \"/api/v1/auth/username-availability\", {\n signal: opts?.signal,\n query: { username },\n }),\n logout: () => request(\"POST\", \"/api/v1/auth/logout\"),\n user: () => request(\"GET\", \"/api/v1/auth/user\"),\n },\n catalog: {\n index: (opts) => request(\"GET\", \"/api/v1/catalog\", opts),\n byCreator: (userId, opts) =>\n request(\"GET\", \"/api/v1/catalog\", {\n signal: opts?.signal,\n query: { creator_id: userId },\n }),\n },\n config: {\n realms: (opts) =>\n request(\"GET\", \"/api/v1/config/realms\", {\n signal: opts?.signal,\n query: opts?.locale ? { locale: opts.locale } : undefined,\n }),\n },\n stories: {\n index: (opts) => request(\"GET\", \"/api/v1/stories\", opts),\n show: (id, opts) => request(\"GET\", `/api/v1/stories/${encodeURIComponent(id)}`, opts),\n mine: (opts) => request(\"GET\", \"/api/v1/stories/mine\", opts),\n create: (req) => request(\"POST\", \"/api/v1/stories\", { body: req }),\n update: (id, req) => request(\"PATCH\", `/api/v1/stories/${encodeURIComponent(id)}`, { body: req }),\n destroy: (id) => request(\"DELETE\", `/api/v1/stories/${encodeURIComponent(id)}`),\n },\n tags: {\n index: (opts) => request(\"GET\", \"/api/v1/tags\", opts),\n },\n scenes: {\n index: (storyId, opts) =>\n request(\"GET\", \"/api/v1/scenes\", {\n signal: opts?.signal,\n query: { story_id: storyId },\n }),\n show: (id, opts) =>\n request(\"GET\", `/api/v1/scenes/${encodeURIComponent(id)}`, opts),\n create: (req) =>\n request(\"POST\", \"/api/v1/scenes\", { body: req }),\n update: (id, req) =>\n request(\"PATCH\", `/api/v1/scenes/${encodeURIComponent(id)}`, { body: req }),\n destroy: (id) =>\n request(\"DELETE\", `/api/v1/scenes/${encodeURIComponent(id)}`),\n },\n sceneActions: {\n index: (opts) =>\n request(\"GET\", \"/api/v1/scene-actions\", {\n signal: opts?.signal,\n query: opts?.sceneId ? { scene_id: opts.sceneId } : undefined,\n }),\n show: (id, opts) =>\n request(\"GET\", `/api/v1/scene-actions/${encodeURIComponent(id)}`, opts),\n create: (req) =>\n request(\"POST\", \"/api/v1/scene-actions\", { body: req }),\n update: (id, req) =>\n request(\"PATCH\", `/api/v1/scene-actions/${encodeURIComponent(id)}`, {\n body: req,\n }),\n destroy: (id) =>\n request(\"DELETE\", `/api/v1/scene-actions/${encodeURIComponent(id)}`),\n },\n media: {\n uploadUrl: (req) =>\n request(\"POST\", \"/api/v1/media/upload-url\", { body: req }),\n register: (req) =>\n request(\"POST\", \"/api/v1/media/register\", { body: req }),\n transcode: (req) =>\n request(\"POST\", \"/api/v1/media/transcode\", { body: req }),\n playUrl: (id, opts) =>\n request(\"GET\", `/api/v1/media/${encodeURIComponent(id)}/play`, opts),\n sourceUrl: (id, opts) =>\n request(\"GET\", `/api/v1/media/${encodeURIComponent(id)}/source-url`, opts),\n },\n watch: {\n sceneMap: (storyId, opts) =>\n request(\"GET\", `/api/v1/stories/${encodeURIComponent(storyId)}/scene-map`, opts),\n trackEngagement: (storyId, req) =>\n request(\"POST\", `/api/v1/stories/${encodeURIComponent(storyId)}/engagement`, { body: req }),\n saveBookmark: (storyId, req) =>\n request(\"POST\", `/api/v1/stories/${encodeURIComponent(storyId)}/bookmark`, { body: req }),\n listBookmarks: (storyId, opts) =>\n request(\"GET\", `/api/v1/stories/${encodeURIComponent(storyId)}/bookmarks`, opts),\n },\n user: {\n profile: (opts) => request(\"GET\", \"/api/v1/user/profile\", opts),\n publicProfile: (userId, opts) =>\n request(\"GET\", `/api/v1/users/${encodeURIComponent(userId)}/public`, opts),\n updateRealm: (req) => request(\"PUT\", \"/api/v1/user/realm\", { body: req }),\n updateLocale: (req) => request(\"PUT\", \"/api/v1/user/locale\", { body: req }),\n updateProfile: (req) => request(\"PUT\", \"/api/v1/user/profile\", { body: req }),\n usernameAvailability: (username, opts) =>\n request(\"GET\", \"/api/v1/user/username-availability\", {\n signal: opts?.signal,\n query: { username },\n }),\n },\n credits: {\n balance: (opts) => request(\"GET\", \"/api/v1/credits/balance\", opts),\n ledger: (opts) =>\n request(\"GET\", \"/api/v1/credits/ledger\", {\n signal: opts?.signal,\n query: opts?.pool ? { pool: opts.pool } : undefined,\n }),\n packs: (opts) => request(\"GET\", \"/api/v1/credits/packs\", opts),\n uploadCost: (fileSize, opts) =>\n request(\"GET\", \"/api/v1/credits/upload-cost\", {\n signal: opts?.signal,\n query: { file_size: fileSize },\n }),\n purchase: (req) =>\n request(\"POST\", \"/api/v1/credits/purchase\", { body: req }),\n purchaseAmount: (req) =>\n request(\"POST\", \"/api/v1/credits/purchase-amount\", { body: req }),\n unlockScene: (sceneId, opts) =>\n request(\"POST\", `/api/v1/scenes/${encodeURIComponent(sceneId)}/unlock`, opts),\n },\n payments: {\n list: (opts) => request(\"GET\", \"/api/v1/payments/methods\", opts),\n store: (req) =>\n request(\"POST\", \"/api/v1/payments/methods\", { body: req }),\n remove: (paymentMethodId) =>\n request(\"DELETE\", `/api/v1/payments/methods/${encodeURIComponent(paymentMethodId)}`),\n setDefault: (paymentMethodId) =>\n request(\n \"POST\",\n `/api/v1/payments/methods/${encodeURIComponent(paymentMethodId)}/default`,\n ),\n },\n admin: {\n credits: {\n grant: (req) =>\n request(\"POST\", \"/api/v1/admin/credits/grant\", { body: req }),\n },\n },\n ai: {\n generateImage: (req) =>\n request(\"POST\", \"/api/v1/ai/generate-image\", { body: req }),\n show: (id, opts) =>\n request(\"GET\", `/api/v1/ai/generations/${encodeURIComponent(id)}`, opts),\n accept: (id, req) =>\n request(\"POST\", `/api/v1/ai/generations/${encodeURIComponent(id)}/accept`, { body: req }),\n reject: (id, req) =>\n request(\"POST\", `/api/v1/ai/generations/${encodeURIComponent(id)}/reject`, { body: req }),\n storyStyle: (storyId, opts) =>\n request(\"GET\", `/api/v1/ai/stories/${encodeURIComponent(storyId)}/style`, opts),\n storyEstimate: (req) =>\n request(\"POST\", \"/api/v1/ai/story/estimate\", { body: req }),\n storyGenerate: (req) =>\n request(\"POST\", \"/api/v1/ai/story/generate\", { body: req }),\n sceneEstimate: (req) =>\n request(\"POST\", `/api/v1/ai/stories/${encodeURIComponent(req.story_id)}/scene/estimate`, {\n body: { brief: req.brief, mode: req.mode, scene_id: req.scene_id },\n }),\n sceneGenerate: (req) =>\n request(\"POST\", `/api/v1/ai/stories/${encodeURIComponent(req.story_id)}/scene/generate`, {\n body: { brief: req.brief, mode: req.mode, scene_id: req.scene_id },\n }),\n },\n };\n}\n","/**\n * Input abstraction. Pointer / touch / D-pad / accessibility nav all emit\n * the *same* `IntentEvent` stream. Realm components and the navigation rig\n * consume intents only — they never know which physical device produced\n * them.\n *\n * This is the load-bearing primitive for cross-platform UX: the TV D-pad\n * does focus-snap, the mouse does free flight, but both speak `MOVE`.\n */\n\nexport const Intent = {\n /** Free-flight delta (pointer/touch) OR discrete direction-snap (dpad). */\n MOVE: \"MOVE\",\n /** Engage the focused atom — open the player / detail view. */\n ENGAGE: \"ENGAGE\",\n /** Pop one level (close detail, exit search, leave realm-switcher). */\n BACK: \"BACK\",\n /** Open filter / search overlay. */\n FILTER: \"FILTER\",\n /** Hold-to-peek: preview detail without committing to ENGAGE. */\n PEEK: \"PEEK\",\n /** Pull camera back to a wider zoom level. */\n ZOOM_OUT: \"ZOOM_OUT\",\n /** Push camera forward to a tighter zoom level. */\n ZOOM_IN: \"ZOOM_IN\",\n /** Move focus to next/prev atom in current group (sibling cycling). */\n CYCLE_NEXT: \"CYCLE_NEXT\",\n CYCLE_PREV: \"CYCLE_PREV\",\n /** Auto-tour: fly between matches/recommendations hands-free. */\n TOUR_START: \"TOUR_START\",\n TOUR_STOP: \"TOUR_STOP\",\n} as const;\n\nexport type IntentName = (typeof Intent)[keyof typeof Intent];\n\nexport type InputMode = \"pointer\" | \"touch\" | \"dpad\" | \"a11y\";\n\nexport type Direction = \"up\" | \"down\" | \"left\" | \"right\";\n\nexport interface IntentEvent {\n intent: IntentName;\n /** For pointer/touch MOVE: continuous look/thrust delta in normalized units. */\n delta?: { x: number; y: number; z?: number };\n /** For ZOOM_IN/ZOOM_OUT: amount in normalized units. */\n amount?: number;\n /** For dpad MOVE: discrete direction. */\n direction?: Direction;\n /** Which physical device produced this intent. */\n source: InputMode;\n /** performance.now() at emission, for timing-sensitive consumers. */\n at: number;\n}\n\n/**\n * Bridge between a physical input (pointerlock, touch handlers, key events,\n * D-pad on remote, screen reader) and the realm's nav rig. Implementations\n * own their own listeners; consumers only subscribe.\n */\nexport interface IntentSource {\n subscribe(handler: (e: IntentEvent) => void): () => void;\n /** Begin listening to the underlying physical input (called by host). */\n start?(): void;\n /** Tear down listeners (called when realm or app unmounts). */\n stop?(): void;\n}\n\n/**\n * Compose multiple sources into one. Useful for surfaces that accept both\n * pointer and gamepad input simultaneously (e.g. desktop dev mode).\n */\nexport function mergeIntentSources(...sources: IntentSource[]): IntentSource {\n return {\n subscribe(handler) {\n const unsubs = sources.map((s) => s.subscribe(handler));\n return () => unsubs.forEach((u) => u());\n },\n start() {\n sources.forEach((s) => s.start?.());\n },\n stop() {\n sources.forEach((s) => s.stop?.());\n },\n };\n}\n","import type { RealmId, StoryListItem } from \"../types/index.js\";\n\n/**\n * Realm rendering contract. Each realm (cosmos, wilds, future depths/etc)\n * implements this interface and ships as a self-contained subpath module\n * (`@chuzi/shared/realms/cosmos`, `@chuzi/shared/realms/wilds`, ...).\n *\n * Apps don't import realms directly — they read `user.realm`, then dynamic-\n * import the matching module. Adding a new realm is a one-package change\n * with zero modifications to app code.\n *\n * The `Component` generic is left abstract so this contract works for any\n * renderer. Web/TV apps satisfy it with `React.ComponentType`; React Native\n * apps satisfy it with their own component type. chuzi-shared itself stays\n * dependency-free.\n */\n\n/** State badge applied to an atom regardless of realm. Realms render it\n * in their own visual language (orbit ring, marker post, glow, etc.). */\nexport type AtomState = \"default\" | \"watched\" | \"bookmarked\" | \"in_progress\" | \"new\";\n\n/** Continuous zoom levels. Camera flies smoothly between them; LOD swaps\n * geometry/asset quality as it crosses thresholds. */\nexport type ZoomLevel = \"overview\" | \"sector\" | \"atom\";\n\nexport interface AtomVisualProps {\n /** Position in realm-space (the realm decides the coordinate convention). */\n position: [number, number, number];\n /** Relative scale, 0–1 normalized. Realms map this to height/girth/etc. */\n scale: number;\n /** Realm-interpretable hue, 0–360. Cosmos: stellar class. Wilds: foliage. */\n hue: number;\n /** Realm-interpretable intensity, 0–1. Cosmos: luminosity. Wilds: density. */\n intensity: number;\n /** Cross-realm state badge. */\n state: AtomState;\n /** Pass-through metadata for realm-specific rendering. */\n metadata: {\n title: string;\n runtime?: number;\n popularity?: number;\n mood?: string;\n genre?: string | null;\n };\n}\n\nexport type AtomMapping = (film: StoryListItem) => AtomVisualProps;\n\nexport interface AudioPalette {\n /** Looping ambient bed (deep-space rumble, forest wind, ocean swell, ...). */\n ambientLoop?: string;\n /** Plays when focus moves to a new atom. */\n focusChime?: string;\n /** Plays during the engage transition into the player. */\n engageImpact?: string;\n /** Plays during the back transition out of the player. */\n backWhoosh?: string;\n}\n\nexport interface MotionTokens {\n /** Free-flight responsiveness (pointer/touch). */\n flightAcceleration: number;\n flightDamping: number;\n /** D-pad / focus-snap easing duration in ms. */\n focusEaseMs: number;\n /** Length of the engage transition (atom → player) in ms. */\n engageDurationMs: number;\n /** Length of the back transition (player → atom) in ms. Should equal\n * engageDurationMs by default — symmetric transitions feel grounded. */\n backDurationMs: number;\n}\n\n/** A geometric atom in realm-space, used by `focusSnap` to compute the\n * best neighbor in a given direction. Realms get the bare minimum and\n * decide how to weight (e.g. cosmos prefers angular alignment, wilds\n * prefers walking distance along the floor plane). */\nexport interface AtomLocation {\n id: string;\n position: [number, number, number];\n}\n\nexport type FocusSnap = (\n currentId: string,\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n atoms: AtomLocation[],\n) => string | null;\n\n/**\n * The full realm module. `Component` is whatever component type the host\n * renderer expects (see file-level doc).\n */\nexport interface RealmModule<Component = unknown> {\n id: RealmId;\n\n /** The environment: skybox / canopy / ocean / city. */\n World: Component;\n /** A single film embodied (Star, Tree, Bioluminescent organism, ...). */\n Atom: Component;\n /** A curated grouping (Constellation, Grove, Reef, ...). */\n Group: Component;\n /** Camera + motion controller. Receives an `IntentSource` prop and\n * maps intents to realm-specific motion. */\n NavRig: Component;\n /** The signature transition: atom expands to fill the screen and\n * hands off to the player surface. Reverses on close. */\n EngageTransition: Component;\n\n /** Maps shared catalog data → realm-specific visual props. */\n mapping: AtomMapping;\n\n /** Realm-specific audio bed and stingers. */\n audio: AudioPalette;\n\n /** Realm-specific timing/easing constants. */\n motion: MotionTokens;\n\n /** D-pad neighbor selection algorithm. Realms own the spatial weighting. */\n focusSnap: FocusSnap;\n}\n\n/**\n * Default focus-snap implementation: pick the atom closest to a 60°\n * directional cone from the current atom. Realms can replace this when\n * their geometry calls for different weighting.\n */\nexport function defaultFocusSnap(\n currentId: string,\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n atoms: AtomLocation[],\n): string | null {\n const current = atoms.find((a) => a.id === currentId);\n if (!current) return null;\n\n const dirVec: [number, number] =\n direction === \"left\" ? [-1, 0]\n : direction === \"right\" ? [1, 0]\n : direction === \"up\" ? [0, 1]\n : [0, -1];\n\n let best: { id: string; score: number } | null = null;\n for (const a of atoms) {\n if (a.id === currentId) continue;\n const dx = a.position[0] - current.position[0];\n const dy = a.position[1] - current.position[1];\n const dist = Math.hypot(dx, dy);\n if (dist === 0) continue;\n const dot = (dx * dirVec[0] + dy * dirVec[1]) / dist;\n // Cone of acceptance: dot > 0.5 ≈ within 60° of direction.\n if (dot < 0.5) continue;\n // Score: closer is better, more aligned is better.\n const score = dist / Math.max(dot, 0.001);\n if (!best || score < best.score) best = { id: a.id, score };\n }\n return best?.id ?? null;\n}\n","import type { SceneChoice, SceneListItem, TextLine } from \"./types/index.js\";\n\n/** Playhead position where timed content is fully visible (after fade-in). */\nexport function previewMsWhenVisible(timing: {\n appear_at_ms: number;\n fade_in_ms: number;\n}): number {\n return timing.appear_at_ms + timing.fade_in_ms;\n}\n\nexport interface ChoiceTiming {\n appear_at_ms: number;\n fade_in_ms: number;\n duration_ms: number;\n fade_out_ms: number;\n}\n\nexport function resolveChoiceTiming(\n choice: SceneChoice,\n fallbackAppearMs: number,\n): ChoiceTiming {\n const appearMs =\n choice.start_time_seconds != null\n ? Math.round(choice.start_time_seconds * 1000)\n : fallbackAppearMs;\n const fadeIn = choice.fade_in_ms ?? 400;\n const fadeOut = choice.fade_out_ms ?? 400;\n const endMs =\n choice.end_time_seconds != null\n ? Math.round(choice.end_time_seconds * 1000)\n : appearMs + fadeIn + (choice.duration_ms ?? 2000) + fadeOut;\n const duration =\n choice.duration_ms ?? Math.max(500, endMs - appearMs - fadeIn - fadeOut);\n return {\n appear_at_ms: appearMs,\n fade_in_ms: fadeIn,\n duration_ms: duration,\n fade_out_ms: fadeOut,\n };\n}\n\nfunction lineHasVisiblePayload(line: TextLine): boolean {\n if (line.type === \"sound\" || line.type === \"image\") {\n return Boolean(line.media_id);\n }\n return line.html.replace(/<[^>]*>/g, \"\").trim().length > 0;\n}\n\nfunction fallbackAppearMsFromLines(lines: TextLine[]): number {\n if (lines.length === 0) return 0;\n const last = lines[lines.length - 1];\n return previewMsWhenVisible(last) + last.duration_ms;\n}\n\n/**\n * Pick the playhead instant where the most scene content is on screen —\n * text lines, choices, and other timed elements at full opacity.\n */\nexport function computeScenePreviewMs(\n scene: SceneListItem,\n choices: SceneChoice[],\n textLines: TextLine[],\n): number {\n const fallback = fallbackAppearMsFromLines(textLines);\n const candidates: number[] = [0];\n\n for (const line of textLines) {\n if (lineHasVisiblePayload(line)) {\n candidates.push(previewMsWhenVisible(line));\n }\n }\n\n for (const choice of choices) {\n if (choice.label.trim().length > 0 || choice.target_scene_id) {\n candidates.push(previewMsWhenVisible(resolveChoiceTiming(choice, fallback)));\n }\n }\n\n return Math.max(...candidates);\n}\n\nexport function isLikelyImageUrl(url: string, mediaType?: string | null): boolean {\n if (mediaType?.startsWith(\"image/\")) return true;\n return /\\.(png|jpe?g|gif|webp|avif)(\\?|$)/i.test(url);\n}\n\nexport function isLikelyVideoUrl(url: string, mediaType?: string | null): boolean {\n if (mediaType?.startsWith(\"video/\")) return true;\n return /\\.(mp4|webm|mov|m3u8)(\\?|$)/i.test(url);\n}\n"]}