freecodego 0.1.6-alpha.2.4 → 0.1.7-alpha.2.2

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/client.cjs CHANGED
@@ -4552,6 +4552,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4552
4552
  "revoked": boolean().readonly()
4553
4553
  })).readonly()
4554
4554
  });
4555
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_parameter_0$schema$value;
4556
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_parameter_0$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_parameter_0$schema$value ??= string();
4557
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_result$schema$value;
4558
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_result$schema$value ??= object$1({ "sent": literal(true).readonly() });
4555
4559
  let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountLogin_parameter_0$schema$value;
4556
4560
  const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountLogin_parameter_0$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountLogin_parameter_0$schema$value ??= object$1({
4557
4561
  "email": string().readonly(),
@@ -4787,6 +4791,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4787
4791
  ]);
4788
4792
  let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountRememberedPassword_result$schema$value;
4789
4793
  const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountRememberedPassword_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountRememberedPassword_result$schema$value ??= object$1({ "password": string().readonly().optional() });
4794
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_parameter_0$schema$value;
4795
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_parameter_0$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_parameter_0$schema$value ??= object$1({
4796
+ "email": string().readonly(),
4797
+ "verifyCode": string().readonly(),
4798
+ "newPassword": string().readonly()
4799
+ });
4800
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_result$schema$value;
4801
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_result$schema$value ??= object$1({ "reset": literal(true).readonly() });
4790
4802
  let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountRevokeAllSessions_result$schema$value;
4791
4803
  const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountRevokeAllSessions_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountRevokeAllSessions_result$schema$value ??= number();
4792
4804
  let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountRevokeDeviceSession_parameter_0$schema$value;
@@ -8936,6 +8948,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8936
8948
  "scope": union([literal("project"), literal("user")]).readonly()
8937
8949
  })]).readonly().optional()
8938
8950
  });
8951
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_parameter_0$schema$value;
8952
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_parameter_0$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_parameter_0$schema$value ??= boolean();
8953
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_result$schema$value;
8954
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_result$schema$value ??= object$1({
8955
+ "enabled": boolean().readonly(),
8956
+ "gated": array(string()).readonly(),
8957
+ "registered": array(string()).readonly()
8958
+ });
8959
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationStatus_result$schema$value;
8960
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationStatus_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationStatus_result$schema$value ??= object$1({
8961
+ "enabled": boolean().readonly(),
8962
+ "gated": array(string()).readonly(),
8963
+ "registered": array(string()).readonly()
8964
+ });
8939
8965
  let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_modelAvailability_result$schema$value;
8940
8966
  const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_modelAvailability_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_modelAvailability_result$schema$value ??= array(object$1({
8941
8967
  "provider": string().readonly(),
@@ -11795,6 +11821,34 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11795
11821
  "name": string().readonly()
11796
11822
  })).readonly()
11797
11823
  });
11824
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_parameter_0$schema$value;
11825
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_parameter_0$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_parameter_0$schema$value ??= object$1({
11826
+ "provider": string().readonly().optional(),
11827
+ "model": string().readonly().optional()
11828
+ });
11829
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_result$schema$value;
11830
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_result$schema$value ??= object$1({
11831
+ "provider": string().readonly(),
11832
+ "model": string().readonly(),
11833
+ "baseURL": string().readonly(),
11834
+ "apiKeyEnv": string().readonly(),
11835
+ "apiKey": string().readonly(),
11836
+ "durable": boolean().readonly()
11837
+ });
11838
+ let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBindingStatus_result$schema$value;
11839
+ const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBindingStatus_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBindingStatus_result$schema$value ??= object$1({
11840
+ "state": union([
11841
+ literal("other"),
11842
+ literal("bridge"),
11843
+ literal("none"),
11844
+ literal("durable")
11845
+ ]).readonly(),
11846
+ "alive": boolean().readonly(),
11847
+ "remembered": object$1({
11848
+ "provider": string().readonly(),
11849
+ "model": string().readonly()
11850
+ }).readonly().optional()
11851
+ });
11798
11852
  let _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_workbuddyImportDesktopLogin_result$schema$value;
11799
11853
  const _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_workbuddyImportDesktopLogin_result$schema = () => _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_workbuddyImportDesktopLogin_result$schema$value ??= object$1({
11800
11854
  "configured": boolean().readonly(),
@@ -12219,7 +12273,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12219
12273
  },
12220
12274
  sourceLocation: {
12221
12275
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12222
- "line": 5575,
12276
+ "line": 5926,
12223
12277
  "column": 9
12224
12278
  }
12225
12279
  },
@@ -12238,7 +12292,35 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12238
12292
  },
12239
12293
  sourceLocation: {
12240
12294
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12241
- "line": 5699,
12295
+ "line": 6070,
12296
+ "column": 9
12297
+ }
12298
+ },
12299
+ {
12300
+ id: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/accountForgotPassword",
12301
+ service: "freeCodeGoHarness",
12302
+ namespace: "freeCodeGoHarness",
12303
+ method: "accountForgotPassword",
12304
+ implementation: "forgotPassword",
12305
+ invocation: { kind: "direct" },
12306
+ parameters: [{
12307
+ name: "email",
12308
+ wire: "email",
12309
+ source: "json",
12310
+ codec: {
12311
+ mode: "strict",
12312
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/accountForgotPassword:email",
12313
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_parameter_0$schema
12314
+ }
12315
+ }],
12316
+ result: {
12317
+ mode: "strict",
12318
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/accountForgotPassword:result",
12319
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountForgotPassword_result$schema
12320
+ },
12321
+ sourceLocation: {
12322
+ "file": "packages/freecodego/harness-plugin/src/index.ts",
12323
+ "line": 5956,
12242
12324
  "column": 9
12243
12325
  }
12244
12326
  },
@@ -12266,7 +12348,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12266
12348
  },
12267
12349
  sourceLocation: {
12268
12350
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12269
- "line": 5605,
12351
+ "line": 5976,
12270
12352
  "column": 9
12271
12353
  }
12272
12354
  },
@@ -12285,7 +12367,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12285
12367
  },
12286
12368
  sourceLocation: {
12287
12369
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12288
- "line": 5691,
12370
+ "line": 6062,
12289
12371
  "column": 9
12290
12372
  }
12291
12373
  },
@@ -12323,7 +12405,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12323
12405
  },
12324
12406
  sourceLocation: {
12325
12407
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12326
- "line": 5672,
12408
+ "line": 6043,
12327
12409
  "column": 9
12328
12410
  }
12329
12411
  },
@@ -12351,7 +12433,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12351
12433
  },
12352
12434
  sourceLocation: {
12353
12435
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12354
- "line": 5626,
12436
+ "line": 5997,
12355
12437
  "column": 9
12356
12438
  }
12357
12439
  },
@@ -12379,7 +12461,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12379
12461
  },
12380
12462
  sourceLocation: {
12381
12463
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12382
- "line": 5652,
12464
+ "line": 6023,
12383
12465
  "column": 9
12384
12466
  }
12385
12467
  },
@@ -12407,7 +12489,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12407
12489
  },
12408
12490
  sourceLocation: {
12409
12491
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12410
- "line": 5661,
12492
+ "line": 6032,
12411
12493
  "column": 9
12412
12494
  }
12413
12495
  },
@@ -12435,7 +12517,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12435
12517
  },
12436
12518
  sourceLocation: {
12437
12519
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12438
- "line": 5643,
12520
+ "line": 6014,
12439
12521
  "column": 9
12440
12522
  }
12441
12523
  },
@@ -12454,7 +12536,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12454
12536
  },
12455
12537
  sourceLocation: {
12456
12538
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12457
- "line": 5634,
12539
+ "line": 6005,
12458
12540
  "column": 9
12459
12541
  }
12460
12542
  },
@@ -12483,7 +12565,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12483
12565
  },
12484
12566
  sourceLocation: {
12485
12567
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12486
- "line": 5682,
12568
+ "line": 6053,
12487
12569
  "column": 9
12488
12570
  }
12489
12571
  },
@@ -12511,7 +12593,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12511
12593
  },
12512
12594
  sourceLocation: {
12513
12595
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12514
- "line": 5585,
12596
+ "line": 5936,
12515
12597
  "column": 9
12516
12598
  }
12517
12599
  },
@@ -12530,7 +12612,35 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12530
12612
  },
12531
12613
  sourceLocation: {
12532
12614
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12533
- "line": 5614,
12615
+ "line": 5985,
12616
+ "column": 9
12617
+ }
12618
+ },
12619
+ {
12620
+ id: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/accountResetPassword",
12621
+ service: "freeCodeGoHarness",
12622
+ namespace: "freeCodeGoHarness",
12623
+ method: "accountResetPassword",
12624
+ implementation: "resetPassword",
12625
+ invocation: { kind: "direct" },
12626
+ parameters: [{
12627
+ name: "input",
12628
+ wire: "input",
12629
+ source: "json",
12630
+ codec: {
12631
+ mode: "strict",
12632
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin/types#FreeCodeGoPasswordResetRequest",
12633
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_parameter_0$schema
12634
+ }
12635
+ }],
12636
+ result: {
12637
+ mode: "strict",
12638
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/accountResetPassword:result",
12639
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_accountResetPassword_result$schema
12640
+ },
12641
+ sourceLocation: {
12642
+ "file": "packages/freecodego/harness-plugin/src/index.ts",
12643
+ "line": 5966,
12534
12644
  "column": 9
12535
12645
  }
12536
12646
  },
@@ -12549,7 +12659,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12549
12659
  },
12550
12660
  sourceLocation: {
12551
12661
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12552
- "line": 5717,
12662
+ "line": 6088,
12553
12663
  "column": 9
12554
12664
  }
12555
12665
  },
@@ -12577,7 +12687,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12577
12687
  },
12578
12688
  sourceLocation: {
12579
12689
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12580
- "line": 5709,
12690
+ "line": 6080,
12581
12691
  "column": 9
12582
12692
  }
12583
12693
  },
@@ -12605,7 +12715,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12605
12715
  },
12606
12716
  sourceLocation: {
12607
12717
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12608
- "line": 5595,
12718
+ "line": 5946,
12609
12719
  "column": 9
12610
12720
  }
12611
12721
  },
@@ -12623,7 +12733,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12623
12733
  },
12624
12734
  sourceLocation: {
12625
12735
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12626
- "line": 5566,
12736
+ "line": 5917,
12627
12737
  "column": 9
12628
12738
  }
12629
12739
  },
@@ -12641,7 +12751,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12641
12751
  },
12642
12752
  sourceLocation: {
12643
12753
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12644
- "line": 1951,
12754
+ "line": 2255,
12645
12755
  "column": 9
12646
12756
  }
12647
12757
  },
@@ -12659,7 +12769,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12659
12769
  },
12660
12770
  sourceLocation: {
12661
12771
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12662
- "line": 1959,
12772
+ "line": 2263,
12663
12773
  "column": 3
12664
12774
  }
12665
12775
  },
@@ -12686,7 +12796,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12686
12796
  },
12687
12797
  sourceLocation: {
12688
12798
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12689
- "line": 1972,
12799
+ "line": 2276,
12690
12800
  "column": 3
12691
12801
  }
12692
12802
  },
@@ -12704,7 +12814,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12704
12814
  },
12705
12815
  sourceLocation: {
12706
12816
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12707
- "line": 1934,
12817
+ "line": 2238,
12708
12818
  "column": 3
12709
12819
  }
12710
12820
  },
@@ -12731,7 +12841,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12731
12841
  },
12732
12842
  sourceLocation: {
12733
12843
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12734
- "line": 1943,
12844
+ "line": 2247,
12735
12845
  "column": 9
12736
12846
  }
12737
12847
  },
@@ -12759,7 +12869,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12759
12869
  },
12760
12870
  sourceLocation: {
12761
12871
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12762
- "line": 6307,
12872
+ "line": 6678,
12763
12873
  "column": 9
12764
12874
  }
12765
12875
  },
@@ -12795,7 +12905,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12795
12905
  },
12796
12906
  sourceLocation: {
12797
12907
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12798
- "line": 6289,
12908
+ "line": 6660,
12799
12909
  "column": 9
12800
12910
  }
12801
12911
  },
@@ -12823,7 +12933,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12823
12933
  },
12824
12934
  sourceLocation: {
12825
12935
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12826
- "line": 6331,
12936
+ "line": 6702,
12827
12937
  "column": 9
12828
12938
  }
12829
12939
  },
@@ -12851,7 +12961,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12851
12961
  },
12852
12962
  sourceLocation: {
12853
12963
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12854
- "line": 6323,
12964
+ "line": 6694,
12855
12965
  "column": 9
12856
12966
  }
12857
12967
  },
@@ -12900,7 +13010,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12900
13010
  },
12901
13011
  sourceLocation: {
12902
13012
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12903
- "line": 6299,
13013
+ "line": 6670,
12904
13014
  "column": 9
12905
13015
  }
12906
13016
  },
@@ -12927,7 +13037,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12927
13037
  },
12928
13038
  sourceLocation: {
12929
13039
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12930
- "line": 6315,
13040
+ "line": 6686,
12931
13041
  "column": 9
12932
13042
  }
12933
13043
  },
@@ -12976,7 +13086,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12976
13086
  },
12977
13087
  sourceLocation: {
12978
13088
  "file": "packages/freecodego/harness-plugin/src/index.ts",
12979
- "line": 6280,
13089
+ "line": 6651,
12980
13090
  "column": 9
12981
13091
  }
12982
13092
  },
@@ -13003,7 +13113,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13003
13113
  },
13004
13114
  sourceLocation: {
13005
13115
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13006
- "line": 6270,
13116
+ "line": 6641,
13007
13117
  "column": 9
13008
13118
  }
13009
13119
  },
@@ -13030,7 +13140,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13030
13140
  },
13031
13141
  sourceLocation: {
13032
13142
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13033
- "line": 6262,
13143
+ "line": 6633,
13034
13144
  "column": 9
13035
13145
  }
13036
13146
  },
@@ -13048,7 +13158,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13048
13158
  },
13049
13159
  sourceLocation: {
13050
13160
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13051
- "line": 6254,
13161
+ "line": 6625,
13052
13162
  "column": 9
13053
13163
  }
13054
13164
  },
@@ -13066,7 +13176,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13066
13176
  },
13067
13177
  sourceLocation: {
13068
13178
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13069
- "line": 4707,
13179
+ "line": 5041,
13070
13180
  "column": 9
13071
13181
  }
13072
13182
  },
@@ -13093,7 +13203,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13093
13203
  },
13094
13204
  sourceLocation: {
13095
13205
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13096
- "line": 4734,
13206
+ "line": 5068,
13097
13207
  "column": 9
13098
13208
  }
13099
13209
  },
@@ -13111,7 +13221,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13111
13221
  },
13112
13222
  sourceLocation: {
13113
13223
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13114
- "line": 6189,
13224
+ "line": 6560,
13115
13225
  "column": 9
13116
13226
  }
13117
13227
  },
@@ -13129,7 +13239,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13129
13239
  },
13130
13240
  sourceLocation: {
13131
13241
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13132
- "line": 5730,
13242
+ "line": 6101,
13133
13243
  "column": 9
13134
13244
  }
13135
13245
  },
@@ -13147,7 +13257,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13147
13257
  },
13148
13258
  sourceLocation: {
13149
13259
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13150
- "line": 6197,
13260
+ "line": 6568,
13151
13261
  "column": 9
13152
13262
  }
13153
13263
  },
@@ -13165,7 +13275,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13165
13275
  },
13166
13276
  sourceLocation: {
13167
13277
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13168
- "line": 6205,
13278
+ "line": 6576,
13169
13279
  "column": 9
13170
13280
  }
13171
13281
  },
@@ -13192,7 +13302,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13192
13302
  },
13193
13303
  sourceLocation: {
13194
13304
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13195
- "line": 6215,
13305
+ "line": 6586,
13196
13306
  "column": 9
13197
13307
  }
13198
13308
  },
@@ -13211,7 +13321,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13211
13321
  },
13212
13322
  sourceLocation: {
13213
13323
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13214
- "line": 5059,
13324
+ "line": 5410,
13215
13325
  "column": 9
13216
13326
  }
13217
13327
  },
@@ -13238,7 +13348,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13238
13348
  },
13239
13349
  sourceLocation: {
13240
13350
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13241
- "line": 5068,
13351
+ "line": 5419,
13242
13352
  "column": 9
13243
13353
  }
13244
13354
  },
@@ -13265,7 +13375,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13265
13375
  },
13266
13376
  sourceLocation: {
13267
13377
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13268
- "line": 5164,
13378
+ "line": 5515,
13269
13379
  "column": 9
13270
13380
  }
13271
13381
  },
@@ -13283,7 +13393,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13283
13393
  },
13284
13394
  sourceLocation: {
13285
13395
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13286
- "line": 5441,
13396
+ "line": 5792,
13287
13397
  "column": 3
13288
13398
  }
13289
13399
  },
@@ -13311,7 +13421,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13311
13421
  },
13312
13422
  sourceLocation: {
13313
13423
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13314
- "line": 5512,
13424
+ "line": 5863,
13315
13425
  "column": 9
13316
13426
  }
13317
13427
  },
@@ -13329,7 +13439,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13329
13439
  },
13330
13440
  sourceLocation: {
13331
13441
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13332
- "line": 5521,
13442
+ "line": 5872,
13333
13443
  "column": 3
13334
13444
  }
13335
13445
  },
@@ -13347,7 +13457,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13347
13457
  },
13348
13458
  sourceLocation: {
13349
13459
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13350
- "line": 5528,
13460
+ "line": 5879,
13351
13461
  "column": 9
13352
13462
  }
13353
13463
  },
@@ -13365,7 +13475,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13365
13475
  },
13366
13476
  sourceLocation: {
13367
13477
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13368
- "line": 5504,
13478
+ "line": 5855,
13369
13479
  "column": 3
13370
13480
  }
13371
13481
  },
@@ -13392,7 +13502,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13392
13502
  },
13393
13503
  sourceLocation: {
13394
13504
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13395
- "line": 6152,
13505
+ "line": 6523,
13396
13506
  "column": 9
13397
13507
  }
13398
13508
  },
@@ -13410,7 +13520,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13410
13520
  },
13411
13521
  sourceLocation: {
13412
13522
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13413
- "line": 6181,
13523
+ "line": 6552,
13414
13524
  "column": 9
13415
13525
  }
13416
13526
  },
@@ -13437,7 +13547,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13437
13547
  },
13438
13548
  sourceLocation: {
13439
13549
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13440
- "line": 6142,
13550
+ "line": 6513,
13441
13551
  "column": 9
13442
13552
  }
13443
13553
  },
@@ -13465,7 +13575,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13465
13575
  },
13466
13576
  sourceLocation: {
13467
13577
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13468
- "line": 6172,
13578
+ "line": 6543,
13469
13579
  "column": 9
13470
13580
  }
13471
13581
  },
@@ -13492,7 +13602,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13492
13602
  },
13493
13603
  sourceLocation: {
13494
13604
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13495
- "line": 6162,
13605
+ "line": 6533,
13496
13606
  "column": 9
13497
13607
  }
13498
13608
  },
@@ -13510,7 +13620,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13510
13620
  },
13511
13621
  sourceLocation: {
13512
13622
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13513
- "line": 6132,
13623
+ "line": 6503,
13514
13624
  "column": 9
13515
13625
  }
13516
13626
  },
@@ -13528,7 +13638,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13528
13638
  },
13529
13639
  sourceLocation: {
13530
13640
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13531
- "line": 6123,
13641
+ "line": 6494,
13532
13642
  "column": 9
13533
13643
  }
13534
13644
  },
@@ -13556,7 +13666,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13556
13666
  },
13557
13667
  sourceLocation: {
13558
13668
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13559
- "line": 5479,
13669
+ "line": 5830,
13560
13670
  "column": 9
13561
13671
  }
13562
13672
  },
@@ -13574,7 +13684,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13574
13684
  },
13575
13685
  sourceLocation: {
13576
13686
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13577
- "line": 5488,
13687
+ "line": 5839,
13578
13688
  "column": 9
13579
13689
  }
13580
13690
  },
@@ -13592,7 +13702,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13592
13702
  },
13593
13703
  sourceLocation: {
13594
13704
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13595
- "line": 5495,
13705
+ "line": 5846,
13596
13706
  "column": 9
13597
13707
  }
13598
13708
  },
@@ -13610,7 +13720,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13610
13720
  },
13611
13721
  sourceLocation: {
13612
13722
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13613
- "line": 5471,
13723
+ "line": 5822,
13614
13724
  "column": 3
13615
13725
  }
13616
13726
  },
@@ -13628,7 +13738,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13628
13738
  },
13629
13739
  sourceLocation: {
13630
13740
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13631
- "line": 5304,
13741
+ "line": 5655,
13632
13742
  "column": 9
13633
13743
  }
13634
13744
  },
@@ -13655,7 +13765,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13655
13765
  },
13656
13766
  sourceLocation: {
13657
13767
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13658
- "line": 5313,
13768
+ "line": 5664,
13659
13769
  "column": 9
13660
13770
  }
13661
13771
  },
@@ -13673,7 +13783,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13673
13783
  },
13674
13784
  sourceLocation: {
13675
13785
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13676
- "line": 5322,
13786
+ "line": 5673,
13677
13787
  "column": 9
13678
13788
  }
13679
13789
  },
@@ -13700,7 +13810,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13700
13810
  },
13701
13811
  sourceLocation: {
13702
13812
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13703
- "line": 5341,
13813
+ "line": 5692,
13704
13814
  "column": 9
13705
13815
  }
13706
13816
  },
@@ -13718,7 +13828,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13718
13828
  },
13719
13829
  sourceLocation: {
13720
13830
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13721
- "line": 5331,
13831
+ "line": 5682,
13722
13832
  "column": 9
13723
13833
  }
13724
13834
  },
@@ -13745,7 +13855,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13745
13855
  },
13746
13856
  sourceLocation: {
13747
13857
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13748
- "line": 5350,
13858
+ "line": 5701,
13749
13859
  "column": 9
13750
13860
  }
13751
13861
  },
@@ -13772,7 +13882,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13772
13882
  },
13773
13883
  sourceLocation: {
13774
13884
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13775
- "line": 2483,
13885
+ "line": 2787,
13776
13886
  "column": 9
13777
13887
  }
13778
13888
  },
@@ -13790,7 +13900,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13790
13900
  },
13791
13901
  sourceLocation: {
13792
13902
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13793
- "line": 2474,
13903
+ "line": 2778,
13794
13904
  "column": 3
13795
13905
  }
13796
13906
  },
@@ -13826,7 +13936,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13826
13936
  },
13827
13937
  sourceLocation: {
13828
13938
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13829
- "line": 2364,
13939
+ "line": 2668,
13830
13940
  "column": 9
13831
13941
  }
13832
13942
  },
@@ -13862,7 +13972,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13862
13972
  },
13863
13973
  sourceLocation: {
13864
13974
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13865
- "line": 2403,
13975
+ "line": 2707,
13866
13976
  "column": 3
13867
13977
  }
13868
13978
  },
@@ -13889,7 +13999,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13889
13999
  },
13890
14000
  sourceLocation: {
13891
14001
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13892
- "line": 2373,
14002
+ "line": 2677,
13893
14003
  "column": 3
13894
14004
  }
13895
14005
  },
@@ -13925,7 +14035,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13925
14035
  },
13926
14036
  sourceLocation: {
13927
14037
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13928
- "line": 2393,
14038
+ "line": 2697,
13929
14039
  "column": 3
13930
14040
  }
13931
14041
  },
@@ -13961,7 +14071,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13961
14071
  },
13962
14072
  sourceLocation: {
13963
14073
  "file": "packages/freecodego/harness-plugin/src/index.ts",
13964
- "line": 2383,
14074
+ "line": 2687,
13965
14075
  "column": 9
13966
14076
  }
13967
14077
  },
@@ -13997,7 +14107,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13997
14107
  },
13998
14108
  sourceLocation: {
13999
14109
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14000
- "line": 2413,
14110
+ "line": 2717,
14001
14111
  "column": 3
14002
14112
  }
14003
14113
  },
@@ -14034,7 +14144,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14034
14144
  },
14035
14145
  sourceLocation: {
14036
14146
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14037
- "line": 5012,
14147
+ "line": 5346,
14038
14148
  "column": 3
14039
14149
  }
14040
14150
  },
@@ -14061,7 +14171,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14061
14171
  },
14062
14172
  sourceLocation: {
14063
14173
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14064
- "line": 5032,
14174
+ "line": 5366,
14065
14175
  "column": 3
14066
14176
  }
14067
14177
  },
@@ -14088,7 +14198,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14088
14198
  },
14089
14199
  sourceLocation: {
14090
14200
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14091
- "line": 5042,
14201
+ "line": 5376,
14092
14202
  "column": 3
14093
14203
  }
14094
14204
  },
@@ -14115,7 +14225,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14115
14225
  },
14116
14226
  sourceLocation: {
14117
14227
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14118
- "line": 5002,
14228
+ "line": 5336,
14119
14229
  "column": 3
14120
14230
  }
14121
14231
  },
@@ -14133,7 +14243,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14133
14243
  },
14134
14244
  sourceLocation: {
14135
14245
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14136
- "line": 4985,
14246
+ "line": 5319,
14137
14247
  "column": 3
14138
14248
  }
14139
14249
  },
@@ -14151,7 +14261,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14151
14261
  },
14152
14262
  sourceLocation: {
14153
14263
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14154
- "line": 4977,
14264
+ "line": 5311,
14155
14265
  "column": 3
14156
14266
  }
14157
14267
  },
@@ -14169,7 +14279,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14169
14279
  },
14170
14280
  sourceLocation: {
14171
14281
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14172
- "line": 4993,
14282
+ "line": 5327,
14173
14283
  "column": 3
14174
14284
  }
14175
14285
  },
@@ -14187,7 +14297,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14187
14297
  },
14188
14298
  sourceLocation: {
14189
14299
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14190
- "line": 4969,
14300
+ "line": 5303,
14191
14301
  "column": 3
14192
14302
  }
14193
14303
  },
@@ -14214,7 +14324,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14214
14324
  },
14215
14325
  sourceLocation: {
14216
14326
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14217
- "line": 5022,
14327
+ "line": 5356,
14218
14328
  "column": 3
14219
14329
  }
14220
14330
  },
@@ -14241,7 +14351,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14241
14351
  },
14242
14352
  sourceLocation: {
14243
14353
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14244
- "line": 2019,
14354
+ "line": 2323,
14245
14355
  "column": 9
14246
14356
  }
14247
14357
  },
@@ -14268,7 +14378,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14268
14378
  },
14269
14379
  sourceLocation: {
14270
14380
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14271
- "line": 2010,
14381
+ "line": 2314,
14272
14382
  "column": 3
14273
14383
  }
14274
14384
  },
@@ -14286,7 +14396,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14286
14396
  },
14287
14397
  sourceLocation: {
14288
14398
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14289
- "line": 2458,
14399
+ "line": 2762,
14290
14400
  "column": 9
14291
14401
  }
14292
14402
  },
@@ -14323,7 +14433,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14323
14433
  },
14324
14434
  sourceLocation: {
14325
14435
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14326
- "line": 4922,
14436
+ "line": 5256,
14327
14437
  "column": 3
14328
14438
  }
14329
14439
  },
@@ -14350,7 +14460,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14350
14460
  },
14351
14461
  sourceLocation: {
14352
14462
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14353
- "line": 4941,
14463
+ "line": 5275,
14354
14464
  "column": 3
14355
14465
  }
14356
14466
  },
@@ -14387,7 +14497,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14387
14497
  },
14388
14498
  sourceLocation: {
14389
14499
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14390
- "line": 4951,
14500
+ "line": 5285,
14391
14501
  "column": 3
14392
14502
  }
14393
14503
  },
@@ -14414,7 +14524,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14414
14524
  },
14415
14525
  sourceLocation: {
14416
14526
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14417
- "line": 4961,
14527
+ "line": 5295,
14418
14528
  "column": 3
14419
14529
  }
14420
14530
  },
@@ -14441,7 +14551,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14441
14551
  },
14442
14552
  sourceLocation: {
14443
14553
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14444
- "line": 4912,
14554
+ "line": 5246,
14445
14555
  "column": 3
14446
14556
  }
14447
14557
  },
@@ -14468,7 +14578,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14468
14578
  },
14469
14579
  sourceLocation: {
14470
14580
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14471
- "line": 4895,
14581
+ "line": 5229,
14472
14582
  "column": 3
14473
14583
  }
14474
14584
  },
@@ -14486,7 +14596,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14486
14596
  },
14487
14597
  sourceLocation: {
14488
14598
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14489
- "line": 4886,
14599
+ "line": 5220,
14490
14600
  "column": 3
14491
14601
  }
14492
14602
  },
@@ -14504,7 +14614,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14504
14614
  },
14505
14615
  sourceLocation: {
14506
14616
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14507
- "line": 4903,
14617
+ "line": 5237,
14508
14618
  "column": 3
14509
14619
  }
14510
14620
  },
@@ -14522,7 +14632,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14522
14632
  },
14523
14633
  sourceLocation: {
14524
14634
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14525
- "line": 4878,
14635
+ "line": 5212,
14526
14636
  "column": 3
14527
14637
  }
14528
14638
  },
@@ -14549,7 +14659,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14549
14659
  },
14550
14660
  sourceLocation: {
14551
14661
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14552
- "line": 4932,
14662
+ "line": 5266,
14553
14663
  "column": 3
14554
14664
  }
14555
14665
  },
@@ -14576,7 +14686,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14576
14686
  },
14577
14687
  sourceLocation: {
14578
14688
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14579
- "line": 2150,
14689
+ "line": 2454,
14580
14690
  "column": 9
14581
14691
  }
14582
14692
  },
@@ -14603,7 +14713,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14603
14713
  },
14604
14714
  sourceLocation: {
14605
14715
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14606
- "line": 2141,
14716
+ "line": 2445,
14607
14717
  "column": 9
14608
14718
  }
14609
14719
  },
@@ -14630,7 +14740,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14630
14740
  },
14631
14741
  sourceLocation: {
14632
14742
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14633
- "line": 2159,
14743
+ "line": 2463,
14634
14744
  "column": 9
14635
14745
  }
14636
14746
  },
@@ -14657,7 +14767,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14657
14767
  },
14658
14768
  sourceLocation: {
14659
14769
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14660
- "line": 2268,
14770
+ "line": 2572,
14661
14771
  "column": 3
14662
14772
  }
14663
14773
  },
@@ -14684,7 +14794,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14684
14794
  },
14685
14795
  sourceLocation: {
14686
14796
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14687
- "line": 2305,
14797
+ "line": 2609,
14688
14798
  "column": 9
14689
14799
  }
14690
14800
  },
@@ -14720,7 +14830,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14720
14830
  },
14721
14831
  sourceLocation: {
14722
14832
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14723
- "line": 2240,
14833
+ "line": 2544,
14724
14834
  "column": 3
14725
14835
  }
14726
14836
  },
@@ -14747,7 +14857,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14747
14857
  },
14748
14858
  sourceLocation: {
14749
14859
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14750
- "line": 2259,
14860
+ "line": 2563,
14751
14861
  "column": 3
14752
14862
  }
14753
14863
  },
@@ -14784,7 +14894,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14784
14894
  },
14785
14895
  sourceLocation: {
14786
14896
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14787
- "line": 2344,
14897
+ "line": 2648,
14788
14898
  "column": 3
14789
14899
  }
14790
14900
  },
@@ -14820,7 +14930,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14820
14930
  },
14821
14931
  sourceLocation: {
14822
14932
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14823
- "line": 2220,
14933
+ "line": 2524,
14824
14934
  "column": 3
14825
14935
  }
14826
14936
  },
@@ -14857,7 +14967,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14857
14967
  },
14858
14968
  sourceLocation: {
14859
14969
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14860
- "line": 2169,
14970
+ "line": 2473,
14861
14971
  "column": 3
14862
14972
  }
14863
14973
  },
@@ -14884,7 +14994,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14884
14994
  },
14885
14995
  sourceLocation: {
14886
14996
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14887
- "line": 2323,
14997
+ "line": 2627,
14888
14998
  "column": 3
14889
14999
  }
14890
15000
  },
@@ -14921,7 +15031,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14921
15031
  },
14922
15032
  sourceLocation: {
14923
15033
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14924
- "line": 2250,
15034
+ "line": 2554,
14925
15035
  "column": 3
14926
15036
  }
14927
15037
  },
@@ -14948,7 +15058,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14948
15058
  },
14949
15059
  sourceLocation: {
14950
15060
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14951
- "line": 2189,
15061
+ "line": 2493,
14952
15062
  "column": 3
14953
15063
  }
14954
15064
  },
@@ -14985,7 +15095,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14985
15095
  },
14986
15096
  sourceLocation: {
14987
15097
  "file": "packages/freecodego/harness-plugin/src/index.ts",
14988
- "line": 2278,
15098
+ "line": 2582,
14989
15099
  "column": 3
14990
15100
  }
14991
15101
  },
@@ -15021,7 +15131,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15021
15131
  },
15022
15132
  sourceLocation: {
15023
15133
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15024
- "line": 2230,
15134
+ "line": 2534,
15025
15135
  "column": 3
15026
15136
  }
15027
15137
  },
@@ -15072,7 +15182,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15072
15182
  },
15073
15183
  sourceLocation: {
15074
15184
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15075
- "line": 2180,
15185
+ "line": 2484,
15076
15186
  "column": 3
15077
15187
  }
15078
15188
  },
@@ -15108,7 +15218,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15108
15218
  },
15109
15219
  sourceLocation: {
15110
15220
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15111
- "line": 2210,
15221
+ "line": 2514,
15112
15222
  "column": 3
15113
15223
  }
15114
15224
  },
@@ -15135,7 +15245,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15135
15245
  },
15136
15246
  sourceLocation: {
15137
15247
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15138
- "line": 2123,
15248
+ "line": 2427,
15139
15249
  "column": 9
15140
15250
  }
15141
15251
  },
@@ -15162,7 +15272,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15162
15272
  },
15163
15273
  sourceLocation: {
15164
15274
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15165
- "line": 2132,
15275
+ "line": 2436,
15166
15276
  "column": 9
15167
15277
  }
15168
15278
  },
@@ -15189,7 +15299,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15189
15299
  },
15190
15300
  sourceLocation: {
15191
15301
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15192
- "line": 2427,
15302
+ "line": 2731,
15193
15303
  "column": 9
15194
15304
  }
15195
15305
  },
@@ -15225,7 +15335,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15225
15335
  },
15226
15336
  sourceLocation: {
15227
15337
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15228
- "line": 2443,
15338
+ "line": 2747,
15229
15339
  "column": 9
15230
15340
  }
15231
15341
  },
@@ -15243,7 +15353,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15243
15353
  },
15244
15354
  sourceLocation: {
15245
15355
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15246
- "line": 2114,
15356
+ "line": 2418,
15247
15357
  "column": 9
15248
15358
  }
15249
15359
  },
@@ -15270,7 +15380,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15270
15380
  },
15271
15381
  sourceLocation: {
15272
15382
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15273
- "line": 2060,
15383
+ "line": 2364,
15274
15384
  "column": 3
15275
15385
  }
15276
15386
  },
@@ -15306,7 +15416,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15306
15416
  },
15307
15417
  sourceLocation: {
15308
15418
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15309
- "line": 2080,
15419
+ "line": 2384,
15310
15420
  "column": 9
15311
15421
  }
15312
15422
  },
@@ -15342,7 +15452,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15342
15452
  },
15343
15453
  sourceLocation: {
15344
15454
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15345
- "line": 2106,
15455
+ "line": 2410,
15346
15456
  "column": 9
15347
15457
  }
15348
15458
  },
@@ -15369,7 +15479,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15369
15479
  },
15370
15480
  sourceLocation: {
15371
15481
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15372
- "line": 2051,
15482
+ "line": 2355,
15373
15483
  "column": 9
15374
15484
  }
15375
15485
  },
@@ -15396,7 +15506,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15396
15506
  },
15397
15507
  sourceLocation: {
15398
15508
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15399
- "line": 2070,
15509
+ "line": 2374,
15400
15510
  "column": 9
15401
15511
  }
15402
15512
  },
@@ -15432,7 +15542,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15432
15542
  },
15433
15543
  sourceLocation: {
15434
15544
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15435
- "line": 2042,
15545
+ "line": 2346,
15436
15546
  "column": 3
15437
15547
  }
15438
15548
  },
@@ -15468,7 +15578,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15468
15578
  },
15469
15579
  sourceLocation: {
15470
15580
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15471
- "line": 2093,
15581
+ "line": 2397,
15472
15582
  "column": 9
15473
15583
  }
15474
15584
  },
@@ -15495,7 +15605,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15495
15605
  },
15496
15606
  sourceLocation: {
15497
15607
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15498
- "line": 6365,
15608
+ "line": 6736,
15499
15609
  "column": 9
15500
15610
  }
15501
15611
  },
@@ -15545,7 +15655,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15545
15655
  },
15546
15656
  sourceLocation: {
15547
15657
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15548
- "line": 5761,
15658
+ "line": 6132,
15549
15659
  "column": 9
15550
15660
  }
15551
15661
  },
@@ -15563,7 +15673,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15563
15673
  },
15564
15674
  sourceLocation: {
15565
15675
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15566
- "line": 3013,
15676
+ "line": 3347,
15567
15677
  "column": 9
15568
15678
  }
15569
15679
  },
@@ -15590,7 +15700,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15590
15700
  },
15591
15701
  sourceLocation: {
15592
15702
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15593
- "line": 4747,
15703
+ "line": 5081,
15594
15704
  "column": 9
15595
15705
  }
15596
15706
  },
@@ -15617,7 +15727,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15617
15727
  },
15618
15728
  sourceLocation: {
15619
15729
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15620
- "line": 4764,
15730
+ "line": 5098,
15621
15731
  "column": 9
15622
15732
  }
15623
15733
  },
@@ -15635,7 +15745,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15635
15745
  },
15636
15746
  sourceLocation: {
15637
15747
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15638
- "line": 2466,
15748
+ "line": 2770,
15639
15749
  "column": 3
15640
15750
  }
15641
15751
  },
@@ -15662,7 +15772,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15662
15772
  },
15663
15773
  sourceLocation: {
15664
15774
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15665
- "line": 4776,
15775
+ "line": 5110,
15666
15776
  "column": 9
15667
15777
  }
15668
15778
  },
@@ -15680,7 +15790,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15680
15790
  },
15681
15791
  sourceLocation: {
15682
15792
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15683
- "line": 3657,
15793
+ "line": 3991,
15684
15794
  "column": 9
15685
15795
  }
15686
15796
  },
@@ -15707,7 +15817,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15707
15817
  },
15708
15818
  sourceLocation: {
15709
15819
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15710
- "line": 5790,
15820
+ "line": 6161,
15711
15821
  "column": 9
15712
15822
  }
15713
15823
  },
@@ -15734,7 +15844,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15734
15844
  },
15735
15845
  sourceLocation: {
15736
15846
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15737
- "line": 5780,
15847
+ "line": 6151,
15738
15848
  "column": 9
15739
15849
  }
15740
15850
  },
@@ -15761,7 +15871,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15761
15871
  },
15762
15872
  sourceLocation: {
15763
15873
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15764
- "line": 5800,
15874
+ "line": 6171,
15765
15875
  "column": 9
15766
15876
  }
15767
15877
  },
@@ -15779,7 +15889,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15779
15889
  },
15780
15890
  sourceLocation: {
15781
15891
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15782
- "line": 5770,
15892
+ "line": 6141,
15783
15893
  "column": 9
15784
15894
  }
15785
15895
  },
@@ -15797,7 +15907,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15797
15907
  },
15798
15908
  sourceLocation: {
15799
15909
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15800
- "line": 2494,
15910
+ "line": 2828,
15801
15911
  "column": 9
15802
15912
  }
15803
15913
  },
@@ -15824,7 +15934,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15824
15934
  },
15825
15935
  sourceLocation: {
15826
15936
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15827
- "line": 5173,
15937
+ "line": 5524,
15828
15938
  "column": 9
15829
15939
  }
15830
15940
  },
@@ -15851,7 +15961,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15851
15961
  },
15852
15962
  sourceLocation: {
15853
15963
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15854
- "line": 5112,
15964
+ "line": 5463,
15855
15965
  "column": 9
15856
15966
  }
15857
15967
  },
@@ -15878,10 +15988,55 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15878
15988
  },
15879
15989
  sourceLocation: {
15880
15990
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15881
- "line": 5103,
15991
+ "line": 5454,
15992
+ "column": 9
15993
+ }
15994
+ },
15995
+ {
15996
+ id: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/mediaGenerationSetEnabled",
15997
+ service: "freeCodeGoHarness",
15998
+ namespace: "freeCodeGoHarness",
15999
+ method: "mediaGenerationSetEnabled",
16000
+ invocation: { kind: "direct" },
16001
+ parameters: [{
16002
+ name: "enabled",
16003
+ wire: "enabled",
16004
+ source: "json",
16005
+ codec: {
16006
+ mode: "strict",
16007
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/mediaGenerationSetEnabled:enabled",
16008
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_parameter_0$schema
16009
+ }
16010
+ }],
16011
+ result: {
16012
+ mode: "strict",
16013
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin/types#FreeCodeGoMediaToolStatus",
16014
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationSetEnabled_result$schema
16015
+ },
16016
+ sourceLocation: {
16017
+ "file": "packages/freecodego/harness-plugin/src/index.ts",
16018
+ "line": 2818,
15882
16019
  "column": 9
15883
16020
  }
15884
16021
  },
16022
+ {
16023
+ id: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/mediaGenerationStatus",
16024
+ service: "freeCodeGoHarness",
16025
+ namespace: "freeCodeGoHarness",
16026
+ method: "mediaGenerationStatus",
16027
+ invocation: { kind: "direct" },
16028
+ parameters: [],
16029
+ result: {
16030
+ mode: "strict",
16031
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin/types#FreeCodeGoMediaToolStatus",
16032
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_mediaGenerationStatus_result$schema
16033
+ },
16034
+ sourceLocation: {
16035
+ "file": "packages/freecodego/harness-plugin/src/index.ts",
16036
+ "line": 2804,
16037
+ "column": 3
16038
+ }
16039
+ },
15885
16040
  {
15886
16041
  id: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/modelAvailability",
15887
16042
  service: "freeCodeGoHarness",
@@ -15896,7 +16051,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15896
16051
  },
15897
16052
  sourceLocation: {
15898
16053
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15899
- "line": 5452,
16054
+ "line": 5803,
15900
16055
  "column": 9
15901
16056
  }
15902
16057
  },
@@ -15923,7 +16078,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15923
16078
  },
15924
16079
  sourceLocation: {
15925
16080
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15926
- "line": 5077,
16081
+ "line": 5428,
15927
16082
  "column": 9
15928
16083
  }
15929
16084
  },
@@ -15950,7 +16105,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15950
16105
  },
15951
16106
  sourceLocation: {
15952
16107
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15953
- "line": 5838,
16108
+ "line": 6209,
15954
16109
  "column": 9
15955
16110
  }
15956
16111
  },
@@ -15968,7 +16123,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15968
16123
  },
15969
16124
  sourceLocation: {
15970
16125
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15971
- "line": 5828,
16126
+ "line": 6199,
15972
16127
  "column": 9
15973
16128
  }
15974
16129
  },
@@ -15995,7 +16150,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15995
16150
  },
15996
16151
  sourceLocation: {
15997
16152
  "file": "packages/freecodego/harness-plugin/src/index.ts",
15998
- "line": 6423,
16153
+ "line": 6794,
15999
16154
  "column": 9
16000
16155
  }
16001
16156
  },
@@ -16013,7 +16168,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16013
16168
  },
16014
16169
  sourceLocation: {
16015
16170
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16016
- "line": 6347,
16171
+ "line": 6718,
16017
16172
  "column": 9
16018
16173
  }
16019
16174
  },
@@ -16073,7 +16228,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16073
16228
  },
16074
16229
  sourceLocation: {
16075
16230
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16076
- "line": 6394,
16231
+ "line": 6765,
16077
16232
  "column": 9
16078
16233
  }
16079
16234
  },
@@ -16091,7 +16246,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16091
16246
  },
16092
16247
  sourceLocation: {
16093
16248
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16094
- "line": 6355,
16249
+ "line": 6726,
16095
16250
  "column": 9
16096
16251
  }
16097
16252
  },
@@ -16118,7 +16273,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16118
16273
  },
16119
16274
  sourceLocation: {
16120
16275
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16121
- "line": 6403,
16276
+ "line": 6774,
16122
16277
  "column": 9
16123
16278
  }
16124
16279
  },
@@ -16136,7 +16291,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16136
16291
  },
16137
16292
  sourceLocation: {
16138
16293
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16139
- "line": 6382,
16294
+ "line": 6753,
16140
16295
  "column": 9
16141
16296
  }
16142
16297
  },
@@ -16154,7 +16309,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16154
16309
  },
16155
16310
  sourceLocation: {
16156
16311
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16157
- "line": 6338,
16312
+ "line": 6709,
16158
16313
  "column": 9
16159
16314
  }
16160
16315
  },
@@ -16181,7 +16336,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16181
16336
  },
16182
16337
  sourceLocation: {
16183
16338
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16184
- "line": 6443,
16339
+ "line": 6814,
16185
16340
  "column": 9
16186
16341
  }
16187
16342
  },
@@ -16208,7 +16363,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16208
16363
  },
16209
16364
  sourceLocation: {
16210
16365
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16211
- "line": 6433,
16366
+ "line": 6804,
16212
16367
  "column": 9
16213
16368
  }
16214
16369
  },
@@ -16235,7 +16390,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16235
16390
  },
16236
16391
  sourceLocation: {
16237
16392
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16238
- "line": 6458,
16393
+ "line": 6829,
16239
16394
  "column": 9
16240
16395
  }
16241
16396
  },
@@ -16262,7 +16417,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16262
16417
  },
16263
16418
  sourceLocation: {
16264
16419
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16265
- "line": 6413,
16420
+ "line": 6784,
16266
16421
  "column": 9
16267
16422
  }
16268
16423
  },
@@ -16289,7 +16444,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16289
16444
  },
16290
16445
  sourceLocation: {
16291
16446
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16292
- "line": 3202,
16447
+ "line": 3536,
16293
16448
  "column": 3
16294
16449
  }
16295
16450
  },
@@ -16316,7 +16471,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16316
16471
  },
16317
16472
  sourceLocation: {
16318
16473
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16319
- "line": 3175,
16474
+ "line": 3509,
16320
16475
  "column": 9
16321
16476
  }
16322
16477
  },
@@ -16343,7 +16498,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16343
16498
  },
16344
16499
  sourceLocation: {
16345
16500
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16346
- "line": 5094,
16501
+ "line": 5445,
16347
16502
  "column": 9
16348
16503
  }
16349
16504
  },
@@ -16361,7 +16516,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16361
16516
  },
16362
16517
  sourceLocation: {
16363
16518
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16364
- "line": 5085,
16519
+ "line": 5436,
16365
16520
  "column": 3
16366
16521
  }
16367
16522
  },
@@ -16379,7 +16534,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16379
16534
  },
16380
16535
  sourceLocation: {
16381
16536
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16382
- "line": 5540,
16537
+ "line": 5891,
16383
16538
  "column": 9
16384
16539
  }
16385
16540
  },
@@ -16397,7 +16552,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16397
16552
  },
16398
16553
  sourceLocation: {
16399
16554
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16400
- "line": 5559,
16555
+ "line": 5910,
16401
16556
  "column": 9
16402
16557
  }
16403
16558
  },
@@ -16415,7 +16570,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16415
16570
  },
16416
16571
  sourceLocation: {
16417
16572
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16418
- "line": 5553,
16573
+ "line": 5904,
16419
16574
  "column": 9
16420
16575
  }
16421
16576
  },
@@ -16442,7 +16597,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16442
16597
  },
16443
16598
  sourceLocation: {
16444
16599
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16445
- "line": 5547,
16600
+ "line": 5898,
16446
16601
  "column": 9
16447
16602
  }
16448
16603
  },
@@ -16460,7 +16615,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16460
16615
  },
16461
16616
  sourceLocation: {
16462
16617
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16463
- "line": 5534,
16618
+ "line": 5885,
16464
16619
  "column": 3
16465
16620
  }
16466
16621
  },
@@ -16488,7 +16643,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16488
16643
  },
16489
16644
  sourceLocation: {
16490
16645
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16491
- "line": 2724,
16646
+ "line": 3058,
16492
16647
  "column": 9
16493
16648
  }
16494
16649
  },
@@ -16506,7 +16661,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16506
16661
  },
16507
16662
  sourceLocation: {
16508
16663
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16509
- "line": 6013,
16664
+ "line": 6384,
16510
16665
  "column": 9
16511
16666
  }
16512
16667
  },
@@ -16524,7 +16679,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16524
16679
  },
16525
16680
  sourceLocation: {
16526
16681
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16527
- "line": 5975,
16682
+ "line": 6346,
16528
16683
  "column": 9
16529
16684
  }
16530
16685
  },
@@ -16551,7 +16706,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16551
16706
  },
16552
16707
  sourceLocation: {
16553
16708
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16554
- "line": 5966,
16709
+ "line": 6337,
16555
16710
  "column": 9
16556
16711
  }
16557
16712
  },
@@ -16569,7 +16724,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16569
16724
  },
16570
16725
  sourceLocation: {
16571
16726
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16572
- "line": 6004,
16727
+ "line": 6375,
16573
16728
  "column": 9
16574
16729
  }
16575
16730
  },
@@ -16596,7 +16751,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16596
16751
  },
16597
16752
  sourceLocation: {
16598
16753
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16599
- "line": 5985,
16754
+ "line": 6356,
16600
16755
  "column": 9
16601
16756
  }
16602
16757
  },
@@ -16623,7 +16778,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16623
16778
  },
16624
16779
  sourceLocation: {
16625
16780
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16626
- "line": 5995,
16781
+ "line": 6366,
16627
16782
  "column": 9
16628
16783
  }
16629
16784
  },
@@ -16641,7 +16796,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16641
16796
  },
16642
16797
  sourceLocation: {
16643
16798
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16644
- "line": 5956,
16799
+ "line": 6327,
16645
16800
  "column": 9
16646
16801
  }
16647
16802
  },
@@ -16659,7 +16814,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16659
16814
  },
16660
16815
  sourceLocation: {
16661
16816
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16662
- "line": 5947,
16817
+ "line": 6318,
16663
16818
  "column": 9
16664
16819
  }
16665
16820
  },
@@ -16695,7 +16850,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16695
16850
  },
16696
16851
  sourceLocation: {
16697
16852
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16698
- "line": 1991,
16853
+ "line": 2295,
16699
16854
  "column": 9
16700
16855
  }
16701
16856
  },
@@ -16722,7 +16877,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16722
16877
  },
16723
16878
  sourceLocation: {
16724
16879
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16725
- "line": 1981,
16880
+ "line": 2285,
16726
16881
  "column": 9
16727
16882
  }
16728
16883
  },
@@ -16758,7 +16913,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16758
16913
  },
16759
16914
  sourceLocation: {
16760
16915
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16761
- "line": 2001,
16916
+ "line": 2305,
16762
16917
  "column": 9
16763
16918
  }
16764
16919
  },
@@ -16794,7 +16949,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16794
16949
  },
16795
16950
  sourceLocation: {
16796
16951
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16797
- "line": 2552,
16952
+ "line": 2886,
16798
16953
  "column": 9
16799
16954
  }
16800
16955
  },
@@ -16821,7 +16976,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16821
16976
  },
16822
16977
  sourceLocation: {
16823
16978
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16824
- "line": 2511,
16979
+ "line": 2845,
16825
16980
  "column": 9
16826
16981
  }
16827
16982
  },
@@ -16848,7 +17003,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16848
17003
  },
16849
17004
  sourceLocation: {
16850
17005
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16851
- "line": 5819,
17006
+ "line": 6190,
16852
17007
  "column": 9
16853
17008
  }
16854
17009
  },
@@ -16866,7 +17021,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16866
17021
  },
16867
17022
  sourceLocation: {
16868
17023
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16869
- "line": 5809,
17024
+ "line": 6180,
16870
17025
  "column": 9
16871
17026
  }
16872
17027
  },
@@ -16893,7 +17048,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16893
17048
  },
16894
17049
  sourceLocation: {
16895
17050
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16896
- "line": 5051,
17051
+ "line": 5385,
16897
17052
  "column": 9
16898
17053
  }
16899
17054
  },
@@ -16920,7 +17075,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16920
17075
  },
16921
17076
  sourceLocation: {
16922
17077
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16923
- "line": 5462,
17078
+ "line": 5813,
16924
17079
  "column": 9
16925
17080
  }
16926
17081
  },
@@ -16947,7 +17102,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16947
17102
  },
16948
17103
  sourceLocation: {
16949
17104
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16950
- "line": 1917,
17105
+ "line": 2221,
16951
17106
  "column": 9
16952
17107
  }
16953
17108
  },
@@ -16974,7 +17129,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16974
17129
  },
16975
17130
  sourceLocation: {
16976
17131
  "file": "packages/freecodego/harness-plugin/src/index.ts",
16977
- "line": 1926,
17132
+ "line": 2230,
16978
17133
  "column": 9
16979
17134
  }
16980
17135
  },
@@ -17001,7 +17156,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17001
17156
  },
17002
17157
  sourceLocation: {
17003
17158
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17004
- "line": 5155,
17159
+ "line": 5506,
17005
17160
  "column": 9
17006
17161
  }
17007
17162
  },
@@ -17028,7 +17183,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17028
17183
  },
17029
17184
  sourceLocation: {
17030
17185
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17031
- "line": 5140,
17186
+ "line": 5491,
17032
17187
  "column": 9
17033
17188
  }
17034
17189
  },
@@ -17056,7 +17211,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17056
17211
  },
17057
17212
  sourceLocation: {
17058
17213
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17059
- "line": 5210,
17214
+ "line": 5561,
17060
17215
  "column": 9
17061
17216
  }
17062
17217
  },
@@ -17074,7 +17229,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17074
17229
  },
17075
17230
  sourceLocation: {
17076
17231
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17077
- "line": 5196,
17232
+ "line": 5547,
17078
17233
  "column": 9
17079
17234
  }
17080
17235
  },
@@ -17111,7 +17266,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17111
17266
  },
17112
17267
  sourceLocation: {
17113
17268
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17114
- "line": 5182,
17269
+ "line": 5533,
17115
17270
  "column": 9
17116
17271
  }
17117
17272
  },
@@ -17138,7 +17293,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17138
17293
  },
17139
17294
  sourceLocation: {
17140
17295
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17141
- "line": 5222,
17296
+ "line": 5573,
17142
17297
  "column": 9
17143
17298
  }
17144
17299
  },
@@ -17165,7 +17320,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17165
17320
  },
17166
17321
  sourceLocation: {
17167
17322
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17168
- "line": 5130,
17323
+ "line": 5481,
17169
17324
  "column": 9
17170
17325
  }
17171
17326
  },
@@ -17192,7 +17347,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17192
17347
  },
17193
17348
  sourceLocation: {
17194
17349
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17195
- "line": 5121,
17350
+ "line": 5472,
17196
17351
  "column": 9
17197
17352
  }
17198
17353
  },
@@ -17219,7 +17374,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17219
17374
  },
17220
17375
  sourceLocation: {
17221
17376
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17222
- "line": 6245,
17377
+ "line": 6616,
17223
17378
  "column": 9
17224
17379
  }
17225
17380
  },
@@ -17246,7 +17401,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17246
17401
  },
17247
17402
  sourceLocation: {
17248
17403
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17249
- "line": 6235,
17404
+ "line": 6606,
17250
17405
  "column": 9
17251
17406
  }
17252
17407
  },
@@ -17273,7 +17428,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17273
17428
  },
17274
17429
  sourceLocation: {
17275
17430
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17276
- "line": 6225,
17431
+ "line": 6596,
17277
17432
  "column": 9
17278
17433
  }
17279
17434
  },
@@ -17291,7 +17446,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17291
17446
  },
17292
17447
  sourceLocation: {
17293
17448
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17294
- "line": 6065,
17449
+ "line": 6436,
17295
17450
  "column": 9
17296
17451
  }
17297
17452
  },
@@ -17309,7 +17464,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17309
17464
  },
17310
17465
  sourceLocation: {
17311
17466
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17312
- "line": 6112,
17467
+ "line": 6483,
17313
17468
  "column": 9
17314
17469
  }
17315
17470
  },
@@ -17327,7 +17482,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17327
17482
  },
17328
17483
  sourceLocation: {
17329
17484
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17330
- "line": 6083,
17485
+ "line": 6454,
17331
17486
  "column": 9
17332
17487
  }
17333
17488
  },
@@ -17345,7 +17500,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17345
17500
  },
17346
17501
  sourceLocation: {
17347
17502
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17348
- "line": 6074,
17503
+ "line": 6445,
17349
17504
  "column": 9
17350
17505
  }
17351
17506
  },
@@ -17363,7 +17518,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17363
17518
  },
17364
17519
  sourceLocation: {
17365
17520
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17366
- "line": 6046,
17521
+ "line": 6417,
17367
17522
  "column": 9
17368
17523
  }
17369
17524
  },
@@ -17390,7 +17545,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17390
17545
  },
17391
17546
  sourceLocation: {
17392
17547
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17393
- "line": 6093,
17548
+ "line": 6464,
17394
17549
  "column": 9
17395
17550
  }
17396
17551
  },
@@ -17417,7 +17572,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17417
17572
  },
17418
17573
  sourceLocation: {
17419
17574
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17420
- "line": 6103,
17575
+ "line": 6474,
17421
17576
  "column": 9
17422
17577
  }
17423
17578
  },
@@ -17445,7 +17600,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17445
17600
  },
17446
17601
  sourceLocation: {
17447
17602
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17448
- "line": 6036,
17603
+ "line": 6407,
17449
17604
  "column": 9
17450
17605
  }
17451
17606
  },
@@ -17463,7 +17618,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17463
17618
  },
17464
17619
  sourceLocation: {
17465
17620
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17466
- "line": 6026,
17621
+ "line": 6397,
17467
17622
  "column": 9
17468
17623
  }
17469
17624
  },
@@ -17490,7 +17645,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17490
17645
  },
17491
17646
  sourceLocation: {
17492
17647
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17493
- "line": 6056,
17648
+ "line": 6427,
17494
17649
  "column": 9
17495
17650
  }
17496
17651
  },
@@ -17517,7 +17672,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17517
17672
  },
17518
17673
  sourceLocation: {
17519
17674
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17520
- "line": 2605,
17675
+ "line": 2939,
17521
17676
  "column": 9
17522
17677
  }
17523
17678
  },
@@ -17544,7 +17699,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17544
17699
  },
17545
17700
  sourceLocation: {
17546
17701
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17547
- "line": 2640,
17702
+ "line": 2974,
17548
17703
  "column": 9
17549
17704
  }
17550
17705
  },
@@ -17572,7 +17727,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17572
17727
  },
17573
17728
  sourceLocation: {
17574
17729
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17575
- "line": 2583,
17730
+ "line": 2917,
17576
17731
  "column": 9
17577
17732
  }
17578
17733
  },
@@ -17599,7 +17754,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17599
17754
  },
17600
17755
  sourceLocation: {
17601
17756
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17602
- "line": 5749,
17757
+ "line": 6120,
17603
17758
  "column": 9
17604
17759
  }
17605
17760
  },
@@ -17617,7 +17772,52 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17617
17772
  },
17618
17773
  sourceLocation: {
17619
17774
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17620
- "line": 5739,
17775
+ "line": 6110,
17776
+ "column": 9
17777
+ }
17778
+ },
17779
+ {
17780
+ id: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/webSearchBind",
17781
+ service: "freeCodeGoHarness",
17782
+ namespace: "freeCodeGoHarness",
17783
+ method: "webSearchBind",
17784
+ invocation: { kind: "direct" },
17785
+ parameters: [{
17786
+ name: "input",
17787
+ wire: "input",
17788
+ source: "json",
17789
+ codec: {
17790
+ mode: "strict",
17791
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/webSearchBind:input",
17792
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_parameter_0$schema
17793
+ }
17794
+ }],
17795
+ result: {
17796
+ mode: "strict",
17797
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin/types#FreeCodeGoWebSearchBinding",
17798
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBind_result$schema
17799
+ },
17800
+ sourceLocation: {
17801
+ "file": "packages/freecodego/harness-plugin/src/index.ts",
17802
+ "line": 5394,
17803
+ "column": 9
17804
+ }
17805
+ },
17806
+ {
17807
+ id: "@deepseek-ai/dsh-freecodego-harness-plugin#freeCodeGoHarness/webSearchBindingStatus",
17808
+ service: "freeCodeGoHarness",
17809
+ namespace: "freeCodeGoHarness",
17810
+ method: "webSearchBindingStatus",
17811
+ invocation: { kind: "direct" },
17812
+ parameters: [],
17813
+ result: {
17814
+ mode: "strict",
17815
+ typeSymbol: "@deepseek-ai/dsh-freecodego-harness-plugin/types#FreeCodeGoWebSearchBindingStatus",
17816
+ create: _deepseek_ai_dsh_freecodego_harness_plugin_freeCodeGoHarness_webSearchBindingStatus_result$schema
17817
+ },
17818
+ sourceLocation: {
17819
+ "file": "packages/freecodego/harness-plugin/src/index.ts",
17820
+ "line": 5402,
17621
17821
  "column": 9
17622
17822
  }
17623
17823
  },
@@ -17635,7 +17835,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17635
17835
  },
17636
17836
  sourceLocation: {
17637
17837
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17638
- "line": 5860,
17838
+ "line": 6231,
17639
17839
  "column": 9
17640
17840
  }
17641
17841
  },
@@ -17653,7 +17853,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17653
17853
  },
17654
17854
  sourceLocation: {
17655
17855
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17656
- "line": 5897,
17856
+ "line": 6268,
17657
17857
  "column": 9
17658
17858
  }
17659
17859
  },
@@ -17671,7 +17871,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17671
17871
  },
17672
17872
  sourceLocation: {
17673
17873
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17674
- "line": 5869,
17874
+ "line": 6240,
17675
17875
  "column": 9
17676
17876
  }
17677
17877
  },
@@ -17698,7 +17898,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17698
17898
  },
17699
17899
  sourceLocation: {
17700
17900
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17701
- "line": 5888,
17901
+ "line": 6259,
17702
17902
  "column": 9
17703
17903
  }
17704
17904
  },
@@ -17716,7 +17916,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17716
17916
  },
17717
17917
  sourceLocation: {
17718
17918
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17719
- "line": 5936,
17919
+ "line": 6307,
17720
17920
  "column": 9
17721
17921
  }
17722
17922
  },
@@ -17743,7 +17943,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17743
17943
  },
17744
17944
  sourceLocation: {
17745
17945
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17746
- "line": 5927,
17946
+ "line": 6298,
17747
17947
  "column": 9
17748
17948
  }
17749
17949
  },
@@ -17770,7 +17970,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17770
17970
  },
17771
17971
  sourceLocation: {
17772
17972
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17773
- "line": 5907,
17973
+ "line": 6278,
17774
17974
  "column": 9
17775
17975
  }
17776
17976
  },
@@ -17797,7 +17997,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17797
17997
  },
17798
17998
  sourceLocation: {
17799
17999
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17800
- "line": 5917,
18000
+ "line": 6288,
17801
18001
  "column": 9
17802
18002
  }
17803
18003
  },
@@ -17815,7 +18015,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17815
18015
  },
17816
18016
  sourceLocation: {
17817
18017
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17818
- "line": 5878,
18018
+ "line": 6249,
17819
18019
  "column": 9
17820
18020
  }
17821
18021
  },
@@ -17833,7 +18033,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
17833
18033
  },
17834
18034
  sourceLocation: {
17835
18035
  "file": "packages/freecodego/harness-plugin/src/index.ts",
17836
- "line": 5851,
18036
+ "line": 6222,
17837
18037
  "column": 9
17838
18038
  }
17839
18039
  }
@@ -18064,13 +18264,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18064
18264
  }
18065
18265
  //#endregion
18066
18266
  //#region \0dsh-css:/home/runner/work/dsh-plugin-freecodego/dsh-plugin-freecodego/plugin/packages/freecodego/harness-ui/src/client/settings-tab.module.css.mjs
18067
- const css$5 = ".fnB0BW_root{box-sizing:border-box;width:100%;min-width:0;max-width:100%;color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg);overflow:hidden}.fnB0BW_toolbar{border-bottom:1px solid var(--fcg-line);justify-content:space-between;align-items:center;gap:12px;min-height:44px;padding:0 0 12px;display:flex}.fnB0BW_toolbarTitle{min-width:0}.fnB0BW_kicker{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);letter-spacing:.08em;text-transform:uppercase;font-weight:600;line-height:18px}.fnB0BW_title{font-size:var(--fcg-font-section);margin:1px 0 0;font-weight:600;line-height:24px}.fnB0BW_toolbarAction,.fnB0BW_button{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);min-height:32px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;transition:background var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);justify-content:center;align-items:center;padding:5px 13px;line-height:18px;text-decoration:none;display:inline-flex}.fnB0BW_toolbarAction:hover,.fnB0BW_button:hover{background:var(--fcg-bg-hover)}.fnB0BW_button:disabled{cursor:not-allowed;opacity:.45}.fnB0BW_button:focus-visible,.fnB0BW_toolbarAction:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_buttonPrimary:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-btn-primary-fill) 30%, transparent)}.fnB0BW_buttonPrimary{background:var(--fcg-btn-primary-fill);color:var(--fcg-text-on-brand);border-color:#0000}.fnB0BW_buttonPrimary:hover:not(:disabled){background:var(--fcg-btn-primary-hover);border-color:#0000}.fnB0BW_buttonPrimary:hover{background:var(--fcg-btn-primary-hover)}.fnB0BW_buttonDanger{color:var(--fcg-danger)}.fnB0BW_loading,.fnB0BW_error{color:var(--fcg-text-tertiary);padding:18px 0}.fnB0BW_error{color:var(--fcg-danger)}.fnB0BW_syncNotice{border:1px solid color-mix(in srgb, var(--fcg-brand) 24%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-brand) 6%, var(--fcg-bg-layer-1));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:10px;margin:14px 0 0;padding:10px 14px;line-height:18px;display:flex}.fnB0BW_syncNoticeOffline{border-color:color-mix(in srgb, var(--fcg-warn-label) 34%, var(--fcg-line));background:color-mix(in srgb, var(--fcg-warn-label) 7%, var(--fcg-bg-layer-1));color:var(--fcg-warn-label)}.fnB0BW_syncDot{border-radius:var(--fcg-radius-full);background:var(--fcg-brand);flex:none;width:7px;height:7px;animation:1.25s ease-in-out infinite fnB0BW_sync-pulse}.fnB0BW_syncNoticeOffline .fnB0BW_syncDot{background:var(--fcg-warn-label);animation:none}@keyframes fnB0BW_sync-pulse{50%{opacity:.38;transform:scale(.8)}}.fnB0BW_sections{gap:0;display:grid}.fnB0BW_pageTabs{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-tip);gap:4px;margin:0 0 14px;padding:3px;display:flex}.fnB0BW_pageTab{min-height:30px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);transition:background var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);background:0 0;border:0;border-radius:5px;flex:1;padding:5px 10px}.fnB0BW_pageTabActive{background:var(--fcg-bg-layer-2);color:var(--fcg-text-primary);box-shadow:var(--fcg-shadow-1);font-weight:600}.fnB0BW_modelCategoryActions{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;width:100%;margin-top:8px;display:grid}.fnB0BW_modelCategoryActions .fnB0BW_select{width:100%;min-width:0}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions){align-items:start}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions)>.fnB0BW_pageTabs{box-sizing:border-box;grid-column:2;width:100%;margin:0}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions)>.fnB0BW_select{grid-area:2/1;width:100%}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions)>.fnB0BW_modelCategoryActions{grid-area:2/2;margin-top:0}.fnB0BW_modelCategoryActions .fnB0BW_button{min-height:42px}.fnB0BW_community{min-width:0;padding:4px 0 17px}.fnB0BW_communityHeader{border-bottom:1px solid var(--fcg-line);justify-content:space-between;align-items:flex-start;gap:12px;padding:13px 0 14px;display:flex}.fnB0BW_communityIntro{max-width:520px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin:5px 0 0;line-height:18px}.fnB0BW_communityFilterBar{justify-content:space-between;align-items:center;gap:12px;padding:12px 0 2px;display:flex}.fnB0BW_communityFilters{scrollbar-width:none;gap:6px;min-width:0;display:flex;overflow-x:auto}.fnB0BW_communityFilter{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);min-height:28px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;padding:4px 10px}.fnB0BW_communityFilter:hover{background:var(--fcg-bg-hover)}.fnB0BW_communityFilterActive{border-color:var(--fcg-text-primary);background:var(--fcg-text-primary);color:var(--fcg-bg-layer-2)}.fnB0BW_communityInstalledEntry{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);min-height:30px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;flex:none;padding:5px 10px;font-weight:600}.fnB0BW_communityInstalledEntry:hover{background:var(--fcg-bg-hover)}.fnB0BW_communityInstalledEntryActive{border-color:var(--fcg-text-primary);background:var(--fcg-text-primary);color:var(--fcg-bg-layer-2)}.fnB0BW_capabilityCommunity{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);margin-top:12px;padding:14px}.fnB0BW_capabilityCommunityHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.fnB0BW_capabilityCommunityGrid{grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:9px;margin-top:11px;display:grid}.fnB0BW_marketplaceGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:11px;margin-top:13px;display:grid}.fnB0BW_capabilityCommunityCard{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:8px;min-width:0;padding:12px 14px;display:grid}.fnB0BW_capabilityCommunityCard strong{font-size:var(--fcg-font-body)}.fnB0BW_capabilityCommunityCard p{min-height:36px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin:0;line-height:18px}.fnB0BW_capabilityCommunityCard small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_capabilityCommunityCard .fnB0BW_button{width:100%;margin-top:2px}.fnB0BW_capabilityCommunityTop{justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_capabilityCommunityKind{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);letter-spacing:.07em;font-weight:700}.fnB0BW_marketplaceIdentity{align-items:center;gap:6px;min-width:0;display:inline-flex}.fnB0BW_capabilityIcon{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);width:28px;height:28px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);object-fit:cover;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex;overflow:hidden}.fnB0BW_capabilityIconMcp{border-color:color-mix(in srgb, var(--fcg-brand) 35%, var(--fcg-line));background:color-mix(in srgb, var(--fcg-brand) 11%, var(--fcg-bg-layer-1));color:var(--fcg-brand)}.fnB0BW_marketplaceControls{grid-template-columns:minmax(0,1fr) minmax(140px,.4fr);gap:8px;margin-top:12px;display:grid}.fnB0BW_marketplaceLink{appearance:none;cursor:pointer;font:inherit;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);background:0 0;border:0;padding:0;text-decoration:none}.fnB0BW_marketplaceLink:hover{color:var(--fcg-text-primary);text-decoration:underline}.fnB0BW_marketplacePagination{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:center;align-items:center;gap:10px;margin-top:13px;display:flex}.fnB0BW_communitySearch{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;margin-top:12px;display:grid}.fnB0BW_communityGrid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;padding-top:14px;display:grid}.fnB0BW_communityCard{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);cursor:pointer;min-width:0;transition:border-color var(--fcg-fast) var(--fcg-ease), transform var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease);flex-direction:column;gap:9px;padding:12px;display:flex}.fnB0BW_communityCard:hover,.fnB0BW_communityCard:focus-visible{border-color:var(--fcg-line-strong);box-shadow:var(--fcg-shadow-2);outline:none;transform:translateY(-1px)}.fnB0BW_communityCardTop{align-items:center;gap:8px;min-width:0;display:flex}img.fnB0BW_communityPluginIcon{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);object-fit:cover;flex:none;width:34px;height:34px;display:block;overflow:hidden}.fnB0BW_communityIdentity{gap:1px;min-width:0;display:grid}.fnB0BW_communityIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-body);overflow:hidden}.fnB0BW_communityIdentity small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_communityCategory{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-left:auto;padding:2px 6px}.fnB0BW_communityDescription{min-height:54px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;line-height:18px;display:-webkit-box;overflow:hidden}.fnB0BW_communityFeatures,.fnB0BW_communityFeatureList{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_communityStats{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);gap:10px;display:flex}.fnB0BW_communityState{color:var(--fcg-success);font-size:var(--fcg-font-caption);font-weight:600}.fnB0BW_communityIncompatible{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);min-height:30px;color:var(--fcg-warn-label);font-size:var(--fcg-font-caption);padding:5px 8px;line-height:18px}.fnB0BW_communityInstall{width:100%;margin-top:auto}.fnB0BW_communityProgress{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_communityRestart{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 6%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:center;gap:10px;margin-top:12px;padding:10px 11px;line-height:18px;display:flex}.fnB0BW_communityFootnote{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:13px;line-height:18px;display:block}.fnB0BW_communityModalBackdrop{z-index:20;background:#0f172a61;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.fnB0BW_communityModal{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-2);width:min(760px,100%);min-width:0;max-height:min(820px,92vh);box-shadow:var(--fcg-shadow-pop);flex-direction:column;gap:12px;padding:18px;display:flex;overflow:hidden}.fnB0BW_communityModalHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.fnB0BW_communityModalTitle{font-size:var(--fcg-font-section);margin:2px 0 0;line-height:25px}.fnB0BW_communityModalOwner{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_communityModalSummary{color:var(--fcg-text-secondary);font-size:var(--fcg-font-body);margin:0;line-height:20px}.fnB0BW_communityModalHeader img.fnB0BW_communityPluginIcon{width:40px;height:40px;margin-top:8px}.fnB0BW_communityModalStats{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);align-items:center;gap:12px;display:flex}.fnB0BW_communityModalStats a{color:var(--fcg-text-primary)}.fnB0BW_communityReadme{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);min-height:180px;overflow:auto}.fnB0BW_communityReadme pre{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/19px var(--fcg-font-mono);margin:0;padding:13px}.fnB0BW_communityModalFooter{justify-content:flex-end;gap:8px;display:flex}.fnB0BW_section{border-bottom:1px solid var(--fcg-line-subtle);min-width:0;padding:24px 0}.fnB0BW_section:last-child{border-bottom:0}.fnB0BW_sectionHeader{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.fnB0BW_sectionName{font-size:var(--fcg-font-body-lg);letter-spacing:-.01em;font-weight:650;line-height:20px}.fnB0BW_sectionMeta{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_badge{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:3px 8px;line-height:18px}.fnB0BW_badgeLive{color:var(--fcg-success)}.fnB0BW_badgeDanger{color:var(--fcg-danger)}.fnB0BW_inspectStatus{background:0 0;align-self:start}.fnB0BW_diagnosticsDump{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);max-height:240px;color:var(--fcg-text-secondary);font-family:var(--fcg-font-mono);font-size:var(--fcg-font-caption);white-space:pre-wrap;overflow-wrap:anywhere;margin:4px 0 0;padding:8px 10px;line-height:18px;overflow:auto}.fnB0BW_grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;display:grid}.fnB0BW_routingGrid{grid-template-columns:1fr;gap:8px}.fnB0BW_routingCell{grid-template-columns:minmax(150px,.7fr) minmax(0,1fr);align-items:center;gap:18px;min-height:0;padding:12px 14px;display:grid}.fnB0BW_routingCell.fnB0BW_selectCell{grid-template-rows:none;align-content:normal}.fnB0BW_routingCell .fnB0BW_select{min-height:42px}.fnB0BW_routingCopy{gap:2px;min-width:0;display:grid}.fnB0BW_routingCell:not(.fnB0BW_selectCell) .fnB0BW_routingCopy{grid-column:1/-1;grid-template-columns:minmax(150px,.7fr) auto minmax(0,1fr);align-items:center;gap:10px}.fnB0BW_routingCell:not(.fnB0BW_selectCell) .fnB0BW_cellHint{margin-top:0}.fnB0BW_infoCell{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);min-width:0;padding:14px}.fnB0BW_cellLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-bottom:4px;display:block}.fnB0BW_cellValue{text-overflow:ellipsis;white-space:nowrap;font-weight:500;display:block;overflow:hidden}.fnB0BW_cellHint{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:3px;display:block}.fnB0BW_feedbackRow{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px 18px;display:flex}.fnB0BW_feedbackRow>.fnB0BW_routingCopy{flex:220px}.fnB0BW_telegramLink{flex:none;gap:7px;text-decoration:none}.fnB0BW_telegramIcon{flex:none;display:block}.fnB0BW_selectCell{gap:5px;display:grid}.fnB0BW_select,.fnB0BW_input{box-sizing:border-box;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);width:100%;min-width:0;color:var(--fcg-text-primary);font:inherit;font-size:var(--fcg-font-body);transition:border-color var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease);outline:none;padding:8px 11px}.fnB0BW_select:hover,.fnB0BW_input:hover{border-color:var(--fcg-line-strong)}.fnB0BW_select:focus,.fnB0BW_input:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_accountList{flex-direction:column;gap:8px;display:flex}.fnB0BW_accountManager{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:10px;margin-top:10px;padding:14px;display:grid}.fnB0BW_extensionList{gap:6px;margin-top:14px;display:grid}.fnB0BW_extensionRow{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);cursor:pointer;justify-content:space-between;align-items:center;gap:16px;padding:11px 12px;display:flex}.fnB0BW_extensionRow span{gap:3px;min-width:0;display:grid}.fnB0BW_extensionRow small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_engineSelect{cursor:pointer;flex:none;width:216px}.fnB0BW_switch{-webkit-appearance:none;appearance:none;border:1px solid var(--fcg-line-strong);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-tip);cursor:pointer;width:36px;height:20px;transition:background var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease);outline:none;flex:none;margin:0;position:relative}.fnB0BW_switch:before{content:\"\";corner-shape:round;background:var(--fcg-bg-layer-2);width:14px;height:14px;box-shadow:var(--fcg-shadow-1);transition:transform var(--fcg-fast) var(--fcg-ease);border-radius:50%;position:absolute;top:2px;left:2px}.fnB0BW_switch:checked{border-color:var(--fcg-brand);background:var(--fcg-brand)}.fnB0BW_switch:checked:before{transform:translate(16px)}.fnB0BW_switch:hover:not(:disabled){border-color:var(--fcg-brand)}.fnB0BW_switch:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent)}.fnB0BW_switch:disabled{cursor:not-allowed;opacity:.45}.fnB0BW_capabilityForm{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:12px;padding:14px;display:grid}.fnB0BW_capabilityForm label{min-width:0;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_capabilityFormHead{grid-column:1/-1;justify-content:space-between;align-items:center;gap:10px;display:flex}.fnB0BW_capabilityFull{grid-column:1/-1}.fnB0BW_skillList{gap:8px;margin-top:12px;display:grid}.fnB0BW_capabilityStats{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_capabilityStats div{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);gap:2px;padding:12px 14px;display:grid}.fnB0BW_capabilityStats strong{font-size:var(--fcg-font-section);line-height:21px}.fnB0BW_capabilityStats small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_advisorStandalone{padding-top:2px}.fnB0BW_engineeringSection .fnB0BW_capabilityStats{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.fnB0BW_advisorStats{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_advisorStats div{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);gap:3px;min-width:0;padding:12px 14px;display:grid}.fnB0BW_advisorStats strong{font-size:var(--fcg-font-body-lg);text-overflow:ellipsis;white-space:nowrap;line-height:20px;overflow:hidden}.fnB0BW_advisorStats small,.fnB0BW_advisorEvidence small{overflow-wrap:anywhere;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_advisorWarning{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 6%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin-top:10px;padding:9px 11px;line-height:18px}.fnB0BW_advisorEvidence{border-left:2px solid var(--fcg-text-primary);background:var(--fcg-bg-layer-1);gap:3px;margin-top:12px;padding:10px 11px;display:grid}.fnB0BW_advisorEvidence strong{font-size:var(--fcg-font-caption)}.fnB0BW_advisorEvidence span{color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/16px var(--fcg-font-mono)}.fnB0BW_advisorModelField{min-width:0;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_advisorModelTrigger{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:100%;min-height:42px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;gap:2px;padding:8px 9px;display:grid;overflow:hidden}.fnB0BW_advisorModelTrigger:hover{border-color:var(--fcg-line-strong)}.fnB0BW_advisorModelTrigger:disabled{cursor:not-allowed;opacity:.55}.fnB0BW_advisorModelTrigger small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_advisorPickerBackdrop{z-index:30;background:#0f172a61;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.fnB0BW_advisorPicker{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-2);width:min(680px,100%);height:min(720px,92vh);box-shadow:var(--fcg-shadow-pop);grid-template-rows:auto auto minmax(0,1fr) auto;gap:11px;padding:17px;display:grid;overflow:hidden}.fnB0BW_advisorPickerHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.fnB0BW_advisorPickerHeader>div{gap:3px;display:grid}.fnB0BW_advisorPickerHeader strong{font-size:16px}.fnB0BW_advisorPickerHeader small,.fnB0BW_advisorManual>small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_advisorModelList{overscroll-behavior:contain;scrollbar-gutter:stable;gap:7px;min-height:0;padding-right:6px;display:grid;overflow:hidden auto}.fnB0BW_advisorModelOption{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);width:100%;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;justify-content:space-between;align-items:center;gap:14px;padding:11px 12px;display:flex}.fnB0BW_advisorModelOption:hover{border-color:var(--fcg-line-strong);background:var(--fcg-bg-layer-2)}.fnB0BW_advisorModelSelected{border-color:var(--fcg-brand);background:var(--fcg-bg-layer-2);box-shadow:inset 0 0 0 1px var(--fcg-brand)}.fnB0BW_advisorModelOption>span{gap:2px;min-width:0;display:grid}.fnB0BW_advisorModelOption small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_advisorModelOption code{max-width:45%;color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/16px var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_advisorManual{border-top:1px solid var(--fcg-line);gap:6px;padding-top:10px;display:grid}.fnB0BW_advisorManual summary{cursor:pointer;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_advisorNotes{gap:8px;margin-top:12px;display:grid}.fnB0BW_advisorNote{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:7px;padding:14px;display:grid}.fnB0BW_advisorNoteHeader{justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_advisorNoteHeader small,.fnB0BW_advisorNote footer{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_advisorNote p{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:18px}.fnB0BW_advisorSeverity{border-radius:var(--fcg-radius-full);width:fit-content;font-size:var(--fcg-font-caption);letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;font-weight:700;display:inline-flex}.fnB0BW_advisorSeverityNit{background:var(--fcg-bg-hover);color:var(--fcg-text-secondary)}.fnB0BW_advisorSeverityConcern{background:color-mix(in srgb, var(--fcg-warn) 13%, var(--fcg-bg-layer-2));color:var(--fcg-warn-label)}.fnB0BW_advisorSeverityBlocker{background:color-mix(in srgb, var(--fcg-danger) 11%, var(--fcg-bg-layer-2));color:var(--fcg-danger)}.fnB0BW_memoryPanel{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:12px;margin-top:16px;padding:14px;display:grid}.fnB0BW_memoryHeader,.fnB0BW_memoryDetailHeader{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.fnB0BW_memoryHeader>div:first-child,.fnB0BW_memoryDetailHeader>div{gap:3px;min-width:0;display:grid}.fnB0BW_memoryHeader strong,.fnB0BW_memoryDetailHeader strong{font-size:var(--fcg-font-body)}.fnB0BW_memoryHeader small,.fnB0BW_memoryDetailHeader small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_memoryActions,.fnB0BW_memoryRecordActions{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:6px;display:flex}.fnB0BW_memoryActions .fnB0BW_button,.fnB0BW_memoryRecordActions .fnB0BW_button{min-height:26px;font-size:var(--fcg-font-caption);padding:3px 8px}.fnB0BW_memorySearchRow{align-items:center;gap:7px;display:flex}.fnB0BW_memorySearchRow .fnB0BW_input{flex:auto}.fnB0BW_memorySearchRow .fnB0BW_button{min-height:30px;font-size:var(--fcg-font-caption);flex:none;padding:4px 10px}.fnB0BW_memoryRecall{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:6px;padding:9px 11px;display:grid}.fnB0BW_memoryRecallHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.fnB0BW_memoryRecallHead span{gap:2px;min-width:0;display:grid}.fnB0BW_memoryRecallHead small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_memoryRecallHead .fnB0BW_button{min-height:24px;font-size:var(--fcg-font-caption);flex:none;padding:2px 8px}.fnB0BW_memoryRecallList{flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_memoryRecallList span{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:3px 9px}.fnB0BW_memoryList{gap:7px;max-height:360px;padding-right:3px;display:grid;overflow:auto}.fnB0BW_memoryRecord{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:10px 12px;display:grid}.fnB0BW_memoryRecordSelected{box-shadow:inset 0 0 0 1px var(--fcg-brand)}.fnB0BW_memoryRecordSelect{min-width:0;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:8px;padding:0;display:flex}.fnB0BW_memoryRecordSelect:disabled{cursor:not-allowed;opacity:.6}.fnB0BW_memoryRecordSelect>span{gap:3px;min-width:0;display:grid}.fnB0BW_memoryRecordSelect strong,.fnB0BW_memoryRecordSelect small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_memoryRecordSelect strong{font-size:var(--fcg-font-caption)}.fnB0BW_memoryRecordSelect small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_memoryTrust{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);flex:none;padding:2px 6px;font-weight:600}.fnB0BW_memoryTrustReviewed{background:color-mix(in srgb, var(--fcg-success) 12%, var(--fcg-bg-layer-2));color:var(--fcg-success)}.fnB0BW_memoryTrustDraft{background:color-mix(in srgb, var(--fcg-warn) 13%, var(--fcg-bg-layer-2));color:var(--fcg-warn-label)}.fnB0BW_memoryDetail{border:1px solid color-mix(in srgb, var(--fcg-text-primary) 18%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:9px;padding:11px;display:grid}.fnB0BW_memoryDetail p{max-height:240px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;line-height:19px;overflow:auto}.fnB0BW_memoryTags{flex-wrap:wrap;gap:5px;display:flex}.fnB0BW_memoryTags span{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);padding:2px 6px}.fnB0BW_memoryTimeline{border-top:1px solid var(--fcg-line);gap:5px;padding-top:9px;display:grid}.fnB0BW_memoryTimeline strong{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_memoryTimeline button{color:var(--fcg-text-tertiary);cursor:pointer;font:var(--fcg-font-caption)/16px var(--fcg-font-mono);text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;padding:0;overflow:hidden}.fnB0BW_memoryTimeline button:hover,.fnB0BW_memoryTimelineCurrent{color:var(--fcg-text-primary)!important}.fnB0BW_graphPanel{border:1px solid color-mix(in srgb, var(--fcg-brand) 24%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:linear-gradient(135deg, color-mix(in srgb, var(--fcg-brand) 5%, var(--fcg-bg-layer-2)), var(--fcg-bg-layer-1));gap:10px;margin-top:14px;padding:12px;display:grid}.fnB0BW_graphState{border-left:2px solid var(--fcg-brand);background:var(--fcg-bg-layer-2);gap:3px;padding:10px 11px;display:grid}.fnB0BW_graphState strong{font-size:var(--fcg-font-caption)}.fnB0BW_graphState small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_graphInstallList{gap:8px;display:grid}.fnB0BW_graphInstallRow{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.fnB0BW_graphInstallRow>div{flex:1;gap:4px;min-width:0;display:grid}.fnB0BW_graphInstallRow strong{font-size:var(--fcg-font-caption)}.fnB0BW_graphInstallRow small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_graphInstallRow .fnB0BW_input{margin-top:4px}.fnB0BW_verificationGrid{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:7px;display:grid}.fnB0BW_verificationGrid article{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:4px;min-width:0;padding:10px 12px;display:grid}.fnB0BW_verificationGrid strong{font-size:var(--fcg-font-caption);text-transform:uppercase}.fnB0BW_verificationGrid small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_verificationGrid pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:120px;color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/19px var(--fcg-font-mono);margin:0;overflow:auto}.fnB0BW_mcpTemplateBar{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);align-items:center;gap:7px;margin-top:12px;display:flex}.fnB0BW_templateButton{border:1px dashed var(--fcg-line-strong);border-radius:var(--fcg-radius-sm);min-height:26px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;align-items:center;gap:4px;padding:3px 8px;display:inline-flex}.fnB0BW_templateButton:hover{border-style:solid;border-color:var(--fcg-text-primary);color:var(--fcg-text-primary)}.fnB0BW_mcpPresetHeading{justify-content:space-between;align-items:baseline;gap:10px;margin-top:14px;display:flex}.fnB0BW_mcpPresetHeading strong{font-size:var(--fcg-font-caption)}.fnB0BW_mcpPresetHeading small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_mcpPresetGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_mcpPresetCard{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:linear-gradient(135deg, var(--fcg-bg-layer-2), var(--fcg-bg-layer-1));min-width:0;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:10px;display:grid}.fnB0BW_mcpPresetCard:hover{border-color:var(--fcg-line-strong);box-shadow:var(--fcg-shadow-1);transform:translateY(-1px)}.fnB0BW_mcpPresetCard:disabled{cursor:not-allowed;opacity:.55;transform:none}.fnB0BW_mcpPresetCard>span:not(.fnB0BW_mcpPresetIcon){gap:2px;min-width:0;display:grid}.fnB0BW_mcpPresetCard strong{font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_mcpPresetCard small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:18px;overflow:hidden}.fnB0BW_mcpPresetCard b{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:nowrap;font-weight:500}.fnB0BW_mcpPresetIcon,.fnB0BW_mcpServerIcon{border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-brand) 12%, var(--fcg-bg-layer-2));width:30px;height:30px;color:var(--fcg-brand);flex:none;place-items:center;display:grid}.fnB0BW_mcpServerIcon{width:32px;height:32px}.fnB0BW_mcpMarketplaceGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_mcpMarketplaceCard{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:linear-gradient(135deg, var(--fcg-bg-layer-2), var(--fcg-bg-layer-1));grid-template-columns:auto minmax(0,1fr);gap:9px;min-width:0;padding:10px;display:grid}.fnB0BW_mcpMarketplaceIcon{object-fit:cover;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);flex:none;width:30px;height:30px}.fnB0BW_mcpMarketplaceCopy{gap:3px;min-width:0;display:grid}.fnB0BW_mcpMarketplaceCopy>div{justify-content:space-between;align-items:center;gap:6px;display:flex}.fnB0BW_mcpMarketplaceCopy strong,.fnB0BW_mcpMarketplaceCopy small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_mcpMarketplaceCopy strong{font-size:var(--fcg-font-caption)}.fnB0BW_mcpMarketplaceCopy span{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);flex:none;padding:2px 6px}.fnB0BW_mcpMarketplaceCopy small,.fnB0BW_mcpMarketplaceCopy em{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);font-style:normal;line-height:18px}.fnB0BW_mcpMarketplaceActions{grid-column:1/-1;justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_mcpMarketplaceActions a{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-decoration:none}.fnB0BW_mcpMarketplaceActions a:hover{color:var(--fcg-text-primary);text-decoration:underline}.fnB0BW_mcpMarketplaceActions .fnB0BW_button{min-height:27px;font-size:var(--fcg-font-caption);padding:3px 8px}.fnB0BW_mcpJsonPanel{border:1px solid color-mix(in srgb, var(--fcg-brand) 32%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:color-mix(in srgb, var(--fcg-brand) 4%, var(--fcg-bg-layer-1));gap:9px;margin-top:12px;padding:11px;display:grid}.fnB0BW_mcpJsonPanel .fnB0BW_capabilityFormHead{grid-template-columns:1fr auto;align-items:start;gap:4px 10px;display:grid}.fnB0BW_mcpJsonPanel .fnB0BW_capabilityFormHead small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);grid-column:1/-1;line-height:18px}.fnB0BW_mcpJsonInput{box-sizing:border-box;resize:vertical;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:100%;min-height:170px;color:var(--fcg-text-primary);font:var(--fcg-font-caption)/18px var(--fcg-font-mono);outline:none;padding:10px}.fnB0BW_mcpJsonInput:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_mcpServerList{gap:8px;margin-top:12px;display:grid}.fnB0BW_mcpServerCard{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);justify-content:space-between;align-items:center;gap:10px;min-width:0;padding:12px 14px;display:flex}.fnB0BW_mcpServerMain{gap:4px;min-width:0;display:grid}.fnB0BW_mcpServerMain>small{color:var(--fcg-text-tertiary);font:var(--fcg-font-caption)/16px var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_mcpServerTitle{align-items:center;gap:7px;min-width:0;display:flex}.fnB0BW_mcpServerTitle strong{text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-body);overflow:hidden}.fnB0BW_mcpServerActions{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:7px;display:flex}.fnB0BW_inlineSwitch{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:4px;display:inline-flex}.fnB0BW_inlineSwitch input{width:14px;height:14px;accent-color:var(--fcg-brand);cursor:pointer;margin:0}.fnB0BW_emptyCapability{border:1px dashed var(--fcg-line-strong);border-radius:var(--fcg-radius-md);color:var(--fcg-text-secondary);text-align:center;gap:4px;margin-top:12px;padding:18px 14px;display:grid}.fnB0BW_emptyCapability small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_skillPanel{gap:8px;margin-top:14px;padding-top:1px;display:grid}.fnB0BW_skillPanelHeader{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.fnB0BW_skillPanelHeader small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_skillCard{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);border:1px solid #0000;align-items:flex-start;gap:10px;padding:12px 14px;display:flex}.fnB0BW_skillCard:hover{border-color:var(--fcg-line);background:var(--fcg-bg-layer-2)}.fnB0BW_skillCardBody{min-width:0;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;flex:1;gap:4px;padding:0;display:grid}.fnB0BW_skillCardBody:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_skillCardControl{flex:none;justify-items:end;gap:2px;padding-top:2px;display:grid}.fnB0BW_skillCardToggle{color:var(--fcg-text-tertiary);cursor:pointer;font-size:var(--fcg-font-caption);white-space:nowrap;align-items:center;gap:6px;display:flex}.fnB0BW_skillCardToggle input{margin:0}.fnB0BW_skillCardClear{color:var(--fcg-brand);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;padding:0}.fnB0BW_skillCardClear:disabled{opacity:.5;cursor:default}.fnB0BW_skillDetailControl{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);flex-wrap:wrap;align-items:center;gap:4px 12px;margin-top:10px;padding:9px 12px;display:flex}.fnB0BW_skillDetailControl>small{flex-basis:100%}.fnB0BW_skillForward{margin-top:12px}.fnB0BW_skillForwardHead{gap:2px;margin-bottom:6px;display:grid}.fnB0BW_skillForwardHead strong{font-size:var(--fcg-font-caption)}.fnB0BW_skillForwardHead small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_skillCardHead{justify-content:space-between;align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_skillCard strong{font-size:var(--fcg-font-caption)}.fnB0BW_skillCard p{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin:0;line-height:18px}.fnB0BW_skillCard small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_skillFileBar{flex-wrap:wrap;gap:6px;margin:12px 0 0;display:flex}.fnB0BW_skillFileChip{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);max-width:100%;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;padding:4px 9px;overflow:hidden}.fnB0BW_skillFileChip:hover{background:var(--fcg-bg-hover);color:var(--fcg-text-primary)}.fnB0BW_skillFileChipActive{border-color:var(--fcg-brand);color:var(--fcg-text-primary)}.fnB0BW_skillFileChip:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_workbuddyHeaderActions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.fnB0BW_accountManagerButton{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);min-height:28px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;padding:4px 9px}.fnB0BW_accountManagerButton:hover{background:var(--fcg-bg-hover);color:var(--fcg-text-primary)}.fnB0BW_accountRow{justify-content:space-between;align-items:center;gap:14px;min-width:0;display:flex}.fnB0BW_accountIdentity{min-width:0}.fnB0BW_accountIdentityWithAvatar{align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_accountText{min-width:0}.fnB0BW_accountAvatar{border-radius:var(--fcg-radius-md);border:1px solid #0000;flex:none;place-items:center;width:42px;height:42px;display:inline-grid;overflow:hidden;box-shadow:0 2px 8px #0f172a1a}.fnB0BW_accountAvatarRemote{border-color:var(--fcg-line);background:#fff}.fnB0BW_accountAvatarRemote img{object-fit:cover;width:100%;height:100%}.fnB0BW_accountAvatarMonogram{font-size:var(--fcg-font-section);letter-spacing:-.04em;font-weight:800;line-height:1}.fnB0BW_accountAvatarQq{color:#fff;background:linear-gradient(145deg,#38bdf8,#1263bd);border-color:#1688d8}.fnB0BW_accountAvatarGoogle{background:linear-gradient(145deg, var(--fcg-bg-layer-2), var(--fcg-bg-layer-1));color:#4285f4;text-shadow:1px 0 #ea4335,0 1px #34a853,-1px 0 #fbbc05;border-color:#d8dce5}.fnB0BW_accountAvatarGeneric{border-color:var(--fcg-line);background:var(--fcg-bg-layer-1);color:var(--fcg-text-tertiary)}.fnB0BW_accountAvatarGeneric svg{fill:currentColor;width:22px;height:22px}.fnB0BW_accountName{text-overflow:ellipsis;white-space:nowrap;font-weight:600;display:block;overflow:hidden}.fnB0BW_accountEmail{text-overflow:ellipsis;white-space:nowrap;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:3px;display:block;overflow:hidden}.fnB0BW_accountActions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:9px;display:flex}.fnB0BW_clineUsage{gap:7px;margin-top:4px;display:grid}.fnB0BW_clineUsageHead{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_clineUsageRow{grid-template-columns:84px minmax(0,1fr) 44px;align-items:center;gap:10px;display:grid}.fnB0BW_clineUsageLabel{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-caption);overflow:hidden}.fnB0BW_clineUsageValue{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;text-align:right}.fnB0BW_clineUsageMeter{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);height:4px;overflow:hidden}.fnB0BW_clineUsageFill{border-radius:inherit;background:var(--fcg-brand);height:100%;transition:width .3s}.fnB0BW_clineUsageFillHigh{background:var(--fcg-warn)}.fnB0BW_balance{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:var(--fcg-success);font-size:var(--fcg-font-body-lg);font-variant-numeric:tabular-nums;align-items:baseline;gap:7px;padding:5px 11px;font-weight:600;display:inline-flex}.fnB0BW_balanceLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);font-weight:500}.fnB0BW_authForm{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px;display:grid}.fnB0BW_authPanel{box-sizing:border-box;border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-1);width:100%;box-shadow:var(--fcg-shadow-2);gap:16px;padding:26px 24px 22px;display:grid}.fnB0BW_authLayout{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:20px;margin-top:6px;display:grid}.fnB0BW_authHead{text-align:center;justify-items:center;gap:6px;display:grid}.fnB0BW_authTitle{color:var(--fcg-text-primary);letter-spacing:-.01em;font-size:17px;font-weight:650;line-height:24px}.fnB0BW_authSubtitle{max-width:300px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_authTabs{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-tip);grid-template-columns:1fr 1fr;gap:2px;padding:3px;display:grid}.fnB0BW_authTab{min-height:32px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);transition:background var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);background:0 0;border:0;border-radius:8px}.fnB0BW_authTab:hover{color:var(--fcg-text-primary)}.fnB0BW_authTab:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_authTabActive{background:var(--fcg-bg-layer-1);box-shadow:var(--fcg-shadow-1);color:var(--fcg-text-primary);font-weight:600}.fnB0BW_authStack{gap:11px;display:grid}.fnB0BW_authPanel .fnB0BW_input{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-tip);min-height:42px;font-size:var(--fcg-font-body);border-color:#0000;padding:10px 13px}.fnB0BW_authPanel .fnB0BW_input::placeholder{color:var(--fcg-text-tertiary)}.fnB0BW_authPanel .fnB0BW_input:hover:not(:focus){border-color:var(--fcg-line)}.fnB0BW_authPanel .fnB0BW_input:focus{border-color:var(--fcg-brand);background:var(--fcg-bg-layer-1);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_authPanel .fnB0BW_input:-webkit-autofill,.fnB0BW_authPanel .fnB0BW_input:-webkit-autofill:hover,.fnB0BW_authPanel .fnB0BW_input:-webkit-autofill:focus{-webkit-text-fill-color:var(--fcg-text-primary);box-shadow:0 0 0 60px var(--fcg-bg-tip) inset}.fnB0BW_authCodeRow{grid-template-columns:minmax(0,1fr) auto;gap:8px;display:grid}.fnB0BW_authCodeSend{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);min-height:42px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;white-space:nowrap;transition:background var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);padding:0 14px}.fnB0BW_authCodeSend:hover:not(:disabled){border-color:var(--fcg-line-strong);background:var(--fcg-bg-hover)}.fnB0BW_authCodeSend:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_authCodeSend:disabled{cursor:not-allowed;color:var(--fcg-text-tertiary)}.fnB0BW_authSubmit{border-radius:var(--fcg-radius-md);background:var(--fcg-brand);width:100%;min-height:42px;color:var(--fcg-text-on-brand-fixed);cursor:pointer;font:inherit;font-size:var(--fcg-font-body);letter-spacing:.01em;transition:background var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease), transform var(--fcg-fast) var(--fcg-ease);border:1px solid #0000;font-weight:600}.fnB0BW_authSubmit:hover:not(:disabled){background:var(--fcg-brand-strong)}.fnB0BW_authSubmit:active:not(:disabled){transform:translateY(1px)}.fnB0BW_authSubmit:disabled{cursor:not-allowed;opacity:.5}.fnB0BW_authSubmit:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 30%, transparent);outline:none}.fnB0BW_authNote,.fnB0BW_authStep{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-align:center;line-height:18px}.fnB0BW_authStep{color:var(--fcg-text-secondary)}.fnB0BW_authSocialRow{grid-template-columns:1fr 1fr;gap:9px;display:grid}.fnB0BW_authSocialButton{box-sizing:border-box;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);min-height:42px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-body);transition:border-color var(--fcg-fast) var(--fcg-ease), background var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);justify-content:center;align-items:center;gap:8px;font-weight:550;display:inline-flex}.fnB0BW_authSocialButton svg{flex:none;width:16px;height:16px}.fnB0BW_authSocialButton:hover:not(:disabled){border-color:var(--fcg-line-strong);background:var(--fcg-bg-hover);color:var(--fcg-text-primary)}.fnB0BW_authSocialButton:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_authSocialButton:disabled{cursor:progress;opacity:.6}.fnB0BW_authDivider{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);align-items:center;gap:10px;display:flex}.fnB0BW_authDivider:before,.fnB0BW_authDivider:after{background:var(--fcg-line);content:\"\";flex:1;height:1px}.fnB0BW_authNotice{border:1px solid color-mix(in srgb, var(--fcg-brand) 26%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-brand) 6%, var(--fcg-bg-layer-1));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-align:center;padding:9px 11px;line-height:18px}.fnB0BW_authFull{grid-column:1/-1}.fnB0BW_remember{color:var(--fcg-text-secondary);cursor:pointer;font-size:var(--fcg-font-caption);align-items:center;gap:8px;display:flex}.fnB0BW_remember input{width:15px;height:15px;accent-color:var(--fcg-brand);cursor:pointer;margin:0}.fnB0BW_rememberRow{flex-wrap:wrap;align-items:center;gap:18px;display:flex}.fnB0BW_passwordField{min-width:0;display:flex;position:relative}.fnB0BW_authPanel .fnB0BW_passwordField .fnB0BW_input{width:100%;padding-right:64px}.fnB0BW_passwordToggle{border-radius:var(--fcg-radius-sm);color:var(--fcg-text-tertiary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;padding:4px 6px;position:absolute;top:50%;right:6px;transform:translateY(-50%)}.fnB0BW_passwordToggle:hover{color:var(--fcg-text-primary)}.fnB0BW_paymentBar{border-bottom:1px solid var(--fcg-line-subtle);grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px 16px;margin-bottom:18px;padding-bottom:16px;display:grid}.fnB0BW_paymentBarDetail{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;grid-column:1/-1;line-height:17px}.fnB0BW_paymentPicker{justify-items:end;gap:6px;min-width:0;display:grid}.fnB0BW_paymentHeading{font-size:var(--fcg-font-title);letter-spacing:-.01em;color:var(--fcg-text-primary);margin-bottom:3px;font-weight:600;display:block}.fnB0BW_paymentMethod{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:8px;display:inline-flex}.fnB0BW_paymentMethod>span{white-space:nowrap;flex:none}.fnB0BW_paymentMethod .fnB0BW_select{width:auto;min-width:176px;max-width:100%}.fnB0BW_alert{border:1px solid color-mix(in srgb, var(--fcg-danger) 28%, transparent);border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-danger) 7%, var(--fcg-bg-layer-2));color:var(--fcg-danger);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin-bottom:10px;padding:9px 11px;line-height:18px}.fnB0BW_alert button{color:inherit;font-size:var(--fcg-font-caption);cursor:pointer;white-space:nowrap;background:0 0;border:0;margin-left:10px;padding:0;text-decoration:underline}.fnB0BW_pending{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 6%, var(--fcg-bg-layer-2));gap:8px;margin-bottom:12px;padding:10px 11px;display:grid}.fnB0BW_pendingTitle{font-weight:600}.fnB0BW_pendingHint{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_pendingRow{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_pendingText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.fnB0BW_plans,.fnB0BW_planShared,.fnB0BW_payDialog{--pixel-ink:color-mix(in srgb, var(--fcg-brand) 58%, var(--fcg-text-primary));--pixel-face:var(--fcg-bg-layer-1);--pixel-recess:color-mix(in srgb, var(--fcg-text-primary) 4%, var(--fcg-bg-layer-1));--pixel-recess-edge:color-mix(in srgb, var(--pixel-ink) 26%, transparent);--pixel-recess-rule:color-mix(in srgb, var(--pixel-ink) 22%, transparent);--pixel-rule:color-mix(in srgb, var(--pixel-ink) 18%, transparent);--pixel-notch:polygon(0 8px, 4px 8px, 4px 4px, 8px 4px, 8px 0, calc(100% - 8px) 0, calc(100% - 8px) 4px, calc(100% - 4px) 4px, calc(100% - 4px) 8px, 100% 8px, 100% calc(100% - 8px), calc(100% - 4px) calc(100% - 8px), calc(100% - 4px) calc(100% - 4px), calc(100% - 8px) calc(100% - 4px), calc(100% - 8px) 100%, 8px 100%, 8px calc(100% - 4px), 4px calc(100% - 4px), 4px calc(100% - 8px), 0 calc(100% - 8px));--pixel-chip:polygon(0 3px, 3px 3px, 3px 0, calc(100% - 3px) 0, calc(100% - 3px) 3px, 100% 3px, 100% calc(100% - 3px), calc(100% - 3px) calc(100% - 3px), calc(100% - 3px) 100%, 3px 100%, 3px calc(100% - 3px), 0 calc(100% - 3px))}.fnB0BW_plans{grid-template-columns:repeat(auto-fit,minmax(236px,1fr));gap:16px;padding:0 6px 6px 0;display:grid}.fnB0BW_planShell{display:flex;position:relative}.fnB0BW_planShell:before{background:var(--pixel-ink);clip-path:var(--pixel-notch);content:\"\";transition:transform var(--fcg-fast) var(--fcg-ease);position:absolute;inset:0;transform:translate(6px,6px)}.fnB0BW_planShell:hover:before{transform:translate(8px,8px)}.fnB0BW_plan{border:2px solid var(--pixel-ink);background:var(--pixel-face);min-width:0;clip-path:var(--pixel-notch);transition:transform var(--fcg-fast) var(--fcg-ease);flex-direction:column;flex:1;gap:11px;padding:16px 16px 14px;display:flex;position:relative}.fnB0BW_plan:hover{transform:translate(-2px,-2px)}.fnB0BW_planTop{border-bottom:2px solid var(--pixel-rule);align-items:center;gap:8px;padding-bottom:9px;display:flex}.fnB0BW_planDot{border:1px solid var(--pixel-ink);background:var(--fcg-brand);width:9px;height:9px;box-shadow:1px 1px 0 0 var(--pixel-ink);flex:none}.fnB0BW_planName{min-width:0;color:var(--fcg-text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-body-lg);letter-spacing:-.012em;flex:1;font-weight:800;overflow:hidden}.fnB0BW_planTag{border:1px solid var(--pixel-ink);background:var(--fcg-brand);color:var(--fcg-text-on-brand-fixed);font-family:var(--fcg-font-mono);letter-spacing:.06em;white-space:nowrap;clip-path:var(--pixel-chip);flex:none;padding:2px 8px;font-size:10px;font-weight:700}.fnB0BW_planSave{border:1px solid color-mix(in srgb, var(--fcg-success) 52%, var(--pixel-ink));background:color-mix(in srgb, var(--fcg-success) 13%, transparent);color:var(--fcg-success);letter-spacing:.04em;white-space:nowrap;clip-path:var(--pixel-chip);flex:none;padding:2px 7px;font-size:10px;font-weight:700}.fnB0BW_planFeatured .fnB0BW_planRecess{background:color-mix(in srgb, var(--fcg-brand) 8%, var(--pixel-recess))}.fnB0BW_planShared{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);flex-wrap:wrap;align-items:center;gap:14px;margin-top:16px;padding:10px 12px;display:flex}.fnB0BW_planShared small{color:var(--fcg-text-tertiary);font-family:var(--fcg-font-mono);letter-spacing:.1em;font-size:10px;font-weight:700}.fnB0BW_planShared span{align-items:center;gap:6px;display:inline-flex}.fnB0BW_planRecess{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);align-items:stretch;padding:10px 12px;display:flex}.fnB0BW_planCreditBlock{flex:auto;gap:3px;min-width:0;display:grid}.fnB0BW_planPriceLabel{color:var(--fcg-brand);letter-spacing:.08em;align-items:center;gap:5px;font-size:10px;font-weight:700;display:flex}.fnB0BW_planRecessCode{font-family:var(--fcg-font-mono);letter-spacing:.14em}.fnB0BW_planPriceRow{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.fnB0BW_planPrice{color:var(--fcg-text-primary);letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:26px;font-weight:800;line-height:1}.fnB0BW_planOriginalPrice{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-decoration:line-through}.fnB0BW_planPayBlock{border-left:2px solid var(--pixel-recess-rule);align-content:center;justify-items:end;gap:3px;margin-left:12px;padding-left:12px;display:grid}.fnB0BW_planPayLabel{color:var(--fcg-text-tertiary);font-size:10px;font-weight:600}.fnB0BW_planPayable{color:var(--fcg-brand);font-size:var(--fcg-font-title);letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-weight:800}.fnB0BW_features{border-top:2px solid var(--pixel-rule);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:6px;padding-top:10px;line-height:17px;display:grid}.fnB0BW_features>span{grid-template-columns:12px minmax(0,1fr);align-items:start;gap:8px;display:grid}.fnB0BW_planCheck{border:1px solid var(--pixel-ink);background:var(--fcg-brand);width:7px;height:7px;margin-top:5px;display:block}.fnB0BW_planFeatureText{min-width:0}.fnB0BW_planButton{border:2px solid var(--pixel-ink);background:var(--fcg-brand);width:100%;min-height:40px;color:var(--fcg-text-on-brand-fixed);letter-spacing:.04em;box-shadow:inset 0 2px 0 0 #ffffff61, 0 3px 0 0 var(--pixel-ink);transition:background var(--fcg-fast) var(--fcg-ease), box-shadow 60ms linear, transform 60ms linear;border-radius:0;margin-top:auto;font-weight:700}.fnB0BW_planButton:hover:not(:disabled){background:var(--fcg-brand-strong);box-shadow:inset 0 2px 0 0 #ffffff7a, 0 4px 0 0 var(--pixel-ink)}.fnB0BW_planButton:active:not(:disabled){box-shadow:inset 0 1px 0 0 #0000002e, 0 0 0 0 var(--pixel-ink);transform:translateY(3px)}.fnB0BW_planBlurb{gap:3px;display:grid}.fnB0BW_planPerk{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:17px}.fnB0BW_planLead{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:17px}.fnB0BW_planFootnote{color:var(--fcg-text-tertiary);align-items:center;gap:6px;font-size:11px;display:flex}.fnB0BW_planDotOk{background:var(--fcg-success);flex:none;width:6px;height:6px}.fnB0BW_planBrandMark{color:var(--fcg-brand);font-family:var(--fcg-font-mono);letter-spacing:.05em;margin-left:auto;font-size:10px;font-weight:700}.fnB0BW_pricingSection{border-top:1px solid var(--fcg-line);gap:10px;margin-top:20px;padding-top:18px;display:grid}.fnB0BW_pricingHeader{justify-content:space-between;align-items:end;gap:14px;display:flex}.fnB0BW_pricingHeader>div{gap:3px;display:grid}.fnB0BW_pricingSearch{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:min(250px,100%);min-height:32px;color:var(--fcg-text-primary);font:inherit;font-size:var(--fcg-font-caption);outline:none;padding:6px 10px}.fnB0BW_pricingSearch:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_pricingNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 7%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:8px 10px}.fnB0BW_pricingTableWrap{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);width:100%;overflow:auto hidden}.fnB0BW_pricingTable{table-layout:fixed;border-collapse:collapse;width:100%;min-width:660px;font-size:var(--fcg-font-caption)}.fnB0BW_pricingTable th{border-bottom:1px solid var(--fcg-line-subtle);background:var(--fcg-bg-layer-1);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);letter-spacing:.02em;text-align:left;white-space:nowrap;padding:10px 14px;font-weight:600}.fnB0BW_pricingTable td{border-bottom:1px solid var(--fcg-line-subtle);color:var(--fcg-text-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;padding:10px 12px}.fnB0BW_pricingTable tbody tr:last-child td{border-bottom:0}.fnB0BW_pricingTable tbody tr:hover{background:var(--fcg-bg-hover)}.fnB0BW_pricingFreeSection{border-top:1px dashed var(--fcg-line-subtle);gap:8px;margin-top:6px;padding-top:14px;display:grid}.fnB0BW_pricingFreeHeader{gap:2px;display:grid}.fnB0BW_pricingFreeHeader strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-weight:650}.fnB0BW_paymentMethods{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;margin-top:0;display:flex}.fnB0BW_paymentMethodChip{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);letter-spacing:.01em;white-space:nowrap;padding:2px 9px;font-weight:550}@media (width<=520px){.fnB0BW_paymentBar{grid-template-columns:minmax(0,1fr)}.fnB0BW_paymentPicker{justify-items:stretch}.fnB0BW_paymentMethod .fnB0BW_select{width:100%}.fnB0BW_paymentMethods{justify-content:flex-start}}.fnB0BW_pricingTable th:first-child,.fnB0BW_pricingTable td:first-child{width:34%}.fnB0BW_pricingTable td:first-child{white-space:normal}.fnB0BW_pricingSection .fnB0BW_pricingTable th:first-child,.fnB0BW_pricingSection .fnB0BW_pricingTable td:first-child{width:26%}.fnB0BW_pricingSection .fnB0BW_pricingTable th:nth-child(2),.fnB0BW_pricingSection .fnB0BW_pricingTable td:nth-child(2){width:22%}.fnB0BW_pricingSection .fnB0BW_pricingTable td.fnB0BW_pricingGroup{white-space:normal}.fnB0BW_pricingTable strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);font-weight:600;display:block}.fnB0BW_pricingTable code{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;display:block;overflow:hidden}.fnB0BW_pricingTable small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:3px;display:block}.fnB0BW_tokenHero{border-bottom:1px solid var(--fcg-line);justify-content:space-between;align-items:flex-end;gap:16px;margin:-2px 0 14px;padding:10px 0 14px;display:flex}.fnB0BW_tokenEyebrow{color:var(--fcg-brand);font-weight:650;font-size:var(--fcg-font-caption);letter-spacing:.06em;text-transform:uppercase;align-items:center;gap:8px;display:flex}.fnB0BW_tokenPulse{corner-shape:round;background:var(--fcg-success);width:7px;height:7px;box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-success) 18%, transparent);border-radius:50%}.fnB0BW_tokenTitle{font-size:var(--fcg-font-display);letter-spacing:-.03em;margin:3px 0 0;line-height:31px}.fnB0BW_tokenSourceTabs{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);gap:2px;padding:3px;display:inline-flex}.fnB0BW_tokenSourceTabs button{min-height:30px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;border-radius:5px;padding:5px 14px}.fnB0BW_tokenSourceTabs button:hover{background:var(--fcg-bg-hover)}.fnB0BW_tokenSourceTabs .fnB0BW_tokenSourceActive{background:var(--fcg-bg-layer-2);color:var(--fcg-text-primary);box-shadow:var(--fcg-shadow-1);font-weight:600}.fnB0BW_tokenBalRow{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);align-items:center;gap:10px;margin-top:14px;padding:12px 16px;display:flex}.fnB0BW_tokenBalDot{corner-shape:round;background:var(--fcg-success);width:8px;height:8px;box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-success) 18%, transparent);border-radius:50%;flex:none}.fnB0BW_tokenBalDot[data-level=low]{background:var(--fcg-warn);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-warn) 18%, transparent)}.fnB0BW_tokenBalDot[data-level=danger]{background:var(--fcg-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-danger) 18%, transparent)}.fnB0BW_tokenBalAmount{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:20px;font-weight:700}.fnB0BW_tokenBalBadge{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-success) 12%, transparent);color:var(--fcg-success);font-size:var(--fcg-font-caption);white-space:nowrap;padding:2px 9px;line-height:18px}.fnB0BW_tokenBalBadge[data-level=low]{background:color-mix(in srgb, var(--fcg-warn) 13%, transparent);color:var(--fcg-warn-label)}.fnB0BW_tokenBalBadge[data-level=danger]{background:color-mix(in srgb, var(--fcg-danger) 12%, transparent);color:var(--fcg-danger)}.fnB0BW_tokenBalUpdated{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenBalHint{min-width:0;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.fnB0BW_tokenBalRefresh{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);min-height:28px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);transition:color var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease);background:0 0;margin-left:auto;padding:4px 12px}.fnB0BW_tokenBalRefresh:hover{border-color:var(--fcg-line-strong);color:var(--fcg-text-primary)}.fnB0BW_tokenSessionRow{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:center;gap:10px;margin-top:8px;padding:10px 16px;display:flex}.fnB0BW_tokenSessionRow strong{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWaste{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);flex-direction:column;gap:10px;margin-top:10px;padding:14px 16px;display:flex}.fnB0BW_tokenCacheWasteHead{align-items:baseline;gap:8px;display:flex}.fnB0BW_tokenCacheWasteHead strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body)}.fnB0BW_tokenCacheWasteClean{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_tokenCacheWasteStats{flex-wrap:wrap;gap:8px;display:flex}.fnB0BW_tokenCacheWasteStat{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);flex-direction:column;flex:120px;gap:2px;padding:8px 10px;display:flex}.fnB0BW_tokenCacheWasteStat span{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_tokenCacheWasteStat b{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteStat[data-tone=warn] b{color:var(--fcg-warn-label)}.fnB0BW_tokenCacheWasteCauses{flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_tokenCacheWasteCause{border-radius:var(--fcg-radius-full);font-size:var(--fcg-font-caption);background:color-mix(in srgb, var(--fcg-warn) 10%, transparent);color:var(--fcg-text-secondary);padding:2px 9px;line-height:18px}.fnB0BW_tokenCacheWasteCause[data-cause=idle-gap]{background:color-mix(in srgb, var(--fcg-warn) 10%, transparent)}.fnB0BW_tokenCacheWasteCause[data-cause=model-changed]{background:color-mix(in srgb, var(--fcg-danger) 10%, transparent)}.fnB0BW_tokenCacheWasteCause[data-cause=prefix-changed]{background:color-mix(in srgb, var(--fcg-text-tertiary) 12%, transparent)}.fnB0BW_tokenCacheWasteCause b{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteWorst{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.fnB0BW_tokenCacheWasteWorst li{font-size:var(--fcg-font-caption);color:var(--fcg-text-secondary);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:baseline;gap:10px;display:grid}.fnB0BW_tokenCacheWasteWorstHead{color:var(--fcg-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.fnB0BW_tokenCacheWasteWorstModel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenCacheWasteWorstTokens{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteWorstCause{text-align:right;color:var(--fcg-text-tertiary)}.fnB0BW_tokenCacheWasteFoot{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteHint{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin:0;line-height:1.5}.fnB0BW_tokenSummaryGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-top:9px;display:grid}.fnB0BW_tokenMetric{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:4px;min-width:0;padding:12px 14px;display:grid}.fnB0BW_tokenMetric span{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenMetric strong{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;letter-spacing:-.02em;text-overflow:ellipsis;white-space:nowrap;font-size:22px;font-weight:700;line-height:26px;overflow:hidden}.fnB0BW_tokenMetric small{color:var(--fcg-text-tertiary);font-variant-numeric:tabular-nums;font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:18px;overflow:hidden}.fnB0BW_tokenPanel{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);margin-top:12px;padding:14px 16px}.fnB0BW_tokenPanelHeader{justify-content:space-between;align-items:center;gap:10px;min-height:30px;margin-bottom:10px;display:flex}.fnB0BW_tokenPanelTitle{gap:2px;min-width:0;display:grid}.fnB0BW_tokenPanelHeader strong{font-size:15px}.fnB0BW_tokenPanelKicker{color:var(--fcg-brand);font:700 var(--fcg-font-caption)/16px var(--fcg-font-mono);letter-spacing:.11em}.fnB0BW_tokenRangePills{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);scrollbar-width:none;flex-wrap:nowrap;flex:0 auto;gap:2px;max-width:100%;padding:2px;display:inline-flex;overflow-x:auto}.fnB0BW_tokenRangePills::-webkit-scrollbar{display:none}.fnB0BW_tokenRangePills button{min-height:22px;color:var(--fcg-text-tertiary);cursor:pointer;font:var(--fcg-font-caption)/16px var(--fcg-font-mono);white-space:nowrap;background:0 0;border:0;border-radius:5px;flex:none;padding:2px 8px}.fnB0BW_tokenRangePills .fnB0BW_tokenRangeActive{background:var(--fcg-brand-subtle);color:var(--fcg-brand);font-weight:650}.fnB0BW_tokenHeatFilter{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:10px;display:flex}.fnB0BW_tokenHeatFilterLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-right:2px}.fnB0BW_tokenHeatFilterBtn{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);max-width:150px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;background:0 0;align-items:center;gap:6px;padding:2px 9px;line-height:18px;display:inline-flex;overflow:hidden}.fnB0BW_tokenHeatFilterBtn:hover{border-color:var(--fcg-line-strong);color:var(--fcg-text-primary)}.fnB0BW_tokenHeatFilterBtnActive{background:color-mix(in srgb, var(--model-color,var(--fcg-brand)) 14%, transparent);color:var(--model-color,var(--fcg-brand));border-color:#0000;font-weight:600}.fnB0BW_tokenPillDot{corner-shape:round;background:var(--model-color,var(--fcg-text-tertiary));border-radius:50%;flex:none;width:7px;height:7px}.fnB0BW_tokenChartHead{align-items:baseline;gap:8px;margin-bottom:8px;display:flex}.fnB0BW_tokenChartTitle{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-weight:600}.fnB0BW_tokenChartTotal{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-weight:650}.fnB0BW_tokenChartModel{color:var(--model-color,var(--fcg-brand));font:600 var(--fcg-font-caption)/18px var(--fcg-font-mono);margin-left:auto}.fnB0BW_tokenChartWrap{--fcg-chart-hit:#bcd7f8;--fcg-chart-miss:#7aaff0;--fcg-chart-out:#2f6fe0;--fcg-chart-tip-bg:#fff;--fcg-chart-tip-fg:#1a1a1c;--fcg-chart-tip-muted:#6b7280;min-width:0;position:relative}body[data-ds-dark-theme] .fnB0BW_tokenChartWrap{--fcg-chart-hit:#a9c8f0;--fcg-chart-miss:#5f97e8;--fcg-chart-out:#3d7ef0;--fcg-chart-tip-bg:#1f1f21;--fcg-chart-tip-fg:#f5f6f8;--fcg-chart-tip-muted:#a1a1a8}.fnB0BW_tokenChartPlot{position:relative}.fnB0BW_tokenChartGrid{background:var(--fcg-line-subtle);opacity:.8;pointer-events:none;height:1px;position:absolute;left:0;right:0}.fnB0BW_tokenChartGrid span{color:var(--fcg-text-tertiary);font-variant-numeric:tabular-nums;font-size:11px;line-height:1;position:absolute;bottom:3px;left:0}.fnB0BW_tokenChartBar{background:var(--fcg-chart-out);transition:filter 90ms var(--fcg-ease);cursor:pointer;border-radius:3px 3px 0 0;position:absolute;bottom:0;overflow:hidden}.fnB0BW_tokenChartBar[data-active]{filter:brightness(1.14)}.fnB0BW_tokenChartBar[data-empty]{background:var(--fcg-line-subtle);opacity:.3}.fnB0BW_tokenChartCross{pointer-events:none;border-left:1px solid color-mix(in srgb, var(--fcg-text-tertiary) 40%, transparent);position:absolute;top:0;bottom:0}.fnB0BW_tokenChartSeg{width:100%;position:absolute;left:0}.fnB0BW_tokenChartSeg[data-top]{border-radius:3px 3px 0 0}.fnB0BW_tokenChartLegend{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 16px;margin-top:6px;line-height:18px;display:flex}.fnB0BW_tokenChartLegend span{align-items:center;gap:6px;min-width:0;display:inline-flex}.fnB0BW_tokenChartLegend i{border-radius:2px;flex:none;width:8px;height:8px}.fnB0BW_tokenChartTip{z-index:5;background:var(--fcg-chart-tip-bg);color:var(--fcg-chart-tip-muted);pointer-events:none;font-size:var(--fcg-font-caption);border-radius:8px;gap:3px;padding:8px 10px;line-height:14px;display:grid;position:absolute;box-shadow:0 10px 30px #00000047}.fnB0BW_tokenChartTipHead{color:var(--fcg-chart-tip-fg);justify-content:space-between;gap:14px;margin-bottom:2px;font-size:13px;display:flex}.fnB0BW_tokenChartTipHead b{font-variant-numeric:tabular-nums}.fnB0BW_tokenChartTipRow{align-items:center;gap:7px;min-width:0;display:flex}.fnB0BW_tokenChartTipRow b{color:var(--fcg-chart-tip-fg);font-variant-numeric:tabular-nums;margin-left:auto;font-weight:600}.fnB0BW_tokenChartSwatch{background:var(--fcg-line-strong);border-radius:2px;flex:none;width:8px;height:8px}.fnB0BW_tokenChartSwatch[data-tone=hit]{background:var(--fcg-chart-hit)}.fnB0BW_tokenChartSwatch[data-tone=miss]{background:var(--fcg-chart-miss)}.fnB0BW_tokenChartSwatch[data-tone=out]{background:var(--fcg-chart-out)}.fnB0BW_tokenChartSwatch[data-tone=req]{corner-shape:round;background:var(--fcg-chart-tip-muted);border-radius:50%}.fnB0BW_tokenChartAxis{height:18px;margin-top:2px;padding-left:46px;position:relative}.fnB0BW_tokenChartAxis span{color:var(--fcg-text-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px;position:absolute;transform:translate(-50%)}.fnB0BW_tokenChartAxis span:first-child{transform:none}.fnB0BW_tokenChartAxis span:last-child{transform:translate(-100%)}.fnB0BW_tokenHeatTotals{border-top:1px solid var(--fcg-line-subtle);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);flex-wrap:wrap;align-items:baseline;gap:6px 16px;margin-top:10px;padding-top:9px;display:flex}.fnB0BW_tokenHeatTotals b{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;margin-right:3px;font-weight:650}.fnB0BW_tokenHeatDaily{margin-left:auto}.fnB0BW_tokenModelBars{gap:6px;margin-bottom:12px;display:grid}.fnB0BW_tokenModelBarRow{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;grid-template-columns:minmax(90px,180px) minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.fnB0BW_tokenModelBarName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenModelBarTrack{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-tip);height:4px;overflow:hidden}.fnB0BW_tokenModelBarTrack i{border-radius:inherit;background:var(--model-color,var(--fcg-brand));height:100%;display:block}.fnB0BW_tokenModelBarRow b{color:var(--fcg-text-primary);font-weight:600}.fnB0BW_tokenModelDot{corner-shape:round;background:var(--model-color,var(--fcg-text-tertiary));border-radius:50%;flex:none;width:7px;height:7px;margin-right:6px;display:inline-block}.fnB0BW_tokenNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line-subtle));border-radius:var(--fcg-radius-md);background:color-mix(in srgb, var(--fcg-warn) 8%, var(--fcg-bg-layer-1));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin-top:10px;padding:10px 14px}.fnB0BW_tokenGatewayTable{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);overflow-x:auto}.fnB0BW_tokenGatewayTable .fnB0BW_pricingTable{min-width:560px}.fnB0BW_tokenEmpty{min-height:90px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);place-items:center;display:grid}@media (width<=700px){.fnB0BW_tokenSummaryGrid{grid-template-columns:1fr 1fr}}@media (width<=520px){.fnB0BW_tokenHero{flex-direction:column;align-items:flex-start}.fnB0BW_tokenTitle{font-size:22px}.fnB0BW_tokenSummaryGrid{grid-template-columns:1fr}.fnB0BW_tokenPanelHeader{gap:6px}.fnB0BW_tokenChartTip{width:190px}.fnB0BW_tokenHeatTotals{gap:4px 10px}.fnB0BW_tokenHeatDaily{margin-left:0}.fnB0BW_tokenModelBarRow{grid-template-columns:minmax(70px,110px) minmax(0,1fr) auto}}.fnB0BW_pricePair{gap:1px;min-width:0;line-height:18px;display:grid}.fnB0BW_priceOriginal{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;text-decoration:line-through;overflow:hidden}.fnB0BW_pricingTable .fnB0BW_priceCurrent,.fnB0BW_pricingTable .fnB0BW_priceCurrentDiscount{color:var(--fcg-brand);font-size:var(--fcg-font-body);letter-spacing:-.01em;font-weight:650;display:block}.fnB0BW_pricingTable .fnB0BW_priceCurrentDiscount{color:var(--fcg-success)}.fnB0BW_pricingRequest{font-weight:600;color:var(--fcg-text-primary)!important}.fnB0BW_imageTiers{flex-wrap:wrap;align-items:start;gap:4px 18px;display:inline-flex}.fnB0BW_imageTier{gap:1px;min-width:0;display:grid}.fnB0BW_imageTierLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);letter-spacing:.02em;font-style:normal;font-weight:600}.fnB0BW_pricingEmpty{text-align:center;color:var(--fcg-text-tertiary)!important;padding:28px!important}.fnB0BW_order{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-1);gap:10px;margin-top:20px;padding:18px;display:grid}.fnB0BW_orderTitle{font-size:var(--fcg-font-body);letter-spacing:-.01em;font-weight:600}.fnB0BW_orderActions{flex-wrap:wrap;gap:7px;display:flex}.fnB0BW_qr{object-fit:contain;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:#fff;width:160px;max-width:100%;height:160px}.fnB0BW_qrWrap{justify-items:start;gap:8px;display:grid}.fnB0BW_textarea{resize:vertical;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);width:100%;min-height:72px;color:var(--fcg-text-primary);font:inherit;transition:border-color var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease);outline:none;padding:10px 12px;line-height:1.5}.fnB0BW_textarea:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_qrText{overflow-wrap:anywhere;max-width:min(100%,520px);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}@media (width<=800px){.fnB0BW_marketplaceGrid,.fnB0BW_mcpMarketplaceGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}.fnB0BW_poolManager{gap:12px;display:grid}.fnB0BW_poolToolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.fnB0BW_poolToolbarNote{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_poolToolbarActions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.fnB0BW_poolToggle{color:var(--fcg-text-secondary);cursor:pointer;font-size:var(--fcg-font-caption);align-items:center;gap:7px;display:inline-flex}.fnB0BW_poolToggle input{width:14px;height:14px;accent-color:var(--fcg-brand);cursor:pointer;margin:0}.fnB0BW_poolList{gap:10px;display:grid}.fnB0BW_poolAccount{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);transition:border-color var(--fcg-fast) var(--fcg-ease), background var(--fcg-fast) var(--fcg-ease);gap:10px;padding:12px;display:grid}.fnB0BW_poolAccount:hover{border-color:var(--fcg-line-strong);background:var(--fcg-bg-layer-2)}.fnB0BW_poolAccountHead{align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_poolIdentity{flex:auto;align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_poolMonogram{background:var(--fcg-brand-subtle);width:30px;height:30px;color:var(--fcg-brand);font:650 11px/1 var(--fcg-font-mono);letter-spacing:.02em;text-transform:uppercase;border-radius:9px;flex:none;place-items:center;display:grid}.fnB0BW_poolIdentityText{min-width:0}.fnB0BW_poolName{text-overflow:ellipsis;white-space:nowrap;color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-weight:600;display:block;overflow:hidden}.fnB0BW_poolSub{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;margin-top:2px;display:block;overflow:hidden}.fnB0BW_poolChips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.fnB0BW_poolChip{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);white-space:nowrap;padding:2px 8px;font-size:11px;line-height:16px}.fnB0BW_poolChipLive{background:color-mix(in srgb, var(--fcg-success) 14%, transparent);color:var(--fcg-success)}.fnB0BW_poolChipWarn{background:color-mix(in srgb, var(--fcg-warn) 16%, transparent);color:var(--fcg-warn)}.fnB0BW_poolChipDanger{background:color-mix(in srgb, var(--fcg-danger) 14%, transparent);color:var(--fcg-danger)}.fnB0BW_poolMeterRow{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.fnB0BW_poolMeterTrack{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);height:5px;display:block;overflow:hidden}.fnB0BW_poolMeterFill{border-radius:inherit;background:var(--fcg-brand);height:100%;transition:width .3s var(--fcg-ease);display:block}.fnB0BW_poolMeterFillWarn{background:var(--fcg-warn)}.fnB0BW_poolMeterFillDanger{background:var(--fcg-danger)}.fnB0BW_poolMetric{color:var(--fcg-text-secondary);font:600 var(--fcg-font-caption)/1 var(--fcg-font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}.fnB0BW_poolActions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.fnB0BW_poolFootnote{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}@media (width<=520px){.fnB0BW_poolAccountHead{flex-wrap:wrap;align-items:flex-start}.fnB0BW_poolIdentity{flex-basis:100%}.fnB0BW_poolActions{justify-content:flex-start}.fnB0BW_mcpServerCard{flex-direction:column;align-items:flex-start}.fnB0BW_mcpServerActions{justify-content:flex-start}.fnB0BW_skillPanelHeader,.fnB0BW_pricingHeader{flex-direction:column;align-items:flex-start;gap:7px}.fnB0BW_pricingSearch{width:100%}.fnB0BW_marketplaceControls,.fnB0BW_mcpMarketplaceGrid,.fnB0BW_marketplaceGrid{grid-template-columns:1fr}.fnB0BW_communityGrid,.fnB0BW_capabilityCommunityGrid{grid-template-columns:1fr}.fnB0BW_capabilityCommunityHeader{flex-direction:column;align-items:flex-start}.fnB0BW_communityFilterBar{gap:8px}.fnB0BW_communityInstalledEntry{padding-inline:8px}.fnB0BW_communityRestart,.fnB0BW_advisorPickerHeader{flex-direction:column;align-items:flex-start}.fnB0BW_communityModalBackdrop,.fnB0BW_advisorPickerBackdrop{padding:10px}.fnB0BW_advisorPicker{height:95vh;padding:14px}.fnB0BW_communityModalStats,.fnB0BW_advisorModelOption{flex-direction:column;align-items:flex-start;gap:4px}.fnB0BW_advisorModelOption code{max-width:100%}.fnB0BW_routingCell{grid-template-columns:1fr;gap:8px}.fnB0BW_routingCell:not(.fnB0BW_selectCell) .fnB0BW_routingCopy{grid-template-columns:1fr;gap:2px}.fnB0BW_authForm,.fnB0BW_capabilityForm{grid-template-columns:1fr}.fnB0BW_authFull,.fnB0BW_capabilityFull{grid-column:auto}.fnB0BW_capabilityStats,.fnB0BW_advisorStats{grid-template-columns:1fr}.fnB0BW_accountRow{flex-direction:column;align-items:flex-start}.fnB0BW_accountActions{justify-content:flex-start}.fnB0BW_plans{grid-template-columns:repeat(2,minmax(0,1fr))}.fnB0BW_communityGrid,.fnB0BW_capabilityCommunityGrid{grid-template-columns:1fr}.fnB0BW_communityRestart{flex-direction:column;align-items:flex-start}.fnB0BW_communityModalBackdrop{padding:10px}.fnB0BW_communityModal{max-height:95vh;padding:14px}.fnB0BW_communityModalStats{flex-direction:column;align-items:flex-start;gap:4px}}@media (width<=360px){.fnB0BW_plans{grid-template-columns:1fr}}.fnB0BW_statGrid{gap:var(--fcg-space-2);margin-top:var(--fcg-space-3);grid-template-columns:repeat(auto-fit,minmax(112px,1fr));display:grid}.fnB0BW_statCell{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:2px;min-width:0;padding:10px 12px;display:grid}.fnB0BW_statLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:16px;overflow:hidden}.fnB0BW_statValue{color:var(--fcg-text-primary);font-size:var(--fcg-font-title);font-variant-numeric:tabular-nums;letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;font-weight:650;line-height:20px;overflow:hidden}.fnB0BW_details{margin-top:var(--fcg-space-2)}.fnB0BW_detailsSummary{color:var(--fcg-text-secondary);cursor:pointer;font-size:var(--fcg-font-caption);padding:5px 0;line-height:18px}.fnB0BW_detailsSummary:hover{color:var(--fcg-text-primary)}.fnB0BW_detailsSummary:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);border-radius:var(--fcg-radius-sm);outline:none}.fnB0BW_chipGrid{padding:var(--fcg-space-1) 0 var(--fcg-space-2);flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_statChip{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:nowrap;align-items:center;gap:6px;padding:3px 9px;line-height:18px;display:inline-flex}.fnB0BW_statChip b{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;font-weight:650}.fnB0BW_statChipIdle{color:var(--fcg-text-tertiary);opacity:.62}.fnB0BW_statChipIdle b{color:var(--fcg-text-tertiary)}@media (width<=520px){.fnB0BW_statGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}.fnB0BW_toggleGrid{gap:var(--fcg-space-2);margin-top:var(--fcg-space-2);grid-template-columns:repeat(auto-fit,minmax(168px,1fr));display:grid}.fnB0BW_toggleCard{justify-content:space-between;align-items:center;gap:var(--fcg-space-2);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);cursor:pointer;min-width:0;transition:border-color var(--fcg-fast) var(--fcg-ease), background var(--fcg-fast) var(--fcg-ease);padding:9px 11px;display:flex}.fnB0BW_toggleCard:hover{border-color:var(--fcg-line);background:var(--fcg-bg-layer-2)}.fnB0BW_toggleCardDisabled{cursor:not-allowed;opacity:.55}.fnB0BW_toggleCardDisabled:hover{border-color:var(--fcg-line-subtle);background:var(--fcg-bg-layer-1)}.fnB0BW_toggleCardText{gap:1px;min-width:0;display:grid}.fnB0BW_toggleCardText strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;font-weight:600;line-height:18px;overflow:hidden}.fnB0BW_toggleCardText small{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:15px;overflow:hidden}.fnB0BW_toggleCardNote{color:var(--fcg-warn-label);font-size:11px;line-height:15px}.fnB0BW_tuningGrid{gap:var(--fcg-space-2);margin-top:var(--fcg-space-3);grid-template-columns:repeat(auto-fit,minmax(132px,1fr));display:grid}.fnB0BW_tuningCell{gap:4px;min-width:0;display:grid}.fnB0BW_tuningLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:16px;overflow:hidden}.fnB0BW_tuningHint{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:15px;overflow:hidden}.fnB0BW_tuningCell .fnB0BW_select{min-height:32px;padding:5px 9px}.fnB0BW_subGroup{gap:var(--fcg-space-2);margin-top:var(--fcg-space-4);display:grid}.fnB0BW_subGroupLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);letter-spacing:.02em;font-weight:600;line-height:18px}.fnB0BW_councilJob{gap:var(--fcg-space-3);display:grid}.fnB0BW_councilJobHead{align-items:baseline;gap:var(--fcg-space-2);flex-wrap:wrap;min-width:0;display:flex}.fnB0BW_councilJobId{color:var(--fcg-text-tertiary);font-family:var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.fnB0BW_councilReport{gap:var(--fcg-space-2);min-width:0;display:grid}.fnB0BW_councilReportTurn{font-size:var(--fcg-font-body)}.fnB0BW_councilState{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-transform:uppercase;letter-spacing:.04em;padding:2px 8px;font-weight:600;line-height:18px}.fnB0BW_councilStateOk{background:var(--fcg-success-subtle);color:var(--fcg-success)}.fnB0BW_councilStateBlocked{background:var(--fcg-danger-subtle);color:var(--fcg-danger)}.fnB0BW_councilStateNowrap{white-space:nowrap;word-break:keep-all;flex:none;max-width:none}.fnB0BW_councilCallout{border-left:2px solid var(--fcg-line-strong);border-radius:0 var(--fcg-radius-sm) var(--fcg-radius-sm) 0;background:var(--fcg-bg-layer-2);gap:2px;padding:9px 11px;display:grid}.fnB0BW_councilCallout p{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:18px}.fnB0BW_councilCalloutBlocked{border-left-color:var(--fcg-danger);background:color-mix(in srgb, var(--fcg-danger) 6%, var(--fcg-bg-layer-2))}.fnB0BW_findingList{gap:6px;margin:0;padding:0;list-style:none;display:grid}.fnB0BW_findingRow{align-items:start;gap:var(--fcg-space-2);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);grid-template-columns:auto minmax(0,1fr) auto;padding:8px 10px;display:grid}.fnB0BW_findingBody{gap:2px;min-width:0;display:grid}.fnB0BW_findingTitle{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);font-weight:600;line-height:18px}.fnB0BW_findingEvidence{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:17px}.fnB0BW_findingEngine{color:var(--fcg-text-tertiary);white-space:nowrap;flex:none;font-size:11px;line-height:18px}.fnB0BW_findingSeverity{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-tip);color:var(--fcg-text-secondary);letter-spacing:.03em;text-transform:uppercase;white-space:nowrap;flex:none;padding:1px 7px;font-size:10px;font-weight:600;line-height:16px}.fnB0BW_findingSeverity_blocker{background:var(--fcg-danger-subtle);color:var(--fcg-danger)}.fnB0BW_findingSeverity_warning{background:var(--fcg-warn-subtle);color:var(--fcg-warn-label)}.fnB0BW_findingSeverity_info{background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary)}.fnB0BW_findingSeverity_unknown{background:var(--fcg-bg-tip);color:var(--fcg-text-tertiary)}@media (width<=520px){.fnB0BW_toggleGrid,.fnB0BW_tuningGrid{grid-template-columns:1fr}.fnB0BW_findingRow{grid-template-columns:auto minmax(0,1fr)}.fnB0BW_findingEngine{grid-column:2}}.fnB0BW_advisorFormGrid{gap:var(--fcg-space-3);margin-top:var(--fcg-space-3);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.fnB0BW_advisorField{min-width:0;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_advisorField>span{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:16px}.fnB0BW_advisorField .fnB0BW_advisorModelTrigger{height:100%}.fnB0BW_advisorModelTrigger{align-content:center;gap:2px;display:grid}.fnB0BW_advisorModelTrigger strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);text-overflow:ellipsis;white-space:nowrap;font-weight:600;line-height:18px;overflow:hidden}.fnB0BW_advisorFoot{justify-content:space-between;align-items:flex-end;gap:var(--fcg-space-3);margin-top:var(--fcg-space-4);flex-wrap:wrap;display:flex}.fnB0BW_advisorFoot .fnB0BW_advisorEvidence{flex:320px;margin-top:0}.fnB0BW_advisorFoot .fnB0BW_buttonPrimary{flex:none}@media (width<=520px){.fnB0BW_advisorFormGrid{grid-template-columns:1fr}.fnB0BW_advisorFoot{flex-direction:column;align-items:stretch}.fnB0BW_advisorFoot .fnB0BW_buttonPrimary{width:100%}}.fnB0BW_engineeringHeader{justify-content:space-between;align-items:flex-start;gap:var(--fcg-space-3);display:flex}.fnB0BW_engineeringHeader>div:first-child{gap:3px;min-width:0;display:grid}.fnB0BW_engineeringHeader strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg)}.fnB0BW_engineeringHeader small{max-width:620px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_engineeringKicker{color:var(--fcg-text-tertiary);letter-spacing:.08em;font-size:11px;font-weight:650}.fnB0BW_engineeringSummary{margin-top:var(--fcg-space-2);flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_engineeringSummary span{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:3px 9px}.fnB0BW_engineeringSummary b{color:var(--fcg-text-primary)}.fnB0BW_actionMenu{position:relative}.fnB0BW_actionMenu summary{list-style:none}.fnB0BW_actionMenu summary::-webkit-details-marker{display:none}.fnB0BW_actionMenuPop{z-index:4;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);min-width:150px;box-shadow:var(--fcg-shadow-2);gap:4px;padding:6px;display:grid;position:absolute;top:calc(100% + 5px);right:0}.fnB0BW_actionMenuPop .fnB0BW_button{background:0 0;border-color:#0000;justify-content:flex-start}.fnB0BW_actionMenuPop .fnB0BW_button:hover{background:var(--fcg-bg-hover)}.fnB0BW_engineeringComposer{gap:var(--fcg-space-2);margin-top:var(--fcg-space-3);padding:var(--fcg-space-3);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);grid-template-columns:minmax(0,1fr) auto;display:grid}.fnB0BW_engineeringComposer .fnB0BW_input{min-width:0}@media (width<=520px){.fnB0BW_engineeringHeader{flex-direction:column}.fnB0BW_engineeringComposer{grid-template-columns:1fr}}.fnB0BW_composerLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin-bottom:5px;font-weight:600;line-height:16px;display:block}.fnB0BW_engineeringComposer>div{min-width:0}.fnB0BW_engineeringComposer>div:first-child,.fnB0BW_engineeringComposer>div:nth-child(2){align-content:start;display:grid}.fnB0BW_pricingTable .fnB0BW_priceFree{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-success) 14%, transparent);color:var(--fcg-success);font-size:var(--fcg-font-caption);letter-spacing:.04em;padding:1px 7px;font-weight:700}.fnB0BW_paymentNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 38%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 7%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:flex-start;gap:10px;margin-top:14px;padding:10px 12px;line-height:19px;display:flex}.fnB0BW_invoicePanel{border-top:1px solid var(--fcg-line);gap:12px;margin-top:20px;padding-top:18px;display:grid}.fnB0BW_invoiceHead{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.fnB0BW_invoiceOrders{gap:6px;display:grid}.fnB0BW_invoiceOrderRow{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);cursor:pointer;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 10px;display:grid}.fnB0BW_invoiceOrderText{gap:2px;min-width:0;display:grid}.fnB0BW_invoiceOrderText small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_invoiceForm{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;display:grid}.fnB0BW_invoiceForm label{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_invoiceForm .fnB0BW_input{min-width:0}.fnB0BW_invoiceActions{flex-wrap:wrap;gap:8px;display:flex}.fnB0BW_invoiceNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 38%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 7%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:8px 10px}.fnB0BW_invoicePreview{box-sizing:border-box;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:100%;color:var(--fcg-text-primary);font-family:var(--fcg-font-mono);font-size:var(--fcg-font-caption);resize:vertical;padding:10px 12px;line-height:18px}.fnB0BW_invoicePanel>.fnB0BW_sectionMeta{line-height:18px}body .fnB0BW_payDialog{border:2px solid var(--pixel-ink);background:var(--pixel-face);width:min(392px,100vw - 36px);box-shadow:6px 6px 0 0 var(--pixel-ink);border-radius:0;padding-bottom:20px}.fnB0BW_payDialog h2{color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg);letter-spacing:-.012em;margin:0;font-weight:800}.fnB0BW_payDialog h2+button{border:1px solid var(--pixel-ink);color:var(--pixel-ink);border-radius:0}.fnB0BW_payDialog h2+button:hover{background:var(--pixel-recess)}.fnB0BW_payDialogBody{gap:12px;display:grid}.fnB0BW_payDialogHead{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);gap:3px;padding:12px;display:grid}.fnB0BW_payDialogLabel{color:var(--fcg-brand);font-family:var(--fcg-font-mono);letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:700}.fnB0BW_payDialogAmount{color:var(--fcg-text-primary);letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:27px;font-weight:800;line-height:34px}.fnB0BW_payDialogMeta{flex-wrap:wrap;align-items:center;gap:8px;margin-top:5px;display:flex}.fnB0BW_payDialogCredit{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_payDialogCredit strong{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;font-weight:700}.fnB0BW_payDialogState{border:1px solid var(--pixel-ink);background:var(--pixel-face);color:var(--fcg-text-secondary);font-family:var(--fcg-font-mono);letter-spacing:.06em;white-space:nowrap;clip-path:var(--pixel-chip);margin-left:auto;padding:2px 9px;font-size:10px;font-weight:700}.fnB0BW_payDialogSlot{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);justify-items:start;gap:10px;padding:12px;display:grid}.fnB0BW_payDialogQr{text-align:center;justify-items:center}.fnB0BW_payDialogSlot .fnB0BW_paymentNotice{border-width:2px;border-radius:0;margin-top:0}.fnB0BW_payDialogSlot .fnB0BW_payDialogElement{width:100%;min-height:0}.fnB0BW_payDialogPaid{border:2px solid color-mix(in srgb, var(--fcg-success) 42%, var(--pixel-ink));background:color-mix(in srgb, var(--fcg-success) 10%, var(--pixel-face));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:10px 12px}.fnB0BW_payDialogNote{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px;display:block}.fnB0BW_payDialogFooter{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.fnB0BW_payDialogFooter .fnB0BW_button,.fnB0BW_payDialogSlot .fnB0BW_button{border:2px solid var(--pixel-ink);background:var(--pixel-face);min-height:40px;color:var(--fcg-text-primary);letter-spacing:.04em;box-shadow:0 3px 0 0 var(--pixel-ink);transition:background var(--fcg-fast) var(--fcg-ease), box-shadow 60ms linear, transform 60ms linear;border-radius:0;font-weight:700}.fnB0BW_payDialogFooter .fnB0BW_button:hover:not(:disabled),.fnB0BW_payDialogSlot .fnB0BW_button:hover:not(:disabled){background:var(--pixel-recess)}.fnB0BW_payDialogFooter .fnB0BW_button:active:not(:disabled),.fnB0BW_payDialogSlot .fnB0BW_button:active:not(:disabled){box-shadow:0 0 0 0 var(--pixel-ink);transform:translateY(3px)}.fnB0BW_payDialogFooter .fnB0BW_buttonPrimary,.fnB0BW_payDialogSlot .fnB0BW_buttonPrimary{border-color:var(--pixel-ink);background:var(--fcg-brand);color:var(--fcg-text-on-brand-fixed);box-shadow:inset 0 2px 0 0 #ffffff61, 0 3px 0 0 var(--pixel-ink)}.fnB0BW_payDialogFooter .fnB0BW_buttonPrimary:hover:not(:disabled),.fnB0BW_payDialogSlot .fnB0BW_buttonPrimary:hover:not(:disabled){border-color:var(--pixel-ink);background:var(--fcg-brand-strong);box-shadow:inset 0 2px 0 0 #ffffff7a, 0 4px 0 0 var(--pixel-ink)}.fnB0BW_payDialogFooter .fnB0BW_buttonDanger{color:var(--fcg-danger)}.fnB0BW_payDialogFooter .fnB0BW_button:focus-visible,.fnB0BW_payDialogSlot .fnB0BW_button:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 26%, transparent), 0 3px 0 0 var(--pixel-ink);outline:none}.fnB0BW_planReviewBody{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);max-height:300px;display:grid;overflow:auto}.fnB0BW_planReviewLine{width:100%;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);text-align:left;background:0 0;border:0;grid-template-columns:44px minmax(0,1fr);gap:8px;padding:2px 10px;line-height:18px;display:grid}.fnB0BW_planReviewLine:hover{background:var(--fcg-bg-hover)}.fnB0BW_planReviewLineSelected{background:var(--fcg-bg-active)}.fnB0BW_planReviewLineNumber{color:var(--fcg-text-tertiary);font-family:var(--fcg-font-mono);text-align:right}.fnB0BW_planReviewLineText{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.fnB0BW_planReviewRemark{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:8px;padding:10px 11px;display:grid}.fnB0BW_pickerVisibilityPanel{gap:var(--fcg-space-2);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);padding:12px;display:grid}.fnB0BW_pickerVisibilityPanel[data-open=false]{padding:9px 12px}.fnB0BW_pickerVisibilityToggle{width:100%;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:0;display:flex}.fnB0BW_pickerVisibilityToggle:hover{color:var(--fcg-text-primary)}.fnB0BW_pickerVisibilityToggle:focus-visible{border-radius:var(--fcg-radius-sm);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_pickerVisibilityGear{flex:none;align-items:center;display:inline-flex}.fnB0BW_pickerVisibilityToggleLabel{min-width:0;font-size:var(--fcg-font-caption);flex:auto;font-weight:620;line-height:18px}.fnB0BW_pickerVisibilityBadge{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:var(--fcg-text-tertiary);flex:none;padding:0 6px;font-size:10px;font-style:normal;font-weight:600;line-height:16px}.fnB0BW_pickerVisibilityChevron{flex:none;align-items:center;transition:transform .12s;display:inline-flex}.fnB0BW_pickerVisibilityToggle[aria-expanded=true] .fnB0BW_pickerVisibilityChevron{transform:rotate(180deg)}.fnB0BW_pickerVisibilityMaster{cursor:pointer;align-items:center;gap:10px;display:flex}.fnB0BW_pickerVisibilityText{gap:2px;min-width:0;display:grid}.fnB0BW_pickerVisibilityText strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);font-weight:620;line-height:18px}.fnB0BW_pickerVisibilityText small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:17px}.fnB0BW_pickerVisibilityHead{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:10px;display:flex}.fnB0BW_pickerVisibilityLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_pickerVisibilityActions{align-items:center;gap:10px;display:flex}.fnB0BW_pickerVisibilityLink{color:var(--fcg-brand);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;padding:0;line-height:18px}.fnB0BW_pickerVisibilityLink:hover{text-decoration:underline}.fnB0BW_pickerVisibilityLink:focus-visible{border-radius:var(--fcg-radius-sm);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_pickerVisibilityList{scrollbar-color:var(--fcg-line-strong) transparent;scrollbar-width:thin;gap:2px;max-height:224px;display:grid;overflow-y:auto}.fnB0BW_pickerVisibilityList[data-visible=false]{opacity:.5}.fnB0BW_pickerVisibilityRow{border-radius:var(--fcg-radius-sm);cursor:pointer;align-items:center;gap:8px;min-width:0;padding:4px 6px;display:flex}.fnB0BW_pickerVisibilityRow:hover{background:var(--fcg-bg-layer-2)}.fnB0BW_pickerVisibilityCheck{width:14px;height:14px;accent-color:var(--fcg-brand);cursor:pointer;flex:none;margin:0}.fnB0BW_pickerVisibilityName{min-width:0;color:var(--fcg-text-secondary);font-family:var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:11px;line-height:18px;overflow:hidden}.fnB0BW_pickerVisibilityPaid{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-danger) 12%, transparent);color:var(--fcg-danger);flex:none;padding:0 6px;font-size:10px;font-style:normal;font-weight:700;line-height:16px}.fnB0BW_pickerVisibilityFree{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-success) 12%, transparent);color:var(--fcg-success);flex:none;padding:0 6px;font-size:10px;font-style:normal;font-weight:700;line-height:16px}.fnB0BW_pickerVisibilityEmpty{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}";
18068
- const tagId$5 = "freecodego/settings-tab.module.css";
18069
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
18267
+ const css$6 = ".fnB0BW_root{box-sizing:border-box;width:100%;min-width:0;max-width:100%;color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg);overflow:hidden}.fnB0BW_toolbar{border-bottom:1px solid var(--fcg-line);justify-content:space-between;align-items:center;gap:12px;min-height:44px;padding:0 0 12px;display:flex}.fnB0BW_toolbarTitle{min-width:0}.fnB0BW_kicker{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);letter-spacing:.08em;text-transform:uppercase;font-weight:600;line-height:18px}.fnB0BW_title{font-size:var(--fcg-font-section);margin:1px 0 0;font-weight:600;line-height:24px}.fnB0BW_toolbarAction,.fnB0BW_button{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);min-height:32px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;transition:background var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);justify-content:center;align-items:center;padding:5px 13px;line-height:18px;text-decoration:none;display:inline-flex}.fnB0BW_toolbarAction:hover,.fnB0BW_button:hover{background:var(--fcg-bg-hover)}.fnB0BW_button:disabled{cursor:not-allowed;opacity:.45}.fnB0BW_button:focus-visible,.fnB0BW_toolbarAction:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_buttonPrimary:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-btn-primary-fill) 30%, transparent)}.fnB0BW_buttonPrimary{background:var(--fcg-btn-primary-fill);color:var(--fcg-text-on-brand);border-color:#0000}.fnB0BW_buttonPrimary:hover:not(:disabled){background:var(--fcg-btn-primary-hover);border-color:#0000}.fnB0BW_buttonPrimary:hover{background:var(--fcg-btn-primary-hover)}.fnB0BW_buttonDanger{color:var(--fcg-danger)}.fnB0BW_loading,.fnB0BW_error{color:var(--fcg-text-tertiary);padding:18px 0}.fnB0BW_error{color:var(--fcg-danger)}.fnB0BW_syncNotice{border:1px solid color-mix(in srgb, var(--fcg-brand) 24%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-brand) 6%, var(--fcg-bg-layer-1));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:10px;margin:14px 0 0;padding:10px 14px;line-height:18px;display:flex}.fnB0BW_syncNoticeOffline{border-color:color-mix(in srgb, var(--fcg-warn-label) 34%, var(--fcg-line));background:color-mix(in srgb, var(--fcg-warn-label) 7%, var(--fcg-bg-layer-1));color:var(--fcg-warn-label)}.fnB0BW_syncDot{border-radius:var(--fcg-radius-full);background:var(--fcg-brand);flex:none;width:7px;height:7px;animation:1.25s ease-in-out infinite fnB0BW_sync-pulse}.fnB0BW_syncNoticeOffline .fnB0BW_syncDot{background:var(--fcg-warn-label);animation:none}@keyframes fnB0BW_sync-pulse{50%{opacity:.38;transform:scale(.8)}}.fnB0BW_sections{gap:0;display:grid}.fnB0BW_pageTabs{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-tip);gap:4px;margin:0 0 14px;padding:3px;display:flex}.fnB0BW_pageTab{min-height:30px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);transition:background var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);background:0 0;border:0;border-radius:5px;flex:1;padding:5px 10px}.fnB0BW_pageTabActive{background:var(--fcg-bg-layer-2);color:var(--fcg-text-primary);box-shadow:var(--fcg-shadow-1);font-weight:600}.fnB0BW_modelCategoryActions{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;width:100%;margin-top:8px;display:grid}.fnB0BW_modelCategoryActions .fnB0BW_select{width:100%;min-width:0}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions){align-items:start}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions)>.fnB0BW_pageTabs{box-sizing:border-box;grid-column:2;width:100%;margin:0}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions)>.fnB0BW_select{grid-area:2/1;width:100%}.fnB0BW_routingCell:has(.fnB0BW_modelCategoryActions)>.fnB0BW_modelCategoryActions{grid-area:2/2;margin-top:0}.fnB0BW_modelCategoryActions .fnB0BW_button{min-height:42px}.fnB0BW_community{min-width:0;padding:4px 0 17px}.fnB0BW_communityHeader{border-bottom:1px solid var(--fcg-line);justify-content:space-between;align-items:flex-start;gap:12px;padding:13px 0 14px;display:flex}.fnB0BW_communityIntro{max-width:520px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin:5px 0 0;line-height:18px}.fnB0BW_communityFilterBar{justify-content:space-between;align-items:center;gap:12px;padding:12px 0 2px;display:flex}.fnB0BW_communityFilters{scrollbar-width:none;gap:6px;min-width:0;display:flex;overflow-x:auto}.fnB0BW_communityFilter{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);min-height:28px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;padding:4px 10px}.fnB0BW_communityFilter:hover{background:var(--fcg-bg-hover)}.fnB0BW_communityFilterActive{border-color:var(--fcg-text-primary);background:var(--fcg-text-primary);color:var(--fcg-bg-layer-2)}.fnB0BW_communityInstalledEntry{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);min-height:30px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;flex:none;padding:5px 10px;font-weight:600}.fnB0BW_communityInstalledEntry:hover{background:var(--fcg-bg-hover)}.fnB0BW_communityInstalledEntryActive{border-color:var(--fcg-text-primary);background:var(--fcg-text-primary);color:var(--fcg-bg-layer-2)}.fnB0BW_capabilityCommunity{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);margin-top:12px;padding:14px}.fnB0BW_capabilityCommunityHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.fnB0BW_capabilityCommunityGrid{grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:9px;margin-top:11px;display:grid}.fnB0BW_marketplaceGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:11px;margin-top:13px;display:grid}.fnB0BW_capabilityCommunityCard{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:8px;min-width:0;padding:12px 14px;display:grid}.fnB0BW_capabilityCommunityCard strong{font-size:var(--fcg-font-body)}.fnB0BW_capabilityCommunityCard p{min-height:36px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin:0;line-height:18px}.fnB0BW_capabilityCommunityCard small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_capabilityCommunityCard .fnB0BW_button{width:100%;margin-top:2px}.fnB0BW_capabilityCommunityTop{justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_capabilityCommunityKind{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);letter-spacing:.07em;font-weight:700}.fnB0BW_marketplaceIdentity{align-items:center;gap:6px;min-width:0;display:inline-flex}.fnB0BW_capabilityIcon{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);width:28px;height:28px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);object-fit:cover;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex;overflow:hidden}.fnB0BW_capabilityIconMcp{border-color:color-mix(in srgb, var(--fcg-brand) 35%, var(--fcg-line));background:color-mix(in srgb, var(--fcg-brand) 11%, var(--fcg-bg-layer-1));color:var(--fcg-brand)}.fnB0BW_marketplaceControls{grid-template-columns:minmax(0,1fr) minmax(140px,.4fr);gap:8px;margin-top:12px;display:grid}.fnB0BW_marketplaceLink{appearance:none;cursor:pointer;font:inherit;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);background:0 0;border:0;padding:0;text-decoration:none}.fnB0BW_marketplaceLink:hover{color:var(--fcg-text-primary);text-decoration:underline}.fnB0BW_marketplacePagination{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:center;align-items:center;gap:10px;margin-top:13px;display:flex}.fnB0BW_communitySearch{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;margin-top:12px;display:grid}.fnB0BW_communityGrid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;padding-top:14px;display:grid}.fnB0BW_communityCard{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);cursor:pointer;min-width:0;transition:border-color var(--fcg-fast) var(--fcg-ease), transform var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease);flex-direction:column;gap:9px;padding:12px;display:flex}.fnB0BW_communityCard:hover,.fnB0BW_communityCard:focus-visible{border-color:var(--fcg-line-strong);box-shadow:var(--fcg-shadow-2);outline:none;transform:translateY(-1px)}.fnB0BW_communityCardTop{align-items:center;gap:8px;min-width:0;display:flex}img.fnB0BW_communityPluginIcon{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);object-fit:cover;flex:none;width:34px;height:34px;display:block;overflow:hidden}.fnB0BW_communityIdentity{gap:1px;min-width:0;display:grid}.fnB0BW_communityIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-body);overflow:hidden}.fnB0BW_communityIdentity small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_communityCategory{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-left:auto;padding:2px 6px}.fnB0BW_communityDescription{min-height:54px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;line-height:18px;display:-webkit-box;overflow:hidden}.fnB0BW_communityFeatures,.fnB0BW_communityFeatureList{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_communityStats{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);gap:10px;display:flex}.fnB0BW_communityState{color:var(--fcg-success);font-size:var(--fcg-font-caption);font-weight:600}.fnB0BW_communityIncompatible{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);min-height:30px;color:var(--fcg-warn-label);font-size:var(--fcg-font-caption);padding:5px 8px;line-height:18px}.fnB0BW_communityInstall{width:100%;margin-top:auto}.fnB0BW_communityProgress{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_communityRestart{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 6%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:center;gap:10px;margin-top:12px;padding:10px 11px;line-height:18px;display:flex}.fnB0BW_communityFootnote{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:13px;line-height:18px;display:block}.fnB0BW_communityModalBackdrop{z-index:20;background:#0f172a61;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.fnB0BW_communityModal{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-2);width:min(760px,100%);min-width:0;max-height:min(820px,92vh);box-shadow:var(--fcg-shadow-pop);flex-direction:column;gap:12px;padding:18px;display:flex;overflow:hidden}.fnB0BW_communityModalHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.fnB0BW_communityModalTitle{font-size:var(--fcg-font-section);margin:2px 0 0;line-height:25px}.fnB0BW_communityModalOwner{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_communityModalSummary{color:var(--fcg-text-secondary);font-size:var(--fcg-font-body);margin:0;line-height:20px}.fnB0BW_communityModalHeader img.fnB0BW_communityPluginIcon{width:40px;height:40px;margin-top:8px}.fnB0BW_communityModalStats{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);align-items:center;gap:12px;display:flex}.fnB0BW_communityModalStats a{color:var(--fcg-text-primary)}.fnB0BW_communityReadme{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);min-height:180px;overflow:auto}.fnB0BW_communityReadme pre{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/19px var(--fcg-font-mono);margin:0;padding:13px}.fnB0BW_communityModalFooter{justify-content:flex-end;gap:8px;display:flex}.fnB0BW_section{border-bottom:1px solid var(--fcg-line-subtle);min-width:0;padding:24px 0}.fnB0BW_section:last-child{border-bottom:0}.fnB0BW_sectionHeader{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.fnB0BW_sectionName{font-size:var(--fcg-font-body-lg);letter-spacing:-.01em;font-weight:650;line-height:20px}.fnB0BW_sectionMeta{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_badge{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:3px 8px;line-height:18px}.fnB0BW_badgeLive{color:var(--fcg-success)}.fnB0BW_badgeDanger{color:var(--fcg-danger)}.fnB0BW_inspectStatus{background:0 0;align-self:start}.fnB0BW_diagnosticsDump{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);max-height:240px;color:var(--fcg-text-secondary);font-family:var(--fcg-font-mono);font-size:var(--fcg-font-caption);white-space:pre-wrap;overflow-wrap:anywhere;margin:4px 0 0;padding:8px 10px;line-height:18px;overflow:auto}.fnB0BW_grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;display:grid}.fnB0BW_routingGrid{grid-template-columns:1fr;gap:8px}.fnB0BW_routingCell{grid-template-columns:minmax(150px,.7fr) minmax(0,1fr);align-items:center;gap:18px;min-height:0;padding:12px 14px;display:grid}.fnB0BW_routingCell.fnB0BW_selectCell{grid-template-rows:none;align-content:normal}.fnB0BW_routingCell .fnB0BW_select{min-height:42px}.fnB0BW_routingCopy{gap:2px;min-width:0;display:grid}.fnB0BW_routingCell:not(.fnB0BW_selectCell) .fnB0BW_routingCopy{grid-column:1/-1;grid-template-columns:minmax(150px,.7fr) auto minmax(0,1fr);align-items:center;gap:10px}.fnB0BW_routingCell:not(.fnB0BW_selectCell) .fnB0BW_cellHint{margin-top:0}.fnB0BW_infoCell{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);min-width:0;padding:14px}.fnB0BW_cellLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-bottom:4px;display:block}.fnB0BW_cellValue{text-overflow:ellipsis;white-space:nowrap;font-weight:500;display:block;overflow:hidden}.fnB0BW_cellHint{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:3px;display:block}.fnB0BW_feedbackRow{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px 18px;display:flex}.fnB0BW_feedbackRow>.fnB0BW_routingCopy{flex:220px}.fnB0BW_telegramLink{flex:none;gap:7px;text-decoration:none}.fnB0BW_telegramIcon{flex:none;display:block}.fnB0BW_selectCell{gap:5px;display:grid}.fnB0BW_select,.fnB0BW_input{box-sizing:border-box;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);width:100%;min-width:0;color:var(--fcg-text-primary);font:inherit;font-size:var(--fcg-font-body);transition:border-color var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease);outline:none;padding:8px 11px}.fnB0BW_select:hover,.fnB0BW_input:hover{border-color:var(--fcg-line-strong)}.fnB0BW_select:focus,.fnB0BW_input:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_accountList{flex-direction:column;gap:8px;display:flex}.fnB0BW_accountManager{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:10px;margin-top:10px;padding:14px;display:grid}.fnB0BW_extensionList{gap:6px;margin-top:14px;display:grid}.fnB0BW_extensionRow{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);cursor:pointer;justify-content:space-between;align-items:center;gap:16px;padding:11px 12px;display:flex}.fnB0BW_extensionRow span{gap:3px;min-width:0;display:grid}.fnB0BW_extensionRow small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_engineSelect{cursor:pointer;flex:none;width:216px}.fnB0BW_switch{-webkit-appearance:none;appearance:none;border:1px solid var(--fcg-line-strong);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-tip);cursor:pointer;width:36px;height:20px;transition:background var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease);outline:none;flex:none;margin:0;position:relative}.fnB0BW_switch:before{content:\"\";corner-shape:round;background:var(--fcg-bg-layer-2);width:14px;height:14px;box-shadow:var(--fcg-shadow-1);transition:transform var(--fcg-fast) var(--fcg-ease);border-radius:50%;position:absolute;top:2px;left:2px}.fnB0BW_switch:checked{border-color:var(--fcg-brand);background:var(--fcg-brand)}.fnB0BW_switch:checked:before{transform:translate(16px)}.fnB0BW_switch:hover:not(:disabled){border-color:var(--fcg-brand)}.fnB0BW_switch:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent)}.fnB0BW_switch:disabled{cursor:not-allowed;opacity:.45}.fnB0BW_capabilityForm{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:12px;padding:14px;display:grid}.fnB0BW_capabilityForm label{min-width:0;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_capabilityFormHead{grid-column:1/-1;justify-content:space-between;align-items:center;gap:10px;display:flex}.fnB0BW_capabilityFull{grid-column:1/-1}.fnB0BW_skillList{gap:8px;margin-top:12px;display:grid}.fnB0BW_capabilityStats{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_capabilityStats div{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);gap:2px;padding:12px 14px;display:grid}.fnB0BW_capabilityStats strong{font-size:var(--fcg-font-section);line-height:21px}.fnB0BW_capabilityStats small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_advisorStandalone{padding-top:2px}.fnB0BW_engineeringSection .fnB0BW_capabilityStats{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.fnB0BW_advisorStats{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_advisorStats div{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);gap:3px;min-width:0;padding:12px 14px;display:grid}.fnB0BW_advisorStats strong{font-size:var(--fcg-font-body-lg);text-overflow:ellipsis;white-space:nowrap;line-height:20px;overflow:hidden}.fnB0BW_advisorStats small,.fnB0BW_advisorEvidence small{overflow-wrap:anywhere;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_advisorWarning{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 6%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin-top:10px;padding:9px 11px;line-height:18px}.fnB0BW_advisorEvidence{border-left:2px solid var(--fcg-text-primary);background:var(--fcg-bg-layer-1);gap:3px;margin-top:12px;padding:10px 11px;display:grid}.fnB0BW_advisorEvidence strong{font-size:var(--fcg-font-caption)}.fnB0BW_advisorEvidence span{color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/16px var(--fcg-font-mono)}.fnB0BW_advisorModelField{min-width:0;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_advisorModelTrigger{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:100%;min-height:42px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;gap:2px;padding:8px 9px;display:grid;overflow:hidden}.fnB0BW_advisorModelTrigger:hover{border-color:var(--fcg-line-strong)}.fnB0BW_advisorModelTrigger:disabled{cursor:not-allowed;opacity:.55}.fnB0BW_advisorModelTrigger small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_advisorPickerBackdrop{z-index:30;background:#0f172a61;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.fnB0BW_advisorPicker{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-2);width:min(680px,100%);height:min(720px,92vh);box-shadow:var(--fcg-shadow-pop);grid-template-rows:auto auto minmax(0,1fr) auto;gap:11px;padding:17px;display:grid;overflow:hidden}.fnB0BW_advisorPickerHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.fnB0BW_advisorPickerHeader>div{gap:3px;display:grid}.fnB0BW_advisorPickerHeader strong{font-size:16px}.fnB0BW_advisorPickerHeader small,.fnB0BW_advisorManual>small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_advisorModelList{overscroll-behavior:contain;scrollbar-gutter:stable;gap:7px;min-height:0;padding-right:6px;display:grid;overflow:hidden auto}.fnB0BW_advisorModelOption{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);width:100%;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;justify-content:space-between;align-items:center;gap:14px;padding:11px 12px;display:flex}.fnB0BW_advisorModelOption:hover{border-color:var(--fcg-line-strong);background:var(--fcg-bg-layer-2)}.fnB0BW_advisorModelSelected{border-color:var(--fcg-brand);background:var(--fcg-bg-layer-2);box-shadow:inset 0 0 0 1px var(--fcg-brand)}.fnB0BW_advisorModelOption>span{gap:2px;min-width:0;display:grid}.fnB0BW_advisorModelOption small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_advisorModelOption code{max-width:45%;color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/16px var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_advisorManual{border-top:1px solid var(--fcg-line);gap:6px;padding-top:10px;display:grid}.fnB0BW_advisorManual summary{cursor:pointer;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_advisorNotes{gap:8px;margin-top:12px;display:grid}.fnB0BW_advisorNote{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:7px;padding:14px;display:grid}.fnB0BW_advisorNoteHeader{justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_advisorNoteHeader small,.fnB0BW_advisorNote footer{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_advisorNote p{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:18px}.fnB0BW_advisorSeverity{border-radius:var(--fcg-radius-full);width:fit-content;font-size:var(--fcg-font-caption);letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;font-weight:700;display:inline-flex}.fnB0BW_advisorSeverityNit{background:var(--fcg-bg-hover);color:var(--fcg-text-secondary)}.fnB0BW_advisorSeverityConcern{background:color-mix(in srgb, var(--fcg-warn) 13%, var(--fcg-bg-layer-2));color:var(--fcg-warn-label)}.fnB0BW_advisorSeverityBlocker{background:color-mix(in srgb, var(--fcg-danger) 11%, var(--fcg-bg-layer-2));color:var(--fcg-danger)}.fnB0BW_memoryPanel{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:12px;margin-top:16px;padding:14px;display:grid}.fnB0BW_memoryHeader,.fnB0BW_memoryDetailHeader{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.fnB0BW_memoryHeader>div:first-child,.fnB0BW_memoryDetailHeader>div{gap:3px;min-width:0;display:grid}.fnB0BW_memoryHeader strong,.fnB0BW_memoryDetailHeader strong{font-size:var(--fcg-font-body)}.fnB0BW_memoryHeader small,.fnB0BW_memoryDetailHeader small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_memoryActions,.fnB0BW_memoryRecordActions{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:6px;display:flex}.fnB0BW_memoryActions .fnB0BW_button,.fnB0BW_memoryRecordActions .fnB0BW_button{min-height:26px;font-size:var(--fcg-font-caption);padding:3px 8px}.fnB0BW_memorySearchRow{align-items:center;gap:7px;display:flex}.fnB0BW_memorySearchRow .fnB0BW_input{flex:auto}.fnB0BW_memorySearchRow .fnB0BW_button{min-height:30px;font-size:var(--fcg-font-caption);flex:none;padding:4px 10px}.fnB0BW_memoryRecall{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:6px;padding:9px 11px;display:grid}.fnB0BW_memoryRecallHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.fnB0BW_memoryRecallHead span{gap:2px;min-width:0;display:grid}.fnB0BW_memoryRecallHead small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_memoryRecallHead .fnB0BW_button{min-height:24px;font-size:var(--fcg-font-caption);flex:none;padding:2px 8px}.fnB0BW_memoryRecallList{flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_memoryRecallList span{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:3px 9px}.fnB0BW_memoryList{gap:7px;max-height:360px;padding-right:3px;display:grid;overflow:auto}.fnB0BW_memoryRecord{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:10px 12px;display:grid}.fnB0BW_memoryRecordSelected{box-shadow:inset 0 0 0 1px var(--fcg-brand)}.fnB0BW_memoryRecordSelect{min-width:0;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:8px;padding:0;display:flex}.fnB0BW_memoryRecordSelect:disabled{cursor:not-allowed;opacity:.6}.fnB0BW_memoryRecordSelect>span{gap:3px;min-width:0;display:grid}.fnB0BW_memoryRecordSelect strong,.fnB0BW_memoryRecordSelect small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_memoryRecordSelect strong{font-size:var(--fcg-font-caption)}.fnB0BW_memoryRecordSelect small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_memoryTrust{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);flex:none;padding:2px 6px;font-weight:600}.fnB0BW_memoryTrustReviewed{background:color-mix(in srgb, var(--fcg-success) 12%, var(--fcg-bg-layer-2));color:var(--fcg-success)}.fnB0BW_memoryTrustDraft{background:color-mix(in srgb, var(--fcg-warn) 13%, var(--fcg-bg-layer-2));color:var(--fcg-warn-label)}.fnB0BW_memoryDetail{border:1px solid color-mix(in srgb, var(--fcg-text-primary) 18%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:9px;padding:11px;display:grid}.fnB0BW_memoryDetail p{max-height:240px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;line-height:19px;overflow:auto}.fnB0BW_memoryTags{flex-wrap:wrap;gap:5px;display:flex}.fnB0BW_memoryTags span{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);padding:2px 6px}.fnB0BW_memoryTimeline{border-top:1px solid var(--fcg-line);gap:5px;padding-top:9px;display:grid}.fnB0BW_memoryTimeline strong{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_memoryTimeline button{color:var(--fcg-text-tertiary);cursor:pointer;font:var(--fcg-font-caption)/16px var(--fcg-font-mono);text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;padding:0;overflow:hidden}.fnB0BW_memoryTimeline button:hover,.fnB0BW_memoryTimelineCurrent{color:var(--fcg-text-primary)!important}.fnB0BW_graphPanel{border:1px solid color-mix(in srgb, var(--fcg-brand) 24%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:linear-gradient(135deg, color-mix(in srgb, var(--fcg-brand) 5%, var(--fcg-bg-layer-2)), var(--fcg-bg-layer-1));gap:10px;margin-top:14px;padding:12px;display:grid}.fnB0BW_graphState{border-left:2px solid var(--fcg-brand);background:var(--fcg-bg-layer-2);gap:3px;padding:10px 11px;display:grid}.fnB0BW_graphState strong{font-size:var(--fcg-font-caption)}.fnB0BW_graphState small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_graphInstallList{gap:8px;display:grid}.fnB0BW_graphInstallRow{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.fnB0BW_graphInstallRow>div{flex:1;gap:4px;min-width:0;display:grid}.fnB0BW_graphInstallRow strong{font-size:var(--fcg-font-caption)}.fnB0BW_graphInstallRow small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_graphInstallRow .fnB0BW_input{margin-top:4px}.fnB0BW_verificationGrid{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:7px;display:grid}.fnB0BW_verificationGrid article{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:4px;min-width:0;padding:10px 12px;display:grid}.fnB0BW_verificationGrid strong{font-size:var(--fcg-font-caption);text-transform:uppercase}.fnB0BW_verificationGrid small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_verificationGrid pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:120px;color:var(--fcg-text-secondary);font:var(--fcg-font-caption)/19px var(--fcg-font-mono);margin:0;overflow:auto}.fnB0BW_mcpTemplateBar{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);align-items:center;gap:7px;margin-top:12px;display:flex}.fnB0BW_templateButton{border:1px dashed var(--fcg-line-strong);border-radius:var(--fcg-radius-sm);min-height:26px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;align-items:center;gap:4px;padding:3px 8px;display:inline-flex}.fnB0BW_templateButton:hover{border-style:solid;border-color:var(--fcg-text-primary);color:var(--fcg-text-primary)}.fnB0BW_mcpPresetHeading{justify-content:space-between;align-items:baseline;gap:10px;margin-top:14px;display:flex}.fnB0BW_mcpPresetHeading strong{font-size:var(--fcg-font-caption)}.fnB0BW_mcpPresetHeading small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_mcpPresetGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_mcpPresetCard{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:linear-gradient(135deg, var(--fcg-bg-layer-2), var(--fcg-bg-layer-1));min-width:0;color:var(--fcg-text-primary);cursor:pointer;font:inherit;text-align:left;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:10px;display:grid}.fnB0BW_mcpPresetCard:hover{border-color:var(--fcg-line-strong);box-shadow:var(--fcg-shadow-1);transform:translateY(-1px)}.fnB0BW_mcpPresetCard:disabled{cursor:not-allowed;opacity:.55;transform:none}.fnB0BW_mcpPresetCard>span:not(.fnB0BW_mcpPresetIcon){gap:2px;min-width:0;display:grid}.fnB0BW_mcpPresetCard strong{font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_mcpPresetCard small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:18px;overflow:hidden}.fnB0BW_mcpPresetCard b{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:nowrap;font-weight:500}.fnB0BW_mcpPresetIcon,.fnB0BW_mcpServerIcon{border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-brand) 12%, var(--fcg-bg-layer-2));width:30px;height:30px;color:var(--fcg-brand);flex:none;place-items:center;display:grid}.fnB0BW_mcpServerIcon{width:32px;height:32px}.fnB0BW_mcpMarketplaceGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.fnB0BW_mcpMarketplaceCard{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:linear-gradient(135deg, var(--fcg-bg-layer-2), var(--fcg-bg-layer-1));grid-template-columns:auto minmax(0,1fr);gap:9px;min-width:0;padding:10px;display:grid}.fnB0BW_mcpMarketplaceIcon{object-fit:cover;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);flex:none;width:30px;height:30px}.fnB0BW_mcpMarketplaceCopy{gap:3px;min-width:0;display:grid}.fnB0BW_mcpMarketplaceCopy>div{justify-content:space-between;align-items:center;gap:6px;display:flex}.fnB0BW_mcpMarketplaceCopy strong,.fnB0BW_mcpMarketplaceCopy small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_mcpMarketplaceCopy strong{font-size:var(--fcg-font-caption)}.fnB0BW_mcpMarketplaceCopy span{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);flex:none;padding:2px 6px}.fnB0BW_mcpMarketplaceCopy small,.fnB0BW_mcpMarketplaceCopy em{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);font-style:normal;line-height:18px}.fnB0BW_mcpMarketplaceActions{grid-column:1/-1;justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_mcpMarketplaceActions a{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-decoration:none}.fnB0BW_mcpMarketplaceActions a:hover{color:var(--fcg-text-primary);text-decoration:underline}.fnB0BW_mcpMarketplaceActions .fnB0BW_button{min-height:27px;font-size:var(--fcg-font-caption);padding:3px 8px}.fnB0BW_mcpJsonPanel{border:1px solid color-mix(in srgb, var(--fcg-brand) 32%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:color-mix(in srgb, var(--fcg-brand) 4%, var(--fcg-bg-layer-1));gap:9px;margin-top:12px;padding:11px;display:grid}.fnB0BW_mcpJsonPanel .fnB0BW_capabilityFormHead{grid-template-columns:1fr auto;align-items:start;gap:4px 10px;display:grid}.fnB0BW_mcpJsonPanel .fnB0BW_capabilityFormHead small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);grid-column:1/-1;line-height:18px}.fnB0BW_mcpJsonInput{box-sizing:border-box;resize:vertical;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:100%;min-height:170px;color:var(--fcg-text-primary);font:var(--fcg-font-caption)/18px var(--fcg-font-mono);outline:none;padding:10px}.fnB0BW_mcpJsonInput:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_mcpServerList{gap:8px;margin-top:12px;display:grid}.fnB0BW_mcpServerCard{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);justify-content:space-between;align-items:center;gap:10px;min-width:0;padding:12px 14px;display:flex}.fnB0BW_mcpServerMain{gap:4px;min-width:0;display:grid}.fnB0BW_mcpServerMain>small{color:var(--fcg-text-tertiary);font:var(--fcg-font-caption)/16px var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_mcpServerTitle{align-items:center;gap:7px;min-width:0;display:flex}.fnB0BW_mcpServerTitle strong{text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-body);overflow:hidden}.fnB0BW_mcpServerActions{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:7px;display:flex}.fnB0BW_inlineSwitch{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:4px;display:inline-flex}.fnB0BW_inlineSwitch input{width:14px;height:14px;accent-color:var(--fcg-brand);cursor:pointer;margin:0}.fnB0BW_emptyCapability{border:1px dashed var(--fcg-line-strong);border-radius:var(--fcg-radius-md);color:var(--fcg-text-secondary);text-align:center;gap:4px;margin-top:12px;padding:18px 14px;display:grid}.fnB0BW_emptyCapability small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_skillPanel{gap:8px;margin-top:14px;padding-top:1px;display:grid}.fnB0BW_skillPanelHeader{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.fnB0BW_skillPanelHeader small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_skillCard{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);border:1px solid #0000;align-items:flex-start;gap:10px;padding:12px 14px;display:flex}.fnB0BW_skillCard:hover{border-color:var(--fcg-line);background:var(--fcg-bg-layer-2)}.fnB0BW_skillCardBody{min-width:0;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;flex:1;gap:4px;padding:0;display:grid}.fnB0BW_skillCardBody:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_skillCardControl{flex:none;justify-items:end;gap:2px;padding-top:2px;display:grid}.fnB0BW_skillCardToggle{color:var(--fcg-text-tertiary);cursor:pointer;font-size:var(--fcg-font-caption);white-space:nowrap;align-items:center;gap:6px;display:flex}.fnB0BW_skillCardToggle input{margin:0}.fnB0BW_skillCardClear{color:var(--fcg-brand);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;padding:0}.fnB0BW_skillCardClear:disabled{opacity:.5;cursor:default}.fnB0BW_skillDetailControl{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);flex-wrap:wrap;align-items:center;gap:4px 12px;margin-top:10px;padding:9px 12px;display:flex}.fnB0BW_skillDetailControl>small{flex-basis:100%}.fnB0BW_skillForward{margin-top:12px}.fnB0BW_skillForwardHead{gap:2px;margin-bottom:6px;display:grid}.fnB0BW_skillForwardHead strong{font-size:var(--fcg-font-caption)}.fnB0BW_skillForwardHead small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_skillCardHead{justify-content:space-between;align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_skillCard strong{font-size:var(--fcg-font-caption)}.fnB0BW_skillCard p{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin:0;line-height:18px}.fnB0BW_skillCard small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_skillFileBar{flex-wrap:wrap;gap:6px;margin:12px 0 0;display:flex}.fnB0BW_skillFileChip{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);max-width:100%;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;padding:4px 9px;overflow:hidden}.fnB0BW_skillFileChip:hover{background:var(--fcg-bg-hover);color:var(--fcg-text-primary)}.fnB0BW_skillFileChipActive{border-color:var(--fcg-brand);color:var(--fcg-text-primary)}.fnB0BW_skillFileChip:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_workbuddyHeaderActions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.fnB0BW_accountManagerButton{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);min-height:28px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);white-space:nowrap;padding:4px 9px}.fnB0BW_accountManagerButton:hover{background:var(--fcg-bg-hover);color:var(--fcg-text-primary)}.fnB0BW_accountRow{justify-content:space-between;align-items:center;gap:14px;min-width:0;display:flex}.fnB0BW_accountIdentity{min-width:0}.fnB0BW_accountIdentityWithAvatar{align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_accountText{min-width:0}.fnB0BW_accountAvatar{border-radius:var(--fcg-radius-md);border:1px solid #0000;flex:none;place-items:center;width:42px;height:42px;display:inline-grid;overflow:hidden;box-shadow:0 2px 8px #0f172a1a}.fnB0BW_accountAvatarRemote{border-color:var(--fcg-line);background:#fff}.fnB0BW_accountAvatarRemote img{object-fit:cover;width:100%;height:100%}.fnB0BW_accountAvatarMonogram{font-size:var(--fcg-font-section);letter-spacing:-.04em;font-weight:800;line-height:1}.fnB0BW_accountAvatarQq{color:#fff;background:linear-gradient(145deg,#38bdf8,#1263bd);border-color:#1688d8}.fnB0BW_accountAvatarGoogle{background:linear-gradient(145deg, var(--fcg-bg-layer-2), var(--fcg-bg-layer-1));color:#4285f4;text-shadow:1px 0 #ea4335,0 1px #34a853,-1px 0 #fbbc05;border-color:#d8dce5}.fnB0BW_accountAvatarGeneric{border-color:var(--fcg-line);background:var(--fcg-bg-layer-1);color:var(--fcg-text-tertiary)}.fnB0BW_accountAvatarGeneric svg{fill:currentColor;width:22px;height:22px}.fnB0BW_accountName{text-overflow:ellipsis;white-space:nowrap;font-weight:600;display:block;overflow:hidden}.fnB0BW_accountEmail{text-overflow:ellipsis;white-space:nowrap;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:3px;display:block;overflow:hidden}.fnB0BW_accountActions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:9px;display:flex}.fnB0BW_clineUsage{gap:7px;margin-top:4px;display:grid}.fnB0BW_clineUsageHead{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_clineUsageRow{grid-template-columns:84px minmax(0,1fr) 44px;align-items:center;gap:10px;display:grid}.fnB0BW_clineUsageLabel{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-caption);overflow:hidden}.fnB0BW_clineUsageValue{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;text-align:right}.fnB0BW_clineUsageMeter{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);height:4px;overflow:hidden}.fnB0BW_clineUsageFill{border-radius:inherit;background:var(--fcg-brand);height:100%;transition:width .3s}.fnB0BW_clineUsageFillHigh{background:var(--fcg-warn)}.fnB0BW_balance{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:var(--fcg-success);font-size:var(--fcg-font-body-lg);font-variant-numeric:tabular-nums;align-items:baseline;gap:7px;padding:5px 11px;font-weight:600;display:inline-flex}.fnB0BW_balanceLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);font-weight:500}.fnB0BW_authForm{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px;display:grid}.fnB0BW_authPanel{box-sizing:border-box;border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-1);width:100%;box-shadow:var(--fcg-shadow-2);gap:16px;padding:26px 24px 22px;display:grid}.fnB0BW_authLayout{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:20px;margin-top:6px;display:grid}.fnB0BW_authHead{text-align:center;justify-items:center;gap:6px;display:grid}.fnB0BW_authTitle{color:var(--fcg-text-primary);letter-spacing:-.01em;font-size:17px;font-weight:650;line-height:24px}.fnB0BW_authSubtitle{max-width:300px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_authTabs{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-tip);grid-template-columns:1fr 1fr;gap:2px;padding:3px;display:grid}.fnB0BW_authTab{min-height:32px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);transition:background var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);background:0 0;border:0;border-radius:8px}.fnB0BW_authTab:hover{color:var(--fcg-text-primary)}.fnB0BW_authTab:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_authTabActive{background:var(--fcg-bg-layer-1);box-shadow:var(--fcg-shadow-1);color:var(--fcg-text-primary);font-weight:600}.fnB0BW_authStack{gap:11px;display:grid}.fnB0BW_authPanel .fnB0BW_input{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-tip);min-height:42px;font-size:var(--fcg-font-body);border-color:#0000;padding:10px 13px}.fnB0BW_authPanel .fnB0BW_input::placeholder{color:var(--fcg-text-tertiary)}.fnB0BW_authPanel .fnB0BW_input:hover:not(:focus){border-color:var(--fcg-line)}.fnB0BW_authPanel .fnB0BW_input:focus{border-color:var(--fcg-brand);background:var(--fcg-bg-layer-1);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_authPanel .fnB0BW_input:-webkit-autofill,.fnB0BW_authPanel .fnB0BW_input:-webkit-autofill:hover,.fnB0BW_authPanel .fnB0BW_input:-webkit-autofill:focus{-webkit-text-fill-color:var(--fcg-text-primary);box-shadow:0 0 0 60px var(--fcg-bg-tip) inset}.fnB0BW_authCodeRow{grid-template-columns:minmax(0,1fr) auto;gap:8px;display:grid}.fnB0BW_authCodeSend{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);min-height:42px;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;white-space:nowrap;transition:background var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);padding:0 14px}.fnB0BW_authCodeSend:hover:not(:disabled){border-color:var(--fcg-line-strong);background:var(--fcg-bg-hover)}.fnB0BW_authCodeSend:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_authCodeSend:disabled{cursor:not-allowed;color:var(--fcg-text-tertiary)}.fnB0BW_authSubmit{border-radius:var(--fcg-radius-md);background:var(--fcg-brand);width:100%;min-height:42px;color:var(--fcg-text-on-brand-fixed);cursor:pointer;font:inherit;font-size:var(--fcg-font-body);letter-spacing:.01em;transition:background var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease), transform var(--fcg-fast) var(--fcg-ease);border:1px solid #0000;font-weight:600}.fnB0BW_authSubmit:hover:not(:disabled){background:var(--fcg-brand-strong)}.fnB0BW_authSubmit:active:not(:disabled){transform:translateY(1px)}.fnB0BW_authSubmit:disabled{cursor:not-allowed;opacity:.5}.fnB0BW_authSubmit:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 30%, transparent);outline:none}.fnB0BW_authNote,.fnB0BW_authStep{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-align:center;line-height:18px}.fnB0BW_authStep{color:var(--fcg-text-secondary)}.fnB0BW_authSocialRow{grid-template-columns:1fr 1fr;gap:9px;display:grid}.fnB0BW_authSocialButton{box-sizing:border-box;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);min-height:42px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-body);transition:border-color var(--fcg-fast) var(--fcg-ease), background var(--fcg-fast) var(--fcg-ease), color var(--fcg-fast) var(--fcg-ease);justify-content:center;align-items:center;gap:8px;font-weight:550;display:inline-flex}.fnB0BW_authSocialButton svg{flex:none;width:16px;height:16px}.fnB0BW_authSocialButton:hover:not(:disabled){border-color:var(--fcg-line-strong);background:var(--fcg-bg-hover);color:var(--fcg-text-primary)}.fnB0BW_authSocialButton:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_authSocialButton:disabled{cursor:progress;opacity:.6}.fnB0BW_authDivider{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);align-items:center;gap:10px;display:flex}.fnB0BW_authDivider:before,.fnB0BW_authDivider:after{background:var(--fcg-line);content:\"\";flex:1;height:1px}.fnB0BW_authNotice{border:1px solid color-mix(in srgb, var(--fcg-brand) 26%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-brand) 6%, var(--fcg-bg-layer-1));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-align:center;padding:9px 11px;line-height:18px}.fnB0BW_authNoticeAlert{border:1px solid color-mix(in srgb, var(--fcg-warn) 38%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 7%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-align:left;grid-column:1/-1;justify-content:space-between;align-items:flex-start;gap:10px;padding:9px 11px;line-height:19px;display:flex}.fnB0BW_authNoticeAlert button{flex:none}.fnB0BW_authFull{grid-column:1/-1}.fnB0BW_remember{color:var(--fcg-text-secondary);cursor:pointer;font-size:var(--fcg-font-caption);align-items:center;gap:8px;display:flex}.fnB0BW_remember input{width:15px;height:15px;accent-color:var(--fcg-brand);cursor:pointer;margin:0}.fnB0BW_rememberRow{flex-wrap:wrap;align-items:center;gap:18px;display:flex}.fnB0BW_passwordField{min-width:0;display:flex;position:relative}.fnB0BW_authPanel .fnB0BW_passwordField .fnB0BW_input{width:100%;padding-right:64px}.fnB0BW_passwordToggle{border-radius:var(--fcg-radius-sm);color:var(--fcg-text-tertiary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;padding:4px 6px;position:absolute;top:50%;right:6px;transform:translateY(-50%)}.fnB0BW_passwordToggle:hover{color:var(--fcg-text-primary)}.fnB0BW_paymentBar{border-bottom:1px solid var(--fcg-line-subtle);grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px 16px;margin-bottom:18px;padding-bottom:16px;display:grid}.fnB0BW_paymentBarDetail{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;grid-column:1/-1;line-height:17px}.fnB0BW_paymentPicker{justify-items:end;gap:6px;min-width:0;display:grid}.fnB0BW_paymentHeading{font-size:var(--fcg-font-title);letter-spacing:-.01em;color:var(--fcg-text-primary);margin-bottom:3px;font-weight:600;display:block}.fnB0BW_paymentMethod{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:8px;display:inline-flex}.fnB0BW_paymentMethod>span{white-space:nowrap;flex:none}.fnB0BW_paymentMethod .fnB0BW_select{width:auto;min-width:176px;max-width:100%}.fnB0BW_alert{border:1px solid color-mix(in srgb, var(--fcg-danger) 28%, transparent);border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-danger) 7%, var(--fcg-bg-layer-2));color:var(--fcg-danger);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin-bottom:10px;padding:9px 11px;line-height:18px}.fnB0BW_alert button{color:inherit;font-size:var(--fcg-font-caption);cursor:pointer;white-space:nowrap;background:0 0;border:0;margin-left:10px;padding:0;text-decoration:underline}.fnB0BW_pending{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 6%, var(--fcg-bg-layer-2));gap:8px;margin-bottom:12px;padding:10px 11px;display:grid}.fnB0BW_pendingTitle{font-weight:600}.fnB0BW_pendingHint{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_pendingRow{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:center;gap:8px;display:flex}.fnB0BW_pendingText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.fnB0BW_plans,.fnB0BW_planShared,.fnB0BW_payDialog{--pixel-ink:color-mix(in srgb, var(--fcg-brand) 58%, var(--fcg-text-primary));--pixel-face:var(--fcg-bg-layer-1);--pixel-recess:color-mix(in srgb, var(--fcg-text-primary) 4%, var(--fcg-bg-layer-1));--pixel-recess-edge:color-mix(in srgb, var(--pixel-ink) 26%, transparent);--pixel-recess-rule:color-mix(in srgb, var(--pixel-ink) 22%, transparent);--pixel-rule:color-mix(in srgb, var(--pixel-ink) 18%, transparent);--pixel-notch:polygon(0 8px, 4px 8px, 4px 4px, 8px 4px, 8px 0, calc(100% - 8px) 0, calc(100% - 8px) 4px, calc(100% - 4px) 4px, calc(100% - 4px) 8px, 100% 8px, 100% calc(100% - 8px), calc(100% - 4px) calc(100% - 8px), calc(100% - 4px) calc(100% - 4px), calc(100% - 8px) calc(100% - 4px), calc(100% - 8px) 100%, 8px 100%, 8px calc(100% - 4px), 4px calc(100% - 4px), 4px calc(100% - 8px), 0 calc(100% - 8px));--pixel-chip:polygon(0 3px, 3px 3px, 3px 0, calc(100% - 3px) 0, calc(100% - 3px) 3px, 100% 3px, 100% calc(100% - 3px), calc(100% - 3px) calc(100% - 3px), calc(100% - 3px) 100%, 3px 100%, 3px calc(100% - 3px), 0 calc(100% - 3px))}.fnB0BW_plans{grid-template-columns:repeat(auto-fit,minmax(236px,1fr));gap:16px;padding:0 6px 6px 0;display:grid}.fnB0BW_planShell{display:flex;position:relative}.fnB0BW_planShell:before{background:var(--pixel-ink);clip-path:var(--pixel-notch);content:\"\";transition:transform var(--fcg-fast) var(--fcg-ease);position:absolute;inset:0;transform:translate(6px,6px)}.fnB0BW_planShell:hover:before{transform:translate(8px,8px)}.fnB0BW_plan{border:2px solid var(--pixel-ink);background:var(--pixel-face);min-width:0;clip-path:var(--pixel-notch);transition:transform var(--fcg-fast) var(--fcg-ease);flex-direction:column;flex:1;gap:11px;padding:16px 16px 14px;display:flex;position:relative}.fnB0BW_plan:hover{transform:translate(-2px,-2px)}.fnB0BW_planTop{border-bottom:2px solid var(--pixel-rule);align-items:center;gap:8px;padding-bottom:9px;display:flex}.fnB0BW_planDot{border:1px solid var(--pixel-ink);background:var(--fcg-brand);width:9px;height:9px;box-shadow:1px 1px 0 0 var(--pixel-ink);flex:none}.fnB0BW_planName{min-width:0;color:var(--fcg-text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-body-lg);letter-spacing:-.012em;flex:1;font-weight:800;overflow:hidden}.fnB0BW_planTag{border:1px solid var(--pixel-ink);background:var(--fcg-brand);color:var(--fcg-text-on-brand-fixed);font-family:var(--fcg-font-mono);letter-spacing:.06em;white-space:nowrap;clip-path:var(--pixel-chip);flex:none;padding:2px 8px;font-size:10px;font-weight:700}.fnB0BW_planSave{border:1px solid color-mix(in srgb, var(--fcg-success) 52%, var(--pixel-ink));background:color-mix(in srgb, var(--fcg-success) 13%, transparent);color:var(--fcg-success);letter-spacing:.04em;white-space:nowrap;clip-path:var(--pixel-chip);flex:none;padding:2px 7px;font-size:10px;font-weight:700}.fnB0BW_planFeatured .fnB0BW_planRecess{background:color-mix(in srgb, var(--fcg-brand) 8%, var(--pixel-recess))}.fnB0BW_planShared{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);flex-wrap:wrap;align-items:center;gap:14px;margin-top:16px;padding:10px 12px;display:flex}.fnB0BW_planShared small{color:var(--fcg-text-tertiary);font-family:var(--fcg-font-mono);letter-spacing:.1em;font-size:10px;font-weight:700}.fnB0BW_planShared span{align-items:center;gap:6px;display:inline-flex}.fnB0BW_planRecess{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);align-items:stretch;padding:10px 12px;display:flex}.fnB0BW_planCreditBlock{flex:auto;gap:3px;min-width:0;display:grid}.fnB0BW_planPriceLabel{color:var(--fcg-brand);letter-spacing:.08em;align-items:center;gap:5px;font-size:10px;font-weight:700;display:flex}.fnB0BW_planRecessCode{font-family:var(--fcg-font-mono);letter-spacing:.14em}.fnB0BW_planPriceRow{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.fnB0BW_planPrice{color:var(--fcg-text-primary);letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:26px;font-weight:800;line-height:1}.fnB0BW_planOriginalPrice{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-decoration:line-through}.fnB0BW_planPayBlock{border-left:2px solid var(--pixel-recess-rule);align-content:center;justify-items:end;gap:3px;margin-left:12px;padding-left:12px;display:grid}.fnB0BW_planPayLabel{color:var(--fcg-text-tertiary);font-size:10px;font-weight:600}.fnB0BW_planPayable{color:var(--fcg-brand);font-size:var(--fcg-font-title);letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-weight:800}.fnB0BW_features{border-top:2px solid var(--pixel-rule);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:6px;padding-top:10px;line-height:17px;display:grid}.fnB0BW_features>span{grid-template-columns:12px minmax(0,1fr);align-items:start;gap:8px;display:grid}.fnB0BW_planCheck{border:1px solid var(--pixel-ink);background:var(--fcg-brand);width:7px;height:7px;margin-top:5px;display:block}.fnB0BW_planFeatureText{min-width:0}.fnB0BW_planButton{border:2px solid var(--pixel-ink);background:var(--fcg-brand);width:100%;min-height:40px;color:var(--fcg-text-on-brand-fixed);letter-spacing:.04em;box-shadow:inset 0 2px 0 0 #ffffff61, 0 3px 0 0 var(--pixel-ink);transition:background var(--fcg-fast) var(--fcg-ease), box-shadow 60ms linear, transform 60ms linear;border-radius:0;margin-top:auto;font-weight:700}.fnB0BW_planButton:hover:not(:disabled){background:var(--fcg-brand-strong);box-shadow:inset 0 2px 0 0 #ffffff7a, 0 4px 0 0 var(--pixel-ink)}.fnB0BW_planButton:active:not(:disabled){box-shadow:inset 0 1px 0 0 #0000002e, 0 0 0 0 var(--pixel-ink);transform:translateY(3px)}.fnB0BW_planBlurb{gap:3px;display:grid}.fnB0BW_planPerk{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:17px}.fnB0BW_planLead{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:17px}.fnB0BW_planFootnote{color:var(--fcg-text-tertiary);align-items:center;gap:6px;font-size:11px;display:flex}.fnB0BW_planDotOk{background:var(--fcg-success);flex:none;width:6px;height:6px}.fnB0BW_planBrandMark{color:var(--fcg-brand);font-family:var(--fcg-font-mono);letter-spacing:.05em;margin-left:auto;font-size:10px;font-weight:700}.fnB0BW_pricingSection{border-top:1px solid var(--fcg-line);gap:10px;margin-top:20px;padding-top:18px;display:grid}.fnB0BW_pricingHeader{justify-content:space-between;align-items:end;gap:14px;display:flex}.fnB0BW_pricingHeader>div{gap:3px;display:grid}.fnB0BW_pricingSearch{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:min(250px,100%);min-height:32px;color:var(--fcg-text-primary);font:inherit;font-size:var(--fcg-font-caption);outline:none;padding:6px 10px}.fnB0BW_pricingSearch:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_pricingNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 7%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:8px 10px}.fnB0BW_pricingTableWrap{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);width:100%;overflow:auto hidden}.fnB0BW_pricingTable{table-layout:fixed;border-collapse:collapse;width:100%;min-width:660px;font-size:var(--fcg-font-caption)}.fnB0BW_pricingTable th{border-bottom:1px solid var(--fcg-line-subtle);background:var(--fcg-bg-layer-1);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);letter-spacing:.02em;text-align:left;white-space:nowrap;padding:10px 14px;font-weight:600}.fnB0BW_pricingTable td{border-bottom:1px solid var(--fcg-line-subtle);color:var(--fcg-text-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;padding:10px 12px}.fnB0BW_pricingTable tbody tr:last-child td{border-bottom:0}.fnB0BW_pricingTable tbody tr:hover{background:var(--fcg-bg-hover)}.fnB0BW_pricingFreeSection{border-top:1px dashed var(--fcg-line-subtle);gap:8px;margin-top:6px;padding-top:14px;display:grid}.fnB0BW_pricingFreeHeader{gap:2px;display:grid}.fnB0BW_pricingFreeHeader strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-weight:650}.fnB0BW_paymentMethods{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;margin-top:0;display:flex}.fnB0BW_paymentMethodChip{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);letter-spacing:.01em;white-space:nowrap;padding:2px 9px;font-weight:550}@media (width<=520px){.fnB0BW_paymentBar{grid-template-columns:minmax(0,1fr)}.fnB0BW_paymentPicker{justify-items:stretch}.fnB0BW_paymentMethod .fnB0BW_select{width:100%}.fnB0BW_paymentMethods{justify-content:flex-start}}.fnB0BW_pricingTable th:first-child,.fnB0BW_pricingTable td:first-child{width:34%}.fnB0BW_pricingTable td:first-child{white-space:normal}.fnB0BW_pricingSection .fnB0BW_pricingTable th:first-child,.fnB0BW_pricingSection .fnB0BW_pricingTable td:first-child{width:26%}.fnB0BW_pricingSection .fnB0BW_pricingTable th:nth-child(2),.fnB0BW_pricingSection .fnB0BW_pricingTable td:nth-child(2){width:22%}.fnB0BW_pricingSection .fnB0BW_pricingTable td.fnB0BW_pricingGroup{white-space:normal}.fnB0BW_pricingTable strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);font-weight:600;display:block}.fnB0BW_pricingTable code{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;display:block;overflow:hidden}.fnB0BW_pricingTable small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-top:3px;display:block}.fnB0BW_tokenHero{border-bottom:1px solid var(--fcg-line);justify-content:space-between;align-items:flex-end;gap:16px;margin:-2px 0 14px;padding:10px 0 14px;display:flex}.fnB0BW_tokenEyebrow{color:var(--fcg-brand);font-weight:650;font-size:var(--fcg-font-caption);letter-spacing:.06em;text-transform:uppercase;align-items:center;gap:8px;display:flex}.fnB0BW_tokenPulse{corner-shape:round;background:var(--fcg-success);width:7px;height:7px;box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-success) 18%, transparent);border-radius:50%}.fnB0BW_tokenTitle{font-size:var(--fcg-font-display);letter-spacing:-.03em;margin:3px 0 0;line-height:31px}.fnB0BW_tokenSourceTabs{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);gap:2px;padding:3px;display:inline-flex}.fnB0BW_tokenSourceTabs button{min-height:30px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;border-radius:5px;padding:5px 14px}.fnB0BW_tokenSourceTabs button:hover{background:var(--fcg-bg-hover)}.fnB0BW_tokenSourceTabs .fnB0BW_tokenSourceActive{background:var(--fcg-bg-layer-2);color:var(--fcg-text-primary);box-shadow:var(--fcg-shadow-1);font-weight:600}.fnB0BW_tokenBalRow{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);align-items:center;gap:10px;margin-top:14px;padding:12px 16px;display:flex}.fnB0BW_tokenBalDot{corner-shape:round;background:var(--fcg-success);width:8px;height:8px;box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-success) 18%, transparent);border-radius:50%;flex:none}.fnB0BW_tokenBalDot[data-level=low]{background:var(--fcg-warn);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-warn) 18%, transparent)}.fnB0BW_tokenBalDot[data-level=danger]{background:var(--fcg-danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-danger) 18%, transparent)}.fnB0BW_tokenBalAmount{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:20px;font-weight:700}.fnB0BW_tokenBalBadge{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-success) 12%, transparent);color:var(--fcg-success);font-size:var(--fcg-font-caption);white-space:nowrap;padding:2px 9px;line-height:18px}.fnB0BW_tokenBalBadge[data-level=low]{background:color-mix(in srgb, var(--fcg-warn) 13%, transparent);color:var(--fcg-warn-label)}.fnB0BW_tokenBalBadge[data-level=danger]{background:color-mix(in srgb, var(--fcg-danger) 12%, transparent);color:var(--fcg-danger)}.fnB0BW_tokenBalUpdated{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenBalHint{min-width:0;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.fnB0BW_tokenBalRefresh{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);min-height:28px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);transition:color var(--fcg-fast) var(--fcg-ease), border-color var(--fcg-fast) var(--fcg-ease);background:0 0;margin-left:auto;padding:4px 12px}.fnB0BW_tokenBalRefresh:hover{border-color:var(--fcg-line-strong);color:var(--fcg-text-primary)}.fnB0BW_tokenSessionRow{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:center;gap:10px;margin-top:8px;padding:10px 16px;display:flex}.fnB0BW_tokenSessionRow strong{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWaste{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);flex-direction:column;gap:10px;margin-top:10px;padding:14px 16px;display:flex}.fnB0BW_tokenCacheWasteHead{align-items:baseline;gap:8px;display:flex}.fnB0BW_tokenCacheWasteHead strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body)}.fnB0BW_tokenCacheWasteClean{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_tokenCacheWasteStats{flex-wrap:wrap;gap:8px;display:flex}.fnB0BW_tokenCacheWasteStat{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);flex-direction:column;flex:120px;gap:2px;padding:8px 10px;display:flex}.fnB0BW_tokenCacheWasteStat span{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_tokenCacheWasteStat b{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteStat[data-tone=warn] b{color:var(--fcg-warn-label)}.fnB0BW_tokenCacheWasteCauses{flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_tokenCacheWasteCause{border-radius:var(--fcg-radius-full);font-size:var(--fcg-font-caption);background:color-mix(in srgb, var(--fcg-warn) 10%, transparent);color:var(--fcg-text-secondary);padding:2px 9px;line-height:18px}.fnB0BW_tokenCacheWasteCause[data-cause=idle-gap]{background:color-mix(in srgb, var(--fcg-warn) 10%, transparent)}.fnB0BW_tokenCacheWasteCause[data-cause=model-changed]{background:color-mix(in srgb, var(--fcg-danger) 10%, transparent)}.fnB0BW_tokenCacheWasteCause[data-cause=prefix-changed]{background:color-mix(in srgb, var(--fcg-text-tertiary) 12%, transparent)}.fnB0BW_tokenCacheWasteCause b{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteWorst{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.fnB0BW_tokenCacheWasteWorst li{font-size:var(--fcg-font-caption);color:var(--fcg-text-secondary);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:baseline;gap:10px;display:grid}.fnB0BW_tokenCacheWasteWorstHead{color:var(--fcg-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.fnB0BW_tokenCacheWasteWorstModel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenCacheWasteWorstTokens{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteWorstCause{text-align:right;color:var(--fcg-text-tertiary)}.fnB0BW_tokenCacheWasteFoot{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums}.fnB0BW_tokenCacheWasteHint{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin:0;line-height:1.5}.fnB0BW_tokenSummaryGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-top:9px;display:grid}.fnB0BW_tokenMetric{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:4px;min-width:0;padding:12px 14px;display:grid}.fnB0BW_tokenMetric span{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenMetric strong{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;letter-spacing:-.02em;text-overflow:ellipsis;white-space:nowrap;font-size:22px;font-weight:700;line-height:26px;overflow:hidden}.fnB0BW_tokenMetric small{color:var(--fcg-text-tertiary);font-variant-numeric:tabular-nums;font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:18px;overflow:hidden}.fnB0BW_tokenPanel{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);margin-top:12px;padding:14px 16px}.fnB0BW_tokenPanelHeader{justify-content:space-between;align-items:center;gap:10px;min-height:30px;margin-bottom:10px;display:flex}.fnB0BW_tokenPanelTitle{gap:2px;min-width:0;display:grid}.fnB0BW_tokenPanelHeader strong{font-size:15px}.fnB0BW_tokenPanelKicker{color:var(--fcg-brand);font:700 var(--fcg-font-caption)/16px var(--fcg-font-mono);letter-spacing:.11em}.fnB0BW_tokenRangePills{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);scrollbar-width:none;flex-wrap:nowrap;flex:0 auto;gap:2px;max-width:100%;padding:2px;display:inline-flex;overflow-x:auto}.fnB0BW_tokenRangePills::-webkit-scrollbar{display:none}.fnB0BW_tokenRangePills button{min-height:22px;color:var(--fcg-text-tertiary);cursor:pointer;font:var(--fcg-font-caption)/16px var(--fcg-font-mono);white-space:nowrap;background:0 0;border:0;border-radius:5px;flex:none;padding:2px 8px}.fnB0BW_tokenRangePills .fnB0BW_tokenRangeActive{background:var(--fcg-brand-subtle);color:var(--fcg-brand);font-weight:650}.fnB0BW_tokenHeatFilter{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:10px;display:flex}.fnB0BW_tokenHeatFilterLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin-right:2px}.fnB0BW_tokenHeatFilterBtn{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);max-width:150px;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;background:0 0;align-items:center;gap:6px;padding:2px 9px;line-height:18px;display:inline-flex;overflow:hidden}.fnB0BW_tokenHeatFilterBtn:hover{border-color:var(--fcg-line-strong);color:var(--fcg-text-primary)}.fnB0BW_tokenHeatFilterBtnActive{background:color-mix(in srgb, var(--model-color,var(--fcg-brand)) 14%, transparent);color:var(--model-color,var(--fcg-brand));border-color:#0000;font-weight:600}.fnB0BW_tokenPillDot{corner-shape:round;background:var(--model-color,var(--fcg-text-tertiary));border-radius:50%;flex:none;width:7px;height:7px}.fnB0BW_tokenChartHead{align-items:baseline;gap:8px;margin-bottom:8px;display:flex}.fnB0BW_tokenChartTitle{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-weight:600}.fnB0BW_tokenChartTotal{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-weight:650}.fnB0BW_tokenChartModel{color:var(--model-color,var(--fcg-brand));font:600 var(--fcg-font-caption)/18px var(--fcg-font-mono);margin-left:auto}.fnB0BW_tokenChartWrap{--fcg-chart-hit:#bcd7f8;--fcg-chart-miss:#7aaff0;--fcg-chart-out:#2f6fe0;--fcg-chart-tip-bg:#fff;--fcg-chart-tip-fg:#1a1a1c;--fcg-chart-tip-muted:#6b7280;min-width:0;position:relative}body[data-ds-dark-theme] .fnB0BW_tokenChartWrap{--fcg-chart-hit:#a9c8f0;--fcg-chart-miss:#5f97e8;--fcg-chart-out:#3d7ef0;--fcg-chart-tip-bg:#1f1f21;--fcg-chart-tip-fg:#f5f6f8;--fcg-chart-tip-muted:#a1a1a8}.fnB0BW_tokenChartPlot{position:relative}.fnB0BW_tokenChartGrid{background:var(--fcg-line-subtle);opacity:.8;pointer-events:none;height:1px;position:absolute;left:0;right:0}.fnB0BW_tokenChartGrid span{color:var(--fcg-text-tertiary);font-variant-numeric:tabular-nums;font-size:11px;line-height:1;position:absolute;bottom:3px;left:0}.fnB0BW_tokenChartBar{background:var(--fcg-chart-out);transition:filter 90ms var(--fcg-ease);cursor:pointer;border-radius:3px 3px 0 0;position:absolute;bottom:0;overflow:hidden}.fnB0BW_tokenChartBar[data-active]{filter:brightness(1.14)}.fnB0BW_tokenChartBar[data-empty]{background:var(--fcg-line-subtle);opacity:.3}.fnB0BW_tokenChartCross{pointer-events:none;border-left:1px solid color-mix(in srgb, var(--fcg-text-tertiary) 40%, transparent);position:absolute;top:0;bottom:0}.fnB0BW_tokenChartSeg{width:100%;position:absolute;left:0}.fnB0BW_tokenChartSeg[data-top]{border-radius:3px 3px 0 0}.fnB0BW_tokenChartLegend{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 16px;margin-top:6px;line-height:18px;display:flex}.fnB0BW_tokenChartLegend span{align-items:center;gap:6px;min-width:0;display:inline-flex}.fnB0BW_tokenChartLegend i{border-radius:2px;flex:none;width:8px;height:8px}.fnB0BW_tokenChartTip{z-index:5;background:var(--fcg-chart-tip-bg);color:var(--fcg-chart-tip-muted);pointer-events:none;font-size:var(--fcg-font-caption);border-radius:8px;gap:3px;padding:8px 10px;line-height:14px;display:grid;position:absolute;box-shadow:0 10px 30px #00000047}.fnB0BW_tokenChartTipHead{color:var(--fcg-chart-tip-fg);justify-content:space-between;gap:14px;margin-bottom:2px;font-size:13px;display:flex}.fnB0BW_tokenChartTipHead b{font-variant-numeric:tabular-nums}.fnB0BW_tokenChartTipRow{align-items:center;gap:7px;min-width:0;display:flex}.fnB0BW_tokenChartTipRow b{color:var(--fcg-chart-tip-fg);font-variant-numeric:tabular-nums;margin-left:auto;font-weight:600}.fnB0BW_tokenChartSwatch{background:var(--fcg-line-strong);border-radius:2px;flex:none;width:8px;height:8px}.fnB0BW_tokenChartSwatch[data-tone=hit]{background:var(--fcg-chart-hit)}.fnB0BW_tokenChartSwatch[data-tone=miss]{background:var(--fcg-chart-miss)}.fnB0BW_tokenChartSwatch[data-tone=out]{background:var(--fcg-chart-out)}.fnB0BW_tokenChartSwatch[data-tone=req]{corner-shape:round;background:var(--fcg-chart-tip-muted);border-radius:50%}.fnB0BW_tokenChartAxis{height:18px;margin-top:2px;padding-left:46px;position:relative}.fnB0BW_tokenChartAxis span{color:var(--fcg-text-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px;position:absolute;transform:translate(-50%)}.fnB0BW_tokenChartAxis span:first-child{transform:none}.fnB0BW_tokenChartAxis span:last-child{transform:translate(-100%)}.fnB0BW_tokenHeatTotals{border-top:1px solid var(--fcg-line-subtle);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);flex-wrap:wrap;align-items:baseline;gap:6px 16px;margin-top:10px;padding-top:9px;display:flex}.fnB0BW_tokenHeatTotals b{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;margin-right:3px;font-weight:650}.fnB0BW_tokenHeatDaily{margin-left:auto}.fnB0BW_tokenModelBars{gap:6px;margin-bottom:12px;display:grid}.fnB0BW_tokenModelBarRow{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;grid-template-columns:minmax(90px,180px) minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.fnB0BW_tokenModelBarName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fnB0BW_tokenModelBarTrack{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-tip);height:4px;overflow:hidden}.fnB0BW_tokenModelBarTrack i{border-radius:inherit;background:var(--model-color,var(--fcg-brand));height:100%;display:block}.fnB0BW_tokenModelBarRow b{color:var(--fcg-text-primary);font-weight:600}.fnB0BW_tokenModelDot{corner-shape:round;background:var(--model-color,var(--fcg-text-tertiary));border-radius:50%;flex:none;width:7px;height:7px;margin-right:6px;display:inline-block}.fnB0BW_tokenNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 35%, var(--fcg-line-subtle));border-radius:var(--fcg-radius-md);background:color-mix(in srgb, var(--fcg-warn) 8%, var(--fcg-bg-layer-1));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin-top:10px;padding:10px 14px}.fnB0BW_tokenGatewayTable{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);overflow-x:auto}.fnB0BW_tokenGatewayTable .fnB0BW_pricingTable{min-width:560px}.fnB0BW_tokenEmpty{min-height:90px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);place-items:center;display:grid}@media (width<=700px){.fnB0BW_tokenSummaryGrid{grid-template-columns:1fr 1fr}}@media (width<=520px){.fnB0BW_tokenHero{flex-direction:column;align-items:flex-start}.fnB0BW_tokenTitle{font-size:22px}.fnB0BW_tokenSummaryGrid{grid-template-columns:1fr}.fnB0BW_tokenPanelHeader{gap:6px}.fnB0BW_tokenChartTip{width:190px}.fnB0BW_tokenHeatTotals{gap:4px 10px}.fnB0BW_tokenHeatDaily{margin-left:0}.fnB0BW_tokenModelBarRow{grid-template-columns:minmax(70px,110px) minmax(0,1fr) auto}}.fnB0BW_pricePair{gap:1px;min-width:0;line-height:18px;display:grid}.fnB0BW_priceOriginal{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;text-decoration:line-through;overflow:hidden}.fnB0BW_pricingTable .fnB0BW_priceCurrent,.fnB0BW_pricingTable .fnB0BW_priceCurrentDiscount{color:var(--fcg-brand);font-size:var(--fcg-font-body);letter-spacing:-.01em;font-weight:650;display:block}.fnB0BW_pricingTable .fnB0BW_priceCurrentDiscount{color:var(--fcg-success)}.fnB0BW_pricingRequest{font-weight:600;color:var(--fcg-text-primary)!important}.fnB0BW_imageTiers{flex-wrap:wrap;align-items:start;gap:4px 18px;display:inline-flex}.fnB0BW_imageTier{gap:1px;min-width:0;display:grid}.fnB0BW_imageTierLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);letter-spacing:.02em;font-style:normal;font-weight:600}.fnB0BW_pricingEmpty{text-align:center;color:var(--fcg-text-tertiary)!important;padding:28px!important}.fnB0BW_order{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-1);gap:10px;margin-top:20px;padding:18px;display:grid}.fnB0BW_orderTitle{font-size:var(--fcg-font-body);letter-spacing:-.01em;font-weight:600}.fnB0BW_orderActions{flex-wrap:wrap;gap:7px;display:flex}.fnB0BW_qr{object-fit:contain;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:#fff;width:160px;max-width:100%;height:160px}.fnB0BW_qrWrap{justify-items:start;gap:8px;display:grid}.fnB0BW_textarea{resize:vertical;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);width:100%;min-height:72px;color:var(--fcg-text-primary);font:inherit;transition:border-color var(--fcg-fast) var(--fcg-ease), box-shadow var(--fcg-fast) var(--fcg-ease);outline:none;padding:10px 12px;line-height:1.5}.fnB0BW_textarea:focus{border-color:var(--fcg-brand);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 16%, transparent)}.fnB0BW_qrText{overflow-wrap:anywhere;max-width:min(100%,520px);color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}@media (width<=800px){.fnB0BW_marketplaceGrid,.fnB0BW_mcpMarketplaceGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}.fnB0BW_poolManager{gap:12px;display:grid}.fnB0BW_poolToolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.fnB0BW_poolToolbarNote{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_poolToolbarActions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.fnB0BW_poolToggle{color:var(--fcg-text-secondary);cursor:pointer;font-size:var(--fcg-font-caption);align-items:center;gap:7px;display:inline-flex}.fnB0BW_poolToggle input{width:14px;height:14px;accent-color:var(--fcg-brand);cursor:pointer;margin:0}.fnB0BW_poolList{gap:10px;display:grid}.fnB0BW_poolAccount{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);transition:border-color var(--fcg-fast) var(--fcg-ease), background var(--fcg-fast) var(--fcg-ease);gap:10px;padding:12px;display:grid}.fnB0BW_poolAccount:hover{border-color:var(--fcg-line-strong);background:var(--fcg-bg-layer-2)}.fnB0BW_poolAccountHead{align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_poolIdentity{flex:auto;align-items:center;gap:10px;min-width:0;display:flex}.fnB0BW_poolMonogram{background:var(--fcg-brand-subtle);width:30px;height:30px;color:var(--fcg-brand);font:650 11px/1 var(--fcg-font-mono);letter-spacing:.02em;text-transform:uppercase;border-radius:9px;flex:none;place-items:center;display:grid}.fnB0BW_poolIdentityText{min-width:0}.fnB0BW_poolName{text-overflow:ellipsis;white-space:nowrap;color:var(--fcg-text-primary);font-size:var(--fcg-font-body);font-weight:600;display:block;overflow:hidden}.fnB0BW_poolSub{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--fcg-font-caption);font-variant-numeric:tabular-nums;margin-top:2px;display:block;overflow:hidden}.fnB0BW_poolChips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.fnB0BW_poolChip{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);white-space:nowrap;padding:2px 8px;font-size:11px;line-height:16px}.fnB0BW_poolChipLive{background:color-mix(in srgb, var(--fcg-success) 14%, transparent);color:var(--fcg-success)}.fnB0BW_poolChipWarn{background:color-mix(in srgb, var(--fcg-warn) 16%, transparent);color:var(--fcg-warn)}.fnB0BW_poolChipDanger{background:color-mix(in srgb, var(--fcg-danger) 14%, transparent);color:var(--fcg-danger)}.fnB0BW_poolMeterRow{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.fnB0BW_poolMeterTrack{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);height:5px;display:block;overflow:hidden}.fnB0BW_poolMeterFill{border-radius:inherit;background:var(--fcg-brand);height:100%;transition:width .3s var(--fcg-ease);display:block}.fnB0BW_poolMeterFillWarn{background:var(--fcg-warn)}.fnB0BW_poolMeterFillDanger{background:var(--fcg-danger)}.fnB0BW_poolMetric{color:var(--fcg-text-secondary);font:600 var(--fcg-font-caption)/1 var(--fcg-font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}.fnB0BW_poolActions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.fnB0BW_poolFootnote{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}@media (width<=520px){.fnB0BW_poolAccountHead{flex-wrap:wrap;align-items:flex-start}.fnB0BW_poolIdentity{flex-basis:100%}.fnB0BW_poolActions{justify-content:flex-start}.fnB0BW_mcpServerCard{flex-direction:column;align-items:flex-start}.fnB0BW_mcpServerActions{justify-content:flex-start}.fnB0BW_skillPanelHeader,.fnB0BW_pricingHeader{flex-direction:column;align-items:flex-start;gap:7px}.fnB0BW_pricingSearch{width:100%}.fnB0BW_marketplaceControls,.fnB0BW_mcpMarketplaceGrid,.fnB0BW_marketplaceGrid{grid-template-columns:1fr}.fnB0BW_communityGrid,.fnB0BW_capabilityCommunityGrid{grid-template-columns:1fr}.fnB0BW_capabilityCommunityHeader{flex-direction:column;align-items:flex-start}.fnB0BW_communityFilterBar{gap:8px}.fnB0BW_communityInstalledEntry{padding-inline:8px}.fnB0BW_communityRestart,.fnB0BW_advisorPickerHeader{flex-direction:column;align-items:flex-start}.fnB0BW_communityModalBackdrop,.fnB0BW_advisorPickerBackdrop{padding:10px}.fnB0BW_advisorPicker{height:95vh;padding:14px}.fnB0BW_communityModalStats,.fnB0BW_advisorModelOption{flex-direction:column;align-items:flex-start;gap:4px}.fnB0BW_advisorModelOption code{max-width:100%}.fnB0BW_routingCell{grid-template-columns:1fr;gap:8px}.fnB0BW_routingCell:not(.fnB0BW_selectCell) .fnB0BW_routingCopy{grid-template-columns:1fr;gap:2px}.fnB0BW_authForm,.fnB0BW_capabilityForm{grid-template-columns:1fr}.fnB0BW_authFull,.fnB0BW_capabilityFull{grid-column:auto}.fnB0BW_capabilityStats,.fnB0BW_advisorStats{grid-template-columns:1fr}.fnB0BW_accountRow{flex-direction:column;align-items:flex-start}.fnB0BW_accountActions{justify-content:flex-start}.fnB0BW_plans{grid-template-columns:repeat(2,minmax(0,1fr))}.fnB0BW_communityGrid,.fnB0BW_capabilityCommunityGrid{grid-template-columns:1fr}.fnB0BW_communityRestart{flex-direction:column;align-items:flex-start}.fnB0BW_communityModalBackdrop{padding:10px}.fnB0BW_communityModal{max-height:95vh;padding:14px}.fnB0BW_communityModalStats{flex-direction:column;align-items:flex-start;gap:4px}}@media (width<=360px){.fnB0BW_plans{grid-template-columns:1fr}}.fnB0BW_statGrid{gap:var(--fcg-space-2);margin-top:var(--fcg-space-3);grid-template-columns:repeat(auto-fit,minmax(112px,1fr));display:grid}.fnB0BW_statCell{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);gap:2px;min-width:0;padding:10px 12px;display:grid}.fnB0BW_statLabel{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:16px;overflow:hidden}.fnB0BW_statValue{color:var(--fcg-text-primary);font-size:var(--fcg-font-title);font-variant-numeric:tabular-nums;letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;font-weight:650;line-height:20px;overflow:hidden}.fnB0BW_details{margin-top:var(--fcg-space-2)}.fnB0BW_detailsSummary{color:var(--fcg-text-secondary);cursor:pointer;font-size:var(--fcg-font-caption);padding:5px 0;line-height:18px}.fnB0BW_detailsSummary:hover{color:var(--fcg-text-primary)}.fnB0BW_detailsSummary:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);border-radius:var(--fcg-radius-sm);outline:none}.fnB0BW_chipGrid{padding:var(--fcg-space-1) 0 var(--fcg-space-2);flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_statChip{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:nowrap;align-items:center;gap:6px;padding:3px 9px;line-height:18px;display:inline-flex}.fnB0BW_statChip b{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;font-weight:650}.fnB0BW_statChipIdle{color:var(--fcg-text-tertiary);opacity:.62}.fnB0BW_statChipIdle b{color:var(--fcg-text-tertiary)}@media (width<=520px){.fnB0BW_statGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}.fnB0BW_toggleGrid{gap:var(--fcg-space-2);margin-top:var(--fcg-space-2);grid-template-columns:repeat(auto-fit,minmax(168px,1fr));display:grid}.fnB0BW_toggleCard{justify-content:space-between;align-items:center;gap:var(--fcg-space-2);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);cursor:pointer;min-width:0;transition:border-color var(--fcg-fast) var(--fcg-ease), background var(--fcg-fast) var(--fcg-ease);padding:9px 11px;display:flex}.fnB0BW_toggleCard:hover{border-color:var(--fcg-line);background:var(--fcg-bg-layer-2)}.fnB0BW_toggleCardDisabled{cursor:not-allowed;opacity:.55}.fnB0BW_toggleCardDisabled:hover{border-color:var(--fcg-line-subtle);background:var(--fcg-bg-layer-1)}.fnB0BW_toggleCardText{gap:1px;min-width:0;display:grid}.fnB0BW_toggleCardText strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;font-weight:600;line-height:18px;overflow:hidden}.fnB0BW_toggleCardText small{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:15px;overflow:hidden}.fnB0BW_toggleCardNote{color:var(--fcg-warn-label);font-size:11px;line-height:15px}.fnB0BW_tuningGrid{gap:var(--fcg-space-2);margin-top:var(--fcg-space-3);grid-template-columns:repeat(auto-fit,minmax(132px,1fr));display:grid}.fnB0BW_tuningCell{gap:4px;min-width:0;display:grid}.fnB0BW_tuningLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:16px;overflow:hidden}.fnB0BW_tuningHint{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:15px;overflow:hidden}.fnB0BW_tuningCell .fnB0BW_select{min-height:32px;padding:5px 9px}.fnB0BW_subGroup{gap:var(--fcg-space-2);margin-top:var(--fcg-space-4);display:grid}.fnB0BW_subGroupLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);letter-spacing:.02em;font-weight:600;line-height:18px}.fnB0BW_councilJob{gap:var(--fcg-space-3);display:grid}.fnB0BW_councilJobHead{align-items:baseline;gap:var(--fcg-space-2);flex-wrap:wrap;min-width:0;display:flex}.fnB0BW_councilJobId{color:var(--fcg-text-tertiary);font-family:var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.fnB0BW_councilReport{gap:var(--fcg-space-2);min-width:0;display:grid}.fnB0BW_councilReportTurn{font-size:var(--fcg-font-body)}.fnB0BW_councilState{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-hover);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-transform:uppercase;letter-spacing:.04em;padding:2px 8px;font-weight:600;line-height:18px}.fnB0BW_councilStateOk{background:var(--fcg-success-subtle);color:var(--fcg-success)}.fnB0BW_councilStateBlocked{background:var(--fcg-danger-subtle);color:var(--fcg-danger)}.fnB0BW_councilStateNowrap{white-space:nowrap;word-break:keep-all;flex:none;max-width:none}.fnB0BW_councilCallout{border-left:2px solid var(--fcg-line-strong);border-radius:0 var(--fcg-radius-sm) var(--fcg-radius-sm) 0;background:var(--fcg-bg-layer-2);gap:2px;padding:9px 11px;display:grid}.fnB0BW_councilCallout p{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:18px}.fnB0BW_councilCalloutBlocked{border-left-color:var(--fcg-danger);background:color-mix(in srgb, var(--fcg-danger) 6%, var(--fcg-bg-layer-2))}.fnB0BW_findingList{gap:6px;margin:0;padding:0;list-style:none;display:grid}.fnB0BW_findingRow{align-items:start;gap:var(--fcg-space-2);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);grid-template-columns:auto minmax(0,1fr) auto;padding:8px 10px;display:grid}.fnB0BW_findingBody{gap:2px;min-width:0;display:grid}.fnB0BW_findingTitle{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);font-weight:600;line-height:18px}.fnB0BW_findingEvidence{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:17px}.fnB0BW_findingEngine{color:var(--fcg-text-tertiary);white-space:nowrap;flex:none;font-size:11px;line-height:18px}.fnB0BW_findingSeverity{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-tip);color:var(--fcg-text-secondary);letter-spacing:.03em;text-transform:uppercase;white-space:nowrap;flex:none;padding:1px 7px;font-size:10px;font-weight:600;line-height:16px}.fnB0BW_findingSeverity_blocker{background:var(--fcg-danger-subtle);color:var(--fcg-danger)}.fnB0BW_findingSeverity_warning{background:var(--fcg-warn-subtle);color:var(--fcg-warn-label)}.fnB0BW_findingSeverity_info{background:var(--fcg-bg-hover);color:var(--fcg-text-tertiary)}.fnB0BW_findingSeverity_unknown{background:var(--fcg-bg-tip);color:var(--fcg-text-tertiary)}@media (width<=520px){.fnB0BW_toggleGrid,.fnB0BW_tuningGrid{grid-template-columns:1fr}.fnB0BW_findingRow{grid-template-columns:auto minmax(0,1fr)}.fnB0BW_findingEngine{grid-column:2}}.fnB0BW_advisorFormGrid{gap:var(--fcg-space-3);margin-top:var(--fcg-space-3);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.fnB0BW_advisorField{min-width:0;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_advisorField>span{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:16px}.fnB0BW_advisorField .fnB0BW_advisorModelTrigger{height:100%}.fnB0BW_advisorModelTrigger{align-content:center;gap:2px;display:grid}.fnB0BW_advisorModelTrigger strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body);text-overflow:ellipsis;white-space:nowrap;font-weight:600;line-height:18px;overflow:hidden}.fnB0BW_advisorFoot{justify-content:space-between;align-items:flex-end;gap:var(--fcg-space-3);margin-top:var(--fcg-space-4);flex-wrap:wrap;display:flex}.fnB0BW_advisorFoot .fnB0BW_advisorEvidence{flex:320px;margin-top:0}.fnB0BW_advisorFoot .fnB0BW_buttonPrimary{flex:none}@media (width<=520px){.fnB0BW_advisorFormGrid{grid-template-columns:1fr}.fnB0BW_advisorFoot{flex-direction:column;align-items:stretch}.fnB0BW_advisorFoot .fnB0BW_buttonPrimary{width:100%}}.fnB0BW_engineeringHeader{justify-content:space-between;align-items:flex-start;gap:var(--fcg-space-3);display:flex}.fnB0BW_engineeringHeader>div:first-child{gap:3px;min-width:0;display:grid}.fnB0BW_engineeringHeader strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg)}.fnB0BW_engineeringHeader small{max-width:620px;color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_engineeringKicker{color:var(--fcg-text-tertiary);letter-spacing:.08em;font-size:11px;font-weight:650}.fnB0BW_engineeringSummary{margin-top:var(--fcg-space-2);flex-wrap:wrap;gap:6px;display:flex}.fnB0BW_engineeringSummary span{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:3px 9px}.fnB0BW_engineeringSummary b{color:var(--fcg-text-primary)}.fnB0BW_actionMenu{position:relative}.fnB0BW_actionMenu summary{list-style:none}.fnB0BW_actionMenu summary::-webkit-details-marker{display:none}.fnB0BW_actionMenuPop{z-index:4;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);min-width:150px;box-shadow:var(--fcg-shadow-2);gap:4px;padding:6px;display:grid;position:absolute;top:calc(100% + 5px);right:0}.fnB0BW_actionMenuPop .fnB0BW_button{background:0 0;border-color:#0000;justify-content:flex-start}.fnB0BW_actionMenuPop .fnB0BW_button:hover{background:var(--fcg-bg-hover)}.fnB0BW_engineeringComposer{gap:var(--fcg-space-2);margin-top:var(--fcg-space-3);padding:var(--fcg-space-3);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);grid-template-columns:minmax(0,1fr) auto;display:grid}.fnB0BW_engineeringComposer .fnB0BW_input{min-width:0}@media (width<=520px){.fnB0BW_engineeringHeader{flex-direction:column}.fnB0BW_engineeringComposer{grid-template-columns:1fr}}.fnB0BW_composerLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);margin-bottom:5px;font-weight:600;line-height:16px;display:block}.fnB0BW_engineeringComposer>div{min-width:0}.fnB0BW_engineeringComposer>div:first-child,.fnB0BW_engineeringComposer>div:nth-child(2){align-content:start;display:grid}.fnB0BW_pricingTable .fnB0BW_priceFree{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-success) 14%, transparent);color:var(--fcg-success);font-size:var(--fcg-font-caption);letter-spacing:.04em;padding:1px 7px;font-weight:700}.fnB0BW_paymentNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 38%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 7%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);justify-content:space-between;align-items:flex-start;gap:10px;margin-top:14px;padding:10px 12px;line-height:19px;display:flex}.fnB0BW_invoicePanel{border-top:1px solid var(--fcg-line);gap:12px;margin-top:20px;padding-top:18px;display:grid}.fnB0BW_invoiceHead{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.fnB0BW_invoiceOrders{gap:6px;display:grid}.fnB0BW_invoiceOrderRow{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);cursor:pointer;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 10px;display:grid}.fnB0BW_invoiceOrderText{gap:2px;min-width:0;display:grid}.fnB0BW_invoiceOrderText small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption)}.fnB0BW_invoiceForm{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;display:grid}.fnB0BW_invoiceForm label{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);gap:5px;display:grid}.fnB0BW_invoiceForm .fnB0BW_input{min-width:0}.fnB0BW_invoiceActions{flex-wrap:wrap;gap:8px;display:flex}.fnB0BW_invoiceNotice{border:1px solid color-mix(in srgb, var(--fcg-warn) 38%, var(--fcg-line));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-warn) 7%, var(--fcg-bg-layer-2));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:8px 10px}.fnB0BW_invoicePreview{box-sizing:border-box;border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);width:100%;color:var(--fcg-text-primary);font-family:var(--fcg-font-mono);font-size:var(--fcg-font-caption);resize:vertical;padding:10px 12px;line-height:18px}.fnB0BW_invoicePanel>.fnB0BW_sectionMeta{line-height:18px}body .fnB0BW_payDialog{border:2px solid var(--pixel-ink);background:var(--pixel-face);width:min(392px,100vw - 36px);box-shadow:6px 6px 0 0 var(--pixel-ink);border-radius:0;padding-bottom:20px}.fnB0BW_payDialog h2{color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg);letter-spacing:-.012em;margin:0;font-weight:800}.fnB0BW_payDialog h2+button{border:1px solid var(--pixel-ink);color:var(--pixel-ink);border-radius:0}.fnB0BW_payDialog h2+button:hover{background:var(--pixel-recess)}.fnB0BW_payDialogBody{gap:12px;display:grid}.fnB0BW_payDialogHead{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);gap:3px;padding:12px;display:grid}.fnB0BW_payDialogLabel{color:var(--fcg-brand);font-family:var(--fcg-font-mono);letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:700}.fnB0BW_payDialogAmount{color:var(--fcg-text-primary);letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:27px;font-weight:800;line-height:34px}.fnB0BW_payDialogMeta{flex-wrap:wrap;align-items:center;gap:8px;margin-top:5px;display:flex}.fnB0BW_payDialogCredit{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption)}.fnB0BW_payDialogCredit strong{color:var(--fcg-text-primary);font-variant-numeric:tabular-nums;font-weight:700}.fnB0BW_payDialogState{border:1px solid var(--pixel-ink);background:var(--pixel-face);color:var(--fcg-text-secondary);font-family:var(--fcg-font-mono);letter-spacing:.06em;white-space:nowrap;clip-path:var(--pixel-chip);margin-left:auto;padding:2px 9px;font-size:10px;font-weight:700}.fnB0BW_payDialogSlot{border:2px solid var(--pixel-ink);background:var(--pixel-recess);box-shadow:inset 2px 2px 0 0 var(--pixel-recess-edge);justify-items:start;gap:10px;padding:12px;display:grid}.fnB0BW_payDialogQr{text-align:center;justify-items:center}.fnB0BW_payDialogSlot .fnB0BW_paymentNotice{border-width:2px;border-radius:0;margin-top:0}.fnB0BW_payDialogSlot .fnB0BW_payDialogElement{width:100%;min-height:0}.fnB0BW_payDialogPaid{border:2px solid color-mix(in srgb, var(--fcg-success) 42%, var(--pixel-ink));background:color-mix(in srgb, var(--fcg-success) 10%, var(--pixel-face));color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);padding:10px 12px}.fnB0BW_payDialogNote{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px;display:block}.fnB0BW_payDialogFooter{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.fnB0BW_payDialogFooter .fnB0BW_button,.fnB0BW_payDialogSlot .fnB0BW_button{border:2px solid var(--pixel-ink);background:var(--pixel-face);min-height:40px;color:var(--fcg-text-primary);letter-spacing:.04em;box-shadow:0 3px 0 0 var(--pixel-ink);transition:background var(--fcg-fast) var(--fcg-ease), box-shadow 60ms linear, transform 60ms linear;border-radius:0;font-weight:700}.fnB0BW_payDialogFooter .fnB0BW_button:hover:not(:disabled),.fnB0BW_payDialogSlot .fnB0BW_button:hover:not(:disabled){background:var(--pixel-recess)}.fnB0BW_payDialogFooter .fnB0BW_button:active:not(:disabled),.fnB0BW_payDialogSlot .fnB0BW_button:active:not(:disabled){box-shadow:0 0 0 0 var(--pixel-ink);transform:translateY(3px)}.fnB0BW_payDialogFooter .fnB0BW_buttonPrimary,.fnB0BW_payDialogSlot .fnB0BW_buttonPrimary{border-color:var(--pixel-ink);background:var(--fcg-brand);color:var(--fcg-text-on-brand-fixed);box-shadow:inset 0 2px 0 0 #ffffff61, 0 3px 0 0 var(--pixel-ink)}.fnB0BW_payDialogFooter .fnB0BW_buttonPrimary:hover:not(:disabled),.fnB0BW_payDialogSlot .fnB0BW_buttonPrimary:hover:not(:disabled){border-color:var(--pixel-ink);background:var(--fcg-brand-strong);box-shadow:inset 0 2px 0 0 #ffffff7a, 0 4px 0 0 var(--pixel-ink)}.fnB0BW_payDialogFooter .fnB0BW_buttonDanger{color:var(--fcg-danger)}.fnB0BW_payDialogFooter .fnB0BW_button:focus-visible,.fnB0BW_payDialogSlot .fnB0BW_button:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 26%, transparent), 0 3px 0 0 var(--pixel-ink);outline:none}.fnB0BW_planReviewBody{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-input);max-height:300px;display:grid;overflow:auto}.fnB0BW_planReviewLine{width:100%;color:var(--fcg-text-primary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);text-align:left;background:0 0;border:0;grid-template-columns:44px minmax(0,1fr);gap:8px;padding:2px 10px;line-height:18px;display:grid}.fnB0BW_planReviewLine:hover{background:var(--fcg-bg-hover)}.fnB0BW_planReviewLineSelected{background:var(--fcg-bg-active)}.fnB0BW_planReviewLineNumber{color:var(--fcg-text-tertiary);font-family:var(--fcg-font-mono);text-align:right}.fnB0BW_planReviewLineText{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.fnB0BW_planReviewRemark{border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-2);gap:8px;padding:10px 11px;display:grid}.fnB0BW_pickerVisibilityPanel{gap:var(--fcg-space-2);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-1);padding:12px;display:grid}.fnB0BW_pickerVisibilityPanel[data-open=false]{padding:9px 12px}.fnB0BW_pickerVisibilityToggle{width:100%;color:var(--fcg-text-secondary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:0;display:flex}.fnB0BW_pickerVisibilityToggle:hover{color:var(--fcg-text-primary)}.fnB0BW_pickerVisibilityToggle:focus-visible{border-radius:var(--fcg-radius-sm);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_pickerVisibilityGear{flex:none;align-items:center;display:inline-flex}.fnB0BW_pickerVisibilityToggleLabel{min-width:0;font-size:var(--fcg-font-caption);flex:auto;font-weight:620;line-height:18px}.fnB0BW_pickerVisibilityBadge{border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:var(--fcg-text-tertiary);flex:none;padding:0 6px;font-size:10px;font-style:normal;font-weight:600;line-height:16px}.fnB0BW_pickerVisibilityChevron{flex:none;align-items:center;transition:transform .12s;display:inline-flex}.fnB0BW_pickerVisibilityToggle[aria-expanded=true] .fnB0BW_pickerVisibilityChevron{transform:rotate(180deg)}.fnB0BW_pickerVisibilityMaster{cursor:pointer;align-items:center;gap:10px;display:flex}.fnB0BW_pickerVisibilityText{gap:2px;min-width:0;display:grid}.fnB0BW_pickerVisibilityText strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption);font-weight:620;line-height:18px}.fnB0BW_pickerVisibilityText small{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:17px}.fnB0BW_pickerVisibilityHead{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:10px;display:flex}.fnB0BW_pickerVisibilityLabel{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:18px}.fnB0BW_pickerVisibilityActions{align-items:center;gap:10px;display:flex}.fnB0BW_pickerVisibilityLink{color:var(--fcg-brand);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;padding:0;line-height:18px}.fnB0BW_pickerVisibilityLink:hover{text-decoration:underline}.fnB0BW_pickerVisibilityLink:focus-visible{border-radius:var(--fcg-radius-sm);box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);outline:none}.fnB0BW_pickerVisibilityList{scrollbar-color:var(--fcg-line-strong) transparent;scrollbar-width:thin;gap:2px;max-height:224px;display:grid;overflow-y:auto}.fnB0BW_pickerVisibilityList[data-visible=false]{opacity:.5}.fnB0BW_pickerVisibilityRow{border-radius:var(--fcg-radius-sm);cursor:pointer;align-items:center;gap:8px;min-width:0;padding:4px 6px;display:flex}.fnB0BW_pickerVisibilityRow:hover{background:var(--fcg-bg-layer-2)}.fnB0BW_pickerVisibilityCheck{width:14px;height:14px;accent-color:var(--fcg-brand);cursor:pointer;flex:none;margin:0}.fnB0BW_pickerVisibilityName{min-width:0;color:var(--fcg-text-secondary);font-family:var(--fcg-font-mono);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:11px;line-height:18px;overflow:hidden}.fnB0BW_pickerVisibilityPaid{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-danger) 12%, transparent);color:var(--fcg-danger);flex:none;padding:0 6px;font-size:10px;font-style:normal;font-weight:700;line-height:16px}.fnB0BW_pickerVisibilityFree{border-radius:var(--fcg-radius-full);background:color-mix(in srgb, var(--fcg-success) 12%, transparent);color:var(--fcg-success);flex:none;padding:0 6px;font-size:10px;font-style:normal;font-weight:700;line-height:16px}.fnB0BW_pickerVisibilityEmpty{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}";
18268
+ const tagId$6 = "freecodego/settings-tab.module.css";
18269
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
18070
18270
  const tag = document.createElement("style");
18071
18271
  tag.dataset.plugin = "freecodego";
18072
- tag.dataset.pluginCss = tagId$5;
18073
- tag.textContent = css$5;
18272
+ tag.dataset.pluginCss = tagId$6;
18273
+ tag.textContent = css$6;
18074
18274
  document.head.appendChild(tag);
18075
18275
  }
18076
18276
  var settings_tab_module_css_default = {
@@ -18125,6 +18325,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18125
18325
  "authLayout": "fnB0BW_authLayout",
18126
18326
  "authNote": "fnB0BW_authNote",
18127
18327
  "authNotice": "fnB0BW_authNotice",
18328
+ "authNoticeAlert": "fnB0BW_authNoticeAlert",
18128
18329
  "authPanel": "fnB0BW_authPanel",
18129
18330
  "authSocialButton": "fnB0BW_authSocialButton",
18130
18331
  "authSocialRow": "fnB0BW_authSocialRow",
@@ -21298,13 +21499,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21298
21499
  }
21299
21500
  //#endregion
21300
21501
  //#region \0dsh-css:/home/runner/work/dsh-plugin-freecodego/dsh-plugin-freecodego/plugin/packages/freecodego/harness-ui/src/client/provider-card.module.css.mjs
21301
- const css$4 = "._166XFq_card{gap:var(--fcg-space-3);padding:var(--fcg-space-4);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-1);transition:border-color var(--fcg-fast) var(--fcg-ease);display:grid}._166XFq_card:hover{border-color:var(--fcg-line)}._166XFq_head{justify-content:space-between;align-items:flex-start;gap:var(--fcg-space-3);min-width:0;display:flex}._166XFq_identity{align-items:center;gap:var(--fcg-space-3);min-width:0;display:flex}._166XFq_mark{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);width:34px;height:34px;color:var(--fcg-text-secondary);flex:none;place-items:center;display:grid}._166XFq_names{gap:2px;min-width:0;display:grid}._166XFq_name{color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;font-weight:650;line-height:20px;overflow:hidden}._166XFq_title{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:16px;overflow:hidden}._166XFq_status{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:nowrap;flex:none;align-items:center;gap:6px;line-height:18px;display:inline-flex}._166XFq_statusDot{corner-shape:round;background:currentColor;border-radius:50%;width:6px;height:6px}._166XFq_statusLive{color:var(--fcg-success)}._166XFq_statusWarn{color:var(--fcg-warn-label)}._166XFq_statusIdle{color:var(--fcg-text-tertiary)}._166XFq_summary{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:18px}._166XFq_description{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}._166XFq_cloud{flex-wrap:wrap;gap:6px;display:flex}._166XFq_tag{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);max-width:100%;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;align-items:center;padding:3px 9px;line-height:18px;display:inline-flex;overflow:hidden}._166XFq_tagMono{font-family:var(--fcg-font-mono);font-size:11px}._166XFq_more{color:var(--fcg-text-tertiary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;align-self:flex-start;padding:0;line-height:18px}._166XFq_more:hover{color:var(--fcg-brand)}._166XFq_more:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);border-radius:var(--fcg-radius-sm);outline:none}._166XFq_actions{justify-content:flex-end;align-items:center;gap:var(--fcg-space-2);flex-wrap:wrap;display:flex}._166XFq_body{gap:var(--fcg-space-2);min-width:0;display:grid}@media (width<=520px){._166XFq_head{flex-direction:column;align-items:stretch}._166XFq_status{align-self:flex-start}}._166XFq_notice{border:1px solid color-mix(in srgb, var(--fcg-success) 28%, var(--fcg-line-subtle));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-success) 8%, var(--fcg-bg-layer-1));color:var(--fcg-success);font-size:var(--fcg-font-caption);align-items:center;gap:7px;padding:7px 9px;font-weight:600;line-height:18px;display:flex}._166XFq_noticeDot{corner-shape:round;background:currentColor;border-radius:50%;flex:none;width:6px;height:6px}";
21302
- const tagId$4 = "freecodego/provider-card.module.css";
21303
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
21502
+ const css$5 = "._166XFq_card{gap:var(--fcg-space-3);padding:var(--fcg-space-4);border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-lg);background:var(--fcg-bg-layer-1);transition:border-color var(--fcg-fast) var(--fcg-ease);display:grid}._166XFq_card:hover{border-color:var(--fcg-line)}._166XFq_head{justify-content:space-between;align-items:flex-start;gap:var(--fcg-space-3);min-width:0;display:flex}._166XFq_identity{align-items:center;gap:var(--fcg-space-3);min-width:0;display:flex}._166XFq_mark{border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);width:34px;height:34px;color:var(--fcg-text-secondary);flex:none;place-items:center;display:grid}._166XFq_names{gap:2px;min-width:0;display:grid}._166XFq_name{color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg);letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;font-weight:650;line-height:20px;overflow:hidden}._166XFq_title{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:16px;overflow:hidden}._166XFq_status{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);white-space:nowrap;flex:none;align-items:center;gap:6px;line-height:18px;display:inline-flex}._166XFq_statusDot{corner-shape:round;background:currentColor;border-radius:50%;width:6px;height:6px}._166XFq_statusLive{color:var(--fcg-success)}._166XFq_statusWarn{color:var(--fcg-warn-label)}._166XFq_statusIdle{color:var(--fcg-text-tertiary)}._166XFq_summary{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);line-height:18px}._166XFq_description{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);line-height:18px}._166XFq_cloud{flex-wrap:wrap;gap:6px;display:flex}._166XFq_tag{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);max-width:100%;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;align-items:center;padding:3px 9px;line-height:18px;display:inline-flex;overflow:hidden}._166XFq_tagMono{font-family:var(--fcg-font-mono);font-size:11px}._166XFq_more{color:var(--fcg-text-tertiary);cursor:pointer;font:inherit;font-size:var(--fcg-font-caption);background:0 0;border:0;align-self:flex-start;padding:0;line-height:18px}._166XFq_more:hover{color:var(--fcg-brand)}._166XFq_more:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb, var(--fcg-brand) 22%, transparent);border-radius:var(--fcg-radius-sm);outline:none}._166XFq_actions{justify-content:flex-end;align-items:center;gap:var(--fcg-space-2);flex-wrap:wrap;display:flex}._166XFq_body{gap:var(--fcg-space-2);min-width:0;display:grid}@media (width<=520px){._166XFq_head{flex-direction:column;align-items:stretch}._166XFq_status{align-self:flex-start}}._166XFq_notice{border:1px solid color-mix(in srgb, var(--fcg-success) 28%, var(--fcg-line-subtle));border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-success) 8%, var(--fcg-bg-layer-1));color:var(--fcg-success);font-size:var(--fcg-font-caption);align-items:center;gap:7px;padding:7px 9px;font-weight:600;line-height:18px;display:flex}._166XFq_noticeDot{corner-shape:round;background:currentColor;border-radius:50%;flex:none;width:6px;height:6px}";
21503
+ const tagId$5 = "freecodego/provider-card.module.css";
21504
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
21304
21505
  const tag = document.createElement("style");
21305
21506
  tag.dataset.plugin = "freecodego";
21306
- tag.dataset.pluginCss = tagId$4;
21307
- tag.textContent = css$4;
21507
+ tag.dataset.pluginCss = tagId$5;
21508
+ tag.textContent = css$5;
21308
21509
  document.head.appendChild(tag);
21309
21510
  }
21310
21511
  var provider_card_module_css_default = {
@@ -21876,20 +22077,25 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21876
22077
  * provider whose roster the plugin does not curate. VyceAI is the exception:
21877
22078
  * every one of its routes is metered, so listing its whole directory in the
21878
22079
  * chat menu by default would offer a dozen ways to spend money the moment a key
21879
- * is saved. Only the two routes that shipped as the defaults start switched on;
22080
+ * is saved. Only the three routes that are the default offer start switched on;
21880
22081
  * the rest are one click away, and an explicit choice is stored as the opposite
21881
22082
  * of the default (see {@link isModelVisible}).
21882
22083
  *
21883
22084
  * Ids are the bare wire ids, so both the `vyce/deepseek-v4.1` the picker spells
21884
22085
  * and a bare `deepseek-v4.1` match.
21885
22086
  *
21886
- * This list is only consulted for a row whose price is `unknown`: a priced route
21887
- * is decided by its price, which for a metered provider means every row there is
21888
- * off until asked for — including the two named here. Naming a route therefore
21889
- * says "this one is the default when nobody has priced it", not "this one
21890
- * overrides its price".
21891
- */
21892
- const DEFAULT_VISIBLE_MODELS = { vyce: ["deepseek-v4.1", "qwen3.8-flash"] };
22087
+ * A name outranks a price here. `deepseek-v4.1` publishes per-million prices, so
22088
+ * the row's own description reads as `paid` — and it is still one of the
22089
+ * defaults, because the whole point of the provider is that the daily check-in
22090
+ * credit pays for exactly these routes; dropping it would hide the offer the
22091
+ * provider was configured for. A priced route that is *not* named is unaffected
22092
+ * and still starts off (see {@link METERED_DEFAULT_HIDDEN_PROVIDERS}).
22093
+ */
22094
+ const DEFAULT_VISIBLE_MODELS = { vyce: [
22095
+ "deepseek-v4.1",
22096
+ "qwen3.8-flash",
22097
+ "claude-sonnet-4-6"
22098
+ ] };
21893
22099
  /**
21894
22100
  * Providers whose priced rows start hidden unless the user asks for them.
21895
22101
  *
@@ -21927,7 +22133,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21927
22133
  * @param modelId - the picker's model id.
21928
22134
  * @returns the model id without its `@group:N` suffix.
21929
22135
  */
21930
- function bareModelId(modelId) {
22136
+ function bareModelId$1(modelId) {
21931
22137
  return /^(.*?)(?:@group:\d+)$/u.exec(modelId.trim())?.[1] ?? modelId.trim();
21932
22138
  }
21933
22139
  /**
@@ -21937,7 +22143,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21937
22143
  * @returns the storage key.
21938
22144
  */
21939
22145
  function modelVisibilityKey(provider, modelId) {
21940
- return `${provider.trim().toLowerCase()}\u0000${bareModelId(modelId)}`;
22146
+ return `${provider.trim().toLowerCase()}\u0000${bareModelId$1(modelId)}`;
21941
22147
  }
21942
22148
  /**
21943
22149
  * Whether a provider's section is shown.
@@ -21952,9 +22158,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21952
22158
  /**
21953
22159
  * Whether a provider's rows start shown.
21954
22160
  *
21955
- * A priced row of a metered provider starts hidden; beyond that a curated
21956
- * provider (see {@link DEFAULT_VISIBLE_MODELS}) starts hidden unless the model
21957
- * is named, and every other provider starts shown.
22161
+ * A curated provider (see {@link DEFAULT_VISIBLE_MODELS}) is decided by its own
22162
+ * list and nothing else: naming a route is the plugin's statement about which
22163
+ * routes this provider is configured for, and it is a sharper answer than the
22164
+ * price is — which is why a named route stays on even when the directory prices
22165
+ * it. Every other provider follows the price rule: a priced row of a metered
22166
+ * provider starts hidden, the rest start shown.
21958
22167
  *
21959
22168
  * An `unknown` price is not read as `paid`: a route the directory does not price
21960
22169
  * is still an answer to "may this be in my list" that the user already gave by
@@ -21967,10 +22176,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21967
22176
  */
21968
22177
  function modelDefaultVisible(provider, modelId, price = "unknown") {
21969
22178
  const key = provider.trim().toLowerCase();
21970
- if (price === "paid" && METERED_DEFAULT_HIDDEN_PROVIDERS.has(key)) return false;
21971
22179
  const set = DEFAULT_VISIBLE_SETS.get(key);
21972
- if (set === void 0) return true;
21973
- const bare = bareModelId(modelId);
22180
+ if (set === void 0) return !(price === "paid" && METERED_DEFAULT_HIDDEN_PROVIDERS.has(key));
22181
+ const bare = bareModelId$1(modelId);
21974
22182
  const prefix = `${key}/`;
21975
22183
  const slug = (bare.toLowerCase().startsWith(prefix) ? bare.slice(prefix.length) : bare).toLowerCase();
21976
22184
  return set.has(slug);
@@ -22101,7 +22309,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22101
22309
  for (const model of models) {
22102
22310
  const id = model.id.trim();
22103
22311
  if (id === "") continue;
22104
- const key = bareModelId(id);
22312
+ const key = bareModelId$1(id);
22105
22313
  if (seen.has(key)) continue;
22106
22314
  seen.add(key);
22107
22315
  out.push({
@@ -22247,7 +22455,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22247
22455
  const hiddenCount = unique.filter((model, index) => !isModelVisible(visibility, provider, model.id, modelRows[index].price)).length;
22248
22456
  const rows = unique.map((model, index) => ({
22249
22457
  model,
22250
- label: model.label ?? bareModelId(model.id),
22458
+ label: model.label ?? bareModelId$1(model.id),
22251
22459
  price: modelRows[index].price,
22252
22460
  visible: isModelVisible(visibility, provider, model.id, modelRows[index].price)
22253
22461
  }));
@@ -26906,6 +27114,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
26906
27114
  default: return id;
26907
27115
  }
26908
27116
  }
27117
+ /**
27118
+ * Turn one account-card failure into a sentence the reader can act on.
27119
+ *
27120
+ * The Host reports what the gateway said, which is the right thing to carry and
27121
+ * the wrong thing to show: "FreeCodeGo authentication request failed with HTTP
27122
+ * 400: invalid or expired verification code" is a log line. The shapes this card
27123
+ * can do something about are named; everything else keeps the gateway's wording
27124
+ * with the transport prefix trimmed, so the cause is the first thing read rather
27125
+ * than the fourth.
27126
+ * @param detail - the message the Host forwarded.
27127
+ * @param language - copy locale of the card.
27128
+ * @returns the line the card prints above its submit button.
27129
+ */
27130
+ function describeAccountError(detail, language) {
27131
+ const zh = language === "zh";
27132
+ if (/did not become available/i.test(detail)) return zh ? "Harness Host 没有提供账号接口,请重启 Harness 后重试;若仍如此,请更新插件。" : "The Harness Host exposes no account endpoint — restart the Harness and try again; update the plugin if it stays missing.";
27133
+ const missing = /^FreeCodeGo response (.+?) must be/i.exec(detail)?.[1];
27134
+ if (missing !== void 0) return zh ? `服务返回的账号数据缺少「${missing}」字段,插件无法完成登录。请更新插件后重试。` : `The gateway's account payload is missing \`${missing}\`, so the sign-in cannot complete. Update the plugin and try again.`;
27135
+ if (/backend is not configured|backendNotConfigured/i.test(detail)) return zh ? "尚未配置 FreeCodeGo 后端地址,请先在插件设置里填写后再试。" : "No FreeCodeGo backend is configured; set its address in the plugin settings first.";
27136
+ if (/REG_DISABLED|registration is disabled/i.test(detail)) return zh ? "当前未开放注册,请联系站点管理员或使用已有账号登录。" : "Registration is currently disabled — ask the site owner, or sign in to an existing account.";
27137
+ if (/Invalid email/i.test(detail)) return zh ? "邮箱格式不正确,请检查后再试。" : "That email address is not valid.";
27138
+ if (/Invalid request/i.test(detail)) return zh ? "请求被服务拒绝(字段不合法),请检查邮箱、验证码与密码后重试。" : "The gateway rejected the request as malformed; check the address, code and password.";
27139
+ if (/invalid or expired verification code|INVALID_VERIFY_CODE/i.test(detail)) return zh ? "验证码无效或已过期。请点「发送验证码」重新获取,并确认邮箱与收验证码时填的是同一个。" : "That verification code is invalid or expired. Send a new one, and check the address matches the one the code was sent to.";
27140
+ if (/VERIFY_CODE_TOO_FREQUENT|too frequent|rate.?limit/i.test(detail)) return zh ? "验证码发送过于频繁,请等冷却结束后再试。" : "Verification codes are being requested too often; wait out the cooldown.";
27141
+ if (/EMAIL_EXISTS|email.*(?:already )?exists|already registered|email.*has an account/i.test(detail)) return zh ? "该邮箱已经注册过,请直接用「登录」;忘记密码可用找回密码。" : "That email already has an account — sign in instead, or use password recovery.";
27142
+ if (/INVITATION_CODE|invitation/i.test(detail)) return zh ? "本次注册需要邀请码,请填写后重试。" : "This registration needs an invitation code.";
27143
+ if (/turnstile/i.test(detail)) return zh ? "人机校验未通过,请稍后重试。" : "The human-verification check did not pass; try again shortly.";
27144
+ if (/password/i.test(detail) && /(too short|min=|at least|length)/i.test(detail)) return zh ? "密码太短,至少 6 位。" : "That password is too short — six characters is the minimum.";
27145
+ if (/ACCOUNT_LOGIN_REJECTED|invalid (?:password|credential)|incorrect password|unauthori[sz]ed|401|403/i.test(detail)) return zh ? "邮箱或密码不正确,请检查后重试。" : "That email and password do not match an account.";
27146
+ if (/Failed to fetch|NetworkError|network|ECONN|timeout|aborted|abort/i.test(detail)) return zh ? "网络请求失败或被中断,请检查网络后重试。" : "The request failed or was interrupted — check the connection and try again.";
27147
+ const stripped = detail.replace(/^FreeCodeGo (?:\w+ )?request failed with HTTP (\d+):?\s*/i, (_match, status) => `${zh ? "服务返回 HTTP" : "the gateway answered HTTP"} ${status}${zh ? ":" : ": "}`);
27148
+ return zh && /[A-Za-z]{3}/.test(stripped) ? `操作未成功(${stripped})` : stripped;
27149
+ }
26909
27150
  function describeAgnesError(detail) {
26910
27151
  if (/AGNES_VERIFICATION_RATE_LIMITED|sending too frequently/i.test(detail)) return "验证码发送过于频繁,请等待约 60 秒后再试;重复点击不会加快发送。";
26911
27152
  if (/AGNES_PASSWORD_RESET_UNSUPPORTED|password reset is not supported for this account/i.test(detail)) return "该 Agnes 账号不支持密码重置,通常是第三方登录或特殊账号类型;请使用原登录方式,或在 Agnes 官网处理账号。";
@@ -27148,7 +27389,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27148
27389
  ]
27149
27390
  });
27150
27391
  }
27151
- function FreeCodeGoSettingsTab({ catalog, accountStatus, accountRememberedPassword, login, register, sendVerifyCode, oauthLogin, oauthPendingSendVerifyCode, oauthPendingBind, oauthPendingCreate, completeMfa, logout, deviceSessions, revokeDeviceSession, revokeAllSessions, setDefaultModel, setDefaultEngine, backendCatalog, readMediaDefaults, nativeModelCatalog, pickerModelDirectory, currentSessionId, vyceStatus, vyceSetKey, logfareStatus, logfareRegister, logfareSetTrainingOptIn, logfareSetKey, accountDetail, sensenovaStatus, sensenovaSetKey, nvidiaStatus, nvidiaSetKey, useConnectionEpoch, paymentPlans, paymentChannels, paymentConfig, gatewayModelPrices, paymentCheckout, paymentOrder, paymentVerify, paymentCancel, paymentReceiptEmail, paymentReceiptDocument, paymentStripeReceiptDocument, paymentOrders, agnesStatus, agnesSendVerification, agnesSendPasswordReset, agnesResetPassword, agnesLogin, agnesRegister, agnesLogout, agnesRemoveAccount, agnesRefresh, agnesCreateApiKey, clineStatus, clineStartLogin, clinePollLogin, clineAddAccount, clineRemoveAccount, clineRefresh, clineLogout, workbuddyStatus, workbuddyImportDesktopLogin, workbuddyStartBrowserLogin, workbuddyPollBrowserLogin, workbuddyLogout, workbuddyRemoveAccount, workbuddyRefreshCredits, qoderStatus, qoderStartBrowserLogin, qoderPollBrowserLogin, qoderLogout, qoderRemoveAccount, qoderSetActiveAccount, qoderRefreshQuota, qoderCheckin: runQoderCheckin, traeStatus, traeStartBrowserLogin, traePollBrowserLogin, traeSubmitCallback, traeCancelBrowserLogin, traeModels: loadTraeModels, traeLogout, traeRemoveAccount, traeSetActiveAccount, traeCheckin: runTraeCheckin, codexRuntimeStatus, codexRuntimePackages, codexRuntimeInstall, codexRuntimeRemove, claudeRuntimeStatus, claudeRuntimePackages, claudeRuntimeInstall, claudeRuntimeRemove, pluginUpdateStatus, pluginUpdateCheck, pluginUpdateSetEnabled, pluginUpdateInstall, pluginUpdateRollback, communityCatalog, communityCatalogIcons, communityEnvironment, communityInstalled, communityInstall, communityUninstall, capabilityMarketplace, mcpPresetInstall, skillPresetInstall, skillPresetRemove, skillPlacements, skillPlacementPrefer, capabilities, readLocalCapabilities, capabilitiesSetEnabled, setLocalCapability, setModelCategoryDirect, modelCategorySet, pluginConflictStatus, pluginConflictSetEnabled, headroomStatus, headroomSetEnabled, headroomUpdate, deferredToolsStatus, deferredToolsSetEnabled, reviewStatus, reviewStart, reviewUpdate, guardSettingsStatus, guardSettingsUpdate, workbuddySetActiveAccount, automationSettingsStatus, automationSettingsUpdate, sandboxModeStatus, sandboxModeSet, trustFolderStatus, trustFolderGrant, trustFolderRevoke, projectConfigReport, advisorStatus, advisorUpdate, engineeringStatus, engineeringSetEnabled, language, t }) {
27392
+ function FreeCodeGoSettingsTab({ catalog, accountStatus, accountRememberedPassword, login, register, sendVerifyCode, forgotPassword, resetPassword, oauthLogin, oauthPendingSendVerifyCode, oauthPendingBind, oauthPendingCreate, completeMfa, logout, deviceSessions, revokeDeviceSession, revokeAllSessions, setDefaultModel, setDefaultEngine, backendCatalog, readMediaDefaults, nativeModelCatalog, pickerModelDirectory, currentSessionId, vyceStatus, vyceSetKey, logfareStatus, logfareRegister, logfareSetTrainingOptIn, logfareSetKey, accountDetail, sensenovaStatus, sensenovaSetKey, nvidiaStatus, nvidiaSetKey, useConnectionEpoch, paymentPlans, paymentChannels, paymentConfig, gatewayModelPrices, paymentCheckout, paymentOrder, paymentVerify, paymentCancel, paymentReceiptEmail, paymentReceiptDocument, paymentStripeReceiptDocument, paymentOrders, agnesStatus, agnesSendVerification, agnesSendPasswordReset, agnesResetPassword, agnesLogin, agnesRegister, agnesLogout, agnesRemoveAccount, agnesRefresh, agnesCreateApiKey, clineStatus, clineStartLogin, clinePollLogin, clineAddAccount, clineRemoveAccount, clineRefresh, clineLogout, workbuddyStatus, workbuddyImportDesktopLogin, workbuddyStartBrowserLogin, workbuddyPollBrowserLogin, workbuddyLogout, workbuddyRemoveAccount, workbuddyRefreshCredits, qoderStatus, qoderStartBrowserLogin, qoderPollBrowserLogin, qoderLogout, qoderRemoveAccount, qoderSetActiveAccount, qoderRefreshQuota, qoderCheckin: runQoderCheckin, traeStatus, traeStartBrowserLogin, traePollBrowserLogin, traeSubmitCallback, traeCancelBrowserLogin, traeModels: loadTraeModels, traeLogout, traeRemoveAccount, traeSetActiveAccount, traeCheckin: runTraeCheckin, codexRuntimeStatus, codexRuntimePackages, codexRuntimeInstall, codexRuntimeRemove, claudeRuntimeStatus, claudeRuntimePackages, claudeRuntimeInstall, claudeRuntimeRemove, pluginUpdateStatus, pluginUpdateCheck, pluginUpdateSetEnabled, pluginUpdateInstall, pluginUpdateRollback, communityCatalog, communityCatalogIcons, communityEnvironment, communityInstalled, communityInstall, communityUninstall, capabilityMarketplace, mcpPresetInstall, skillPresetInstall, skillPresetRemove, skillPlacements, skillPlacementPrefer, capabilities, readLocalCapabilities, capabilitiesSetEnabled, setLocalCapability, setModelCategoryDirect, modelCategorySet, pluginConflictStatus, pluginConflictSetEnabled, headroomStatus, headroomSetEnabled, headroomUpdate, deferredToolsStatus, deferredToolsSetEnabled, mediaGenerationStatus, mediaGenerationSetEnabled, reviewStatus, reviewStart, reviewUpdate, guardSettingsStatus, guardSettingsUpdate, workbuddySetActiveAccount, automationSettingsStatus, automationSettingsUpdate, sandboxModeStatus, sandboxModeSet, trustFolderStatus, trustFolderGrant, trustFolderRevoke, projectConfigReport, advisorStatus, advisorUpdate, engineeringStatus, engineeringSetEnabled, language, t }) {
27152
27393
  const [state, setState] = (0, react.useState)(() => cachedSettings(language, catalog)?.state ?? {
27153
27394
  ...fallbackSettings(),
27154
27395
  syncStatus: "refreshing"
@@ -27171,6 +27412,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27171
27412
  const [verifySending, setVerifySending] = (0, react.useState)(false);
27172
27413
  const [oauthBusy, setOauthBusy] = (0, react.useState)(void 0);
27173
27414
  const [oauthNotice, setOauthNotice] = (0, react.useState)(void 0);
27415
+ /**
27416
+ * The account card's own failure line, drawn beside the button that produced it.
27417
+ *
27418
+ * The panel-wide `actionError` renders at the top of this tab, above the page
27419
+ * tabs, and this card sits well below them: a rejected registration therefore
27420
+ * put its reason on a line the reader had already scrolled past, which is
27421
+ * indistinguishable from a button that does nothing. Same reasoning as
27422
+ * `checkoutError` further down, and the same class of defect.
27423
+ */
27424
+ const [authNotice, setAuthNotice] = (0, react.useState)(void 0);
27425
+ /** Which credential form is in flight, so its own button says so and refuses a second press. */
27426
+ const [authBusy, setAuthBusy] = (0, react.useState)(void 0);
27427
+ /**
27428
+ * Password recovery, opened from the login form.
27429
+ *
27430
+ * It is a mode of the card rather than a third tab: recovery is something the
27431
+ * sign-in form offers when it did not work, and putting it beside 登录/注册 as
27432
+ * an equal would invite it from people who know their password.
27433
+ */
27434
+ const [resetOpen, setResetOpen] = (0, react.useState)(false);
27435
+ const [resetCode, setResetCode] = (0, react.useState)("");
27436
+ const [resetSecret, setResetSecret] = (0, react.useState)("");
27437
+ const [resetSending, setResetSending] = (0, react.useState)(false);
27438
+ const [resetBusy, setResetBusy] = (0, react.useState)(false);
27439
+ const [resetCooldown, setResetCooldown] = (0, react.useState)(0);
27174
27440
  const [oauthPending, setOauthPending] = (0, react.useState)(void 0);
27175
27441
  const [oauthPendingMode, setOauthPendingMode] = (0, react.useState)("create");
27176
27442
  const [oauthPendingEmail, setOauthPendingEmail] = (0, react.useState)("");
@@ -27431,12 +27697,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27431
27697
  };
27432
27698
  }, [accountRememberedPassword]);
27433
27699
  (0, react.useEffect)(() => {
27434
- if (agnesRegisterCooldown === 0 && agnesResetCooldown === 0 && verifyCooldown === 0 && oauthPendingVerifyCooldown === 0) return;
27700
+ if (agnesRegisterCooldown === 0 && agnesResetCooldown === 0 && verifyCooldown === 0 && oauthPendingVerifyCooldown === 0 && resetCooldown === 0) return;
27435
27701
  const timer = globalThis.setInterval(() => {
27436
27702
  setAgnesRegisterCooldown((value) => Math.max(0, value - 1));
27437
27703
  setAgnesResetCooldown((value) => Math.max(0, value - 1));
27438
27704
  setVerifyCooldown((value) => Math.max(0, value - 1));
27439
27705
  setOauthPendingVerifyCooldown((value) => Math.max(0, value - 1));
27706
+ setResetCooldown((value) => Math.max(0, value - 1));
27440
27707
  }, 1e3);
27441
27708
  return () => {
27442
27709
  globalThis.clearInterval(timer);
@@ -27445,7 +27712,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27445
27712
  agnesRegisterCooldown,
27446
27713
  agnesResetCooldown,
27447
27714
  verifyCooldown,
27448
- oauthPendingVerifyCooldown
27715
+ oauthPendingVerifyCooldown,
27716
+ resetCooldown
27449
27717
  ]);
27450
27718
  (0, react.useEffect)(() => {
27451
27719
  if (selectedPaymentType !== "" && paymentType !== selectedPaymentType) setPaymentType(selectedPaymentType);
@@ -28434,9 +28702,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
28434
28702
  };
28435
28703
  const submitLogin = (event) => {
28436
28704
  event.preventDefault();
28705
+ if (authBusy !== void 0) return;
28706
+ setAuthNotice(void 0);
28707
+ setAuthBusy("login");
28437
28708
  login(email, password, rememberLogin, rememberPassword).then((result) => {
28438
28709
  if (!result.ok) {
28439
- setState(failed(result.error.message));
28710
+ setAuthNotice(describeAccountError(result.error.message, language));
28440
28711
  return;
28441
28712
  }
28442
28713
  try {
@@ -28449,30 +28720,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
28449
28720
  keepSignedIn: false
28450
28721
  }));
28451
28722
  } catch (error) {
28452
- setState(failed(error instanceof Error ? error.message : String(error)));
28723
+ setAuthNotice(describeAccountError(error instanceof Error ? error.message : String(error), language));
28453
28724
  return;
28454
28725
  }
28455
28726
  setPassword("");
28456
28727
  load(true);
28457
28728
  }, (error) => {
28458
- setState(failed(error instanceof Error ? error.message : String(error)));
28729
+ setAuthNotice(describeAccountError(error instanceof Error ? error.message : String(error), language));
28730
+ }).finally(() => {
28731
+ setAuthBusy(void 0);
28459
28732
  });
28460
28733
  };
28461
28734
  const submitRegister = () => {
28462
- if (register === void 0) return;
28735
+ if (register === void 0 || authBusy !== void 0) return;
28736
+ setAuthNotice(void 0);
28737
+ setAuthBusy("register");
28463
28738
  register({
28464
28739
  email,
28465
28740
  password,
28466
28741
  ...verifyCode === "" ? {} : { verifyCode }
28467
28742
  }).then((result) => {
28468
28743
  if (!result.ok) {
28469
- setState(failed(result.error.message));
28744
+ setAuthNotice(describeAccountError(result.error.message, language));
28470
28745
  return;
28471
28746
  }
28472
28747
  setPassword("");
28473
28748
  load(true);
28474
28749
  }, (error) => {
28475
- setState(failed(error instanceof Error ? error.message : String(error)));
28750
+ setAuthNotice(describeAccountError(error instanceof Error ? error.message : String(error), language));
28751
+ }).finally(() => {
28752
+ setAuthBusy(void 0);
28476
28753
  });
28477
28754
  };
28478
28755
  /** Registration and MFA live in their own forms now, so both need an
@@ -28490,21 +28767,96 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
28490
28767
  * resend button cannot be hammered into the upstream rate limit. */
28491
28768
  const sendAccountVerifyCode = () => {
28492
28769
  if (sendVerifyCode === void 0 || verifySending || verifyCooldown > 0) return;
28770
+ setAuthNotice(void 0);
28493
28771
  setVerifySending(true);
28494
28772
  sendVerifyCode(email).then((result) => {
28495
28773
  if (!result.ok) {
28496
- setState(failed(result.error.message));
28774
+ setAuthNotice(describeAccountError(result.error.message, language));
28497
28775
  if (/too frequent|rate.?limit/i.test(result.error.message)) setVerifyCooldown(60);
28498
28776
  return;
28499
28777
  }
28500
28778
  setVerifyCooldown(result.value.countdown > 0 ? result.value.countdown : 60);
28501
28779
  }, (error) => {
28502
- setState(failed(error instanceof Error ? error.message : String(error)));
28780
+ setAuthNotice(describeAccountError(error instanceof Error ? error.message : String(error), language));
28503
28781
  }).finally(() => {
28504
28782
  setVerifySending(false);
28505
28783
  });
28506
28784
  };
28507
28785
  /**
28786
+ * Ask the gateway to mail the password-reset code.
28787
+ *
28788
+ * This is the code channel an *existing* account has: the registration one
28789
+ * refuses a registered address outright, which is what left a returning user
28790
+ * with no way forward from the 注册 tab.
28791
+ */
28792
+ const sendResetCode = () => {
28793
+ if (forgotPassword === void 0 || resetSending || resetCooldown > 0) return;
28794
+ const target = email.trim();
28795
+ if (target === "") {
28796
+ setAuthNotice(language === "zh" ? "请先填写邮箱,再获取重置验证码。" : "Enter the address first, then request the reset code.");
28797
+ return;
28798
+ }
28799
+ setAuthNotice(void 0);
28800
+ setResetSending(true);
28801
+ forgotPassword(target).then((result) => {
28802
+ if (!result.ok) {
28803
+ setAuthNotice(describeAccountError(result.error.message, language));
28804
+ if (/too frequent|rate.?limit/i.test(result.error.message)) setResetCooldown(60);
28805
+ return;
28806
+ }
28807
+ setResetCooldown(60);
28808
+ setAuthNotice(language === "zh" ? "若该邮箱已注册,重置验证码已发送;请查收邮件后填写验证码与新密码。" : "If that address has an account, a reset code is on its way — enter the code and a new password below.");
28809
+ }, (error) => {
28810
+ setAuthNotice(describeAccountError(error instanceof Error ? error.message : String(error), language));
28811
+ }).finally(() => {
28812
+ setResetSending(false);
28813
+ });
28814
+ };
28815
+ /**
28816
+ * Replace the password, then hand the user back to the sign-in form.
28817
+ *
28818
+ * The reset is deliberately not a sign-in: the gateway issues no session for
28819
+ * it, so promising one would leave the card showing an account the Host does
28820
+ * not have. The new password is cleared from state the moment the gateway
28821
+ * accepts it, and the login form keeps the address.
28822
+ */
28823
+ const submitResetPassword = (event) => {
28824
+ event.preventDefault();
28825
+ if (resetPassword === void 0 || resetBusy) return;
28826
+ const target = email.trim();
28827
+ const code = resetCode.trim();
28828
+ if (target === "") {
28829
+ setAuthNotice(language === "zh" ? "请先填写邮箱。" : "Enter the email address first.");
28830
+ return;
28831
+ }
28832
+ if (code === "") {
28833
+ setAuthNotice(language === "zh" ? "请填写邮件里的重置验证码。" : "Enter the reset code from the email.");
28834
+ return;
28835
+ }
28836
+ setAuthNotice(void 0);
28837
+ setResetBusy(true);
28838
+ resetPassword({
28839
+ email: target,
28840
+ verifyCode: code,
28841
+ newPassword: resetSecret
28842
+ }).then((result) => {
28843
+ if (!result.ok) {
28844
+ setAuthNotice(describeAccountError(result.error.message, language));
28845
+ return;
28846
+ }
28847
+ setResetSecret("");
28848
+ setResetCode("");
28849
+ setPassword("");
28850
+ setResetOpen(false);
28851
+ setAuthTab("login");
28852
+ setAuthNotice(language === "zh" ? "密码已重置,请用新密码登录。" : "Password reset. Sign in with the new password.");
28853
+ }, (error) => {
28854
+ setAuthNotice(describeAccountError(error instanceof Error ? error.message : String(error), language));
28855
+ }).finally(() => {
28856
+ setResetBusy(false);
28857
+ });
28858
+ };
28859
+ /**
28508
28860
  * Federated sign-in. One code path serves both the placeholder and the real
28509
28861
  * interface: until the Host exposes its OAuth endpoints it rejects with
28510
28862
  * `OAUTH_NOT_WIRED`, which is explained in place rather than looking like a
@@ -29619,6 +29971,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
29619
29971
  update: headroomUpdate,
29620
29972
  language
29621
29973
  }),
29974
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MediaGenerationPanel, {
29975
+ status: mediaGenerationStatus,
29976
+ setEnabled: mediaGenerationSetEnabled,
29977
+ language
29978
+ }),
29622
29979
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DeferredToolsPanel, {
29623
29980
  status: deferredToolsStatus,
29624
29981
  setEnabled: deferredToolsSetEnabled,
@@ -31181,6 +31538,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
31181
31538
  "aria-selected": authTab === "login",
31182
31539
  onClick: () => {
31183
31540
  setAuthTab("login");
31541
+ setAuthNotice(void 0);
31184
31542
  },
31185
31543
  children: t("login")
31186
31544
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
@@ -31190,6 +31548,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
31190
31548
  "aria-selected": authTab === "register",
31191
31549
  onClick: () => {
31192
31550
  setAuthTab("register");
31551
+ setAuthNotice(void 0);
31193
31552
  },
31194
31553
  children: t("register")
31195
31554
  })]
@@ -31359,6 +31718,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
31359
31718
  role: "status",
31360
31719
  children: oauthNotice
31361
31720
  }),
31721
+ authNotice === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
31722
+ className: settings_tab_module_css_default.authNoticeAlert,
31723
+ role: "alert",
31724
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: authNotice }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
31725
+ className: settings_tab_module_css_default.button,
31726
+ type: "button",
31727
+ onClick: () => {
31728
+ setAuthNotice(void 0);
31729
+ },
31730
+ children: language === "zh" ? "知道了" : "Dismiss"
31731
+ })]
31732
+ }),
31362
31733
  state.account.status === "mfa-required" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
31363
31734
  className: settings_tab_module_css_default.authStack,
31364
31735
  onSubmit: submitMfaCode,
@@ -31429,13 +31800,81 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
31429
31800
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
31430
31801
  className: `${settings_tab_module_css_default.authSubmit} ${settings_tab_module_css_default.authFull}`,
31431
31802
  type: "submit",
31432
- children: language === "zh" ? "注册并登录" : "Create account"
31803
+ disabled: authBusy !== void 0,
31804
+ "aria-busy": authBusy === "register",
31805
+ children: authBusy === "register" ? language === "zh" ? "注册中…" : "Creating account…" : language === "zh" ? "注册并登录" : "Create account"
31433
31806
  }),
31434
31807
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
31435
31808
  className: `${settings_tab_module_css_default.authNote} ${settings_tab_module_css_default.authFull}`,
31436
31809
  children: language === "zh" ? "注册成功后本机自动登录,免费账号即可调度全部免费模型。" : "A free account signs in automatically and can run every free model."
31437
31810
  })
31438
31811
  ]
31812
+ }) : resetOpen && forgotPassword !== void 0 && resetPassword !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
31813
+ className: settings_tab_module_css_default.authForm,
31814
+ onSubmit: submitResetPassword,
31815
+ children: [
31816
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
31817
+ className: settings_tab_module_css_default.input,
31818
+ type: "email",
31819
+ required: true,
31820
+ value: email,
31821
+ onChange: (event) => {
31822
+ setEmail(event.target.value);
31823
+ },
31824
+ placeholder: t("email"),
31825
+ autoComplete: "email"
31826
+ }),
31827
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
31828
+ className: settings_tab_module_css_default.authCodeRow,
31829
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
31830
+ className: settings_tab_module_css_default.input,
31831
+ value: resetCode,
31832
+ onChange: (event) => {
31833
+ setResetCode(event.target.value);
31834
+ },
31835
+ placeholder: language === "zh" ? "重置验证码" : "Reset code",
31836
+ autoComplete: "one-time-code"
31837
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
31838
+ className: settings_tab_module_css_default.authCodeSend,
31839
+ type: "button",
31840
+ disabled: resetSending || resetCooldown > 0,
31841
+ onClick: sendResetCode,
31842
+ children: resetCooldown > 0 ? `${resetCooldown}s` : resetSending ? language === "zh" ? "发送中…" : "Sending…" : language === "zh" ? "发送重置码" : "Send code"
31843
+ })]
31844
+ }),
31845
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
31846
+ className: `${settings_tab_module_css_default.input} ${settings_tab_module_css_default.authFull}`,
31847
+ type: "password",
31848
+ required: true,
31849
+ minLength: 6,
31850
+ value: resetSecret,
31851
+ onChange: (event) => {
31852
+ setResetSecret(event.target.value);
31853
+ },
31854
+ placeholder: language === "zh" ? "新密码(至少 6 位)" : "New password (6+ characters)",
31855
+ autoComplete: "new-password"
31856
+ }),
31857
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
31858
+ className: `${settings_tab_module_css_default.authSubmit} ${settings_tab_module_css_default.authFull}`,
31859
+ type: "submit",
31860
+ disabled: resetBusy || resetSecret === "",
31861
+ "aria-busy": resetBusy,
31862
+ children: resetBusy ? language === "zh" ? "重置中…" : "Resetting…" : language === "zh" ? "重置密码" : "Reset password"
31863
+ }),
31864
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
31865
+ className: `${settings_tab_module_css_default.authTab} ${settings_tab_module_css_default.authFull}`,
31866
+ type: "button",
31867
+ onClick: () => {
31868
+ setResetOpen(false);
31869
+ setAuthNotice(void 0);
31870
+ },
31871
+ children: language === "zh" ? "返回登录" : "Back to sign-in"
31872
+ }),
31873
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
31874
+ className: `${settings_tab_module_css_default.authNote} ${settings_tab_module_css_default.authFull}`,
31875
+ children: language === "zh" ? "重置验证码与注册验证码不是同一个:注册码只发给未注册的邮箱,已注册的账号请用这里的「发送重置码」。" : "The reset code is not the registration code: the registration channel refuses an address that already has an account, which is what this one is for."
31876
+ })
31877
+ ]
31439
31878
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
31440
31879
  className: settings_tab_module_css_default.authForm,
31441
31880
  onSubmit: submitLogin,
@@ -31499,7 +31938,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
31499
31938
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
31500
31939
  className: `${settings_tab_module_css_default.authSubmit} ${settings_tab_module_css_default.authFull}`,
31501
31940
  type: "submit",
31502
- children: t("login")
31941
+ disabled: authBusy !== void 0,
31942
+ "aria-busy": authBusy === "login",
31943
+ children: authBusy === "login" ? language === "zh" ? "登录中…" : "Signing in…" : t("login")
31944
+ }),
31945
+ forgotPassword === void 0 || resetPassword === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
31946
+ className: `${settings_tab_module_css_default.authTab} ${settings_tab_module_css_default.authFull}`,
31947
+ type: "button",
31948
+ onClick: () => {
31949
+ setResetOpen(true);
31950
+ setAuthNotice(void 0);
31951
+ },
31952
+ children: language === "zh" ? "忘记密码?" : "Forgot your password?"
31503
31953
  }),
31504
31954
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
31505
31955
  className: `${settings_tab_module_css_default.authNote} ${settings_tab_module_css_default.authFull}`,
@@ -31932,7 +32382,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
31932
32382
  }),
31933
32383
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
31934
32384
  className: settings_tab_module_css_default.sectionMeta,
31935
- children: "默认关闭。安装或加载第三方 DSH 插件时,系统会在启动前检查重复 Tool、命令、设置 namespace、HTTP 路由、模型 Provider 和界面 Slot。冲突时以官方本体的插件优先:本插件自带的同名实现会让位;其余情况保留先启用的插件,并自动停用后加载的冲突条目。"
32385
+ children: "默认开启。安装或加载第三方 DSH 插件时,系统会在该插件启动前检查重复 Tool、命令、设置 namespace、HTTP 路由、模型 Provider 和界面 Slot。冲突时以官方本体的插件优先:本插件自带的同名实现会让位;其余情况保留先启用的插件,并自动停用后加载的冲突条目。"
31936
32386
  }),
31937
32387
  loadError === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
31938
32388
  className: settings_tab_module_css_default.alert,
@@ -31941,7 +32391,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
31941
32391
  }),
31942
32392
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
31943
32393
  className: settings_tab_module_css_default.extensionRow,
31944
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "自动修复冲突" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: "默认关闭:重复注册由本体自己的注册校验报告,冲突的第三方插件可能因此启动失败。开启后本插件会在冲突插件启动前停用它。" })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
32394
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "自动修复冲突" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: "默认开启:重复注册由本体自己的注册校验报告,冲突的第三方插件可能因此启动失败。开启时本插件会在冲突插件启动前停用它;关闭后本插件不再拦截任何条目的启动。" })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
31945
32395
  className: settings_tab_module_css_default.switch,
31946
32396
  "aria-label": "自动修复插件冲突",
31947
32397
  type: "checkbox",
@@ -32783,6 +33233,206 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
32783
33233
  * request. Without a readout, a user cannot tell whether the switch did
32784
33234
  * anything, and the numbers are the whole argument for leaving it on.
32785
33235
  */
33236
+ /**
33237
+ * The image and video generation switch.
33238
+ *
33239
+ * It documents the routes as well as the tools, because the question a user arrives
33240
+ * with is "can this draw me a picture, and with what?" — and the answer is a property
33241
+ * of the providers they configured, not of this plugin's source. The two name lists
33242
+ * come from the Host: `gated` is what the switch owns and `registered` is what this
33243
+ * profile actually mounted, so a profile with no Agnes account is not described as
33244
+ * missing tools it never had.
33245
+ */
33246
+ function MediaGenerationPanel(input) {
33247
+ const isZh = input.language === "zh";
33248
+ const [snapshot, setSnapshot] = (0, react.useState)(void 0);
33249
+ const [busy, setBusy] = (0, react.useState)(false);
33250
+ const [error, setError] = (0, react.useState)(void 0);
33251
+ const refresh = () => {
33252
+ if (input.status === void 0) return;
33253
+ input.status().then((result) => {
33254
+ if (result.ok) setSnapshot(result.value);
33255
+ }).catch(() => void 0);
33256
+ };
33257
+ (0, react.useEffect)(() => {
33258
+ refresh();
33259
+ }, [input.status]);
33260
+ const toggle = (enabled) => {
33261
+ if (input.setEnabled === void 0) return;
33262
+ setBusy(true);
33263
+ setError(void 0);
33264
+ input.setEnabled(enabled).then((result) => {
33265
+ if (result.ok) setSnapshot(result.value);
33266
+ else {
33267
+ setError(result.error.message);
33268
+ refresh();
33269
+ }
33270
+ }).catch((reason) => {
33271
+ setError(reason instanceof Error ? reason.message : String(reason));
33272
+ refresh();
33273
+ }).finally(() => {
33274
+ setBusy(false);
33275
+ });
33276
+ };
33277
+ /**
33278
+ * The wire protocol each provider family is spoken to with.
33279
+ *
33280
+ * Kept beside the switch rather than only in the README because the useful question
33281
+ * is "does *my* provider have a route here?", and that is answered by matching the
33282
+ * id the user typed into the Harness model page. The protocol is chosen from the
33283
+ * provider, never from the model name: a model whose id contains "video" is still
33284
+ * served the way its provider serves it.
33285
+ */
33286
+ const videoProtocols = [
33287
+ ["kling / kuaishou / 可灵", "/videos/text2video · image2video · multi-image2video → 同路径 + {id} · HS256 JWT · 5 或 10 秒"],
33288
+ ["volcengine / ark / seedance / doubao", "/contents/generations/tasks → /contents/generations/tasks/{id}"],
33289
+ ["dashscope / aliyun / qwen / wanx", "/api/v1/services/aigc/video-generation/video-synthesis(需 X-DashScope-Async: enable)→ /api/v1/tasks/{id}"],
33290
+ ["minimax / hailuo", "/v2/video_generation → /v2/query/video_generation/{id}"],
33291
+ ["vidu", "/ent/v2/text2video · img2video · start-end2video · reference2video → /ent/v2/tasks/{id}/creations · Authorization: Token"],
33292
+ ["google / gemini(Veo)", "/models/{model}:predictLongRunning → operation name"],
33293
+ ["xai / grok", "/videos/generations → /videos(给源视频时 /videos/edits · /videos/extensions)· 2–10 秒"],
33294
+ ["openai", "/videos → /videos/{id}"],
33295
+ ["网关与任何未识别 provider", "/videos/generations → /videos/generations/{id}"]
33296
+ ];
33297
+ const imageProtocols = [
33298
+ ["openai / grok / 网关 / 未识别 provider", "/images/generations;带参考图改走 /images/edits"],
33299
+ ["volcengine / ark / seedance / doubao", "仍是 /images/generations,源图放 image: [...](Seedream 融合形状)"],
33300
+ ["google / gemini", "/models/{model}:generateContent,responseModalities: [TEXT, IMAGE]"],
33301
+ ["google / gemini + 模型名含 imagen", "/models/{model}:predict,源图必须内联 base64"],
33302
+ ["dashscope / qwen / aliyun", "/api/v1/services/aigc/multimodal-generation/generation,size 写作 2048*2048"]
33303
+ ];
33304
+ const protocolPanel = (title, rows) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
33305
+ className: settings_tab_module_css_default.details,
33306
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
33307
+ className: settings_tab_module_css_default.detailsSummary,
33308
+ children: title
33309
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
33310
+ style: {
33311
+ display: "grid",
33312
+ gap: 6,
33313
+ padding: "8px 0"
33314
+ },
33315
+ children: rows.map(([provider, endpoint]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
33316
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: provider }),
33317
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("br", {}),
33318
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: endpoint })
33319
+ ] }, provider))
33320
+ })]
33321
+ });
33322
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
33323
+ className: settings_tab_module_css_default.section,
33324
+ children: [
33325
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
33326
+ className: settings_tab_module_css_default.sectionHeader,
33327
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
33328
+ className: settings_tab_module_css_default.kicker,
33329
+ children: "MEDIA"
33330
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
33331
+ className: settings_tab_module_css_default.sectionName,
33332
+ children: isZh ? "生图与视频" : "Image and video generation"
33333
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
33334
+ className: `${settings_tab_module_css_default.badge} ${snapshot?.enabled ? settings_tab_module_css_default.badgeLive : ""}`,
33335
+ children: snapshot?.enabled ? isZh ? "已开启" : "On" : isZh ? "已关闭" : "Off"
33336
+ })]
33337
+ }),
33338
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
33339
+ className: settings_tab_module_css_default.sectionMeta,
33340
+ children: isZh ? "默认开启。开启后,AI 可以按「默认模型」里的图片/视频选择为你直接生成图片和视频;默认模型在设置 → 模型分类的下拉框里选。关掉它,这组工具会从模型工具表里整体消失(不是调用时报错),前提是这几份 JSONSchema 每步都随请求重发,而多数回合用不上。生音频与转写不受这个开关影响:一个往工作区写文件,一个从工作区读文件。" : "On by default. With it on, the model can generate images and videos for you using the defaults chosen under Settings → Model categories. Turning it off removes the whole group from the model's tool list instead of failing the call: those JSONSchemas ride along with every request and most turns never use them. Audio generation and transcription are deliberately outside this switch — one writes a file into the workspace and the other reads one out of it."
33341
+ }),
33342
+ error === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
33343
+ className: settings_tab_module_css_default.alert,
33344
+ role: "alert",
33345
+ children: isZh ? `开关未能保存:${error}` : `The switch was not saved: ${error}`
33346
+ }),
33347
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
33348
+ className: settings_tab_module_css_default.extensionRow,
33349
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: isZh ? "启用生图与生视频" : "Enable image and video generation" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: isZh ? "开关本身就是模型的可见性:关闭后这些工具不会被注册,因此不可能出现「看得见却调不动」;重新打开即刻恢复。" : "The switch *is* visibility: with it off these tools are not registered at all, so the model can never see one it cannot call. Turning it back on restores them immediately." })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
33350
+ className: settings_tab_module_css_default.switch,
33351
+ "aria-label": isZh ? "启用生图与生视频" : "Enable image and video generation",
33352
+ type: "checkbox",
33353
+ checked: snapshot?.enabled === true,
33354
+ onChange: (event) => {
33355
+ toggle(event.target.checked);
33356
+ },
33357
+ disabled: input.setEnabled === void 0 || busy
33358
+ })]
33359
+ }),
33360
+ snapshot === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
33361
+ className: settings_tab_module_css_default.statGrid,
33362
+ children: [
33363
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
33364
+ className: settings_tab_module_css_default.statCell,
33365
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
33366
+ className: settings_tab_module_css_default.statLabel,
33367
+ children: isZh ? "开关管辖" : "Governed"
33368
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
33369
+ className: settings_tab_module_css_default.statValue,
33370
+ children: snapshot.gated.length
33371
+ })]
33372
+ }),
33373
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
33374
+ className: settings_tab_module_css_default.statCell,
33375
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
33376
+ className: settings_tab_module_css_default.statLabel,
33377
+ children: isZh ? "当前已注册" : "Registered now"
33378
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
33379
+ className: settings_tab_module_css_default.statValue,
33380
+ children: snapshot.registered.length
33381
+ })]
33382
+ }),
33383
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
33384
+ className: settings_tab_module_css_default.statCell,
33385
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
33386
+ className: settings_tab_module_css_default.statLabel,
33387
+ children: isZh ? "生音频 / 转写(另计)" : "Audio / transcribe (separate)"
33388
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
33389
+ className: settings_tab_module_css_default.statValue,
33390
+ children: 2
33391
+ })]
33392
+ })
33393
+ ]
33394
+ }),
33395
+ snapshot === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
33396
+ className: settings_tab_module_css_default.details,
33397
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
33398
+ className: settings_tab_module_css_default.detailsSummary,
33399
+ children: isZh ? `管辖的工具(${snapshot.gated.length} 个)` : `Tools this switch governs (${snapshot.gated.length})`
33400
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
33401
+ className: settings_tab_module_css_default.chipGrid,
33402
+ children: snapshot.gated.map((name) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
33403
+ className: settings_tab_module_css_default.statChip,
33404
+ children: [name, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: snapshot.registered.includes(name) ? isZh ? "已注册" : "registered" : isZh ? "未注册" : "absent" })]
33405
+ }, name))
33406
+ })]
33407
+ }),
33408
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
33409
+ className: settings_tab_module_css_default.sectionMeta,
33410
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
33411
+ style: {
33412
+ cursor: "pointer",
33413
+ margin: "8px 0"
33414
+ },
33415
+ children: isZh ? "支持哪些协议和模型?" : "Which protocols and models are supported?"
33416
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
33417
+ style: {
33418
+ display: "grid",
33419
+ gap: 8,
33420
+ padding: "8px 0"
33421
+ },
33422
+ children: [
33423
+ protocolPanel(isZh ? "生视频:按 provider 选的 9 条协议" : "Video: nine protocols, chosen by provider", videoProtocols),
33424
+ protocolPanel(isZh ? "生图:按 provider 选的 5 条协议" : "Image: five protocols, chosen by provider", imageProtocols),
33425
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", { children: [
33426
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: isZh ? "模型名单是活的,不是钉死的" : "The model roster is live, not pinned" }),
33427
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("br", {}),
33428
+ isZh ? "候选路线每次请求实时汇总四路来源:Harness「模型」页里你配置的提供商、托管目录、Logfare 目录、Agnes 目录。分类按名字自动识别(veo / seedance / kling / sora / wan → 视频;gpt-image / dall-e / imagen / flux / sdxl / stable-diffusion → 生图),也可以用上面的「模型分类」手动指定或改回去。调用带逐路线熔断:同一路线连续两次失败就先让位给健康路线五分钟;只有「路线本身的问题」(限流、额度、端点缺失)才降级到下一条,密钥错或 prompt 被拒会直接报错,不会换一条路线重复付费。" : "Routes are collected live on every request from four sources: the providers you configured on the Harness Models page, the managed catalog, the Logfare directory, and the Agnes directory. Categories are inferred from the id (veo / seedance / kling / sora / wan → video; gpt-image / dall-e / imagen / flux / sdxl / stable-diffusion → image) and can be overridden by hand in Model categories above. Every call carries a per-route breaker: two consecutive failures put that route behind healthy ones for five minutes, and only a route's own problem (rate limit, quota, missing endpoint) falls through to the next one — a wrong key or a refused prompt fails outright rather than paying for another attempt."
33429
+ ] })
33430
+ ]
33431
+ })]
33432
+ })
33433
+ ]
33434
+ });
33435
+ }
32786
33436
  function DeferredToolsPanel(input) {
32787
33437
  const isZh = input.language === "zh";
32788
33438
  const [snapshot, setSnapshot] = (0, react.useState)(void 0);
@@ -35992,14 +36642,107 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
35992
36642
  return order?.state.trim().toLowerCase() === "pending";
35993
36643
  }
35994
36644
  //#endregion
36645
+ //#region src/client/session-delete-menu-item.tsx
36646
+ /**
36647
+ * The session row menu's destructive entry: delete this conversation.
36648
+ *
36649
+ * The hover control beside a row already deletes directly (see
36650
+ * {@link ./session-delete-overlay}), but that control only exists while a
36651
+ * pointer is over the row — it is invisible on touch, awkward on a trackpad, and
36652
+ * a user who opened the "..." menu has no way to reach it. So the same action
36653
+ * gets a named row, placed after Archive (`order` 500, where the shipped rows
36654
+ * step by 100), and it is the row this plugin's delete capability governs.
36655
+ *
36656
+ * Two behaviours are shared with the overlay rather than restated:
36657
+ *
36658
+ * - **The failure is reported once.** Deleting from the menu closes the menu
36659
+ * first, so the row that would say "it failed" is gone. The row therefore
36660
+ * publishes its failure as an event and the overlay — which lives in the
36661
+ * frame-wide layer and outlives any menu — draws it. One surface, two callers.
36662
+ * - **The capability gate is the same switch.** `sessionDeleteEnabled` decides
36663
+ * whether the control exists at all; the row hides itself instead of offering
36664
+ * an action the Host will refuse.
36665
+ *
36666
+ * It also follows the overlay's rule about *which* row may be deleted: the
36667
+ * session on screen is not one of them, because the Host refuses to delete the
36668
+ * session it is holding open. The overlay states that as "its row never shows the
36669
+ * control"; a named row that stayed visible would offer an action that always
36670
+ * fails, so this one is absent for the same session too.
36671
+ *
36672
+ * @module client/session-delete-menu-item
36673
+ */
36674
+ /**
36675
+ * Carries one failed deletion from the menu row to the overlay that reports it.
36676
+ *
36677
+ * `detail` is the Host's own message: it is the only copy that can name the
36678
+ * refusal (`SESSION_DELETE_REQUIRES_CLOSED_SESSION`, and so on), and the overlay
36679
+ * appends its localized lead-in around it.
36680
+ */
36681
+ const SESSION_DELETE_FAILED_EVENT = "freecodego:session-delete-failed";
36682
+ /**
36683
+ * Publish one failed deletion to whichever surface reports it.
36684
+ *
36685
+ * Dispatched on `globalThis` rather than passed down: the overlay is a sibling
36686
+ * registration in another slot and has no prop path from here.
36687
+ * @param message - the Host's refusal text.
36688
+ */
36689
+ function reportSessionDeleteFailure(message) {
36690
+ globalThis.dispatchEvent(new CustomEvent(SESSION_DELETE_FAILED_EVENT, { detail: message }));
36691
+ }
36692
+ /**
36693
+ * Render the destructive menu row, or nothing while the capability is off.
36694
+ * @param props - the row identity, the delete share, and the locale seat.
36695
+ * @returns the menu row, or null.
36696
+ */
36697
+ function SessionDeleteMenuItem({ sessionId, useMenuOpenState, deleteSession, isEnabled, currentSessionId, t }) {
36698
+ const open = currentSessionId?.();
36699
+ const [, setMenuOpen] = useMenuOpenState();
36700
+ const [enabled, setEnabled] = (0, react.useState)(true);
36701
+ (0, react.useEffect)(() => {
36702
+ if (isEnabled === void 0) return;
36703
+ let active = true;
36704
+ isEnabled().then((value) => {
36705
+ if (active) setEnabled(value);
36706
+ }, () => void 0);
36707
+ return () => {
36708
+ active = false;
36709
+ };
36710
+ }, [isEnabled]);
36711
+ (0, react.useEffect)(() => {
36712
+ const changed = (event) => {
36713
+ if (!(event instanceof CustomEvent)) return;
36714
+ const snapshot = event.detail;
36715
+ setEnabled(snapshot.sessionDeleteEnabled !== false);
36716
+ };
36717
+ globalThis.addEventListener(CAPABILITY_CHANGE_EVENT, changed);
36718
+ return () => {
36719
+ globalThis.removeEventListener(CAPABILITY_CHANGE_EVENT, changed);
36720
+ };
36721
+ }, []);
36722
+ if (!enabled || open !== void 0 && open === sessionId) return null;
36723
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MenuItemButton, {
36724
+ danger: true,
36725
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 14 }),
36726
+ onSelect: () => {
36727
+ setMenuOpen(false);
36728
+ deleteSession(sessionId).catch((error) => {
36729
+ const message = error instanceof Error ? error.message : String(error);
36730
+ console.error("FreeCodeGo session deletion failed:", error);
36731
+ reportSessionDeleteFailure(message);
36732
+ });
36733
+ },
36734
+ children: t("sessionDelete")
36735
+ });
36736
+ }
36737
+ //#endregion
35995
36738
  //#region \0dsh-css:/home/runner/work/dsh-plugin-freecodego/dsh-plugin-freecodego/plugin/packages/freecodego/harness-ui/src/client/toolbar-actions.module.css.mjs
35996
- const css$3 = "._0YUfBa_action,._0YUfBa_engine{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);min-height:28px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:6px;display:inline-flex}._0YUfBa_action{cursor:pointer;padding:0 9px}._0YUfBa_action:hover{color:var(--fcg-text-primary);background:var(--fcg-bg-hover)}._0YUfBa_sessionDeleteOverlay{z-index:60;line-height:0;position:fixed}._0YUfBa_sessionDeleteError{z-index:61;border:1px solid color-mix(in srgb, var(--fcg-danger) 28%, transparent);border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-danger) 7%, var(--fcg-bg-layer-2));max-width:min(420px,100vw - 24px);color:var(--fcg-danger);font-size:var(--fcg-font-caption);box-shadow:var(--fcg-shadow-2);align-items:center;gap:8px;padding:8px 12px;line-height:18px;display:flex;position:fixed;top:12px;left:50%;transform:translate(-50%)}._0YUfBa_sessionDeleteError span{overflow-wrap:anywhere}._0YUfBa_sessionDeleteError button{color:inherit;cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:15px;line-height:1}._0YUfBa_sessionDelete{width:16px;min-height:16px;color:var(--fcg-danger);background:0 0;border:0;border-radius:4px;padding:0}._0YUfBa_sessionDelete:hover{color:var(--fcg-danger);background:color-mix(in srgb, var(--fcg-danger) 10%, transparent)}._0YUfBa_engine{padding-left:9px}._0YUfBa_engineControl{align-items:center;display:inline-flex;position:relative}._0YUfBa_engineLabel{color:var(--fcg-text-tertiary)}._0YUfBa_engineSelect{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;outline:0;padding:4px 8px 4px 0}._0YUfBa_execution{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);min-height:24px;color:var(--fcg-text-tertiary);background:var(--fcg-bg-layer-2);font-size:var(--fcg-font-caption);white-space:nowrap;align-items:center;padding:0 8px;display:inline-flex}._0YUfBa_executionNative{border-color:color-mix(in srgb, var(--fcg-success) 42%, var(--fcg-line));color:var(--fcg-success);background:color-mix(in srgb, var(--fcg-success) 7%, var(--fcg-bg-layer-2))}._0YUfBa_engineNotice{z-index:20;border:1px solid color-mix(in srgb, var(--fcg-warn) 45%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);width:248px;color:var(--fcg-text-secondary);box-shadow:var(--fcg-shadow-2);font-size:var(--fcg-font-caption);grid-template-columns:1fr auto;gap:2px 10px;padding:10px 28px 10px 12px;line-height:1.45;display:grid;position:absolute;top:calc(100% + 8px);left:0}._0YUfBa_engineNotice strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption)}._0YUfBa_engineNotice span{grid-column:1/-1}._0YUfBa_engineNotice button{color:var(--fcg-text-tertiary);cursor:pointer;background:0 0;border:0;padding:0;font-size:17px;line-height:1;position:absolute;top:6px;right:7px}._0YUfBa_engineError{z-index:20;border:1px solid color-mix(in srgb, var(--fcg-danger) 32%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:color-mix(in srgb, var(--fcg-danger) 7%, var(--fcg-bg-layer-2));width:248px;color:var(--fcg-danger);font-size:var(--fcg-font-caption);box-shadow:var(--fcg-shadow-2);overflow-wrap:anywhere;padding:9px 12px;line-height:1.45;position:absolute;top:calc(100% + 8px);left:0}._0YUfBa_engineError span{display:block}._0YUfBa_engineRetry{border:1px solid color-mix(in srgb, var(--fcg-danger) 32%, var(--fcg-line));border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:inherit;font:inherit;cursor:pointer;margin-top:6px;padding:2px 8px}._0YUfBa_engineRetry:hover{background:color-mix(in srgb, var(--fcg-danger) 12%, var(--fcg-bg-layer-2))}";
35997
- const tagId$3 = "freecodego/toolbar-actions.module.css";
35998
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
36739
+ const css$4 = "._0YUfBa_action,._0YUfBa_engine{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);min-height:28px;color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);align-items:center;gap:6px;display:inline-flex}._0YUfBa_action{cursor:pointer;padding:0 9px}._0YUfBa_action:hover{color:var(--fcg-text-primary);background:var(--fcg-bg-hover)}._0YUfBa_sessionDeleteOverlay{z-index:60;line-height:0;position:fixed}._0YUfBa_sessionDeleteError{z-index:61;border:1px solid color-mix(in srgb, var(--fcg-danger) 28%, transparent);border-radius:var(--fcg-radius-sm);background:color-mix(in srgb, var(--fcg-danger) 7%, var(--fcg-bg-layer-2));max-width:min(420px,100vw - 24px);color:var(--fcg-danger);font-size:var(--fcg-font-caption);box-shadow:var(--fcg-shadow-2);align-items:center;gap:8px;padding:8px 12px;line-height:18px;display:flex;position:fixed;top:12px;left:50%;transform:translate(-50%)}._0YUfBa_sessionDeleteError span{overflow-wrap:anywhere}._0YUfBa_sessionDeleteError button{color:inherit;cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:15px;line-height:1}._0YUfBa_sessionDelete{width:16px;min-height:16px;color:var(--fcg-danger);background:0 0;border:0;border-radius:4px;padding:0}._0YUfBa_sessionDelete:hover{color:var(--fcg-danger);background:color-mix(in srgb, var(--fcg-danger) 10%, transparent)}._0YUfBa_engine{padding-left:9px}._0YUfBa_engineControl{align-items:center;display:inline-flex;position:relative}._0YUfBa_engineLabel{color:var(--fcg-text-tertiary)}._0YUfBa_engineSelect{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;outline:0;padding:4px 8px 4px 0}._0YUfBa_execution{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);min-height:24px;color:var(--fcg-text-tertiary);background:var(--fcg-bg-layer-2);font-size:var(--fcg-font-caption);white-space:nowrap;align-items:center;padding:0 8px;display:inline-flex}._0YUfBa_executionNative{border-color:color-mix(in srgb, var(--fcg-success) 42%, var(--fcg-line));color:var(--fcg-success);background:color-mix(in srgb, var(--fcg-success) 7%, var(--fcg-bg-layer-2))}._0YUfBa_engineNotice{z-index:20;border:1px solid color-mix(in srgb, var(--fcg-warn) 45%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:var(--fcg-bg-layer-2);width:248px;color:var(--fcg-text-secondary);box-shadow:var(--fcg-shadow-2);font-size:var(--fcg-font-caption);grid-template-columns:1fr auto;gap:2px 10px;padding:10px 28px 10px 12px;line-height:1.45;display:grid;position:absolute;top:calc(100% + 8px);left:0}._0YUfBa_engineNotice strong{color:var(--fcg-text-primary);font-size:var(--fcg-font-caption)}._0YUfBa_engineNotice span{grid-column:1/-1}._0YUfBa_engineNotice button{color:var(--fcg-text-tertiary);cursor:pointer;background:0 0;border:0;padding:0;font-size:17px;line-height:1;position:absolute;top:6px;right:7px}._0YUfBa_engineError{z-index:20;border:1px solid color-mix(in srgb, var(--fcg-danger) 32%, var(--fcg-line));border-radius:var(--fcg-radius-md);background:color-mix(in srgb, var(--fcg-danger) 7%, var(--fcg-bg-layer-2));width:248px;color:var(--fcg-danger);font-size:var(--fcg-font-caption);box-shadow:var(--fcg-shadow-2);overflow-wrap:anywhere;padding:9px 12px;line-height:1.45;position:absolute;top:calc(100% + 8px);left:0}._0YUfBa_engineError span{display:block}._0YUfBa_engineRetry{border:1px solid color-mix(in srgb, var(--fcg-danger) 32%, var(--fcg-line));border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:inherit;font:inherit;cursor:pointer;margin-top:6px;padding:2px 8px}._0YUfBa_engineRetry:hover{background:color-mix(in srgb, var(--fcg-danger) 12%, var(--fcg-bg-layer-2))}";
36740
+ const tagId$4 = "freecodego/toolbar-actions.module.css";
36741
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
35999
36742
  const tag = document.createElement("style");
36000
36743
  tag.dataset.plugin = "freecodego";
36001
- tag.dataset.pluginCss = tagId$3;
36002
- tag.textContent = css$3;
36744
+ tag.dataset.pluginCss = tagId$4;
36745
+ tag.textContent = css$4;
36003
36746
  document.head.appendChild(tag);
36004
36747
  }
36005
36748
  var toolbar_actions_module_css_default = {
@@ -36065,6 +36808,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
36065
36808
  globalThis.removeEventListener("freecodego:capability-change", changed);
36066
36809
  };
36067
36810
  }, []);
36811
+ (0, react.useEffect)(() => {
36812
+ const failed = (event) => {
36813
+ if (!(event instanceof CustomEvent)) return;
36814
+ setError(String(event.detail));
36815
+ };
36816
+ globalThis.addEventListener(SESSION_DELETE_FAILED_EVENT, failed);
36817
+ return () => {
36818
+ globalThis.removeEventListener(SESSION_DELETE_FAILED_EVENT, failed);
36819
+ };
36820
+ }, []);
36068
36821
  const overlayRef = (0, react.useRef)(null);
36069
36822
  (0, react.useEffect)(() => {
36070
36823
  let frame;
@@ -36189,7 +36942,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
36189
36942
  event.stopPropagation();
36190
36943
  remove(session.id);
36191
36944
  },
36192
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutline16, { size: 16 })
36945
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 16 })
36193
36946
  })
36194
36947
  }, session.id))] });
36195
36948
  }
@@ -36257,6 +37010,374 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
36257
37010
  });
36258
37011
  }
36259
37012
  //#endregion
37013
+ //#region \0dsh-css:/home/runner/work/dsh-plugin-freecodego/dsh-plugin-freecodego/plugin/packages/freecodego/harness-ui/src/client/web-search-provider-section.module.css.mjs
37014
+ const css$3 = ".i0u2iW_section{border-top:1px solid var(--fcg-line-subtle);gap:6px;padding:16px 0 4px;display:grid}.i0u2iW_head{justify-content:space-between;align-items:center;gap:12px;display:flex}.i0u2iW_title{color:var(--fcg-text-primary);font-size:var(--fcg-font-body-lg);margin:0;font-weight:650;line-height:20px}.i0u2iW_hint{color:var(--fcg-text-tertiary);font-size:var(--fcg-font-caption);margin:0;line-height:18px}.i0u2iW_current{color:var(--fcg-text-secondary);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:18px}.i0u2iW_reset{border:1px solid var(--fcg-line);border-radius:var(--fcg-radius-full);background:var(--fcg-bg-layer-2);color:var(--fcg-text-secondary);font:inherit;font-size:var(--fcg-font-caption);cursor:pointer;padding:2px 10px}.i0u2iW_reset:hover{border-color:var(--fcg-line-strong,var(--fcg-line));color:var(--fcg-text-primary)}.i0u2iW_group{gap:4px;margin-top:6px;display:grid}.i0u2iW_provider{color:var(--fcg-text-tertiary);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.i0u2iW_rows{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px;display:grid}.i0u2iW_row{border:1px solid var(--fcg-line-subtle);border-radius:var(--fcg-radius-sm);background:var(--fcg-bg-layer-1);color:var(--fcg-text-secondary);text-align:left;font:inherit;cursor:pointer;grid-template-columns:minmax(0,1fr);gap:1px;padding:6px 10px;display:grid}.i0u2iW_row:hover:not(:disabled){border-color:var(--fcg-line);background:var(--fcg-bg-layer-2)}.i0u2iW_row:disabled{cursor:progress;opacity:.6}.i0u2iW_rowActive{border-color:color-mix(in srgb, var(--fcg-brand) 45%, var(--fcg-line));background:color-mix(in srgb, var(--fcg-brand) 7%, var(--fcg-bg-layer-1));color:var(--fcg-text-primary)}.i0u2iW_rowLabel{color:inherit;font-size:var(--fcg-font-caption);text-overflow:ellipsis;white-space:nowrap;line-height:18px;overflow:hidden}.i0u2iW_rowMeta{color:var(--fcg-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:15px;overflow:hidden}.i0u2iW_done{color:var(--fcg-success);font-size:var(--fcg-font-caption);margin:0;line-height:18px}.i0u2iW_problem{color:var(--fcg-danger);font-size:var(--fcg-font-caption);overflow-wrap:anywhere;margin:0;line-height:18px}";
37015
+ const tagId$3 = "freecodego/web-search-provider-section.module.css";
37016
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
37017
+ const tag = document.createElement("style");
37018
+ tag.dataset.plugin = "freecodego";
37019
+ tag.dataset.pluginCss = tagId$3;
37020
+ tag.textContent = css$3;
37021
+ document.head.appendChild(tag);
37022
+ }
37023
+ var web_search_provider_section_module_css_default = {
37024
+ "current": "i0u2iW_current",
37025
+ "done": "i0u2iW_done",
37026
+ "group": "i0u2iW_group",
37027
+ "head": "i0u2iW_head",
37028
+ "hint": "i0u2iW_hint",
37029
+ "problem": "i0u2iW_problem",
37030
+ "provider": "i0u2iW_provider",
37031
+ "reset": "i0u2iW_reset",
37032
+ "row": "i0u2iW_row",
37033
+ "rowActive": "i0u2iW_rowActive",
37034
+ "rowLabel": "i0u2iW_rowLabel",
37035
+ "rowMeta": "i0u2iW_rowMeta",
37036
+ "rows": "i0u2iW_rows",
37037
+ "section": "i0u2iW_section",
37038
+ "title": "i0u2iW_title"
37039
+ };
37040
+ //#endregion
37041
+ //#region src/client/web-search-provider-section.tsx
37042
+ /**
37043
+ * The web-search page's missing control: which model answers the search.
37044
+ *
37045
+ * The stock page over `web-search-deepseek` edits the key, the endpoint, and the
37046
+ * search budget, and leaves the model at the schema default (`deepseek-v4-flash`
37047
+ * against DeepSeek's own Anthropic endpoint). That is the one part of the
37048
+ * provider a FreeCodeGo installation wants to change: nobody on this plugin pays
37049
+ * DeepSeek per search, and the routes they do pay for are registered here.
37050
+ *
37051
+ * So this section renders in the page's own detail slot — under its
37052
+ * configuration, where the page's blank lower half is — lists every model this
37053
+ * plugin routes, and writes the choice back into the same settings namespace the
37054
+ * page above edits. Nothing here is a second settings document: the section
37055
+ * reads and writes `web-search-deepseek` through the shared config-form service,
37056
+ * so the stock fields and this list can never disagree.
37057
+ *
37058
+ * The endpoint and the key come from the Host, via `webSearchBind`, because the
37059
+ * route decision and every provider key live there. The client asks for one
37060
+ * route, writes the credential it receives under the reference it is told, and
37061
+ * points the namespace at that reference; a binding that cannot be resolved
37062
+ * leaves the page's own fields untouched and says why.
37063
+ *
37064
+ * @module client/web-search-provider-section
37065
+ */
37066
+ /**
37067
+ * The settings namespace the stock web-search page owns.
37068
+ *
37069
+ * Spelled here rather than imported: a client package must not depend on a Host
37070
+ * package, and the page spells it the same way for the same reason.
37071
+ */
37072
+ const WEB_SEARCH_NAMESPACE = "web-search-deepseek";
37073
+ /** Drop a provider prefix so a comparison is about the model, not its spelling. */
37074
+ function bareModelId(id) {
37075
+ return id.trim().replace(/^[a-z0-9_-]+\//iu, "").toLowerCase();
37076
+ }
37077
+ /**
37078
+ * The web-search page's model list, under its own configuration.
37079
+ * @param props - the page's subject plus the reads, writes, and copy.
37080
+ * @returns the section, or null on every other plugin's page.
37081
+ */
37082
+ function WebSearchProviderSection(props) {
37083
+ const relevant = props.subject?.kind === "item" && props.subject.id === "web-search";
37084
+ const [options, setOptions] = (0, react.useState)(void 0);
37085
+ const [current, setCurrent] = (0, react.useState)(void 0);
37086
+ const [problem, setProblem] = (0, react.useState)(void 0);
37087
+ const [notice, setNotice] = (0, react.useState)(void 0);
37088
+ /** What the liveness check did, when a saved binding needed it. */
37089
+ const [recovery, setRecovery] = (0, react.useState)(void 0);
37090
+ const face = (0, react.useRef)(props);
37091
+ (0, react.useEffect)(() => {
37092
+ face.current = props;
37093
+ });
37094
+ const subscribe = (0, react.useCallback)(() => {
37095
+ const form = face.current.form();
37096
+ if (form === void 0) {
37097
+ setProblem("unavailable");
37098
+ return;
37099
+ }
37100
+ const publish = () => {
37101
+ const snapshot = form.getSnapshot();
37102
+ setCurrent(snapshot.value);
37103
+ setProblem(snapshot.status === "unavailable" ? "unavailable" : void 0);
37104
+ };
37105
+ publish();
37106
+ return form.subscribe(publish);
37107
+ }, []);
37108
+ (0, react.useEffect)(() => {
37109
+ if (!relevant) return;
37110
+ let active = true;
37111
+ const off = subscribe();
37112
+ face.current.models().then((list) => {
37113
+ if (active) setOptions(list);
37114
+ }, () => {
37115
+ if (active) setProblem("offline");
37116
+ });
37117
+ return () => {
37118
+ active = false;
37119
+ off?.();
37120
+ };
37121
+ }, [relevant, subscribe]);
37122
+ /**
37123
+ * Write one resolved binding into the page's namespace and this plugin's settings.
37124
+ *
37125
+ * The order is load-bearing: the key, then the pair the Host would rebuild from,
37126
+ * then the section that names both. The section is what makes the search provider
37127
+ * resolve the reference, so a section written first would be a search that fails
37128
+ * with an authentication error; and a pair recorded after it would be a binding a
37129
+ * crash could leave without a memory.
37130
+ */
37131
+ const writeBinding = (0, react.useCallback)(async (binding, pair) => {
37132
+ const { form, credentials, remember, t } = face.current;
37133
+ const writer = credentials();
37134
+ if (writer === void 0) {
37135
+ setNotice(void 0);
37136
+ setProblem("unavailable");
37137
+ return;
37138
+ }
37139
+ await writer.set(binding.apiKeyEnv, binding.apiKey);
37140
+ await remember(pair);
37141
+ const namespace = form();
37142
+ if (namespace === void 0) {
37143
+ setNotice(void 0);
37144
+ setProblem("unavailable");
37145
+ return;
37146
+ }
37147
+ setNotice(await namespace.mutate([
37148
+ {
37149
+ op: "set",
37150
+ path: ["model"],
37151
+ value: binding.model
37152
+ },
37153
+ {
37154
+ op: "set",
37155
+ path: ["baseURL"],
37156
+ value: binding.baseURL
37157
+ },
37158
+ {
37159
+ op: "set",
37160
+ path: ["apiKeyEnv"],
37161
+ value: binding.apiKeyEnv
37162
+ }
37163
+ ]) ? {
37164
+ kind: "done",
37165
+ durable: binding.durable,
37166
+ baseURL: binding.baseURL
37167
+ } : {
37168
+ kind: "failed",
37169
+ message: t("searchProviderRefused")
37170
+ });
37171
+ }, []);
37172
+ const apply = (0, react.useCallback)((option) => {
37173
+ const pair = {
37174
+ provider: option.provider,
37175
+ model: option.id
37176
+ };
37177
+ setNotice({
37178
+ kind: "busy",
37179
+ key: `${option.provider}\u0000${option.id}`
37180
+ });
37181
+ (async () => {
37182
+ const result = await face.current.bind(pair);
37183
+ if (!result.ok) {
37184
+ setNotice({
37185
+ kind: "failed",
37186
+ message: result.error.message
37187
+ });
37188
+ return;
37189
+ }
37190
+ await writeBinding(result.value, pair);
37191
+ })().catch((error) => {
37192
+ setNotice({
37193
+ kind: "failed",
37194
+ message: error instanceof Error ? error.message : String(error)
37195
+ });
37196
+ });
37197
+ }, [writeBinding]);
37198
+ /**
37199
+ * Check the saved binding once, and rebuild it when this process cannot serve it.
37200
+ *
37201
+ * A bridge endpoint's port, route id, and secret are minted per process, so a binding
37202
+ * saved before a restart is dead until it is re-resolved — the Host does that at
37203
+ * boot, and this is the second layer for the case it could not (no credentials
37204
+ * service, a write the profile refused). Whether the saved route is alive is a
37205
+ * question only the Host can answer: a fresh resolution mints a *new* id, so
37206
+ * comparing URLs would report every healthy binding as stale.
37207
+ */
37208
+ const verified = (0, react.useRef)(false);
37209
+ (0, react.useEffect)(() => {
37210
+ if (!relevant || verified.current) return;
37211
+ if (face.current.form()?.getSnapshot().status !== "ready") return;
37212
+ verified.current = true;
37213
+ (async () => {
37214
+ const answer = await face.current.status();
37215
+ if (!answer.ok) return;
37216
+ const status = answer.value;
37217
+ if (status.state !== "bridge" || status.alive) return;
37218
+ const pair = status.remembered;
37219
+ if (pair === void 0) {
37220
+ setRecovery("needs-pick");
37221
+ return;
37222
+ }
37223
+ setNotice({
37224
+ kind: "busy",
37225
+ key: `${pair.provider}\u0000${pair.model}`
37226
+ });
37227
+ const binding = await face.current.bind(pair);
37228
+ if (!binding.ok) {
37229
+ setNotice(void 0);
37230
+ setRecovery("failed");
37231
+ return;
37232
+ }
37233
+ await writeBinding(binding.value, pair);
37234
+ setRecovery("rebuilt");
37235
+ })().catch(() => {
37236
+ setNotice(void 0);
37237
+ setRecovery("failed");
37238
+ });
37239
+ }, [
37240
+ relevant,
37241
+ current,
37242
+ writeBinding
37243
+ ]);
37244
+ const reset = (0, react.useCallback)(() => {
37245
+ const namespace = face.current.form();
37246
+ if (namespace === void 0) {
37247
+ setProblem("unavailable");
37248
+ return;
37249
+ }
37250
+ setNotice({
37251
+ kind: "busy",
37252
+ key: ""
37253
+ });
37254
+ namespace.mutate([
37255
+ {
37256
+ op: "unset",
37257
+ path: ["model"]
37258
+ },
37259
+ {
37260
+ op: "unset",
37261
+ path: ["baseURL"]
37262
+ },
37263
+ {
37264
+ op: "unset",
37265
+ path: ["apiKeyEnv"]
37266
+ }
37267
+ ]).then((accepted) => {
37268
+ setNotice(accepted ? void 0 : {
37269
+ kind: "failed",
37270
+ message: face.current.t("searchProviderRefused")
37271
+ });
37272
+ }, (error) => {
37273
+ setNotice({
37274
+ kind: "failed",
37275
+ message: error instanceof Error ? error.message : String(error)
37276
+ });
37277
+ });
37278
+ }, []);
37279
+ if (!relevant) return null;
37280
+ const { t } = props;
37281
+ const groups = /* @__PURE__ */ new Map();
37282
+ for (const option of options ?? []) {
37283
+ const list = groups.get(option.provider) ?? [];
37284
+ list.push(option);
37285
+ groups.set(option.provider, list);
37286
+ }
37287
+ const activeId = current?.model === void 0 ? void 0 : bareModelId(current.model);
37288
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
37289
+ className: web_search_provider_section_module_css_default.section,
37290
+ "data-freecodego-web-search-provider": true,
37291
+ children: [
37292
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
37293
+ className: web_search_provider_section_module_css_default.head,
37294
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
37295
+ className: web_search_provider_section_module_css_default.title,
37296
+ children: t("searchProviderTitle")
37297
+ }), current?.model === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
37298
+ type: "button",
37299
+ className: web_search_provider_section_module_css_default.reset,
37300
+ onClick: reset,
37301
+ children: t("searchProviderReset")
37302
+ })]
37303
+ }),
37304
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37305
+ className: web_search_provider_section_module_css_default.hint,
37306
+ children: t("searchProviderHint")
37307
+ }),
37308
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37309
+ className: web_search_provider_section_module_css_default.current,
37310
+ children: current?.model === void 0 ? t("searchProviderNone") : `${t("searchProviderCurrent")}${current.model}${current.baseURL === void 0 ? "" : ` · ${current.baseURL}`}`
37311
+ }),
37312
+ problem === "unavailable" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37313
+ className: web_search_provider_section_module_css_default.problem,
37314
+ children: t("searchProviderUnavailable")
37315
+ }) : null,
37316
+ problem === "offline" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37317
+ className: web_search_provider_section_module_css_default.problem,
37318
+ children: t("searchProviderLoadFailed")
37319
+ }) : null,
37320
+ options === void 0 && problem === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37321
+ className: web_search_provider_section_module_css_default.hint,
37322
+ children: t("searchProviderLoading")
37323
+ }) : null,
37324
+ [...groups.entries()].map(([provider, rows]) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
37325
+ className: web_search_provider_section_module_css_default.group,
37326
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
37327
+ className: web_search_provider_section_module_css_default.provider,
37328
+ children: provider
37329
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
37330
+ className: web_search_provider_section_module_css_default.rows,
37331
+ children: rows.map((option) => {
37332
+ const active = activeId !== void 0 && bareModelId(option.id) === activeId;
37333
+ const busy = notice?.kind === "busy" && notice.key === `${option.provider}\u0000${option.id}`;
37334
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
37335
+ type: "button",
37336
+ className: active ? `${web_search_provider_section_module_css_default.row} ${web_search_provider_section_module_css_default.rowActive}` : web_search_provider_section_module_css_default.row,
37337
+ disabled: notice?.kind === "busy",
37338
+ title: active ? t("searchProviderActive") : t("searchProviderUse"),
37339
+ onClick: () => {
37340
+ apply(option);
37341
+ },
37342
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
37343
+ className: web_search_provider_section_module_css_default.rowLabel,
37344
+ children: option.label ?? option.id
37345
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
37346
+ className: web_search_provider_section_module_css_default.rowMeta,
37347
+ children: busy ? t("searchProviderSaving") : active ? t("searchProviderActive") : option.id
37348
+ })]
37349
+ }, `${option.provider}/${option.id}`);
37350
+ })
37351
+ })]
37352
+ }, provider)),
37353
+ notice?.kind === "done" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37354
+ className: web_search_provider_section_module_css_default.done,
37355
+ children: notice.durable ? t("searchProviderSaved") : t("searchProviderSavedEphemeral")
37356
+ }) : null,
37357
+ notice?.kind === "done" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37358
+ className: web_search_provider_section_module_css_default.rowMeta,
37359
+ children: notice.baseURL
37360
+ }) : null,
37361
+ recovery === "rebuilt" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37362
+ className: web_search_provider_section_module_css_default.done,
37363
+ children: t("searchProviderRebuilt")
37364
+ }) : null,
37365
+ recovery === "needs-pick" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37366
+ className: web_search_provider_section_module_css_default.problem,
37367
+ children: t("searchProviderNeedsPick")
37368
+ }) : null,
37369
+ recovery === "failed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37370
+ className: web_search_provider_section_module_css_default.problem,
37371
+ children: t("searchProviderRepairFailed")
37372
+ }) : null,
37373
+ notice?.kind === "failed" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
37374
+ className: web_search_provider_section_module_css_default.problem,
37375
+ children: `${t("searchProviderFailed")}${notice.message}`
37376
+ }) : null
37377
+ ]
37378
+ });
37379
+ }
37380
+ //#endregion
36260
37381
  //#region src/client/voice-input.tsx
36261
37382
  /** Add browser speech recognition without exposing provider credentials to the page. */
36262
37383
  function VoiceInputButton(input) {
@@ -36607,7 +37728,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
36607
37728
  },
36608
37729
  title: t("language.switch"),
36609
37730
  "aria-label": t("language.switch"),
36610
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconGlobeOutline14, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: active === "zh" ? "中" : "EN" })]
37731
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconGlobeOutlineRegular, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: active === "zh" ? "中" : "EN" })]
36611
37732
  });
36612
37733
  }
36613
37734
  function EngineAction({ catalog, setDefaultEngine, sessionId, useSession, t }) {
@@ -36961,14 +38082,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
36961
38082
  return sessionId !== void 0 && state.byId[sessionId]?.running === true;
36962
38083
  }
36963
38084
  /**
36964
- * @param state - the Session list snapshot.
38085
+ * @param jobs - the client jobs snapshot.
36965
38086
  * @param sessionId - the Session to read.
36966
38087
  * @returns how many of that Session's background jobs are still open.
36967
38088
  */
36968
- function liveJobCount(state, sessionId) {
38089
+ function liveJobCount(jobs, sessionId) {
36969
38090
  if (sessionId === void 0) return 0;
36970
38091
  let live = 0;
36971
- for (const job of state.jobsBySession[sessionId] ?? NO_JOBS) if (isLiveJob(job)) live += 1;
38092
+ for (const job of jobs.rows[sessionId] ?? NO_JOBS) if (isLiveJob(job)) live += 1;
36972
38093
  return live;
36973
38094
  }
36974
38095
  /**
@@ -36978,14 +38099,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
36978
38099
  * is the most recently started one, and its id is what changes when another job
36979
38100
  * fails. See `CompanionObservation.failedJobKey` for why a boolean cannot stand
36980
38101
  * in for this.
36981
- * @param state - the Session list snapshot.
38102
+ * @param jobs - the client jobs snapshot.
36982
38103
  * @param sessionId - the Session to read.
36983
- * @returns the newest failed job's id, or undefined when the list holds none.
38104
+ * @returns the newest failed job's id, or undefined when the roster holds none.
36984
38105
  */
36985
- function newestFailedJobKey(state, sessionId) {
38106
+ function newestFailedJobKey(jobs, sessionId) {
36986
38107
  if (sessionId === void 0) return void 0;
36987
38108
  let newest;
36988
- for (const job of state.jobsBySession[sessionId] ?? NO_JOBS) if (job.status === "failed") newest = job.id;
38109
+ for (const job of jobs.rows[sessionId] ?? NO_JOBS) if (job.status === "failed") newest = job.id;
36989
38110
  return newest;
36990
38111
  }
36991
38112
  /**
@@ -37278,7 +38399,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
37278
38399
  this.writing = false;
37279
38400
  break;
37280
38401
  case "user/message":
37281
- if (event.data.source.kind === "plugin") this.noticeKey = `${event.seq}`;
38402
+ if (event.data.source.kind !== "user") this.noticeKey = `${event.seq}`;
37282
38403
  break;
37283
38404
  default: break;
37284
38405
  }
@@ -40492,8 +41613,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
40492
41613
  */
40493
41614
  function useCompanionObservation(hooks, sessionId, activity) {
40494
41615
  const running = hooks.useSessions((state) => sessionRunning(state, sessionId));
40495
- const liveJobs = hooks.useSessions((state) => liveJobCount(state, sessionId));
40496
- const failedJobKey = hooks.useSessions((state) => newestFailedJobKey(state, sessionId));
41616
+ const liveJobs = hooks.useJobs((jobs) => liveJobCount(jobs, sessionId));
41617
+ const failedJobKey = hooks.useJobs((jobs) => newestFailedJobKey(jobs, sessionId));
40497
41618
  const asked = hooks.useSessionStatus((statuses) => awaitingInteraction(statuses, sessionId));
40498
41619
  return {
40499
41620
  running,
@@ -40528,14 +41649,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
40528
41649
  * asks (`mainViewSessionId`), so the two seats and this row follow one Session id
40529
41650
  * and one set of facts.
40530
41651
  * @param sessions - the Session list observable.
41652
+ * @param jobs - the client jobs snapshot observable.
40531
41653
  * @param statuses - the unified Session UI status observable.
40532
41654
  * @returns what `projectSignals` consumes.
40533
41655
  */
40534
- function useObservedCompanionObservation(sessions, statuses, activity) {
41656
+ function useObservedCompanionObservation(sessions, jobs, statuses, activity) {
40535
41657
  const sessionId = useObserved(sessions, mainViewSessionId$1);
40536
41658
  const running = useObserved(sessions, (state) => sessionRunning(state, sessionId));
40537
- const liveJobs = useObserved(sessions, (state) => liveJobCount(state, sessionId));
40538
- const failedJobKey = useObserved(sessions, (state) => newestFailedJobKey(state, sessionId));
41659
+ const liveJobs = useObserved(jobs, (state) => liveJobCount(state, sessionId));
41660
+ const failedJobKey = useObserved(jobs, (state) => newestFailedJobKey(state, sessionId));
40539
41661
  const asked = useObserved(statuses, (snapshots) => awaitingInteraction(snapshots, sessionId));
40540
41662
  return {
40541
41663
  running,
@@ -40761,7 +41883,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
40761
41883
  order: 30,
40762
41884
  locale: NS$2,
40763
41885
  registrant: "freecodego-companion",
40764
- inject: () => ({ activity })
41886
+ inject: () => ({
41887
+ activity,
41888
+ hooks: { jobs: ctx.jobs.state }
41889
+ })
40765
41890
  }, CompanionBar));
40766
41891
  }
40767
41892
  //#endregion
@@ -40854,7 +41979,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
40854
41979
  * @returns the face.
40855
41980
  */
40856
41981
  function StoreFace({ sources, size, className }) {
40857
- const view = useCompanionView(useObservedCompanionObservation(sources.sessions, sources.statuses, sources.activity));
41982
+ const view = useCompanionView(useObservedCompanionObservation(sources.sessions, sources.jobs, sources.statuses, sources.activity));
40858
41983
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CompanionSvg, {
40859
41984
  frame: view.frame,
40860
41985
  size,
@@ -40891,22 +42016,35 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
40891
42016
  * Whether an element belongs to the conversation the character speaks for.
40892
42017
  *
40893
42018
  * The body and the scrollport are found upwards from the dot; the session header
40894
- * publishes no marker on itself, so it is recognised as the nearest `header` that
42019
+ * publishes no marker on itself, so it is recognised as the nearest ancestor that
40895
42020
  * holds its own slots (a settings page's `<header>` holds none, and is not the
40896
42021
  * conversation's).
42022
+ *
42023
+ * The ancestor *tag* used to be part of this test — the header was a `header`
42024
+ * element, and requiring it was the belt to the slots' braces. The shell then rewrote
42025
+ * the header as `div.titleRow`, at which point the tag check stopped recognising the
42026
+ * header at all: the jobs mark in its `actions` seat fell out of the conversation and
42027
+ * the seat ignored it. The slots are the marker that survived the rewrite, so they are
42028
+ * the whole test — they are also the exclusion the tag was being read for, because no
42029
+ * other header in the shell holds them.
40897
42030
  * @param element - the element to place; the dot, or the row considering it.
40898
42031
  * @returns true when the element is inside the conversation's chrome.
40899
42032
  */
40900
42033
  function inConversationSurface(element) {
40901
42034
  for (let node = element.parentElement; node !== null; node = node.parentElement) {
40902
42035
  if (node.matches(CONVERSATION_SURFACE)) return true;
40903
- if (node.matches("header") && node.querySelector(HEADER_SLOT_SELECTOR) !== null) return true;
42036
+ if (node.querySelector(HEADER_SLOT_SELECTOR) !== null) return true;
40904
42037
  }
40905
42038
  return false;
40906
42039
  }
40907
42040
  /**
40908
42041
  * The session header's own slots. Its `actions` seat — where the jobs list's dot
40909
42042
  * lives — carries no marker, so the header is recognised by the slots around it.
42043
+ *
42044
+ * Only the corner is emitted by the current shell: the leading marker went with the
42045
+ * rewrite into `div.titleRow`. It is kept in the selector anyway, because a slot that
42046
+ * comes back should be recognised again rather than silently ignored — and the
42047
+ * stylesheet gate in the tests records which of the two is on disk today.
40910
42048
  */
40911
42049
  const HEADER_SLOT_SELECTOR = "[data-conversation-header-leading], [data-conversation-header-corner]";
40912
42050
  /** Marks the dot as switched off. Styling and the re-scan both key on it. */
@@ -40924,8 +42062,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
40924
42062
  *
40925
42063
  * Keyed on the marker rather than on upstream's class names, which the bundle
40926
42064
  * hashes. `display: none` rather than `content: none`: the mark is a real element
40927
- * with cells inside it, and hiding it is what stops the chase — a hidden subtree is
40928
- * no longer laid out or painted.
42065
+ * with a ring and its animations on it, and hiding it is what stops them — a hidden
42066
+ * subtree is no longer laid out or painted.
40929
42067
  */
40930
42068
  const SHEET$2 = `
40931
42069
  [${DOT_ATTR}] {
@@ -40957,6 +42095,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
40957
42095
  function installDotFaces(ctx, activity) {
40958
42096
  const sources = {
40959
42097
  sessions: ctx.sessions.list,
42098
+ jobs: ctx.jobs.state,
40960
42099
  statuses: ctx.uiSession.sessionStatus,
40961
42100
  activity
40962
42101
  };
@@ -41051,6 +42190,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
41051
42190
  function installRunningRow(ctx, activity) {
41052
42191
  const sources = {
41053
42192
  sessions: ctx.sessions.list,
42193
+ jobs: ctx.jobs.state,
41054
42194
  statuses: ctx.uiSession.sessionStatus,
41055
42195
  activity
41056
42196
  };
@@ -41173,6 +42313,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
41173
42313
  const probe = options.bandProbe ?? paintsBand;
41174
42314
  const sources = {
41175
42315
  sessions: ctx.sessions.list,
42316
+ jobs: ctx.jobs.state,
41176
42317
  statuses: ctx.uiSession.sessionStatus,
41177
42318
  activity
41178
42319
  };
@@ -41240,8 +42381,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
41240
42381
  * that seated only the mark would leave the label namespace unreachable, a build
41241
42382
  * that seated only the strip would lose the rail's own mark, and the injected
41242
42383
  * seats (`./running-row.tsx`, `./step-row.tsx`, `./dot-row.tsx`) draw the same pose
41243
- * in place of the shell's own loading animations — the sweeps, and the pixel chase
41244
- * of an in-flight mark.
42384
+ * in place of the shell's own loading animations — the row sweeps that are left, and
42385
+ * the spinner ring of an in-flight mark.
41245
42386
  *
41246
42387
  * `priority: -1` is the sanctioned way to shadow a single slot: the default rank
41247
42388
  * is 0 and the lowest live entry renders, so this wins over the fallback mark
@@ -41263,7 +42404,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
41263
42404
  name: "sidebar.brand.mark",
41264
42405
  priority: -1,
41265
42406
  registrant: "freecodego-companion",
41266
- inject: () => ({ activity })
42407
+ inject: () => ({
42408
+ activity,
42409
+ hooks: { jobs: ctx.jobs.state }
42410
+ })
41267
42411
  }, FreeCodeGoCompanion));
41268
42412
  installCompanionBar(ctx, activity);
41269
42413
  ctx.effect(() => installRunningRow(ctx, activity), "freecodego-ui: Companion running row");
@@ -44477,6 +45621,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
44477
45621
  //#endregion
44478
45622
  //#region src/client/index.ts
44479
45623
  const NS = "settings.freecodego";
45624
+ /**
45625
+ * The profile entry this plugin's settings are addressed by.
45626
+ *
45627
+ * An entry id, not a namespace. The Host's settings service no longer publishes a
45628
+ * namespace per plugin — a plugin's `Config` *is* its settings document, and both the
45629
+ * read (`describe`) and the write (`update`) address the entry the profile declares, an
45630
+ * entry id the CLI writes into `cordis.patch.yml`. The previous spelling, the old
45631
+ * namespace `freecodego-harness`, matches nothing now: the reads silently answered `{}`
45632
+ * and every write was refused as an unknown entry, which is why the value is pinned here
45633
+ * and checked against that file by `tests/settings-entry.spec.ts` rather than written
45634
+ * twice from memory.
45635
+ */
45636
+ const SETTINGS_ENTRY = "freecodego-harness-plugin";
44480
45637
  /** Keep this UI's reconnect state local so it has no hidden client-runtime dependency. */
44481
45638
  function createEpochStore() {
44482
45639
  let value = 0;
@@ -44504,6 +45661,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
44504
45661
  "remote",
44505
45662
  "connection",
44506
45663
  "sessions",
45664
+ "jobs",
44507
45665
  "uiSession",
44508
45666
  "uiConversation"
44509
45667
  ];
@@ -44606,7 +45764,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
44606
45764
  communityFeedback: "社区与反馈",
44607
45765
  telegramGroup: "Telegram 官方群聊",
44608
45766
  telegramHint: "遇到问题需要反馈,或想跟进版本进展,点击加入官方群聊。",
44609
- telegramJoin: "加入群聊"
45767
+ telegramJoin: "加入群聊",
45768
+ sessionDelete: "删除会话",
45769
+ searchProviderTitle: "搜索方模型",
45770
+ searchProviderHint: "选择本插件内任意模型担任网页搜索。选定后会把该模型的 Anthropic 兼容接口与密钥写入上方“接口地址 / API Key”,并由下方的搜索提供方使用。",
45771
+ searchProviderCurrent: "当前搜索方:",
45772
+ searchProviderNone: "当前使用 DeepSeek 官方默认模型(未指定搜索方)。",
45773
+ searchProviderUse: "用作搜索方",
45774
+ searchProviderActive: "当前搜索方",
45775
+ searchProviderReset: "恢复 DeepSeek 默认",
45776
+ searchProviderUnavailable: "本部署未提供设置写入服务,暂时无法在这里选择搜索方。",
45777
+ searchProviderLoading: "正在读取模型列表…",
45778
+ searchProviderLoadFailed: "模型列表读取失败,请刷新后重试。",
45779
+ searchProviderSaving: "正在绑定…",
45780
+ searchProviderSaved: "已写入接口地址与密钥,搜索将由该模型执行。",
45781
+ searchProviderSavedEphemeral: "已绑定。该提供方经本地桥接转发,端点属于当前进程:Harness 下次启动会自动重建。",
45782
+ searchProviderRefused: "本部署没有接受这次写入,已保留原设置。",
45783
+ searchProviderFailed: "绑定失败:",
45784
+ searchProviderRebuilt: "检测到上次的本地桥接端点已失效,已按你此前的选择自动重建。",
45785
+ searchProviderNeedsPick: "当前搜索方指向的本地桥接端点已失效,且没有留下可重建的记录,请在上方重新选择一次。",
45786
+ searchProviderRepairFailed: "本地桥接端点已失效,自动重建没有成功,请在上方重新选择一次。"
44610
45787
  };
44611
45788
  /**
44612
45789
  * English strings this UI contributes to the settings surface.
@@ -44707,7 +45884,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
44707
45884
  communityFeedback: "Community and feedback",
44708
45885
  telegramGroup: "Official Telegram group",
44709
45886
  telegramHint: "Report a problem or follow release progress by joining the official group.",
44710
- telegramJoin: "Join the group"
45887
+ telegramJoin: "Join the group",
45888
+ sessionDelete: "Delete session",
45889
+ searchProviderTitle: "Search provider model",
45890
+ searchProviderHint: "Pick any model this plugin routes to answer web searches. The choice writes that model’s Anthropic-compatible endpoint and key into the endpoint and API key fields above, where the search provider reads them.",
45891
+ searchProviderCurrent: "Search provider: ",
45892
+ searchProviderNone: "Search runs on DeepSeek’s own default model (no model chosen here).",
45893
+ searchProviderUse: "Use as search provider",
45894
+ searchProviderActive: "Current search provider",
45895
+ searchProviderReset: "Restore the DeepSeek default",
45896
+ searchProviderUnavailable: "This deployment exposes no settings writer, so the search provider cannot be chosen here.",
45897
+ searchProviderLoading: "Reading the model list…",
45898
+ searchProviderLoadFailed: "The model list could not be read. Refresh and retry.",
45899
+ searchProviderSaving: "Binding…",
45900
+ searchProviderSaved: "The endpoint and key were written; this model answers searches now.",
45901
+ searchProviderSavedEphemeral: "Bound. This provider is reached through the local bridge, so its endpoint belongs to this process — Harness rebuilds it on the next start.",
45902
+ searchProviderRefused: "This deployment refused the write; the previous settings were kept.",
45903
+ searchProviderFailed: "Binding failed: ",
45904
+ searchProviderRebuilt: "The saved local-bridge endpoint from a previous run was dead, so it was rebuilt from your earlier choice.",
45905
+ searchProviderNeedsPick: "The search provider points at a local-bridge endpoint from a previous run, and no record of the choice survived to rebuild it. Pick one above.",
45906
+ searchProviderRepairFailed: "The saved local-bridge endpoint is dead and rebuilding it did not succeed. Pick one above."
44711
45907
  };
44712
45908
  function apply(ctx) {
44713
45909
  ctx.effect(() => installFreeCodeGoSidebarIcons(), "freecodego-ui: semantic sidebar icons");
@@ -44727,13 +45923,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
44727
45923
  if (typeof settings?.describe !== "function") throw new Error("Harness settings Remote service did not become available");
44728
45924
  const response = await settings.describe();
44729
45925
  if (!response.ok) throw new Error(response.error.message);
44730
- const value = response.value.namespaces.find((item) => item.ns === "freecodego-harness")?.value;
45926
+ const value = response.value.namespaces.find((item) => item.ns === SETTINGS_ENTRY)?.value;
44731
45927
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
44732
45928
  };
44733
45929
  const updateFreeCodeGoSettings = async (patch) => {
44734
45930
  const settings = ctx.get("remote.settings");
44735
45931
  if (typeof settings?.update !== "function") throw new Error("Harness settings Remote service did not become available");
44736
- const response = await settings.update("freecodego-harness", patch, void 0);
45932
+ const response = await settings.update(SETTINGS_ENTRY, patch, void 0);
44737
45933
  if (!response.ok) throw new Error(response.error.message);
44738
45934
  };
44739
45935
  const connectionEpoch = createEpochStore();
@@ -44838,6 +46034,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
44838
46034
  return service.accountSendVerifyCode(email);
44839
46035
  };
44840
46036
  /**
46037
+ * Ask for the password-reset code.
46038
+ *
46039
+ * A Host that predates this Remote reports its absence like every other
46040
+ * unwired account method, which the card explains in place; recovery has no
46041
+ * fallback that could work without the gateway's cooperation.
46042
+ */
46043
+ const forgotPassword = async (email) => {
46044
+ await remoteMounted;
46045
+ const service = ctx.get("remote.freeCodeGoHarness");
46046
+ if (typeof service?.accountForgotPassword !== "function") throw new Error("FreeCodeGo password-reset Remote service did not become available");
46047
+ return service.accountForgotPassword(email);
46048
+ };
46049
+ /** Replace a password with the code the recovery step mailed. */
46050
+ const resetPassword = async (input) => {
46051
+ await remoteMounted;
46052
+ const service = ctx.get("remote.freeCodeGoHarness");
46053
+ if (typeof service?.accountResetPassword !== "function") throw new Error("FreeCodeGo password-reset Remote service did not become available");
46054
+ return service.accountResetPassword(input);
46055
+ };
46056
+ /**
44841
46057
  * Federated sign-in (Google / GitHub). The Host does not expose an OAuth
44842
46058
  * entry point yet, so this reports the missing wire with a stable marker
44843
46059
  * instead of a generic "service did not become available" — the card turns
@@ -44907,6 +46123,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
44907
46123
  const headroomUpdate = (patch) => backendCall("headroomUpdate", patch);
44908
46124
  const deferredToolsStatus = () => backendCall("deferredToolsStatus");
44909
46125
  const deferredToolsSetEnabled = (enabled) => backendCall("deferredToolsSetEnabled", enabled);
46126
+ const mediaGenerationStatus = () => backendCall("mediaGenerationStatus");
46127
+ const mediaGenerationSetEnabled = (enabled) => backendCall("mediaGenerationSetEnabled", enabled);
44910
46128
  const reviewStatus = (sessionId) => backendCall("reviewStatus", sessionId);
44911
46129
  const reviewStart = (sessionId, request) => backendCall("reviewStart", sessionId, request);
44912
46130
  const reviewUpdate = (sessionId, patch) => backendCall("reviewUpdate", sessionId, patch);
@@ -45026,6 +46244,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
45026
46244
  };
45027
46245
  const capabilityMarketplace = (input) => backendCall("capabilityMarketplace", input);
45028
46246
  const mcpPresetInstall = (id) => backendCall("mcpPresetInstall", id);
46247
+ const sessionDeleteEnabled = async () => {
46248
+ try {
46249
+ return (await readFreeCodeGoSettings()).sessionDeleteEnabled !== false;
46250
+ } catch {
46251
+ return true;
46252
+ }
46253
+ };
45029
46254
  const deleteSession = async (sessionId) => {
45030
46255
  const result = await backendCall("sessionDelete", sessionId);
45031
46256
  if (!result.ok) throw new Error(result.error.message);
@@ -45045,15 +46270,68 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
45045
46270
  inject: () => ({
45046
46271
  deleteSession,
45047
46272
  capabilities,
45048
- isEnabled: async () => {
45049
- try {
45050
- return (await readFreeCodeGoSettings()).sessionDeleteEnabled !== false;
45051
- } catch {
45052
- return true;
45053
- }
45054
- }
46273
+ isEnabled: sessionDeleteEnabled
45055
46274
  })
45056
46275
  }, SessionDeleteOverlay));
46276
+ shellSlots.inject("sidebar.workspaces.session.menu.item", () => shellSlots.register({
46277
+ name: "sidebar.workspaces.session.menu.item",
46278
+ id: "freecodego-session-delete",
46279
+ order: 500,
46280
+ locale: NS,
46281
+ inject: () => ({
46282
+ deleteSession,
46283
+ isEnabled: sessionDeleteEnabled,
46284
+ currentSessionId: () => mainViewSessionId(ctx)
46285
+ })
46286
+ }, SessionDeleteMenuItem));
46287
+ const webSearchForm = () => {
46288
+ const forms = ctx.get("configForms");
46289
+ return typeof forms?.get === "function" ? forms.get(WEB_SEARCH_NAMESPACE) : void 0;
46290
+ };
46291
+ const webSearchModels = async () => {
46292
+ const result = await backendCall("backendCatalog");
46293
+ if (!result.ok) throw new Error(result.error.message);
46294
+ const options = [];
46295
+ const seen = /* @__PURE__ */ new Set();
46296
+ for (const model of result.value.models) {
46297
+ if (model.availability !== "available") continue;
46298
+ const provider = model.provider.trim().toLowerCase();
46299
+ if (provider === "") continue;
46300
+ const key = `${provider}\u0000${model.id}`;
46301
+ if (seen.has(key)) continue;
46302
+ seen.add(key);
46303
+ options.push({
46304
+ provider,
46305
+ id: model.id,
46306
+ label: model.displayName
46307
+ });
46308
+ }
46309
+ return options;
46310
+ };
46311
+ const webSearchBind = (input) => backendCall("webSearchBind", input);
46312
+ const webSearchBindingStatus = () => backendCall("webSearchBindingStatus");
46313
+ const rememberWebSearchBinding = async (pair) => {
46314
+ await updateFreeCodeGoSettings({
46315
+ webSearchBindingProvider: pair.provider,
46316
+ webSearchBindingModel: pair.model
46317
+ });
46318
+ };
46319
+ const webSearchCredentials = () => ctx.get("remote.credentials");
46320
+ shellSlots.inject("plugins.detail.section", () => shellSlots.register({
46321
+ name: "plugins.detail.section",
46322
+ id: "freecodego-web-search-provider",
46323
+ order: 60,
46324
+ locale: NS,
46325
+ inject: () => ({
46326
+ models: webSearchModels,
46327
+ bind: webSearchBind,
46328
+ status: webSearchBindingStatus,
46329
+ form: webSearchForm,
46330
+ credentials: webSearchCredentials,
46331
+ remember: rememberWebSearchBinding,
46332
+ t
46333
+ })
46334
+ }, WebSearchProviderSection));
45057
46335
  ctx.slots.inject("settings.action", () => ctx.slots.register({
45058
46336
  name: "settings.action",
45059
46337
  id: "freecodego-language",
@@ -45153,6 +46431,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
45153
46431
  login,
45154
46432
  register,
45155
46433
  sendVerifyCode,
46434
+ forgotPassword,
46435
+ resetPassword,
45156
46436
  oauthLogin,
45157
46437
  oauthPendingStatus,
45158
46438
  oauthPendingSendVerifyCode,
@@ -45311,6 +46591,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
45311
46591
  headroomUpdate,
45312
46592
  deferredToolsStatus,
45313
46593
  deferredToolsSetEnabled,
46594
+ mediaGenerationStatus,
46595
+ mediaGenerationSetEnabled,
45314
46596
  reviewStatus,
45315
46597
  reviewStart,
45316
46598
  reviewUpdate,