@khorsheed/dsh-game 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -18846,7 +18846,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
18846
18846
  xor: () => xor
18847
18847
  });
18848
18848
  //#endregion
18849
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.1-rc.1_@deepseek-ai+cordis@4.0.4/node_modules/@deepseek-ai/dsh-typert-protocol/lib/types/remote-info.js
18849
+ //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.1-rc.3_@deepseek-ai+cordis@4.0.4/node_modules/@deepseek-ai/dsh-typert-protocol/lib/types/remote-info.js
18850
18850
  /** Lazy assembly of generated Remote definitions using caller-supplied Zod; no runtime imports. */
18851
18851
  /**
18852
18852
  * Retain one generated definition per endpoint without constructing parsers or projections.
@@ -19304,6 +19304,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
19304
19304
  literal("trash-failed")
19305
19305
  ]).readonly()
19306
19306
  }), object({ "ok": literal(true).readonly() })]);
19307
+ let _khorsheed_dsh_game_game_liveVersion_parameter_0$schema$value;
19308
+ const _khorsheed_dsh_game_game_liveVersion_parameter_0$schema = () => _khorsheed_dsh_game_game_liveVersion_parameter_0$schema$value ??= string$1();
19309
+ let _khorsheed_dsh_game_game_liveVersion_result$schema$value;
19310
+ const _khorsheed_dsh_game_game_liveVersion_result$schema = () => _khorsheed_dsh_game_game_liveVersion_result$schema$value ??= union([literal(null), object({
19311
+ "projectId": string$1().readonly(),
19312
+ "version": number$1().readonly(),
19313
+ "kind": union([
19314
+ literal("none"),
19315
+ literal("candidate"),
19316
+ literal("deployed")
19317
+ ]).readonly(),
19318
+ "at": union([literal(null), string$1()]).readonly(),
19319
+ "by": union([
19320
+ literal("user"),
19321
+ literal("agent"),
19322
+ literal("turn")
19323
+ ]).readonly().optional(),
19324
+ "show": object({
19325
+ "seq": number$1().readonly(),
19326
+ "target": object({
19327
+ "view": union([
19328
+ literal("versions"),
19329
+ literal("play"),
19330
+ literal("elements"),
19331
+ literal("design")
19332
+ ]).readonly(),
19333
+ "elementId": string$1().readonly().optional(),
19334
+ "chapterId": string$1().readonly().optional()
19335
+ }).readonly(),
19336
+ "note": string$1().readonly().describe("What to look at, in the agent's words (shown with the notice)."),
19337
+ "at": string$1().readonly()
19338
+ }).readonly().optional().describe("The agent's latest request to show the user something, if any since the host started.")
19339
+ })]);
19307
19340
  let _khorsheed_dsh_game_game_logPlay_parameter_0$schema$value;
19308
19341
  const _khorsheed_dsh_game_game_logPlay_parameter_0$schema = () => _khorsheed_dsh_game_game_logPlay_parameter_0$schema$value ??= string$1();
19309
19342
  let _khorsheed_dsh_game_game_logPlay_parameter_1$schema$value;
@@ -19719,7 +19752,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
19719
19752
  }).readonly().optional()
19720
19753
  })
19721
19754
  ]).readonly().describe("The 3D look, if the element has one (3d-three projects)."),
19722
- "lore": string$1().readonly().describe("The 设定 text (the element's `lore` field): who it is, its temper, how it meets the player. '' when unwritten.")
19755
+ "lore": string$1().readonly().describe("The 设定 text (the element's `lore` field): who it is, its temper, how it meets the player. '' when unwritten."),
19756
+ "updatedAt": number$1().readonly().optional().describe("When its file last changed (ms), for listing the newest first.")
19723
19757
  })).readonly(),
19724
19758
  "elementErrors": array(object({
19725
19759
  "where": string$1().readonly().describe("`smoke`, `data`, or the test file's project-relative path."),
@@ -20125,6 +20159,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20125
20159
  const _khorsheed_dsh_game_game_finalizeParams_parameter_0_strict$schema = () => _khorsheed_dsh_game_game_finalizeParams_parameter_0_strict$schema$value ??= string$1();
20126
20160
  let _khorsheed_dsh_game_game_finalizeParams_parameter_1_strict$schema$value;
20127
20161
  const _khorsheed_dsh_game_game_finalizeParams_parameter_1_strict$schema = () => _khorsheed_dsh_game_game_finalizeParams_parameter_1_strict$schema$value ??= strictObject({ "projectId": string$1() });
20162
+ let _khorsheed_dsh_game_game_liveVersion_parameter_0_strict$schema$value;
20163
+ const _khorsheed_dsh_game_game_liveVersion_parameter_0_strict$schema = () => _khorsheed_dsh_game_game_liveVersion_parameter_0_strict$schema$value ??= string$1();
20128
20164
  let _khorsheed_dsh_game_game_logPlay_parameter_0_strict$schema$value;
20129
20165
  const _khorsheed_dsh_game_game_logPlay_parameter_0_strict$schema = () => _khorsheed_dsh_game_game_logPlay_parameter_0_strict$schema$value ??= string$1();
20130
20166
  let _khorsheed_dsh_game_game_logPlay_parameter_1_strict$schema$value;
@@ -20315,7 +20351,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20315
20351
  },
20316
20352
  sourceLocation: {
20317
20353
  "file": "packages/game/src/remote.ts",
20318
- "line": 67,
20354
+ "line": 73,
20319
20355
  "column": 3
20320
20356
  }
20321
20357
  },
@@ -20372,7 +20408,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20372
20408
  },
20373
20409
  sourceLocation: {
20374
20410
  "file": "packages/game/src/remote.ts",
20375
- "line": 79,
20411
+ "line": 85,
20376
20412
  "column": 3
20377
20413
  }
20378
20414
  },
@@ -20546,7 +20582,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20546
20582
  },
20547
20583
  sourceLocation: {
20548
20584
  "file": "packages/game/src/remote.ts",
20549
- "line": 91,
20585
+ "line": 97,
20550
20586
  "column": 3
20551
20587
  }
20552
20588
  },
@@ -20632,7 +20668,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20632
20668
  },
20633
20669
  sourceLocation: {
20634
20670
  "file": "packages/game/src/remote.ts",
20635
- "line": 198,
20671
+ "line": 204,
20636
20672
  "column": 3
20637
20673
  }
20638
20674
  },
@@ -20786,7 +20822,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20786
20822
  },
20787
20823
  sourceLocation: {
20788
20824
  "file": "packages/game/src/remote.ts",
20789
- "line": 97,
20825
+ "line": 103,
20790
20826
  "column": 9
20791
20827
  }
20792
20828
  },
@@ -20883,7 +20919,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20883
20919
  },
20884
20920
  sourceLocation: {
20885
20921
  "file": "packages/game/src/remote.ts",
20886
- "line": 85,
20922
+ "line": 91,
20887
20923
  "column": 9
20888
20924
  }
20889
20925
  },
@@ -20993,7 +21029,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20993
21029
  },
20994
21030
  sourceLocation: {
20995
21031
  "file": "packages/game/src/remote.ts",
20996
- "line": 61,
21032
+ "line": 67,
20997
21033
  "column": 9
20998
21034
  }
20999
21035
  },
@@ -21111,7 +21147,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21111
21147
  },
21112
21148
  sourceLocation: {
21113
21149
  "file": "packages/game/src/remote.ts",
21114
- "line": 192,
21150
+ "line": 198,
21115
21151
  "column": 3
21116
21152
  }
21117
21153
  },
@@ -21211,7 +21247,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21211
21247
  },
21212
21248
  sourceLocation: {
21213
21249
  "file": "packages/game/src/remote.ts",
21214
- "line": 115,
21250
+ "line": 121,
21215
21251
  "column": 9
21216
21252
  }
21217
21253
  },
@@ -21318,7 +21354,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21318
21354
  },
21319
21355
  sourceLocation: {
21320
21356
  "file": "packages/game/src/remote.ts",
21321
- "line": 139,
21357
+ "line": 145,
21322
21358
  "column": 9
21323
21359
  }
21324
21360
  },
@@ -21412,10 +21448,118 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21412
21448
  },
21413
21449
  sourceLocation: {
21414
21450
  "file": "packages/game/src/remote.ts",
21415
- "line": 127,
21451
+ "line": 133,
21416
21452
  "column": 9
21417
21453
  }
21418
21454
  },
21455
+ "game/liveVersion": {
21456
+ service: "gameRemote",
21457
+ description: "The bound project's newest version (cheap; the page polls it).",
21458
+ invocation: { kind: "direct" },
21459
+ parameters: [{
21460
+ name: "sessionId",
21461
+ source: "json",
21462
+ codec: {
21463
+ mode: "strict",
21464
+ typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
21465
+ create: _khorsheed_dsh_game_game_liveVersion_parameter_0$schema,
21466
+ schema: _khorsheed_dsh_game_game_liveVersion_parameter_0$schema(),
21467
+ jsonSchema: { "type": "string" }
21468
+ },
21469
+ strictCodec: {
21470
+ mode: "strict",
21471
+ typeSymbol: "@deepseek-ai/dsh-session/types#SessionId",
21472
+ create: _khorsheed_dsh_game_game_liveVersion_parameter_0_strict$schema,
21473
+ schema: _khorsheed_dsh_game_game_liveVersion_parameter_0_strict$schema(),
21474
+ jsonSchema: { "type": "string" }
21475
+ }
21476
+ }],
21477
+ result: {
21478
+ mode: "strict",
21479
+ typeSymbol: "@khorsheed/dsh-game#game/liveVersion:result",
21480
+ create: _khorsheed_dsh_game_game_liveVersion_result$schema,
21481
+ schema: _khorsheed_dsh_game_game_liveVersion_result$schema(),
21482
+ jsonSchema: { "oneOf": [{
21483
+ "type": "null",
21484
+ "const": null
21485
+ }, {
21486
+ "type": "object",
21487
+ "properties": {
21488
+ "projectId": { "type": "string" },
21489
+ "version": { "type": "number" },
21490
+ "kind": {
21491
+ "type": "string",
21492
+ "enum": [
21493
+ "none",
21494
+ "candidate",
21495
+ "deployed"
21496
+ ]
21497
+ },
21498
+ "at": { "oneOf": [{
21499
+ "type": "null",
21500
+ "const": null
21501
+ }, { "type": "string" }] },
21502
+ "by": {
21503
+ "type": "string",
21504
+ "enum": [
21505
+ "user",
21506
+ "agent",
21507
+ "turn"
21508
+ ]
21509
+ },
21510
+ "show": {
21511
+ "type": "object",
21512
+ "properties": {
21513
+ "seq": { "type": "number" },
21514
+ "target": {
21515
+ "type": "object",
21516
+ "properties": {
21517
+ "view": {
21518
+ "type": "string",
21519
+ "enum": [
21520
+ "versions",
21521
+ "play",
21522
+ "elements",
21523
+ "design"
21524
+ ]
21525
+ },
21526
+ "elementId": { "type": "string" },
21527
+ "chapterId": { "type": "string" }
21528
+ },
21529
+ "required": ["view"],
21530
+ "additionalProperties": true
21531
+ },
21532
+ "note": {
21533
+ "type": "string",
21534
+ "description": "What to look at, in the agent's words (shown with the notice)."
21535
+ },
21536
+ "at": { "type": "string" }
21537
+ },
21538
+ "required": [
21539
+ "seq",
21540
+ "target",
21541
+ "note",
21542
+ "at"
21543
+ ],
21544
+ "additionalProperties": true,
21545
+ "description": "The agent's latest request to show the user something, if any since the host started."
21546
+ }
21547
+ },
21548
+ "required": [
21549
+ "projectId",
21550
+ "version",
21551
+ "kind",
21552
+ "at"
21553
+ ],
21554
+ "additionalProperties": true
21555
+ }] }
21556
+ },
21557
+ sourceLocation: {
21558
+ "file": "packages/game/src/remote.ts",
21559
+ "line": 49,
21560
+ "column": 3
21561
+ }
21562
+ },
21419
21563
  "game/logPlay": {
21420
21564
  service: "gameRemote",
21421
21565
  description: "Record one play session into the playtest log.",
@@ -21532,7 +21676,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21532
21676
  },
21533
21677
  sourceLocation: {
21534
21678
  "file": "packages/game/src/remote.ts",
21535
- "line": 109,
21679
+ "line": 115,
21536
21680
  "column": 9
21537
21681
  }
21538
21682
  },
@@ -21646,7 +21790,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21646
21790
  },
21647
21791
  sourceLocation: {
21648
21792
  "file": "packages/game/src/remote.ts",
21649
- "line": 156,
21793
+ "line": 162,
21650
21794
  "column": 9
21651
21795
  }
21652
21796
  },
@@ -21697,7 +21841,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21697
21841
  },
21698
21842
  sourceLocation: {
21699
21843
  "file": "packages/game/src/remote.ts",
21700
- "line": 55,
21844
+ "line": 61,
21701
21845
  "column": 3
21702
21846
  }
21703
21847
  },
@@ -21797,7 +21941,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21797
21941
  },
21798
21942
  sourceLocation: {
21799
21943
  "file": "packages/game/src/remote.ts",
21800
- "line": 180,
21944
+ "line": 186,
21801
21945
  "column": 9
21802
21946
  }
21803
21947
  },
@@ -21897,7 +22041,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21897
22041
  },
21898
22042
  sourceLocation: {
21899
22043
  "file": "packages/game/src/remote.ts",
21900
- "line": 174,
22044
+ "line": 180,
21901
22045
  "column": 9
21902
22046
  }
21903
22047
  },
@@ -21991,7 +22135,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21991
22135
  },
21992
22136
  sourceLocation: {
21993
22137
  "file": "packages/game/src/remote.ts",
21994
- "line": 133,
22138
+ "line": 139,
21995
22139
  "column": 9
21996
22140
  }
21997
22141
  },
@@ -22091,7 +22235,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22091
22235
  },
22092
22236
  sourceLocation: {
22093
22237
  "file": "packages/game/src/remote.ts",
22094
- "line": 186,
22238
+ "line": 192,
22095
22239
  "column": 9
22096
22240
  }
22097
22241
  },
@@ -22191,7 +22335,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22191
22335
  },
22192
22336
  sourceLocation: {
22193
22337
  "file": "packages/game/src/remote.ts",
22194
- "line": 103,
22338
+ "line": 109,
22195
22339
  "column": 9
22196
22340
  }
22197
22341
  },
@@ -22295,7 +22439,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22295
22439
  },
22296
22440
  sourceLocation: {
22297
22441
  "file": "packages/game/src/remote.ts",
22298
- "line": 168,
22442
+ "line": 174,
22299
22443
  "column": 9
22300
22444
  }
22301
22445
  },
@@ -22405,7 +22549,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22405
22549
  },
22406
22550
  sourceLocation: {
22407
22551
  "file": "packages/game/src/remote.ts",
22408
- "line": 121,
22552
+ "line": 127,
22409
22553
  "column": 9
22410
22554
  }
22411
22555
  },
@@ -22650,7 +22794,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22650
22794
  },
22651
22795
  sourceLocation: {
22652
22796
  "file": "packages/game/src/remote.ts",
22653
- "line": 49,
22797
+ "line": 55,
22654
22798
  "column": 3
22655
22799
  }
22656
22800
  },
@@ -22701,7 +22845,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22701
22845
  },
22702
22846
  sourceLocation: {
22703
22847
  "file": "packages/game/src/remote.ts",
22704
- "line": 204,
22848
+ "line": 210,
22705
22849
  "column": 3
22706
22850
  }
22707
22851
  },
@@ -22752,7 +22896,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22752
22896
  },
22753
22897
  sourceLocation: {
22754
22898
  "file": "packages/game/src/remote.ts",
22755
- "line": 73,
22899
+ "line": 79,
22756
22900
  "column": 3
22757
22901
  }
22758
22902
  },
@@ -22862,14 +23006,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22862
23006
  },
22863
23007
  sourceLocation: {
22864
23008
  "file": "packages/game/src/remote.ts",
22865
- "line": 162,
23009
+ "line": 168,
22866
23010
  "column": 9
22867
23011
  }
22868
23012
  }
22869
23013
  }
22870
23014
  }, external_exports);
22871
23015
  //#endregion
22872
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-session@0.2.1-rc.1_@deepseek-ai+cordis@4.0.4_@deepseek-ai+dsh-scope@0._53fab4e766dbd120da89b13a533f63c3/node_modules/@deepseek-ai/dsh-session/lib/types/surface.js
23016
+ //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-session@0.2.1-rc.3_@deepseek-ai+cordis@4.0.4_@deepseek-ai+dsh-scope@0._a4f9aa29af8d436e2dcb9e4e85687430/node_modules/@deepseek-ai/dsh-session/lib/types/surface.js
22873
23017
  /** Runtime counterpart of the message-producing event union. */
22874
23018
  const SURFACE_EVENT_TYPES = /* @__PURE__ */ new Set([
22875
23019
  "system/message",
@@ -22913,16 +23057,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
22913
23057
  document.head.appendChild(tag);
22914
23058
  }
22915
23059
  var ChatRow_module_css_default = {
22916
- "list": "Zcoxaa_list",
22917
23060
  "wrap": "Zcoxaa_wrap",
22918
- "head": "Zcoxaa_head",
22919
23061
  "summary": "Zcoxaa_summary",
23062
+ "list": "Zcoxaa_list",
22920
23063
  "title": "Zcoxaa_title",
22921
- "body": "Zcoxaa_body",
23064
+ "note": "Zcoxaa_note",
22922
23065
  "dot": "Zcoxaa_dot",
23066
+ "pre": "Zcoxaa_pre",
23067
+ "body": "Zcoxaa_body",
22923
23068
  "chevron": "Zcoxaa_chevron",
22924
- "note": "Zcoxaa_note",
22925
- "pre": "Zcoxaa_pre"
23069
+ "head": "Zcoxaa_head"
22926
23070
  };
22927
23071
  //#endregion
22928
23072
  //#region src/client/chat-node.tsx
@@ -23763,7 +23907,10 @@ builtKey = rebuildKey(lookNow())
23763
23907
  await fit()
23764
23908
  addEventListener('dshelements', () => { setTimeout(edited) })
23765
23909
  const canvas = world.canvas
23766
- canvas.addEventListener('pointerdown', e => { drag = { x: e.clientX, y: e.clientY }; spinning = false; canvas.setPointerCapture(e.pointerId) })
23910
+ canvas.addEventListener('pointerdown', e => {
23911
+ drag = { x: e.clientX, y: e.clientY }; spinning = false; canvas.setPointerCapture(e.pointerId)
23912
+ parent.postMessage({ gamedev: 'preview-turned' }, '*')
23913
+ })
23767
23914
  canvas.addEventListener('pointermove', e => {
23768
23915
  if (drag === null) return
23769
23916
  yaw -= (e.clientX - drag.x) * 0.5
@@ -23783,7 +23930,7 @@ if (mode === 'still') {
23783
23930
  const PREVIEW_HTML = "<style>html,body{margin:0;height:100%;overflow:hidden}canvas{width:100%;height:100%;display:block;touch-action:none}</style><canvas></canvas><script type=\"module\" src=\"_preview/main.js\"><\/script>";
23784
23931
  //#endregion
23785
23932
  //#region \0dsh-css:src/client/GameTab.module.css.mjs
23786
- const css$7 = ".vNLA3W_root{--g-accent:var(--dsw-alias-brand-primary);--g-soft:color-mix(in srgb, var(--dsw-alias-brand-primary) 9%, var(--dsw-alias-bg-base));--g-line:var(--dsw-alias-border-l1);--g-card:var(--dsw-alias-bg-layer-1);--g-ok:var(--dsw-alias-state-success-primary);--g-warn:var(--dsw-alias-state-warn-primary);--g-err:var(--dsw-alias-state-error-primary);--g-screen:#0d1020;--g-screen-bar:#161b33;--g-screen-line:#2a3152;--g-screen-fg:#d6dcf5;--g-screen-dim:#8c95ba;background:var(--dsw-alias-bg-base);height:100%;color:var(--dsw-alias-label-primary);position:relative}.vNLA3W_scroll{flex-direction:column;flex:1;gap:12px;min-height:0;padding:12px 14px 56px;display:flex;overflow:auto}.vNLA3W_scroll>*{flex-shrink:0}.vNLA3W_spacer{flex:1}.vNLA3W_lead{color:var(--dsw-alias-label-secondary);font-size:var(--dsh-panel-text-body,13px);margin:0;line-height:1.6}.vNLA3W_metaLine{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_count{color:var(--dsw-alias-label-tertiary);font-weight:400;font-size:var(--dsh-panel-text-meta,12px);margin-left:6px}.vNLA3W_eyebrow{font-size:var(--dsh-panel-text-meta,12px);letter-spacing:.06em;color:var(--g-accent);font-weight:600}.vNLA3W_warnText{color:var(--g-warn);font-size:var(--dsh-panel-text-body,13px);margin:0}.vNLA3W_badge{font-size:var(--dsh-panel-text-meta,12px);background:color-mix(in srgb, var(--g-warn) 14%, transparent);color:var(--g-warn);border-radius:8px;align-items:center;margin-left:6px;padding:0 6px;font-weight:500;display:inline-flex}.vNLA3W_primary,.vNLA3W_ghost,.vNLA3W_link,.vNLA3W_seg,.vNLA3W_stageBtn{box-sizing:border-box;font:inherit;font-size:var(--dsh-panel-text-meta,12px);cursor:pointer;border-radius:var(--dsw-radius-sm,6px);justify-content:center;align-items:center;gap:4px;min-height:28px;padding:0 10px;line-height:18px;display:inline-flex}.vNLA3W_primary{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);border:0}.vNLA3W_primary:disabled,.vNLA3W_ghost:disabled{opacity:.4;cursor:not-allowed}.vNLA3W_ghost{border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary);background:0 0}.vNLA3W_ghost[aria-pressed=true]{background:var(--dsw-alias-interactive-bg-active)}.vNLA3W_link{color:var(--dsw-alias-label-secondary);background:0 0;border:0;min-height:24px;padding:0 2px}.vNLA3W_link[aria-pressed=true]{color:var(--dsw-alias-label-primary)}.vNLA3W_primary:focus-visible,.vNLA3W_ghost:focus-visible,.vNLA3W_link:focus-visible,.vNLA3W_seg:focus-visible,.vNLA3W_stageBtn:focus-visible,.vNLA3W_elOpen:focus-visible,.vNLA3W_styleCard:focus-visible,.vNLA3W_chapterHead:focus-visible,.vNLA3W_swatchBtn:focus-visible,.vNLA3W_strip:focus-visible{outline:2px solid var(--g-accent);outline-offset:1px}.vNLA3W_input,.vNLA3W_textarea{font:inherit;font-size:var(--dsh-panel-text-body,13px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:7px;min-width:0;padding:6px 9px}.vNLA3W_textarea{box-sizing:border-box;resize:vertical;width:100%;line-height:1.55}.vNLA3W_rowEnd{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.vNLA3W_footRow{justify-content:center;display:flex}.vNLA3W_headMeta{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.vNLA3W_headChip{font-size:var(--dsh-panel-text-meta,12px);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:10px;padding:1px 8px}.vNLA3W_headChip[data-tone=ok]{color:var(--g-ok);background:color-mix(in srgb, var(--g-ok) 12%, transparent)}.vNLA3W_headChip[data-tone=info]{color:var(--g-accent);background:color-mix(in srgb, var(--g-accent) 12%, transparent)}.vNLA3W_switches{align-items:center;gap:12px;display:inline-flex}.vNLA3W_switch{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.vNLA3W_titleSwitch{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;align-items:center;gap:4px;min-height:28px;padding:2px 4px 2px 0;font-weight:600;display:inline-flex}.vNLA3W_root strong:has(>.vNLA3W_titleSwitch){flex-shrink:0}.vNLA3W_headMeta{flex-wrap:nowrap;min-width:0;overflow:hidden}.vNLA3W_titleSwitch span:first-child{text-overflow:ellipsis;white-space:nowrap;max-width:12em;overflow:hidden}.vNLA3W_titleSwitch:focus-visible{outline:2px solid var(--g-accent)}.vNLA3W_titleCaret{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_projectGrid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;display:grid}.vNLA3W_projectCard,.vNLA3W_newCard{border:1px solid var(--g-line);background:var(--g-card);font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:12px;flex-direction:column;gap:0;padding:0;display:flex;overflow:hidden}.vNLA3W_projectCard[aria-current=true]{border-color:var(--g-accent);box-shadow:0 0 0 1px var(--g-accent)}.vNLA3W_projectCard[data-loading=true]{cursor:default;padding:16px}.vNLA3W_projectCardWrap{flex-direction:column;display:flex;position:relative}.vNLA3W_projectCardWrap>.vNLA3W_projectCard{flex:1}.vNLA3W_projectDelete{cursor:pointer;width:26px;height:26px;font:inherit;background:color-mix(in srgb, var(--g-screen) 70%, transparent);color:var(--g-screen-fg);border:0;border-radius:13px;place-items:center;font-size:16px;line-height:1;display:grid;position:absolute;top:6px;right:6px}.vNLA3W_projectDelete:hover{background:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary-inverted)}.vNLA3W_projectDelete:focus-visible{outline:2px solid var(--g-accent);outline-offset:1px}.vNLA3W_projectCard[data-confirm=true]{cursor:default;border-color:var(--dsw-alias-state-error-primary)}.vNLA3W_deleteActions{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.vNLA3W_deleteError{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-state-error-primary)}.vNLA3W_danger{box-sizing:border-box;font:inherit;font-size:var(--dsh-panel-text-meta,12px);cursor:pointer;border-radius:var(--dsw-radius-sm,6px);background:var(--dsw-alias-state-error-primary);min-height:28px;color:var(--dsw-alias-label-primary-inverted);border:0;padding:0 10px;line-height:18px}.vNLA3W_danger:disabled{opacity:.4;cursor:not-allowed}.vNLA3W_danger:focus-visible,.vNLA3W_projectCard:focus-visible,.vNLA3W_newCard:focus-visible{outline:2px solid var(--g-accent);outline-offset:1px}.vNLA3W_projectThumb{aspect-ratio:16/9;background:var(--g-screen);place-items:center;display:grid;position:relative;overflow:hidden}.vNLA3W_projectThumb img{object-fit:cover;width:100%;height:100%;image-rendering:pixelated}.vNLA3W_projectInitial{color:var(--g-screen-dim);font-size:32px;font-weight:700}.vNLA3W_projectHere{font-size:var(--dsh-panel-text-meta,12px);background:var(--g-accent);color:var(--dsw-alias-label-primary-inverted);border-radius:10px;padding:1px 8px;font-weight:600;position:absolute;top:8px;left:8px}.vNLA3W_projectBody{flex-direction:column;gap:6px;min-width:0;padding:10px 12px 12px;display:flex}.vNLA3W_projectTitle{font-size:var(--dsh-panel-text-title,14px)}.vNLA3W_projectChips{flex-wrap:wrap;gap:4px;display:flex}.vNLA3W_projectPitch{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.5;display:-webkit-box;overflow:hidden}.vNLA3W_newCard{text-align:center;border-style:dashed;border-color:color-mix(in srgb, var(--g-accent) 45%, var(--g-line));background:var(--g-soft);justify-content:center;align-items:center;gap:6px;min-height:160px;padding:18px 16px}.vNLA3W_newPlus{background:var(--g-accent);width:36px;height:36px;color:var(--dsw-alias-label-primary-inverted);border-radius:50%;place-items:center;font-size:18px;display:grid}.vNLA3W_commitBar{border-radius:var(--dsw-radius-md,10px);background:color-mix(in srgb, var(--g-accent) 8%, var(--dsw-alias-bg-layer-1));border:.5px solid color-mix(in srgb, var(--g-accent) 40%, var(--dsw-alias-border-l2));font-size:var(--dsh-panel-text-body,13px);flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 14px 0;padding:8px 10px 8px 12px;display:flex}.vNLA3W_commitBar[data-state=busy]{background:color-mix(in srgb, var(--g-warn) 9%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--g-warn) 45%, var(--dsw-alias-border-l2))}.vNLA3W_commitFiles{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:8px;margin:6px 14px 0;padding:6px 12px;font:12px/1.7 ui-monospace,monospace;overflow-x:auto}.vNLA3W_commitFiles div{white-space:nowrap}.vNLA3W_commitKind{width:1.5em;color:var(--g-warn);display:inline-block}.vNLA3W_commitBar[data-state=failed]{background:color-mix(in srgb, var(--g-err) 8%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--g-err) 40%, var(--dsw-alias-border-l2))}.vNLA3W_commitText{flex:220px;align-items:baseline;gap:8px;min-width:0;display:flex}.vNLA3W_commitText strong{color:var(--dsw-alias-label-primary);flex:none;font-weight:600}.vNLA3W_commitList{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);overflow:hidden}.vNLA3W_commitActions{align-items:center;gap:6px;margin-left:auto;display:flex}.vNLA3W_fold{border:1px solid var(--g-line);background:var(--g-card);border-radius:12px}.vNLA3W_fold>summary{cursor:pointer;font-weight:600;font-size:var(--dsh-panel-text-body,13px);padding:10px 12px;list-style-position:inside}.vNLA3W_fold[open]>summary{border-bottom:1px solid var(--g-line)}.vNLA3W_fold>:not(summary){padding:8px 12px 12px}.vNLA3W_poster{background:var(--g-screen);cursor:pointer;border:0;place-items:center;padding:0;display:grid;position:absolute;inset:0;overflow:hidden}.vNLA3W_poster img{object-fit:contain;opacity:.35;width:100%;height:100%;image-rendering:pixelated;position:absolute;inset:0}.vNLA3W_posterPlay{background:color-mix(in srgb, var(--g-screen) 70%, transparent);border:1px solid var(--g-screen-line);color:var(--g-screen-fg);font:inherit;font-size:var(--dsh-panel-text-body,13px);border-radius:999px;align-items:center;gap:8px;padding:8px 16px;display:inline-flex;position:relative}.vNLA3W_posterIcon{background:var(--g-screen-fg);width:26px;height:26px;color:var(--g-screen);border-radius:50%;place-items:center;padding-left:2px;font-size:11px;display:grid}.vNLA3W_poster:focus-visible{outline:2px solid var(--g-accent);outline-offset:-2px}.vNLA3W_hero{background:linear-gradient(135deg, var(--g-soft), var(--dsw-alias-bg-base));border:1px solid var(--g-line);border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.vNLA3W_heroTitle{font-size:var(--dsh-panel-text-title,14px);text-wrap:balance;margin:0;font-weight:600}.vNLA3W_steps{counter-reset:step;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;padding:0;list-style:none;display:grid}.vNLA3W_steps li{counter-increment:step;background:var(--g-card);border:1px solid var(--g-line);font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);border-radius:9px;flex-direction:column;gap:2px;padding:10px;display:flex}.vNLA3W_steps li:before{content:counter(step);color:var(--g-accent);font-weight:700;font-size:var(--dsh-panel-text-title,14px)}.vNLA3W_steps strong{color:var(--dsw-alias-label-primary);font-size:var(--dsh-panel-text-body,13px)}.vNLA3W_hero .vNLA3W_primary{align-self:flex-start}.vNLA3W_block{flex-direction:column;gap:8px;display:flex}.vNLA3W_blockTitle{font-size:var(--dsh-panel-text-body,13px);margin:0;font-weight:600}.vNLA3W_emptyCard{text-align:center;color:var(--dsw-alias-label-secondary);font-size:var(--dsh-panel-text-body,13px);border:1px dashed var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;align-items:center;gap:8px;padding:28px 16px;display:flex}.vNLA3W_emptyGlyph{color:var(--g-accent);font-size:22px}.vNLA3W_gallery{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}.vNLA3W_styleCard{border:1px solid var(--g-line);background:var(--g-card);cursor:pointer;text-align:left;font:inherit;color:inherit;border-radius:10px;flex-direction:column;gap:4px;padding:8px;display:flex}.vNLA3W_styleCard[aria-pressed=true]{border-color:var(--g-accent);box-shadow:0 0 0 1px var(--g-accent)}.vNLA3W_sample{aspect-ratio:200/112;width:100%;height:auto;image-rendering:pixelated;border-radius:6px;display:block}.vNLA3W_styleName{font-weight:600;font-size:var(--dsh-panel-text-body,13px)}.vNLA3W_paletteStrip{border-radius:3px;height:6px;display:flex;overflow:hidden}.vNLA3W_paletteStrip span{flex:1}.vNLA3W_overlay{z-index:5;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);box-shadow:0 12px 32px color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);border-radius:12px;flex-direction:column;gap:8px;padding:12px;display:flex;position:absolute;inset:88px 8px 8px;overflow:auto}.vNLA3W_overlayHead{align-items:center;gap:8px;display:flex}.vNLA3W_banner{background:color-mix(in srgb, var(--g-warn) 8%, var(--dsw-alias-bg-base));border:1px solid color-mix(in srgb, var(--g-warn) 35%, var(--g-line));border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 12px;display:flex}.vNLA3W_bannerText{min-width:0;font-size:var(--dsh-panel-text-body,13px);flex-direction:column;flex:200px;gap:2px;display:flex}.vNLA3W_bannerText span{color:var(--dsw-alias-label-secondary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_bannerActions{flex-wrap:wrap;gap:6px;display:flex}.vNLA3W_rejectRow{gap:6px;width:100%;display:flex}.vNLA3W_rejectRow .vNLA3W_input{flex:1}.vNLA3W_strip{--s:var(--g-accent);font:inherit;font-size:var(--dsh-panel-text-body,13px);text-align:left;background:color-mix(in srgb, var(--s) 8%, var(--dsw-alias-bg-base));border:1px solid color-mix(in srgb, var(--s) 30%, var(--g-line));color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;gap:8px;padding:7px 10px;display:flex}button.vNLA3W_strip{cursor:pointer}.vNLA3W_strip[data-tone=error]{--s:var(--g-err)}.vNLA3W_strip[data-tone=warn]{--s:var(--g-warn)}.vNLA3W_stripDot{background:var(--s);border-radius:50%;flex:none;width:8px;height:8px}.vNLA3W_stripMeta{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.vNLA3W_stripGo{color:var(--s);white-space:nowrap;font-size:var(--dsh-panel-text-meta,12px);margin-left:auto}.vNLA3W_stage{border:1px solid var(--dsw-alias-border-l2);background:var(--g-screen);border-radius:12px;flex-direction:column;flex:none;display:flex;overflow:hidden}.vNLA3W_stageBar{background:var(--g-screen-bar);border-bottom:1px solid var(--g-screen-line);flex-wrap:wrap;align-items:center;gap:8px;padding:6px 8px;display:flex}.vNLA3W_versionPill{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-screen-fg);background:var(--g-screen-line);border-radius:10px;padding:1px 8px;font-weight:500}.vNLA3W_versionPill[data-tone=warn]{color:var(--g-warn);background:color-mix(in srgb, var(--g-warn) 18%, transparent)}.vNLA3W_stageHint{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-screen-dim)}.vNLA3W_errorPill{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-err);background:color-mix(in srgb, var(--g-err) 18%, transparent);cursor:help;border-radius:10px;padding:1px 8px}.vNLA3W_stageBtn{border:1px solid var(--g-screen-line);min-height:26px;color:var(--g-screen-fg);font-size:var(--dsh-panel-text-meta,12px);background:0 0;padding:2px 10px}.vNLA3W_stageBtn[aria-pressed=true]{border-color:var(--g-accent);color:var(--g-screen-fg);background:color-mix(in srgb, var(--g-accent) 55%, var(--g-screen))}.vNLA3W_screen{aspect-ratio:16/10;width:100%;max-height:62vh;position:relative}.vNLA3W_stageInner{position:absolute;inset:0}.vNLA3W_stageInner[data-picking=true]{cursor:crosshair}.vNLA3W_frame{border:0;width:100%;height:100%;display:block}.vNLA3W_pickLayer{cursor:crosshair;background:color-mix(in srgb, var(--g-accent) 6%, transparent);position:absolute;inset:0}.vNLA3W_screenEmpty{text-align:center;color:var(--g-screen-dim);font-size:var(--dsh-panel-text-body,13px);flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:20px;line-height:1.6;display:flex;position:absolute;inset:0}.vNLA3W_screenGlyph{opacity:.7;border:1px solid;border-radius:50%;place-items:center;width:44px;height:44px;display:grid}.vNLA3W_screenNote{color:var(--g-err);font-size:var(--dsh-panel-text-meta,12px);margin:0;position:absolute;top:10px;left:10px}.vNLA3W_pickCard{background:var(--g-card);border-top:1px solid var(--g-line);flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}.vNLA3W_pickName{min-width:0;font-size:var(--dsh-panel-text-body,13px);flex-direction:column;flex:1;display:flex}.vNLA3W_swatch{background:var(--dsw-alias-bg-layer-2);border-radius:6px;width:32px;height:32px}.vNLA3W_drawer{background:var(--g-card);border:1px solid var(--g-line);border-radius:12px;flex-direction:column;gap:2px;padding:10px 12px;display:flex}.vNLA3W_drawerHead{font-size:var(--dsh-panel-text-body,13px);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:4px;display:flex}.vNLA3W_param{font-size:var(--dsh-panel-text-body,13px);border-radius:7px;grid-template-columns:minmax(64px,7em) minmax(0,1fr) 4.5em auto;align-items:center;gap:10px;padding:4px 6px;display:grid}.vNLA3W_param[data-dirty=true]{background:color-mix(in srgb, var(--g-warn) 10%, transparent)}.vNLA3W_paramLabel{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.vNLA3W_param[data-dirty=true] .vNLA3W_paramLabel,.vNLA3W_param[data-dirty=true] .vNLA3W_paramValue{color:var(--g-warn);font-weight:600}.vNLA3W_range{width:100%;accent-color:var(--g-accent);min-height:24px}.vNLA3W_param[data-dirty=true] .vNLA3W_range{accent-color:var(--g-warn)}.vNLA3W_paramValue{text-align:right;font-variant-numeric:tabular-nums}.vNLA3W_paramValue small{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_paramWas{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;text-decoration:line-through}.vNLA3W_notice{font-size:var(--dsh-panel-text-body,13px);border:1px solid var(--g-line);border-left:3px solid var(--g-err);background:var(--g-card);border-radius:10px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.vNLA3W_plainList{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);margin:0;padding-left:18px}.vNLA3W_plainList code{font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_cardGrid{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:10px;display:grid}.vNLA3W_elCard{border:1px solid var(--g-line);background:var(--g-card);border-radius:11px;position:relative}.vNLA3W_elCard[data-selected=true]{border-color:var(--g-accent);box-shadow:0 0 0 1px var(--g-accent)}.vNLA3W_elOpen{width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:11px;flex-direction:column;gap:4px;padding:8px;display:flex}.vNLA3W_elArt{--t:var(--g-accent);aspect-ratio:1;background-color:color-mix(in srgb, var(--t) 10%, var(--dsw-alias-bg-layer-2));background-image:linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-label-primary) 5%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--dsw-alias-label-primary) 5%, transparent) 75%);background-size:12px 12px;border-radius:8px;place-items:center;display:grid}.vNLA3W_elArt[data-tone=\"1\"],.vNLA3W_lookEmpty[data-tone=\"1\"]{--t:var(--g-err)}.vNLA3W_elArt[data-tone=\"2\"],.vNLA3W_lookEmpty[data-tone=\"2\"]{--t:var(--g-warn)}.vNLA3W_elArt[data-tone=\"3\"],.vNLA3W_lookEmpty[data-tone=\"3\"]{--t:var(--g-ok)}.vNLA3W_elArt[data-tone=\"4\"],.vNLA3W_lookEmpty[data-tone=\"4\"]{--t:var(--dsw-alias-label-secondary)}.vNLA3W_elInitial{color:var(--t);font-size:26px;font-weight:700}.vNLA3W_elName{font-weight:600;font-size:var(--dsh-panel-text-body,13px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vNLA3W_elMeta{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vNLA3W_elOpen .vNLA3W_badge{align-self:flex-start;margin-left:0}.vNLA3W_elCheck{background:color-mix(in srgb, var(--dsw-alias-bg-base) 80%, transparent);cursor:pointer;border-radius:6px;place-items:center;width:26px;height:26px;display:grid;position:absolute;top:6px;right:6px}.vNLA3W_elCheck input{accent-color:var(--g-accent);margin:0}.vNLA3W_selectBar{background:var(--dsw-alias-bg-base);border:1px solid var(--g-accent);font-size:var(--dsh-panel-text-body,13px);box-shadow:0 6px 20px color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent);border-radius:10px;align-items:center;gap:8px;padding:8px 10px;display:flex;position:sticky;bottom:0}.vNLA3W_detailHead{z-index:2;background:var(--dsw-alias-bg-base);border-bottom:1px solid var(--g-line);margin:-12px -14px 0;position:sticky;top:-12px}.vNLA3W_lookPanel{background:var(--g-card);border:1px solid var(--g-line);border-radius:12px;flex-direction:column;gap:10px;padding:12px;display:flex}.vNLA3W_lookMain{flex-wrap:wrap;align-items:flex-start;gap:14px;display:flex}.vNLA3W_look{image-rendering:pixelated;max-width:100%;height:auto;display:block}.vNLA3W_lookEditor{touch-action:none;cursor:crosshair;background-color:var(--dsw-alias-bg-layer-2);background-image:linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 75%);background-size:16px 16px;border-radius:8px}.vNLA3W_lookSide{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.vNLA3W_lookPreview{background:var(--g-screen);border-radius:8px;padding:10px}.vNLA3W_lookEmpty{--t:var(--g-accent);background:color-mix(in srgb, var(--t) 8%, var(--dsw-alias-bg-layer-2));width:100%;font-size:var(--dsh-panel-text-body,13px);color:var(--dsw-alias-label-secondary);border-radius:8px;flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex}.vNLA3W_lookEmpty p{margin:0}.vNLA3W_saveState{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary)}.vNLA3W_saveState[data-state=saved]{color:var(--g-ok)}.vNLA3W_saveState[data-state=failed]{color:var(--g-err)}.vNLA3W_toolRow{flex-wrap:wrap;align-items:center;gap:0;display:flex}.vNLA3W_seg{border:1px solid var(--dsw-alias-border-l2);background:var(--g-card);color:var(--dsw-alias-label-secondary);border-radius:0;min-height:28px}.vNLA3W_seg:first-child{border-radius:7px 0 0 7px}.vNLA3W_seg:nth-child(2){border-left:0;border-radius:0 7px 7px 0;margin-right:10px}.vNLA3W_seg[aria-pressed=true]{background:var(--g-soft);color:var(--g-accent);border-color:var(--g-accent)}.vNLA3W_swatches{flex-wrap:wrap;gap:6px;display:flex}.vNLA3W_swatchBtn{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;border-radius:6px;width:26px;height:26px;padding:0}.vNLA3W_swatchBtn[aria-pressed=true]{box-shadow:0 0 0 2px var(--dsw-alias-bg-base), 0 0 0 4px var(--g-accent)}.vNLA3W_swatchBtn[data-erase=true]{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(45deg, transparent 45%, var(--g-err) 45%, var(--g-err) 55%, transparent 55%)}.vNLA3W_proposals{flex-direction:column;gap:8px;padding-top:4px;display:flex}.vNLA3W_proposalGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.vNLA3W_proposalCard{border:1px solid var(--g-line);background:var(--g-card);font-size:var(--dsh-panel-text-body,13px);border-radius:10px;flex-direction:column;align-items:stretch;gap:4px;padding:8px;display:flex}.vNLA3W_proposalArt{background:var(--g-screen);border-radius:8px;place-items:center;padding:8px;display:grid}.vNLA3W_history{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary)}.vNLA3W_history summary{cursor:pointer;padding:4px 0}.vNLA3W_historyRow{border-top:1px solid var(--g-line);flex-wrap:wrap;gap:10px;padding:6px 0;display:flex}.vNLA3W_historyItem{opacity:.65;align-items:center;gap:4px;display:flex}.vNLA3W_historyItem[data-picked=true]{opacity:1}.vNLA3W_fieldGrid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.vNLA3W_field{flex-direction:column;gap:3px;display:flex}.vNLA3W_fieldKey{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,monospace}.vNLA3W_onePager{background:linear-gradient(160deg, var(--g-soft), var(--dsw-alias-bg-base) 80%);border:1px solid color-mix(in srgb, var(--g-accent) 25%, var(--g-line));border-radius:12px;flex-direction:column;gap:8px;padding:14px;display:flex}.vNLA3W_onePagerHead{align-items:center;gap:8px;display:flex}.vNLA3W_styleChip{font:inherit;font-size:var(--dsh-panel-text-meta,12px);cursor:pointer;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);border-radius:10px;min-height:24px;margin-left:auto;padding:2px 10px}.vNLA3W_notesChapter{border:1px solid var(--g-line);border-radius:12px;overflow:hidden}.vNLA3W_onePagerForm{flex-direction:column;gap:8px;display:flex}.vNLA3W_pitch{font-size:var(--dsh-panel-text-reading,14px);text-wrap:pretty;margin:0;font-weight:500;line-height:1.6}.vNLA3W_typeRow{flex-wrap:wrap;gap:6px;display:flex}.vNLA3W_typeTag{font-size:var(--dsh-panel-text-meta,12px);border:1px solid var(--g-line);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-base);border-radius:10px;padding:1px 8px}.vNLA3W_pillars{border-top:1px dashed color-mix(in srgb, var(--g-accent) 30%, var(--g-line));flex-direction:column;gap:4px;padding-top:6px;display:flex}.vNLA3W_pillarList{font-size:var(--dsh-panel-text-body,13px);flex-direction:column;gap:2px;margin:0;padding-left:20px;font-weight:600;display:flex}.vNLA3W_progressRow{align-items:center;gap:10px;display:flex}.vNLA3W_progressBar{background:var(--dsw-alias-bg-layer-2);border-radius:2px;flex:1;height:4px;overflow:hidden}.vNLA3W_progressBar span{background:var(--g-ok);height:100%;display:block}.vNLA3W_chapters{border:1px solid var(--g-line);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.vNLA3W_chapter+.vNLA3W_chapter{border-top:1px solid var(--g-line)}.vNLA3W_chapter[data-open=true]{background:var(--g-card)}.vNLA3W_chapterHead{width:100%;min-height:40px;font:inherit;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:10px 12px;display:flex}.vNLA3W_chevron{color:var(--dsw-alias-label-tertiary);flex:none;width:12px}.vNLA3W_chapterTitle{font-weight:600;font-size:var(--dsh-panel-text-body,13px)}.vNLA3W_freshTag{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-accent);background:color-mix(in srgb, var(--g-accent) 12%, transparent);border-radius:8px;padding:0 6px}.vNLA3W_status{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:10px;padding:1px 8px}.vNLA3W_status[data-status=draft]{color:var(--g-warn);background:color-mix(in srgb, var(--g-warn) 10%, transparent)}.vNLA3W_status[data-status=done]{color:var(--g-ok);background:color-mix(in srgb, var(--g-ok) 10%, transparent)}.vNLA3W_status[data-status=generated]{color:var(--g-accent)}.vNLA3W_chapterBody{flex-direction:column;gap:8px;padding:0 14px 12px 32px;display:flex}.vNLA3W_numbers{flex-direction:column;gap:6px;display:flex}.vNLA3W_numbersTitle{font-size:var(--dsh-panel-text-body,13px);margin:6px 0 0;font-weight:600}.vNLA3W_bars{flex-direction:column;gap:3px;padding:6px 0;display:flex}.vNLA3W_barsKey{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,monospace}.vNLA3W_barRow{font-size:var(--dsh-panel-text-meta,12px);grid-template-columns:minmax(48px,6em) minmax(0,1fr) 3.5em;align-items:center;gap:8px;display:grid}.vNLA3W_barName{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-secondary);overflow:hidden}.vNLA3W_barTrack{background:var(--dsw-alias-bg-layer-2);border-radius:4px;height:8px;overflow:hidden}.vNLA3W_barFill{background:var(--g-accent);border-radius:4px;height:100%;display:block}.vNLA3W_barValue{text-align:right;font-variant-numeric:tabular-nums}.vNLA3W_tableWrap,.vNLA3W_mdTableWrap{overflow-x:auto}.vNLA3W_table,.vNLA3W_mdTable{border-collapse:collapse;font-size:var(--dsh-panel-text-meta,12px);font-variant-numeric:tabular-nums;min-width:100%}.vNLA3W_table th,.vNLA3W_table td,.vNLA3W_mdTable th,.vNLA3W_mdTable td{border-bottom:1px solid var(--g-line);text-align:left;white-space:nowrap;padding:4px 8px}.vNLA3W_table th,.vNLA3W_mdTable th{color:var(--dsw-alias-label-secondary);font-weight:600}.vNLA3W_md{font-size:var(--dsh-panel-text-reading,14px);line-height:var(--dsh-panel-reading-line-height,1.65);flex-direction:column;gap:6px;display:flex}.vNLA3W_mdH1{font-size:var(--dsh-panel-text-title,14px);margin:4px 0 0;font-weight:600}.vNLA3W_mdH2{font-size:var(--dsh-panel-text-body,13px);margin:6px 0 0;font-weight:600}.vNLA3W_mdP{margin:0}.vNLA3W_mdList{margin:0;padding-left:20px}.vNLA3W_mdQuote{border-left:3px solid var(--g-accent);color:var(--dsw-alias-label-secondary);background:var(--g-soft);border-radius:0 6px 6px 0;margin:0;padding:4px 10px}.vNLA3W_checkCard{--c:var(--g-ok);background:var(--g-card);border:1px solid var(--g-line);border-left:3px solid var(--c);font-size:var(--dsh-panel-text-body,13px);border-radius:12px;flex-direction:column;gap:8px;padding:12px;display:flex}.vNLA3W_checkCard[data-tone=error]{--c:var(--g-err)}.vNLA3W_checkCard[data-tone=warn]{--c:var(--g-warn)}.vNLA3W_checkHead{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.vNLA3W_checkHead strong{color:var(--c)}.vNLA3W_layers{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_layers li{font-size:var(--dsh-panel-text-meta,12px);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:10px;padding:2px 10px 2px 8px}.vNLA3W_layers li:before{content:\"✓ \";color:var(--g-ok)}.vNLA3W_layers li[data-ok=false]:before{content:\"✗ \";color:var(--g-err)}.vNLA3W_layers li[data-ok=skip]:before{content:\"– \";color:var(--dsw-alias-label-tertiary)}.vNLA3W_findings{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_findings li{border-top:1px solid var(--g-line);flex-direction:column;gap:2px;padding:6px 0;display:flex}.vNLA3W_findings code{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);word-break:break-all}.vNLA3W_shot{flex-direction:column;gap:4px;margin:0;display:flex}.vNLA3W_shot img{border:1px solid var(--g-line);background:var(--g-screen);border-radius:8px;max-width:100%}.vNLA3W_timeline{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_tlItem{--c:var(--dsw-alias-border-l2);grid-template-columns:14px minmax(0,1fr);gap:10px;padding-bottom:12px;display:grid;position:relative}.vNLA3W_tlItem:before{content:\"\";background:var(--g-line);width:2px;position:absolute;top:14px;bottom:0;left:6px}.vNLA3W_tlItem:last-child:before{display:none}.vNLA3W_tlItem[data-status=current]{--c:var(--g-ok)}.vNLA3W_tlItem[data-status=candidate]{--c:var(--g-warn)}.vNLA3W_tlItem[data-status=rejected]{--c:var(--g-err)}.vNLA3W_tlDot{background:var(--dsw-alias-bg-base);border:3px solid var(--c);box-sizing:border-box;z-index:1;border-radius:50%;width:14px;height:14px;margin-top:2px}.vNLA3W_tlBody{min-width:0;font-size:var(--dsh-panel-text-body,13px);flex-direction:column;gap:2px;display:flex}.vNLA3W_tlHead{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.vNLA3W_tlBy{font-size:var(--dsh-panel-text-meta,12px);border:1px solid var(--g-line);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:6px;padding:0 7px}.vNLA3W_tlBy[data-by=user]{color:var(--g-accent);border-color:color-mix(in srgb, var(--g-accent) 45%, var(--g-line));background:color-mix(in srgb, var(--g-accent) 10%, transparent)}.vNLA3W_tlBy[data-by=turn]{color:var(--dsw-alias-label-tertiary);border-style:dashed}.vNLA3W_tlTag{font-size:var(--dsh-panel-text-meta,12px);color:var(--c);background:color-mix(in srgb, var(--c) 12%, transparent);border-radius:10px;padding:0 8px}.vNLA3W_tlItem[data-status=past] .vNLA3W_tlTag{color:var(--dsw-alias-label-tertiary)}.vNLA3W_tlActions{flex-wrap:wrap;gap:12px;display:flex}.vNLA3W_diff{background:var(--dsw-alias-bg-layer-2);font-family:ui-monospace,monospace;font-size:var(--dsh-panel-text-meta,12px);border-radius:8px;flex-direction:column;gap:2px;padding:6px 10px;display:flex}.vNLA3W_diff [data-kind=added]{color:var(--g-ok)}.vNLA3W_diff [data-kind=removed]{color:var(--g-err)}.vNLA3W_diff [data-kind=changed]{color:var(--g-warn)}.vNLA3W_logList{font-size:var(--dsh-panel-text-body,13px);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_logList li{border-top:1px solid var(--g-line);grid-template-columns:6.5em minmax(0,1fr);gap:8px;padding:5px 0;display:grid}.vNLA3W_logTime{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px);font-variant-numeric:tabular-nums}.vNLA3W_toast{z-index:6;max-width:calc(100% - 32px);font-size:var(--dsh-panel-text-body,13px);background:var(--dsw-alias-label-primary);color:var(--dsw-alias-label-primary-inverted);box-shadow:0 6px 18px color-mix(in srgb, var(--dsw-alias-label-primary) 25%, transparent);border-radius:18px;padding:7px 14px;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.vNLA3W_candBar{background:color-mix(in srgb, var(--g-warn) 10%, var(--g-card));border-top:1px solid color-mix(in srgb, var(--g-warn) 35%, var(--g-line));flex-wrap:wrap;align-items:center;gap:8px 12px;padding:9px 12px;display:flex}.vNLA3W_pickHover{z-index:2;pointer-events:none;white-space:nowrap;font-size:var(--dsh-panel-text-meta,12px);background:var(--g-screen-bar);color:var(--g-screen-fg);border:1px solid var(--g-screen-line);border-radius:6px;padding:3px 8px;position:absolute;transform:translate(12px,12px)}.vNLA3W_preview3d{background:var(--g-screen);border-radius:10px;place-items:center;display:grid;position:relative;overflow:hidden}.vNLA3W_preview3d img{object-fit:contain;width:100%;height:100%;display:block}.vNLA3W_preview3dFrame{border:0;width:100%;height:100%;display:block;position:absolute;inset:0}.vNLA3W_preview3dFrame[data-mode=still]{opacity:0;pointer-events:none}.vNLA3W_preview3dNote{text-align:center;color:var(--g-screen-dim);font-size:var(--dsh-panel-text-meta,12px);padding:12px}.vNLA3W_turntable{aspect-ratio:16/10;width:100%;max-height:300px}.vNLA3W_proposal3d{width:120px;height:96px}.vNLA3W_gltfRow{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.vNLA3W_gltfScale{align-items:center;gap:6px;display:inline-flex}.vNLA3W_gltfScale input{width:64px}.vNLA3W_elArt3d{background:0 0;border-radius:8px;width:100%;height:100%}.vNLA3W_recipe{flex-direction:column;gap:4px;display:flex}.vNLA3W_recipeGroup{border-top:1px solid var(--g-line);flex-direction:column;gap:2px;padding-top:6px;display:flex}.vNLA3W_recipePart{flex-direction:column;gap:2px;padding:4px 0 6px;display:flex}.vNLA3W_recipePartName{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);font-weight:600}.vNLA3W_recipeColors{flex-wrap:wrap;gap:8px 14px;display:flex}.vNLA3W_recipeColor{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;display:inline-flex}.vNLA3W_recipeColor input{border:1px solid var(--g-line);background:0 0;border-radius:6px;width:32px;height:22px;padding:0}@container dsh-panel (width<=560px){.vNLA3W_turntable{max-height:220px}.vNLA3W_proposal3d{width:96px;height:80px}.vNLA3W_scroll{padding:10px 12px 56px}.vNLA3W_steps{grid-template-columns:minmax(0,1fr)}.vNLA3W_primary,.vNLA3W_ghost,.vNLA3W_seg{min-height:36px}.vNLA3W_stageBtn{min-height:32px}.vNLA3W_param{grid-template-columns:minmax(0,1fr) 4.5em}.vNLA3W_param .vNLA3W_range{grid-area:2/1/auto/-1}.vNLA3W_paramWas{display:none}.vNLA3W_proposalGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.vNLA3W_cardGrid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr))}.vNLA3W_overlay{inset:80px 4px 4px}.vNLA3W_swatchBtn{width:32px;height:32px}}";
23933
+ const css$7 = ".vNLA3W_root{--g-accent:var(--dsw-alias-brand-primary);--g-soft:color-mix(in srgb, var(--dsw-alias-brand-primary) 9%, var(--dsw-alias-bg-base));--g-line:var(--dsw-alias-border-l1);--g-card:var(--dsw-alias-bg-layer-1);--g-ok:var(--dsw-alias-state-success-primary);--g-warn:var(--dsw-alias-state-warn-primary);--g-err:var(--dsw-alias-state-error-primary);--g-screen:#0d1020;--g-screen-bar:#161b33;--g-screen-line:#2a3152;--g-screen-fg:#d6dcf5;--g-screen-dim:#8c95ba;background:var(--dsw-alias-bg-base);height:100%;color:var(--dsw-alias-label-primary);position:relative}.vNLA3W_scroll{flex-direction:column;flex:1;gap:12px;min-height:0;padding:12px 14px 56px;display:flex;overflow:auto}.vNLA3W_scroll>*{flex-shrink:0}.vNLA3W_spacer{flex:1}.vNLA3W_lead{color:var(--dsw-alias-label-secondary);font-size:var(--dsh-panel-text-body,13px);margin:0;line-height:1.6}.vNLA3W_metaLine{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_count{color:var(--dsw-alias-label-tertiary);font-weight:400;font-size:var(--dsh-panel-text-meta,12px);margin-left:6px}.vNLA3W_eyebrow{font-size:var(--dsh-panel-text-meta,12px);letter-spacing:.06em;color:var(--g-accent);font-weight:600}.vNLA3W_warnText{color:var(--g-warn);font-size:var(--dsh-panel-text-body,13px);margin:0}.vNLA3W_badge{font-size:var(--dsh-panel-text-meta,12px);background:color-mix(in srgb, var(--g-warn) 14%, transparent);color:var(--g-warn);border-radius:8px;align-items:center;margin-left:6px;padding:0 6px;font-weight:500;display:inline-flex}.vNLA3W_primary,.vNLA3W_ghost,.vNLA3W_link,.vNLA3W_seg,.vNLA3W_stageBtn{box-sizing:border-box;font:inherit;font-size:var(--dsh-panel-text-meta,12px);cursor:pointer;border-radius:var(--dsw-radius-sm,6px);justify-content:center;align-items:center;gap:4px;min-height:28px;padding:0 10px;line-height:18px;display:inline-flex}.vNLA3W_primary{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);border:0}.vNLA3W_primary:disabled,.vNLA3W_ghost:disabled{opacity:.4;cursor:not-allowed}.vNLA3W_ghost{border:.5px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary);background:0 0}.vNLA3W_ghost[aria-pressed=true]{background:var(--dsw-alias-interactive-bg-active)}.vNLA3W_link{color:var(--dsw-alias-label-secondary);background:0 0;border:0;min-height:24px;padding:0 2px}.vNLA3W_link[aria-pressed=true]{color:var(--dsw-alias-label-primary)}.vNLA3W_primary:focus-visible,.vNLA3W_ghost:focus-visible,.vNLA3W_link:focus-visible,.vNLA3W_seg:focus-visible,.vNLA3W_stageBtn:focus-visible,.vNLA3W_elOpen:focus-visible,.vNLA3W_styleCard:focus-visible,.vNLA3W_chapterHead:focus-visible,.vNLA3W_swatchBtn:focus-visible,.vNLA3W_strip:focus-visible{outline:2px solid var(--g-accent);outline-offset:1px}.vNLA3W_input,.vNLA3W_textarea{font:inherit;font-size:var(--dsh-panel-text-body,13px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:7px;min-width:0;padding:6px 9px}.vNLA3W_textarea{box-sizing:border-box;resize:vertical;width:100%;line-height:1.55}.vNLA3W_rowEnd{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.vNLA3W_footRow{justify-content:center;display:flex}.vNLA3W_headMeta{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.vNLA3W_headChip{font-size:var(--dsh-panel-text-meta,12px);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:10px;padding:1px 8px}.vNLA3W_headChip[data-tone=ok]{color:var(--g-ok);background:color-mix(in srgb, var(--g-ok) 12%, transparent)}.vNLA3W_headChip[data-tone=info]{color:var(--g-accent);background:color-mix(in srgb, var(--g-accent) 12%, transparent)}.vNLA3W_switches{align-items:center;gap:12px;display:inline-flex}.vNLA3W_switch{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.vNLA3W_titleSwitch{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;align-items:center;gap:4px;min-height:28px;padding:2px 4px 2px 0;font-weight:600;display:inline-flex}.vNLA3W_root strong:has(>.vNLA3W_titleSwitch){flex-shrink:0}.vNLA3W_headMeta{flex-wrap:nowrap;min-width:0;overflow:hidden}.vNLA3W_titleSwitch span:first-child{text-overflow:ellipsis;white-space:nowrap;max-width:12em;overflow:hidden}.vNLA3W_titleSwitch:focus-visible{outline:2px solid var(--g-accent)}.vNLA3W_titleCaret{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_projectGrid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;display:grid}.vNLA3W_projectCard,.vNLA3W_newCard{border:1px solid var(--g-line);background:var(--g-card);font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:12px;flex-direction:column;gap:0;padding:0;display:flex;overflow:hidden}.vNLA3W_projectCard[aria-current=true]{border-color:var(--g-accent);box-shadow:0 0 0 1px var(--g-accent)}.vNLA3W_projectCard[data-loading=true]{cursor:default;padding:16px}.vNLA3W_projectCardWrap{flex-direction:column;display:flex;position:relative}.vNLA3W_projectCardWrap>.vNLA3W_projectCard{flex:1}.vNLA3W_projectDelete{cursor:pointer;width:26px;height:26px;font:inherit;background:color-mix(in srgb, var(--g-screen) 70%, transparent);color:var(--g-screen-fg);border:0;border-radius:13px;place-items:center;font-size:16px;line-height:1;display:grid;position:absolute;top:6px;right:6px}.vNLA3W_projectDelete:hover{background:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary-inverted)}.vNLA3W_projectDelete:focus-visible{outline:2px solid var(--g-accent);outline-offset:1px}.vNLA3W_projectCard[data-confirm=true]{cursor:default;border-color:var(--dsw-alias-state-error-primary)}.vNLA3W_deleteActions{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.vNLA3W_deleteError{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-state-error-primary)}.vNLA3W_danger{box-sizing:border-box;font:inherit;font-size:var(--dsh-panel-text-meta,12px);cursor:pointer;border-radius:var(--dsw-radius-sm,6px);background:var(--dsw-alias-state-error-primary);min-height:28px;color:var(--dsw-alias-label-primary-inverted);border:0;padding:0 10px;line-height:18px}.vNLA3W_danger:disabled{opacity:.4;cursor:not-allowed}.vNLA3W_danger:focus-visible,.vNLA3W_projectCard:focus-visible,.vNLA3W_newCard:focus-visible{outline:2px solid var(--g-accent);outline-offset:1px}.vNLA3W_projectThumb{aspect-ratio:16/9;background:var(--g-screen);place-items:center;display:grid;position:relative;overflow:hidden}.vNLA3W_projectThumb img{object-fit:cover;width:100%;height:100%;image-rendering:pixelated}.vNLA3W_projectInitial{color:var(--g-screen-dim);font-size:32px;font-weight:700}.vNLA3W_projectHere{font-size:var(--dsh-panel-text-meta,12px);background:var(--g-accent);color:var(--dsw-alias-label-primary-inverted);border-radius:10px;padding:1px 8px;font-weight:600;position:absolute;top:8px;left:8px}.vNLA3W_projectBody{flex-direction:column;gap:6px;min-width:0;padding:10px 12px 12px;display:flex}.vNLA3W_projectTitle{font-size:var(--dsh-panel-text-title,14px)}.vNLA3W_projectChips{flex-wrap:wrap;gap:4px;display:flex}.vNLA3W_projectPitch{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.5;display:-webkit-box;overflow:hidden}.vNLA3W_newCard{text-align:center;border-style:dashed;border-color:color-mix(in srgb, var(--g-accent) 45%, var(--g-line));background:var(--g-soft);justify-content:center;align-items:center;gap:6px;min-height:160px;padding:18px 16px}.vNLA3W_newPlus{background:var(--g-accent);width:36px;height:36px;color:var(--dsw-alias-label-primary-inverted);border-radius:50%;place-items:center;font-size:18px;display:grid}.vNLA3W_commitBar{border-radius:var(--dsw-radius-md,10px);background:color-mix(in srgb, var(--g-accent) 8%, var(--dsw-alias-bg-layer-1));border:.5px solid color-mix(in srgb, var(--g-accent) 40%, var(--dsw-alias-border-l2));font-size:var(--dsh-panel-text-body,13px);flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 14px 0;padding:8px 10px 8px 12px;display:flex}.vNLA3W_commitBar[data-state=busy]{background:color-mix(in srgb, var(--g-warn) 9%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--g-warn) 45%, var(--dsw-alias-border-l2))}.vNLA3W_commitFiles{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:8px;margin:6px 14px 0;padding:6px 12px;font:12px/1.7 ui-monospace,monospace;overflow-x:auto}.vNLA3W_commitFiles div{white-space:nowrap}.vNLA3W_commitKind{width:1.5em;color:var(--g-warn);display:inline-block}.vNLA3W_commitBar[data-state=failed]{background:color-mix(in srgb, var(--g-err) 8%, var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb, var(--g-err) 40%, var(--dsw-alias-border-l2))}.vNLA3W_commitText{flex:220px;align-items:baseline;gap:8px;min-width:0;display:flex}.vNLA3W_commitText strong{color:var(--dsw-alias-label-primary);flex:none;font-weight:600}.vNLA3W_commitList{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);overflow:hidden}.vNLA3W_commitActions{align-items:center;gap:6px;margin-left:auto;display:flex}.vNLA3W_fold{border:1px solid var(--g-line);background:var(--g-card);border-radius:12px}.vNLA3W_fold>summary{cursor:pointer;font-weight:600;font-size:var(--dsh-panel-text-body,13px);padding:10px 12px;list-style-position:inside}.vNLA3W_fold[open]>summary{border-bottom:1px solid var(--g-line)}.vNLA3W_fold>:not(summary){padding:8px 12px 12px}.vNLA3W_poster{background:var(--g-screen);cursor:pointer;border:0;place-items:center;padding:0;display:grid;position:absolute;inset:0;overflow:hidden}.vNLA3W_poster img{object-fit:contain;opacity:.35;width:100%;height:100%;image-rendering:pixelated;position:absolute;inset:0}.vNLA3W_posterPlay{background:color-mix(in srgb, var(--g-screen) 70%, transparent);border:1px solid var(--g-screen-line);color:var(--g-screen-fg);font:inherit;font-size:var(--dsh-panel-text-body,13px);border-radius:999px;align-items:center;gap:8px;padding:8px 16px;display:inline-flex;position:relative}.vNLA3W_posterIcon{background:var(--g-screen-fg);width:26px;height:26px;color:var(--g-screen);border-radius:50%;place-items:center;padding-left:2px;font-size:11px;display:grid}.vNLA3W_poster:focus-visible{outline:2px solid var(--g-accent);outline-offset:-2px}.vNLA3W_hero{background:linear-gradient(135deg, var(--g-soft), var(--dsw-alias-bg-base));border:1px solid var(--g-line);border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.vNLA3W_heroTitle{font-size:var(--dsh-panel-text-title,14px);text-wrap:balance;margin:0;font-weight:600}.vNLA3W_steps{counter-reset:step;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;padding:0;list-style:none;display:grid}.vNLA3W_steps li{counter-increment:step;background:var(--g-card);border:1px solid var(--g-line);font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);border-radius:9px;flex-direction:column;gap:2px;padding:10px;display:flex}.vNLA3W_steps li:before{content:counter(step);color:var(--g-accent);font-weight:700;font-size:var(--dsh-panel-text-title,14px)}.vNLA3W_steps strong{color:var(--dsw-alias-label-primary);font-size:var(--dsh-panel-text-body,13px)}.vNLA3W_hero .vNLA3W_primary{align-self:flex-start}.vNLA3W_block{flex-direction:column;gap:8px;display:flex}.vNLA3W_blockTitle{font-size:var(--dsh-panel-text-body,13px);margin:0;font-weight:600}.vNLA3W_emptyCard{text-align:center;color:var(--dsw-alias-label-secondary);font-size:var(--dsh-panel-text-body,13px);border:1px dashed var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;align-items:center;gap:8px;padding:28px 16px;display:flex}.vNLA3W_emptyGlyph{color:var(--g-accent);font-size:22px}.vNLA3W_gallery{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}.vNLA3W_styleCard{border:1px solid var(--g-line);background:var(--g-card);cursor:pointer;text-align:left;font:inherit;color:inherit;border-radius:10px;flex-direction:column;gap:4px;padding:8px;display:flex}.vNLA3W_styleCard[aria-pressed=true]{border-color:var(--g-accent);box-shadow:0 0 0 1px var(--g-accent)}.vNLA3W_sample{aspect-ratio:200/112;width:100%;height:auto;image-rendering:pixelated;border-radius:6px;display:block}.vNLA3W_styleName{font-weight:600;font-size:var(--dsh-panel-text-body,13px)}.vNLA3W_paletteStrip{border-radius:3px;height:6px;display:flex;overflow:hidden}.vNLA3W_paletteStrip span{flex:1}.vNLA3W_overlay{z-index:5;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);box-shadow:0 12px 32px color-mix(in srgb, var(--dsw-alias-label-primary) 18%, transparent);border-radius:12px;flex-direction:column;gap:8px;padding:12px;display:flex;position:absolute;inset:88px 8px 8px;overflow:auto}.vNLA3W_overlayHead{align-items:center;gap:8px;display:flex}.vNLA3W_banner{background:color-mix(in srgb, var(--g-warn) 8%, var(--dsw-alias-bg-base));border:1px solid color-mix(in srgb, var(--g-warn) 35%, var(--g-line));border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 12px;display:flex}.vNLA3W_bannerText{min-width:0;font-size:var(--dsh-panel-text-body,13px);flex-direction:column;flex:200px;gap:2px;display:flex}.vNLA3W_bannerText span{color:var(--dsw-alias-label-secondary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_bannerActions{flex-wrap:wrap;gap:6px;display:flex}.vNLA3W_rejectRow{gap:6px;width:100%;display:flex}.vNLA3W_rejectRow .vNLA3W_input{flex:1}.vNLA3W_strip{--s:var(--g-accent);font:inherit;font-size:var(--dsh-panel-text-body,13px);text-align:left;background:color-mix(in srgb, var(--s) 8%, var(--dsw-alias-bg-base));border:1px solid color-mix(in srgb, var(--s) 30%, var(--g-line));color:var(--dsw-alias-label-primary);border-radius:8px;align-items:center;gap:8px;padding:7px 10px;display:flex}button.vNLA3W_strip{cursor:pointer}.vNLA3W_strip[data-tone=error]{--s:var(--g-err)}.vNLA3W_strip[data-tone=warn]{--s:var(--g-warn)}.vNLA3W_stripDot{background:var(--s);border-radius:50%;flex:none;width:8px;height:8px}.vNLA3W_stripMeta{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.vNLA3W_stripGo{color:var(--s);white-space:nowrap;font-size:var(--dsh-panel-text-meta,12px);margin-left:auto}.vNLA3W_stage{border:1px solid var(--dsw-alias-border-l2);background:var(--g-screen);border-radius:12px;flex-direction:column;flex:none;display:flex;overflow:hidden}.vNLA3W_stageBar{background:var(--g-screen-bar);border-bottom:1px solid var(--g-screen-line);flex-wrap:wrap;align-items:center;gap:8px;padding:6px 8px;display:flex}.vNLA3W_versionPill{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-screen-fg);background:var(--g-screen-line);border-radius:10px;padding:1px 8px;font-weight:500}.vNLA3W_versionPill[data-tone=warn]{color:var(--g-warn);background:color-mix(in srgb, var(--g-warn) 18%, transparent)}.vNLA3W_stageHint{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-screen-dim)}.vNLA3W_errorPill{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-err);background:color-mix(in srgb, var(--g-err) 18%, transparent);cursor:help;border-radius:10px;padding:1px 8px}.vNLA3W_stageBtn{border:1px solid var(--g-screen-line);min-height:26px;color:var(--g-screen-fg);font-size:var(--dsh-panel-text-meta,12px);background:0 0;padding:2px 10px}.vNLA3W_stageBtn[aria-pressed=true]{border-color:var(--g-accent);color:var(--g-screen-fg);background:color-mix(in srgb, var(--g-accent) 55%, var(--g-screen))}.vNLA3W_screen{aspect-ratio:16/10;width:100%;max-height:62vh;position:relative}.vNLA3W_stageInner{position:absolute;inset:0}.vNLA3W_stageInner[data-picking=true]{cursor:crosshair}.vNLA3W_frame{border:0;width:100%;height:100%;display:block}.vNLA3W_pickLayer{cursor:crosshair;background:color-mix(in srgb, var(--g-accent) 6%, transparent);position:absolute;inset:0}.vNLA3W_screenEmpty{text-align:center;color:var(--g-screen-dim);font-size:var(--dsh-panel-text-body,13px);flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:20px;line-height:1.6;display:flex;position:absolute;inset:0}.vNLA3W_screenGlyph{opacity:.7;border:1px solid;border-radius:50%;place-items:center;width:44px;height:44px;display:grid}.vNLA3W_screenNote{color:var(--g-err);font-size:var(--dsh-panel-text-meta,12px);margin:0;position:absolute;top:10px;left:10px}.vNLA3W_pickCard{background:var(--g-card);border-top:1px solid var(--g-line);flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}.vNLA3W_pickName{min-width:0;font-size:var(--dsh-panel-text-body,13px);flex-direction:column;flex:1;display:flex}.vNLA3W_swatch{background:var(--dsw-alias-bg-layer-2);border-radius:6px;width:32px;height:32px}.vNLA3W_drawer{background:var(--g-card);border:1px solid var(--g-line);border-radius:12px;flex-direction:column;gap:2px;padding:10px 12px;display:flex}.vNLA3W_drawerHead{font-size:var(--dsh-panel-text-body,13px);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:4px;display:flex}.vNLA3W_param{font-size:var(--dsh-panel-text-body,13px);border-radius:7px;grid-template-columns:minmax(64px,7em) minmax(0,1fr) 4.5em auto;align-items:center;gap:10px;padding:4px 6px;display:grid}.vNLA3W_param[data-dirty=true]{background:color-mix(in srgb, var(--g-warn) 10%, transparent)}.vNLA3W_paramLabel{color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.vNLA3W_param[data-dirty=true] .vNLA3W_paramLabel,.vNLA3W_param[data-dirty=true] .vNLA3W_paramValue{color:var(--g-warn);font-weight:600}.vNLA3W_range{width:100%;accent-color:var(--g-accent);min-height:24px}.vNLA3W_param[data-dirty=true] .vNLA3W_range{accent-color:var(--g-warn)}.vNLA3W_paramValue{text-align:right;font-variant-numeric:tabular-nums}.vNLA3W_paramValue small{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_paramWas{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;text-decoration:line-through}.vNLA3W_notice{font-size:var(--dsh-panel-text-body,13px);border:1px solid var(--g-line);border-left:3px solid var(--g-err);background:var(--g-card);border-radius:10px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.vNLA3W_plainList{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);margin:0;padding-left:18px}.vNLA3W_plainList code{font-size:var(--dsh-panel-text-meta,12px)}.vNLA3W_cardGrid{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:10px;display:grid}.vNLA3W_elCard{border:1px solid var(--g-line);background:var(--g-card);border-radius:11px;position:relative}.vNLA3W_elCard[data-selected=true]{border-color:var(--g-accent);box-shadow:0 0 0 1px var(--g-accent)}.vNLA3W_elOpen{width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:11px;flex-direction:column;gap:4px;padding:8px;display:flex}.vNLA3W_elArt{--t:var(--g-accent);aspect-ratio:1;background-color:color-mix(in srgb, var(--t) 10%, var(--dsw-alias-bg-layer-2));background-image:linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-label-primary) 5%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--dsw-alias-label-primary) 5%, transparent) 75%);background-size:12px 12px;border-radius:8px;place-items:center;display:grid}.vNLA3W_elArt[data-tone=\"1\"],.vNLA3W_lookEmpty[data-tone=\"1\"]{--t:var(--g-err)}.vNLA3W_elArt[data-tone=\"2\"],.vNLA3W_lookEmpty[data-tone=\"2\"]{--t:var(--g-warn)}.vNLA3W_elArt[data-tone=\"3\"],.vNLA3W_lookEmpty[data-tone=\"3\"]{--t:var(--g-ok)}.vNLA3W_elArt[data-tone=\"4\"],.vNLA3W_lookEmpty[data-tone=\"4\"]{--t:var(--dsw-alias-label-secondary)}.vNLA3W_elInitial{color:var(--t);font-size:26px;font-weight:700}.vNLA3W_elName{font-weight:600;font-size:var(--dsh-panel-text-body,13px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vNLA3W_elMeta{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vNLA3W_elOpen .vNLA3W_badge{align-self:flex-start;margin-left:0}.vNLA3W_elCheck{background:color-mix(in srgb, var(--dsw-alias-bg-base) 80%, transparent);cursor:pointer;border-radius:6px;place-items:center;width:26px;height:26px;display:grid;position:absolute;top:6px;right:6px}.vNLA3W_elCheck input{accent-color:var(--g-accent);margin:0}.vNLA3W_selectBar{background:var(--dsw-alias-bg-base);border:1px solid var(--g-accent);font-size:var(--dsh-panel-text-body,13px);box-shadow:0 6px 20px color-mix(in srgb, var(--dsw-alias-label-primary) 12%, transparent);border-radius:10px;align-items:center;gap:8px;padding:8px 10px;display:flex;position:sticky;bottom:0}.vNLA3W_detailHead{z-index:2;background:var(--dsw-alias-bg-base);border-bottom:1px solid var(--g-line);margin:-12px -14px 0;position:sticky;top:-12px}.vNLA3W_lookPanel{background:var(--g-card);border:1px solid var(--g-line);border-radius:12px;flex-direction:column;gap:10px;padding:12px;display:flex}.vNLA3W_lookMain{flex-wrap:wrap;align-items:flex-start;gap:14px;display:flex}.vNLA3W_look{image-rendering:pixelated;max-width:100%;height:auto;display:block}.vNLA3W_lookEditor{touch-action:none;cursor:crosshair;background-color:var(--dsw-alias-bg-layer-2);background-image:linear-gradient(45deg, color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent) 75%);background-size:16px 16px;border-radius:8px}.vNLA3W_lookSide{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.vNLA3W_lookPreview{background:var(--g-screen);border-radius:8px;padding:10px}.vNLA3W_lookEmpty{--t:var(--g-accent);background:color-mix(in srgb, var(--t) 8%, var(--dsw-alias-bg-layer-2));width:100%;font-size:var(--dsh-panel-text-body,13px);color:var(--dsw-alias-label-secondary);border-radius:8px;flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex}.vNLA3W_lookEmpty p{margin:0}.vNLA3W_saveState{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary)}.vNLA3W_saveState[data-state=saved]{color:var(--g-ok)}.vNLA3W_saveState[data-state=failed]{color:var(--g-err)}.vNLA3W_toolRow{flex-wrap:wrap;align-items:center;gap:0;display:flex}.vNLA3W_tight{gap:8px 12px}.vNLA3W_navNotice{border-radius:var(--dsw-radius-md,10px);background:color-mix(in srgb, var(--g-ok) 9%, var(--dsw-alias-bg-layer-1));border:.5px solid color-mix(in srgb, var(--g-ok) 40%, var(--dsw-alias-border-l2));font-size:var(--dsh-panel-text-body,13px);flex-wrap:wrap;align-items:center;gap:8px 12px;margin:8px 14px 0;padding:8px 10px 8px 12px;display:flex}.vNLA3W_navNoticeText{flex:160px;min-width:0;font-weight:600}.vNLA3W_segGroup{border:1px solid var(--dsw-alias-border-l2);background:var(--g-card);border-radius:8px;flex:none;display:inline-flex;overflow:hidden}.vNLA3W_seg{min-height:28px;color:var(--dsw-alias-label-secondary);font:inherit;font-size:var(--dsh-panel-text-body,13px);cursor:pointer;background:0 0;border:0;border-radius:0;margin:0;padding:0 12px}.vNLA3W_seg+.vNLA3W_seg{border-left:1px solid var(--dsw-alias-border-l2)}.vNLA3W_seg:hover{color:var(--dsw-alias-label-primary)}.vNLA3W_seg:focus-visible{outline:2px solid var(--g-accent);outline-offset:-2px}.vNLA3W_seg[aria-pressed=true]{background:color-mix(in srgb, var(--g-accent) 18%, var(--g-card));color:var(--g-accent);font-weight:600}.vNLA3W_swatches{flex-wrap:wrap;gap:6px;display:flex}.vNLA3W_swatchBtn{border:1px solid var(--dsw-alias-border-l2);cursor:pointer;border-radius:6px;width:26px;height:26px;padding:0}.vNLA3W_swatchBtn[aria-pressed=true]{box-shadow:0 0 0 2px var(--dsw-alias-bg-base), 0 0 0 4px var(--g-accent)}.vNLA3W_swatchBtn[data-erase=true]{background-color:var(--dsw-alias-bg-base);background-image:linear-gradient(45deg, transparent 45%, var(--g-err) 45%, var(--g-err) 55%, transparent 55%)}.vNLA3W_proposals{flex-direction:column;gap:8px;padding-top:4px;display:flex}.vNLA3W_proposalGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.vNLA3W_proposalCard{border:1px solid var(--g-line);background:var(--g-card);font-size:var(--dsh-panel-text-body,13px);border-radius:10px;flex-direction:column;align-items:stretch;gap:4px;padding:8px;display:flex}.vNLA3W_proposalArt{background:var(--g-screen);border-radius:8px;place-items:center;padding:8px;display:grid}.vNLA3W_history{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary)}.vNLA3W_history summary{cursor:pointer;padding:4px 0}.vNLA3W_historyRow{border-top:1px solid var(--g-line);flex-wrap:wrap;gap:10px;padding:6px 0;display:flex}.vNLA3W_historyItem{opacity:.65;align-items:center;gap:4px;display:flex}.vNLA3W_historyItem[data-picked=true]{opacity:1}.vNLA3W_fieldGrid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.vNLA3W_field{flex-direction:column;gap:3px;display:flex}.vNLA3W_fieldKey{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,monospace}.vNLA3W_onePager{background:linear-gradient(160deg, var(--g-soft), var(--dsw-alias-bg-base) 80%);border:1px solid color-mix(in srgb, var(--g-accent) 25%, var(--g-line));border-radius:12px;flex-direction:column;gap:8px;padding:14px;display:flex}.vNLA3W_onePagerHead{align-items:center;gap:8px;display:flex}.vNLA3W_styleChip{text-overflow:ellipsis;white-space:nowrap;max-width:14em;font:inherit;font-size:var(--dsh-panel-text-meta,12px);cursor:pointer;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);border-radius:10px;flex:none;min-height:24px;margin-left:auto;padding:2px 10px;overflow:hidden}.vNLA3W_notesChapter{border:1px solid var(--g-line);border-radius:12px;overflow:hidden}.vNLA3W_onePagerForm{flex-direction:column;gap:8px;display:flex}.vNLA3W_pitch{font-size:var(--dsh-panel-text-reading,14px);text-wrap:pretty;margin:0;font-weight:500;line-height:1.6}.vNLA3W_typeRow{flex-wrap:wrap;gap:6px;display:flex}.vNLA3W_typeTag{font-size:var(--dsh-panel-text-meta,12px);border:1px solid var(--g-line);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-base);border-radius:10px;padding:1px 8px}.vNLA3W_pillars{border-top:1px dashed color-mix(in srgb, var(--g-accent) 30%, var(--g-line));flex-direction:column;gap:4px;padding-top:6px;display:flex}.vNLA3W_pillarList{font-size:var(--dsh-panel-text-body,13px);flex-direction:column;gap:2px;margin:0;padding-left:20px;font-weight:600;display:flex}.vNLA3W_progressRow{align-items:center;gap:10px;display:flex}.vNLA3W_progressBar{background:var(--dsw-alias-bg-layer-2);border-radius:2px;flex:1;height:4px;overflow:hidden}.vNLA3W_progressBar span{background:var(--g-ok);height:100%;display:block}.vNLA3W_chapters{border:1px solid var(--g-line);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.vNLA3W_chapter+.vNLA3W_chapter{border-top:1px solid var(--g-line)}.vNLA3W_chapter[data-open=true]{background:var(--g-card)}.vNLA3W_chapterHead{width:100%;min-height:40px;font:inherit;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:10px 12px;display:flex}.vNLA3W_chevron{color:var(--dsw-alias-label-tertiary);flex:none;width:12px}.vNLA3W_chapterTitle{font-weight:600;font-size:var(--dsh-panel-text-body,13px)}.vNLA3W_freshTag{font-size:var(--dsh-panel-text-meta,12px);color:var(--g-accent);background:color-mix(in srgb, var(--g-accent) 12%, transparent);border-radius:8px;padding:0 6px}.vNLA3W_status{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:10px;padding:1px 8px}.vNLA3W_status[data-status=draft]{color:var(--g-warn);background:color-mix(in srgb, var(--g-warn) 10%, transparent)}.vNLA3W_status[data-status=done]{color:var(--g-ok);background:color-mix(in srgb, var(--g-ok) 10%, transparent)}.vNLA3W_status[data-status=generated]{color:var(--g-accent)}.vNLA3W_chapterBody{flex-direction:column;gap:8px;padding:0 14px 12px 32px;display:flex}.vNLA3W_numbers{flex-direction:column;gap:6px;display:flex}.vNLA3W_numbersTitle{font-size:var(--dsh-panel-text-body,13px);margin:6px 0 0;font-weight:600}.vNLA3W_bars{flex-direction:column;gap:3px;padding:6px 0;display:flex}.vNLA3W_barsKey{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,monospace}.vNLA3W_barRow{font-size:var(--dsh-panel-text-meta,12px);grid-template-columns:minmax(48px,6em) minmax(0,1fr) 3.5em;align-items:center;gap:8px;display:grid}.vNLA3W_barName{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-secondary);overflow:hidden}.vNLA3W_barTrack{background:var(--dsw-alias-bg-layer-2);border-radius:4px;height:8px;overflow:hidden}.vNLA3W_barFill{background:var(--g-accent);border-radius:4px;height:100%;display:block}.vNLA3W_barValue{text-align:right;font-variant-numeric:tabular-nums}.vNLA3W_tableWrap,.vNLA3W_mdTableWrap{overflow-x:auto}.vNLA3W_table,.vNLA3W_mdTable{border-collapse:collapse;font-size:var(--dsh-panel-text-meta,12px);font-variant-numeric:tabular-nums;min-width:100%}.vNLA3W_table th,.vNLA3W_table td,.vNLA3W_mdTable th,.vNLA3W_mdTable td{border-bottom:1px solid var(--g-line);text-align:left;white-space:nowrap;padding:4px 8px}.vNLA3W_table th,.vNLA3W_mdTable th{color:var(--dsw-alias-label-secondary);font-weight:600}.vNLA3W_md{font-size:var(--dsh-panel-text-reading,14px);line-height:var(--dsh-panel-reading-line-height,1.65);flex-direction:column;gap:6px;display:flex}.vNLA3W_mdH1{font-size:var(--dsh-panel-text-title,14px);margin:4px 0 0;font-weight:600}.vNLA3W_mdH2{font-size:var(--dsh-panel-text-body,13px);margin:6px 0 0;font-weight:600}.vNLA3W_mdP{margin:0}.vNLA3W_mdList{margin:0;padding-left:20px}.vNLA3W_mdQuote{border-left:3px solid var(--g-accent);color:var(--dsw-alias-label-secondary);background:var(--g-soft);border-radius:0 6px 6px 0;margin:0;padding:4px 10px}.vNLA3W_checkCard{--c:var(--g-ok);background:var(--g-card);border:1px solid var(--g-line);border-left:3px solid var(--c);font-size:var(--dsh-panel-text-body,13px);border-radius:12px;flex-direction:column;gap:8px;padding:12px;display:flex}.vNLA3W_checkCard[data-tone=error]{--c:var(--g-err)}.vNLA3W_checkCard[data-tone=warn]{--c:var(--g-warn)}.vNLA3W_checkHead{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.vNLA3W_checkHead strong{color:var(--c)}.vNLA3W_layers{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_layers li{font-size:var(--dsh-panel-text-meta,12px);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);border-radius:10px;padding:2px 10px 2px 8px}.vNLA3W_layers li:before{content:\"✓ \";color:var(--g-ok)}.vNLA3W_layers li[data-ok=false]:before{content:\"✗ \";color:var(--g-err)}.vNLA3W_layers li[data-ok=skip]:before{content:\"– \";color:var(--dsw-alias-label-tertiary)}.vNLA3W_findings{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_findings li{border-top:1px solid var(--g-line);flex-direction:column;gap:2px;padding:6px 0;display:flex}.vNLA3W_findings code{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);word-break:break-all}.vNLA3W_shot{flex-direction:column;gap:4px;margin:0;display:flex}.vNLA3W_shot img{border:1px solid var(--g-line);background:var(--g-screen);border-radius:8px;max-width:100%}.vNLA3W_timeline{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_tlItem{--c:var(--dsw-alias-border-l2);grid-template-columns:14px minmax(0,1fr);gap:10px;padding-bottom:12px;display:grid;position:relative}.vNLA3W_tlItem:before{content:\"\";background:var(--g-line);width:2px;position:absolute;top:14px;bottom:0;left:6px}.vNLA3W_tlItem:last-child:before{display:none}.vNLA3W_tlItem[data-status=current]{--c:var(--g-ok)}.vNLA3W_tlItem[data-status=candidate]{--c:var(--g-warn)}.vNLA3W_tlItem[data-status=rejected]{--c:var(--g-err)}.vNLA3W_tlDot{background:var(--dsw-alias-bg-base);border:3px solid var(--c);box-sizing:border-box;z-index:1;border-radius:50%;width:14px;height:14px;margin-top:2px}.vNLA3W_tlBody{min-width:0;font-size:var(--dsh-panel-text-body,13px);flex-direction:column;gap:2px;display:flex}.vNLA3W_tlHead{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.vNLA3W_tlBy{font-size:var(--dsh-panel-text-meta,12px);border:1px solid var(--g-line);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:6px;padding:0 7px}.vNLA3W_tlBy[data-by=user]{color:var(--g-accent);border-color:color-mix(in srgb, var(--g-accent) 45%, var(--g-line));background:color-mix(in srgb, var(--g-accent) 10%, transparent)}.vNLA3W_tlBy[data-by=turn]{color:var(--dsw-alias-label-tertiary);border-style:dashed}.vNLA3W_tlTag{font-size:var(--dsh-panel-text-meta,12px);color:var(--c);background:color-mix(in srgb, var(--c) 12%, transparent);border-radius:10px;padding:0 8px}.vNLA3W_tlItem[data-status=past] .vNLA3W_tlTag{color:var(--dsw-alias-label-tertiary)}.vNLA3W_tlActions{flex-wrap:wrap;gap:12px;display:flex}.vNLA3W_diff{background:var(--dsw-alias-bg-layer-2);font-family:ui-monospace,monospace;font-size:var(--dsh-panel-text-meta,12px);border-radius:8px;flex-direction:column;gap:2px;padding:6px 10px;display:flex}.vNLA3W_diff [data-kind=added]{color:var(--g-ok)}.vNLA3W_diff [data-kind=removed]{color:var(--g-err)}.vNLA3W_diff [data-kind=changed]{color:var(--g-warn)}.vNLA3W_logList{font-size:var(--dsh-panel-text-body,13px);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.vNLA3W_logList li{border-top:1px solid var(--g-line);grid-template-columns:6.5em minmax(0,1fr);gap:8px;padding:5px 0;display:grid}.vNLA3W_logTime{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-panel-text-meta,12px);font-variant-numeric:tabular-nums}.vNLA3W_toast{z-index:6;max-width:calc(100% - 32px);font-size:var(--dsh-panel-text-body,13px);background:var(--dsw-alias-label-primary);color:var(--dsw-alias-label-primary-inverted);box-shadow:0 6px 18px color-mix(in srgb, var(--dsw-alias-label-primary) 25%, transparent);border-radius:18px;padding:7px 14px;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.vNLA3W_candBar{background:color-mix(in srgb, var(--g-warn) 10%, var(--g-card));border-top:1px solid color-mix(in srgb, var(--g-warn) 35%, var(--g-line));flex-wrap:wrap;align-items:center;gap:8px 12px;padding:9px 12px;display:flex}.vNLA3W_pickHover{z-index:2;pointer-events:none;white-space:nowrap;font-size:var(--dsh-panel-text-meta,12px);background:var(--g-screen-bar);color:var(--g-screen-fg);border:1px solid var(--g-screen-line);border-radius:6px;padding:3px 8px;position:absolute;transform:translate(12px,12px)}.vNLA3W_preview3d{background:var(--g-screen);border-radius:10px;place-items:center;display:grid;position:relative;overflow:hidden}.vNLA3W_preview3d img{object-fit:contain;width:100%;height:100%;display:block}.vNLA3W_preview3dFrame{border:0;width:100%;height:100%;display:block;position:absolute;inset:0}.vNLA3W_preview3dFrame[data-mode=still]{opacity:0;pointer-events:none}.vNLA3W_preview3dNote{text-align:center;color:var(--g-screen-dim);font-size:var(--dsh-panel-text-meta,12px);padding:12px}.vNLA3W_turntable{aspect-ratio:16/10;width:100%;max-height:300px}.vNLA3W_proposal3d{width:120px;height:96px}.vNLA3W_gltfRow{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.vNLA3W_gltfScale{align-items:center;gap:6px;display:inline-flex}.vNLA3W_gltfScale input{width:64px}.vNLA3W_elArt3d{background:0 0;border-radius:8px;width:100%;height:100%}.vNLA3W_recipe{flex-direction:column;gap:4px;display:flex}.vNLA3W_recipeGroup{border-top:1px solid var(--g-line);flex-direction:column;gap:2px;padding-top:6px;display:flex}.vNLA3W_recipePart{flex-direction:column;gap:2px;padding:4px 0 6px;display:flex}.vNLA3W_recipePartName{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);font-weight:600}.vNLA3W_recipeColors{flex-wrap:wrap;gap:8px 14px;display:flex}.vNLA3W_recipeColor{font-size:var(--dsh-panel-text-meta,12px);color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;display:inline-flex}.vNLA3W_recipeColor input{border:1px solid var(--g-line);background:0 0;border-radius:6px;width:32px;height:22px;padding:0}@container dsh-panel (width<=560px){.vNLA3W_turntable{max-height:220px}.vNLA3W_proposal3d{width:96px;height:80px}.vNLA3W_scroll{padding:10px 12px 56px}.vNLA3W_steps{grid-template-columns:minmax(0,1fr)}.vNLA3W_primary,.vNLA3W_ghost,.vNLA3W_seg{min-height:36px}.vNLA3W_stageBtn{min-height:32px}.vNLA3W_param{grid-template-columns:minmax(0,1fr) 4.5em}.vNLA3W_param .vNLA3W_range{grid-area:2/1/auto/-1}.vNLA3W_paramWas{display:none}.vNLA3W_proposalGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.vNLA3W_cardGrid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr))}.vNLA3W_overlay{inset:80px 4px 4px}.vNLA3W_swatchBtn{width:32px;height:32px}}";
23787
23934
  const tagId$7 = "@khorsheed/dsh-game/GameTab.module.css";
23788
23935
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) {
23789
23936
  const tag = document.createElement("style");
@@ -23793,205 +23940,209 @@ if (mode === 'still') {
23793
23940
  document.head.appendChild(tag);
23794
23941
  }
23795
23942
  var GameTab_module_css_default = {
23796
- "barName": "vNLA3W_barName",
23797
- "mdTableWrap": "vNLA3W_mdTableWrap",
23798
- "progressBar": "vNLA3W_progressBar",
23799
- "recipePartName": "vNLA3W_recipePartName",
23943
+ "pickCard": "vNLA3W_pickCard",
23944
+ "styleName": "vNLA3W_styleName",
23945
+ "projectInitial": "vNLA3W_projectInitial",
23946
+ "navNotice": "vNLA3W_navNotice",
23947
+ "historyRow": "vNLA3W_historyRow",
23948
+ "barRow": "vNLA3W_barRow",
23949
+ "field": "vNLA3W_field",
23950
+ "pickName": "vNLA3W_pickName",
23951
+ "historyItem": "vNLA3W_historyItem",
23952
+ "onePagerForm": "vNLA3W_onePagerForm",
23953
+ "pillars": "vNLA3W_pillars",
23800
23954
  "mdP": "vNLA3W_mdP",
23801
- "gltfScale": "vNLA3W_gltfScale",
23802
- "danger": "vNLA3W_danger",
23955
+ "rejectRow": "vNLA3W_rejectRow",
23956
+ "mdTableWrap": "vNLA3W_mdTableWrap",
23957
+ "tlBody": "vNLA3W_tlBody",
23958
+ "preview3d": "vNLA3W_preview3d",
23959
+ "turntable": "vNLA3W_turntable",
23960
+ "logTime": "vNLA3W_logTime",
23961
+ "lookMain": "vNLA3W_lookMain",
23962
+ "table": "vNLA3W_table",
23963
+ "drawerHead": "vNLA3W_drawerHead",
23964
+ "overlay": "vNLA3W_overlay",
23803
23965
  "lookPanel": "vNLA3W_lookPanel",
23804
- "versionPill": "vNLA3W_versionPill",
23805
- "detailHead": "vNLA3W_detailHead",
23806
- "tlItem": "vNLA3W_tlItem",
23807
- "mdQuote": "vNLA3W_mdQuote",
23808
- "stageBtn": "vNLA3W_stageBtn",
23809
- "screen": "vNLA3W_screen",
23810
- "projectCard": "vNLA3W_projectCard",
23811
- "mdH2": "vNLA3W_mdH2",
23966
+ "checkCard": "vNLA3W_checkCard",
23967
+ "progressRow": "vNLA3W_progressRow",
23812
23968
  "tlHead": "vNLA3W_tlHead",
23813
- "chapterHead": "vNLA3W_chapterHead",
23814
- "mdH1": "vNLA3W_mdH1",
23815
- "tlBy": "vNLA3W_tlBy",
23816
- "diff": "vNLA3W_diff",
23817
- "link": "vNLA3W_link",
23818
- "blockTitle": "vNLA3W_blockTitle",
23819
- "logList": "vNLA3W_logList",
23820
- "commitFiles": "vNLA3W_commitFiles",
23821
- "stripGo": "vNLA3W_stripGo",
23822
- "paramWas": "vNLA3W_paramWas",
23823
- "lookMain": "vNLA3W_lookMain",
23824
- "mdTable": "vNLA3W_mdTable",
23969
+ "fold": "vNLA3W_fold",
23970
+ "headChip": "vNLA3W_headChip",
23971
+ "commitText": "vNLA3W_commitText",
23972
+ "stageBar": "vNLA3W_stageBar",
23973
+ "lookSide": "vNLA3W_lookSide",
23974
+ "notice": "vNLA3W_notice",
23975
+ "elOpen": "vNLA3W_elOpen",
23976
+ "sample": "vNLA3W_sample",
23977
+ "recipe": "vNLA3W_recipe",
23978
+ "projectPitch": "vNLA3W_projectPitch",
23979
+ "swatches": "vNLA3W_swatches",
23825
23980
  "notesChapter": "vNLA3W_notesChapter",
23826
- "candBar": "vNLA3W_candBar",
23827
- "projectChips": "vNLA3W_projectChips",
23828
- "emptyCard": "vNLA3W_emptyCard",
23829
- "commitActions": "vNLA3W_commitActions",
23981
+ "segGroup": "vNLA3W_segGroup",
23830
23982
  "chapters": "vNLA3W_chapters",
23831
- "paramLabel": "vNLA3W_paramLabel",
23832
- "pillars": "vNLA3W_pillars",
23833
- "elName": "vNLA3W_elName",
23834
- "projectCardWrap": "vNLA3W_projectCardWrap",
23835
- "elCard": "vNLA3W_elCard",
23983
+ "checkHead": "vNLA3W_checkHead",
23984
+ "barValue": "vNLA3W_barValue",
23985
+ "posterPlay": "vNLA3W_posterPlay",
23986
+ "diff": "vNLA3W_diff",
23987
+ "bannerActions": "vNLA3W_bannerActions",
23988
+ "mdH2": "vNLA3W_mdH2",
23989
+ "commitFiles": "vNLA3W_commitFiles",
23836
23990
  "stripDot": "vNLA3W_stripDot",
23837
- "footRow": "vNLA3W_footRow",
23838
- "hero": "vNLA3W_hero",
23839
- "projectTitle": "vNLA3W_projectTitle",
23840
- "switch": "vNLA3W_switch",
23841
- "proposals": "vNLA3W_proposals",
23842
- "history": "vNLA3W_history",
23843
- "typeRow": "vNLA3W_typeRow",
23844
- "textarea": "vNLA3W_textarea",
23845
- "stage": "vNLA3W_stage",
23846
- "tableWrap": "vNLA3W_tableWrap",
23847
- "titleSwitch": "vNLA3W_titleSwitch",
23848
- "fieldKey": "vNLA3W_fieldKey",
23849
- "timeline": "vNLA3W_timeline",
23850
- "steps": "vNLA3W_steps",
23991
+ "projectBody": "vNLA3W_projectBody",
23992
+ "switches": "vNLA3W_switches",
23993
+ "pillarList": "vNLA3W_pillarList",
23994
+ "seg": "vNLA3W_seg",
23995
+ "chapter": "vNLA3W_chapter",
23996
+ "tight": "vNLA3W_tight",
23997
+ "tlItem": "vNLA3W_tlItem",
23851
23998
  "spacer": "vNLA3W_spacer",
23852
- "stageHint": "vNLA3W_stageHint",
23853
- "bannerText": "vNLA3W_bannerText",
23854
- "logTime": "vNLA3W_logTime",
23855
- "paletteStrip": "vNLA3W_paletteStrip",
23856
- "pickHover": "vNLA3W_pickHover",
23999
+ "status": "vNLA3W_status",
23857
24000
  "gallery": "vNLA3W_gallery",
23858
- "notice": "vNLA3W_notice",
23859
- "stageBar": "vNLA3W_stageBar",
23860
- "param": "vNLA3W_param",
23861
- "lookEditor": "vNLA3W_lookEditor",
23862
- "proposalGrid": "vNLA3W_proposalGrid",
23863
- "ghost": "vNLA3W_ghost",
23864
- "numbers": "vNLA3W_numbers",
23865
- "proposal3d": "vNLA3W_proposal3d",
23866
- "lead": "vNLA3W_lead",
23867
- "checkHead": "vNLA3W_checkHead",
23868
- "mdList": "vNLA3W_mdList",
23869
- "recipeGroup": "vNLA3W_recipeGroup",
23870
- "recipeColors": "vNLA3W_recipeColors",
23871
- "preview3d": "vNLA3W_preview3d",
23872
- "table": "vNLA3W_table",
23873
- "tlBody": "vNLA3W_tlBody",
23874
- "recipePart": "vNLA3W_recipePart",
23875
- "gltfRow": "vNLA3W_gltfRow",
23876
- "elArt": "vNLA3W_elArt",
23877
- "projectPitch": "vNLA3W_projectPitch",
23878
- "chapter": "vNLA3W_chapter",
23879
- "elMeta": "vNLA3W_elMeta",
23880
- "look": "vNLA3W_look",
23881
- "proposalArt": "vNLA3W_proposalArt",
23882
- "posterIcon": "vNLA3W_posterIcon",
23883
- "overlay": "vNLA3W_overlay",
23884
- "progressRow": "vNLA3W_progressRow",
23885
- "deleteError": "vNLA3W_deleteError",
23886
- "titleCaret": "vNLA3W_titleCaret",
23887
- "paramValue": "vNLA3W_paramValue",
24001
+ "typeRow": "vNLA3W_typeRow",
24002
+ "range": "vNLA3W_range",
24003
+ "mdTable": "vNLA3W_mdTable",
24004
+ "detailHead": "vNLA3W_detailHead",
23888
24005
  "saveState": "vNLA3W_saveState",
23889
- "sample": "vNLA3W_sample",
24006
+ "preview3dFrame": "vNLA3W_preview3dFrame",
24007
+ "fieldKey": "vNLA3W_fieldKey",
23890
24008
  "plainList": "vNLA3W_plainList",
23891
- "tlTag": "vNLA3W_tlTag",
23892
- "chapterBody": "vNLA3W_chapterBody",
23893
- "stripMeta": "vNLA3W_stripMeta",
23894
- "screenEmpty": "vNLA3W_screenEmpty",
23895
- "drawerHead": "vNLA3W_drawerHead",
23896
- "md": "vNLA3W_md",
23897
- "toast": "vNLA3W_toast",
24009
+ "poster": "vNLA3W_poster",
24010
+ "posterIcon": "vNLA3W_posterIcon",
24011
+ "stageHint": "vNLA3W_stageHint",
24012
+ "stageInner": "vNLA3W_stageInner",
24013
+ "gltfRow": "vNLA3W_gltfRow",
23898
24014
  "tlDot": "vNLA3W_tlDot",
23899
- "seg": "vNLA3W_seg",
23900
- "commitKind": "vNLA3W_commitKind",
23901
- "screenGlyph": "vNLA3W_screenGlyph",
23902
- "chapterTitle": "vNLA3W_chapterTitle",
24015
+ "banner": "vNLA3W_banner",
24016
+ "paramLabel": "vNLA3W_paramLabel",
24017
+ "numbers": "vNLA3W_numbers",
24018
+ "proposals": "vNLA3W_proposals",
24019
+ "block": "vNLA3W_block",
24020
+ "emptyGlyph": "vNLA3W_emptyGlyph",
24021
+ "history": "vNLA3W_history",
24022
+ "md": "vNLA3W_md",
24023
+ "screen": "vNLA3W_screen",
24024
+ "proposalGrid": "vNLA3W_proposalGrid",
23903
24025
  "pickLayer": "vNLA3W_pickLayer",
23904
- "shot": "vNLA3W_shot",
23905
- "pillarList": "vNLA3W_pillarList",
23906
- "status": "vNLA3W_status",
23907
- "commitBar": "vNLA3W_commitBar",
23908
- "elArt3d": "vNLA3W_elArt3d",
23909
- "recipeColor": "vNLA3W_recipeColor",
23910
- "projectGrid": "vNLA3W_projectGrid",
24026
+ "projectCard": "vNLA3W_projectCard",
24027
+ "screenNote": "vNLA3W_screenNote",
24028
+ "onePager": "vNLA3W_onePager",
24029
+ "progressBar": "vNLA3W_progressBar",
24030
+ "param": "vNLA3W_param",
24031
+ "lookPreview": "vNLA3W_lookPreview",
24032
+ "selectBar": "vNLA3W_selectBar",
24033
+ "mdH1": "vNLA3W_mdH1",
23911
24034
  "barFill": "vNLA3W_barFill",
23912
- "errorPill": "vNLA3W_errorPill",
23913
- "stageInner": "vNLA3W_stageInner",
23914
- "elInitial": "vNLA3W_elInitial",
23915
- "rejectRow": "vNLA3W_rejectRow",
24035
+ "tlTag": "vNLA3W_tlTag",
24036
+ "elMeta": "vNLA3W_elMeta",
24037
+ "commitKind": "vNLA3W_commitKind",
24038
+ "commitActions": "vNLA3W_commitActions",
24039
+ "paramValue": "vNLA3W_paramValue",
24040
+ "screenEmpty": "vNLA3W_screenEmpty",
24041
+ "swatch": "vNLA3W_swatch",
24042
+ "stageBtn": "vNLA3W_stageBtn",
24043
+ "strip": "vNLA3W_strip",
24044
+ "drawer": "vNLA3W_drawer",
23916
24045
  "fieldGrid": "vNLA3W_fieldGrid",
23917
- "selectBar": "vNLA3W_selectBar",
23918
- "screenNote": "vNLA3W_screenNote",
23919
- "field": "vNLA3W_field",
24046
+ "emptyCard": "vNLA3W_emptyCard",
24047
+ "pitch": "vNLA3W_pitch",
24048
+ "projectThumb": "vNLA3W_projectThumb",
24049
+ "mdList": "vNLA3W_mdList",
24050
+ "candBar": "vNLA3W_candBar",
24051
+ "projectCardWrap": "vNLA3W_projectCardWrap",
24052
+ "steps": "vNLA3W_steps",
24053
+ "screenGlyph": "vNLA3W_screenGlyph",
24054
+ "chapterHead": "vNLA3W_chapterHead",
24055
+ "input": "vNLA3W_input",
24056
+ "projectChips": "vNLA3W_projectChips",
24057
+ "projectDelete": "vNLA3W_projectDelete",
24058
+ "newPlus": "vNLA3W_newPlus",
24059
+ "lookEditor": "vNLA3W_lookEditor",
24060
+ "warnText": "vNLA3W_warnText",
24061
+ "chapterBody": "vNLA3W_chapterBody",
24062
+ "styleChip": "vNLA3W_styleChip",
24063
+ "projectGrid": "vNLA3W_projectGrid",
23920
24064
  "headMeta": "vNLA3W_headMeta",
23921
- "typeTag": "vNLA3W_typeTag",
24065
+ "overlayHead": "vNLA3W_overlayHead",
24066
+ "elCard": "vNLA3W_elCard",
24067
+ "tlBy": "vNLA3W_tlBy",
24068
+ "elInitial": "vNLA3W_elInitial",
24069
+ "footRow": "vNLA3W_footRow",
24070
+ "bannerText": "vNLA3W_bannerText",
24071
+ "eyebrow": "vNLA3W_eyebrow",
24072
+ "swatchBtn": "vNLA3W_swatchBtn",
24073
+ "elCheck": "vNLA3W_elCheck",
24074
+ "logList": "vNLA3W_logList",
24075
+ "deleteError": "vNLA3W_deleteError",
24076
+ "barTrack": "vNLA3W_barTrack",
24077
+ "proposal3d": "vNLA3W_proposal3d",
24078
+ "elArt3d": "vNLA3W_elArt3d",
24079
+ "styleCard": "vNLA3W_styleCard",
24080
+ "findings": "vNLA3W_findings",
24081
+ "titleSwitch": "vNLA3W_titleSwitch",
24082
+ "danger": "vNLA3W_danger",
24083
+ "bars": "vNLA3W_bars",
24084
+ "recipePart": "vNLA3W_recipePart",
24085
+ "recipePartName": "vNLA3W_recipePartName",
24086
+ "recipeColors": "vNLA3W_recipeColors",
24087
+ "frame": "vNLA3W_frame",
24088
+ "paramWas": "vNLA3W_paramWas",
24089
+ "onePagerHead": "vNLA3W_onePagerHead",
24090
+ "gltfScale": "vNLA3W_gltfScale",
24091
+ "mdQuote": "vNLA3W_mdQuote",
24092
+ "projectTitle": "vNLA3W_projectTitle",
24093
+ "commitBar": "vNLA3W_commitBar",
23922
24094
  "chevron": "vNLA3W_chevron",
24095
+ "badge": "vNLA3W_badge",
24096
+ "stripMeta": "vNLA3W_stripMeta",
24097
+ "typeTag": "vNLA3W_typeTag",
24098
+ "timeline": "vNLA3W_timeline",
24099
+ "elName": "vNLA3W_elName",
24100
+ "switch": "vNLA3W_switch",
24101
+ "preview3dNote": "vNLA3W_preview3dNote",
23923
24102
  "freshTag": "vNLA3W_freshTag",
24103
+ "numbersTitle": "vNLA3W_numbersTitle",
24104
+ "newCard": "vNLA3W_newCard",
24105
+ "navNoticeText": "vNLA3W_navNoticeText",
24106
+ "toolRow": "vNLA3W_toolRow",
24107
+ "tlActions": "vNLA3W_tlActions",
24108
+ "recipeGroup": "vNLA3W_recipeGroup",
24109
+ "proposalArt": "vNLA3W_proposalArt",
24110
+ "textarea": "vNLA3W_textarea",
24111
+ "hero": "vNLA3W_hero",
23924
24112
  "cardGrid": "vNLA3W_cardGrid",
23925
- "warnText": "vNLA3W_warnText",
23926
- "overlayHead": "vNLA3W_overlayHead",
23927
- "elCheck": "vNLA3W_elCheck",
23928
- "styleChip": "vNLA3W_styleChip",
23929
24113
  "lookEmpty": "vNLA3W_lookEmpty",
23930
- "posterPlay": "vNLA3W_posterPlay",
24114
+ "elArt": "vNLA3W_elArt",
24115
+ "primary": "vNLA3W_primary",
23931
24116
  "commitList": "vNLA3W_commitList",
23932
- "range": "vNLA3W_range",
23933
- "input": "vNLA3W_input",
23934
- "numbersTitle": "vNLA3W_numbersTitle",
23935
- "swatchBtn": "vNLA3W_swatchBtn",
23936
- "drawer": "vNLA3W_drawer",
23937
- "pitch": "vNLA3W_pitch",
23938
- "bars": "vNLA3W_bars",
23939
- "block": "vNLA3W_block",
23940
- "frame": "vNLA3W_frame",
23941
- "switches": "vNLA3W_switches",
23942
- "barRow": "vNLA3W_barRow",
23943
- "projectDelete": "vNLA3W_projectDelete",
23944
24117
  "count": "vNLA3W_count",
24118
+ "barName": "vNLA3W_barName",
24119
+ "link": "vNLA3W_link",
24120
+ "layers": "vNLA3W_layers",
24121
+ "pickHover": "vNLA3W_pickHover",
24122
+ "recipeColor": "vNLA3W_recipeColor",
24123
+ "chapterTitle": "vNLA3W_chapterTitle",
24124
+ "toast": "vNLA3W_toast",
24125
+ "errorPill": "vNLA3W_errorPill",
24126
+ "lead": "vNLA3W_lead",
24127
+ "tableWrap": "vNLA3W_tableWrap",
23945
24128
  "barsKey": "vNLA3W_barsKey",
23946
- "findings": "vNLA3W_findings",
23947
- "tlActions": "vNLA3W_tlActions",
23948
- "root": "vNLA3W_root",
23949
- "onePagerForm": "vNLA3W_onePagerForm",
23950
- "checkCard": "vNLA3W_checkCard",
23951
- "preview3dNote": "vNLA3W_preview3dNote",
23952
- "styleCard": "vNLA3W_styleCard",
23953
- "badge": "vNLA3W_badge",
23954
- "historyItem": "vNLA3W_historyItem",
23955
- "poster": "vNLA3W_poster",
23956
- "fold": "vNLA3W_fold",
23957
- "bannerActions": "vNLA3W_bannerActions",
23958
- "barTrack": "vNLA3W_barTrack",
23959
- "barValue": "vNLA3W_barValue",
23960
- "turntable": "vNLA3W_turntable",
23961
- "heroTitle": "vNLA3W_heroTitle",
23962
- "swatches": "vNLA3W_swatches",
23963
24129
  "rowEnd": "vNLA3W_rowEnd",
23964
- "commitText": "vNLA3W_commitText",
23965
- "strip": "vNLA3W_strip",
24130
+ "ghost": "vNLA3W_ghost",
24131
+ "heroTitle": "vNLA3W_heroTitle",
24132
+ "versionPill": "vNLA3W_versionPill",
24133
+ "shot": "vNLA3W_shot",
24134
+ "titleCaret": "vNLA3W_titleCaret",
23966
24135
  "scroll": "vNLA3W_scroll",
23967
- "historyRow": "vNLA3W_historyRow",
23968
- "eyebrow": "vNLA3W_eyebrow",
23969
- "pickName": "vNLA3W_pickName",
23970
- "metaLine": "vNLA3W_metaLine",
23971
- "projectInitial": "vNLA3W_projectInitial",
23972
- "layers": "vNLA3W_layers",
23973
- "preview3dFrame": "vNLA3W_preview3dFrame",
23974
- "projectHere": "vNLA3W_projectHere",
23975
- "newCard": "vNLA3W_newCard",
23976
- "swatch": "vNLA3W_swatch",
23977
- "newPlus": "vNLA3W_newPlus",
23978
- "banner": "vNLA3W_banner",
23979
- "pickCard": "vNLA3W_pickCard",
23980
- "lookSide": "vNLA3W_lookSide",
23981
- "onePager": "vNLA3W_onePager",
23982
- "recipe": "vNLA3W_recipe",
23983
24136
  "deleteActions": "vNLA3W_deleteActions",
23984
- "projectBody": "vNLA3W_projectBody",
23985
- "projectThumb": "vNLA3W_projectThumb",
24137
+ "look": "vNLA3W_look",
24138
+ "stripGo": "vNLA3W_stripGo",
24139
+ "metaLine": "vNLA3W_metaLine",
24140
+ "stage": "vNLA3W_stage",
24141
+ "paletteStrip": "vNLA3W_paletteStrip",
23986
24142
  "proposalCard": "vNLA3W_proposalCard",
23987
- "primary": "vNLA3W_primary",
23988
- "styleName": "vNLA3W_styleName",
23989
- "elOpen": "vNLA3W_elOpen",
23990
- "toolRow": "vNLA3W_toolRow",
23991
- "onePagerHead": "vNLA3W_onePagerHead",
23992
- "headChip": "vNLA3W_headChip",
23993
- "emptyGlyph": "vNLA3W_emptyGlyph",
23994
- "lookPreview": "vNLA3W_lookPreview"
24143
+ "projectHere": "vNLA3W_projectHere",
24144
+ "blockTitle": "vNLA3W_blockTitle",
24145
+ "root": "vNLA3W_root"
23995
24146
  };
23996
24147
  //#endregion
23997
24148
  //#region src/client/Preview3D.tsx
@@ -24071,7 +24222,7 @@ if (mode === 'still') {
24071
24222
  };
24072
24223
  }
24073
24224
  /** One 3D look preview. */
24074
- function Preview3D({ api, projectId, version, look, mode, className, emptyLabel, placeholder, onClips, clip, view }) {
24225
+ function Preview3D({ api, projectId, version, look, mode, className, emptyLabel, placeholder, onClips, onTurned, clip, view }) {
24075
24226
  const lookJson = JSON.stringify(look);
24076
24227
  const stillKey = `${projectId}:${version}:${lookJson}`;
24077
24228
  const [files, setFiles] = (0, react.useState)(null);
@@ -24146,6 +24297,7 @@ if (mode === 'still') {
24146
24297
  setImage(data.png);
24147
24298
  }
24148
24299
  if (data?.gamedev === "preview-clips" && mode === "spin") onClips?.(data.names, data.parts);
24300
+ if (data?.gamedev === "preview-turned" && mode === "spin") onTurned?.();
24149
24301
  };
24150
24302
  window.addEventListener("message", onMessage);
24151
24303
  return () => {
@@ -24154,7 +24306,8 @@ if (mode === 'still') {
24154
24306
  }, [
24155
24307
  mode,
24156
24308
  stillKey,
24157
- onClips
24309
+ onClips,
24310
+ onTurned
24158
24311
  ]);
24159
24312
  (0, react.useEffect)(() => {
24160
24313
  if (view == null || mode !== "spin" || !booted.current) return;
@@ -24249,20 +24402,20 @@ if (mode === 'still') {
24249
24402
  document.head.appendChild(tag);
24250
24403
  }
24251
24404
  var TurnCard_module_css_default = {
24252
- "open": "_8rBpeq_open",
24253
- "row": "_8rBpeq_row",
24405
+ "badge": "_8rBpeq_badge",
24406
+ "still": "_8rBpeq_still",
24407
+ "card": "_8rBpeq_card",
24408
+ "spacer": "_8rBpeq_spacer",
24409
+ "go": "_8rBpeq_go",
24410
+ "list": "_8rBpeq_list",
24254
24411
  "icon": "_8rBpeq_icon",
24255
24412
  "text": "_8rBpeq_text",
24256
- "still": "_8rBpeq_still",
24257
24413
  "arrow": "_8rBpeq_arrow",
24258
- "list": "_8rBpeq_list",
24414
+ "open": "_8rBpeq_open",
24259
24415
  "head": "_8rBpeq_head",
24416
+ "row": "_8rBpeq_row",
24260
24417
  "meta": "_8rBpeq_meta",
24261
- "go": "_8rBpeq_go",
24262
- "spacer": "_8rBpeq_spacer",
24263
- "beforeAfter": "_8rBpeq_beforeAfter",
24264
- "card": "_8rBpeq_card",
24265
- "badge": "_8rBpeq_badge"
24418
+ "beforeAfter": "_8rBpeq_beforeAfter"
24266
24419
  };
24267
24420
  //#endregion
24268
24421
  //#region src/client/TurnCard.tsx
@@ -24545,6 +24698,93 @@ if (mode === 'still') {
24545
24698
  });
24546
24699
  }
24547
24700
  //#endregion
24701
+ //#region src/client/reveal.ts
24702
+ /** A touch this recent means the user is busy in the panel. */
24703
+ const BUSY_MS = 2e4;
24704
+ /** Below this window width a closed panel is not opened: it would cover the conversation. */
24705
+ const WIDE_PX = 820;
24706
+ /** A request older than this, seen first on this page, is history (a reload). */
24707
+ const FRESH_MS = 9e4;
24708
+ /** The page-wide controller. */
24709
+ var Reveal = class {
24710
+ open;
24711
+ lastTouch = 0;
24712
+ playing = false;
24713
+ mounted = 0;
24714
+ noticeNow = null;
24715
+ listeners = /* @__PURE__ */ new Set();
24716
+ /** The last request sequence carried out per project. */
24717
+ done = /* @__PURE__ */ new Map();
24718
+ /** @param open - opens the game tab at a place (the plugin's openAt). */
24719
+ constructor(open) {
24720
+ this.open = open;
24721
+ }
24722
+ get notice() {
24723
+ return this.noticeNow;
24724
+ }
24725
+ dismiss() {
24726
+ this.noticeNow = null;
24727
+ this.changed();
24728
+ }
24729
+ follow() {
24730
+ const n = this.noticeNow;
24731
+ this.dismiss();
24732
+ if (n !== null) this.open(n.target);
24733
+ }
24734
+ /** The tab mounted; the result unmounts it. A mounted tab is navigated at any width. */
24735
+ mount() {
24736
+ this.mounted++;
24737
+ return () => {
24738
+ this.mounted--;
24739
+ };
24740
+ }
24741
+ touched() {
24742
+ this.lastTouch = Date.now();
24743
+ }
24744
+ setPlaying(on) {
24745
+ this.playing = on;
24746
+ }
24747
+ subscribe(listener) {
24748
+ this.listeners.add(listener);
24749
+ return () => {
24750
+ this.listeners.delete(listener);
24751
+ };
24752
+ }
24753
+ changed() {
24754
+ for (const l of this.listeners) l();
24755
+ }
24756
+ /** The agent's request for a project, as the poll returned it. */
24757
+ request(projectId, request, now = Date.now()) {
24758
+ const seen = this.done.get(projectId);
24759
+ this.done.set(projectId, Math.max(request.seq, seen ?? 0));
24760
+ if (seen !== void 0 ? request.seq <= seen : now - Date.parse(request.at) > FRESH_MS) return null;
24761
+ const target = {
24762
+ view: request.target.view,
24763
+ ...request.target.elementId === void 0 ? {} : { elementId: request.target.elementId },
24764
+ ...request.target.chapterId === void 0 ? {} : { chapterId: request.target.chapterId }
24765
+ };
24766
+ const busy = this.playing ? "a game is running" : now - this.lastTouch < BUSY_MS ? "the panel was just used" : null;
24767
+ const narrow = this.mounted === 0 && (typeof window === "undefined" || window.innerWidth < WIDE_PX);
24768
+ const outcome = busy !== null ? "notice" : narrow ? "skipped" : "opened";
24769
+ try {
24770
+ console.info(`[game:reveal] #${request.seq} ${request.note} → ${outcome}${busy === null ? "" : ` (${busy})`}${narrow && busy === null ? " (closed panel, narrow window)" : ""}`, target);
24771
+ } catch {}
24772
+ if (outcome === "notice") {
24773
+ this.noticeNow = {
24774
+ text: request.note,
24775
+ target
24776
+ };
24777
+ this.changed();
24778
+ }
24779
+ if (outcome === "opened") {
24780
+ this.noticeNow = null;
24781
+ this.open(target);
24782
+ this.changed();
24783
+ }
24784
+ return outcome;
24785
+ }
24786
+ };
24787
+ //#endregion
24548
24788
  //#region src/client/refs.ts
24549
24789
  /** The trigger-source name the chip codec registers under. */
24550
24790
  const GAME_REF_SOURCE = "dsh-game-ref";
@@ -24803,10 +25043,10 @@ if (mode === 'still') {
24803
25043
  }
24804
25044
  var PanelHeader_module_css_default = {
24805
25045
  "icon": "G-iMtW_icon",
25046
+ "titleAfterBack": "G-iMtW_titleAfterBack",
24806
25047
  "header": "G-iMtW_header",
24807
25048
  "meta": "G-iMtW_meta",
24808
- "title": "G-iMtW_title",
24809
- "titleAfterBack": "G-iMtW_titleAfterBack"
25049
+ "title": "G-iMtW_title"
24810
25050
  };
24811
25051
  /**
24812
25052
  * Split actions into inline and overflow. `menuOnly` actions always overflow.
@@ -24924,12 +25164,12 @@ if (mode === 'still') {
24924
25164
  document.head.appendChild(tag);
24925
25165
  }
24926
25166
  var UnderlineTabs_module_css_default = {
24927
- "tab": "xGnkzq_tab",
24928
- "label": "xGnkzq_label",
24929
- "bar": "xGnkzq_bar",
24930
25167
  "trailing": "xGnkzq_trailing",
25168
+ "label": "xGnkzq_label",
25169
+ "tabs": "xGnkzq_tabs",
24931
25170
  "badge": "xGnkzq_badge",
24932
- "tabs": "xGnkzq_tabs"
25171
+ "bar": "xGnkzq_bar",
25172
+ "tab": "xGnkzq_tab"
24933
25173
  };
24934
25174
  //#endregion
24935
25175
  //#region ../client-ui-panel-kit/src/client/UnderlineTabs.tsx
@@ -25021,11 +25261,11 @@ if (mode === 'still') {
25021
25261
  document.head.appendChild(tag);
25022
25262
  }
25023
25263
  var ChipRow_module_css_default = {
25264
+ "chip": "n9WOdq_chip",
25024
25265
  "dot": "n9WOdq_dot",
25025
- "count": "n9WOdq_count",
25026
25266
  "tools": "n9WOdq_tools",
25027
25267
  "row": "n9WOdq_row",
25028
- "chip": "n9WOdq_chip",
25268
+ "count": "n9WOdq_count",
25029
25269
  "withTools": "n9WOdq_withTools"
25030
25270
  };
25031
25271
  //#endregion
@@ -25098,6 +25338,16 @@ if (mode === 'still') {
25098
25338
  if (id.startsWith("custom:")) return id.slice(7);
25099
25339
  return [...ART_STYLES, ...ART_STYLES_3D].find((style) => style.id === id)?.label ?? id;
25100
25340
  }
25341
+ /**
25342
+ * A style's short name for tight places (tags, chips): a custom description's
25343
+ * lead — up to its first dash, colon, comma or bracket — at most 10 characters.
25344
+ * The full label stays for the model and for hover text.
25345
+ */
25346
+ function artStyleName(id) {
25347
+ const full = artStyleLabel(id).trim();
25348
+ const lead = full.split(/——|—|--|[::,,;;((]/)[0]?.trim() || full;
25349
+ return [...lead].length > 10 ? `${[...lead].slice(0, 10).join("")}…` : lead;
25350
+ }
25101
25351
  //#endregion
25102
25352
  //#region src/client/markdown.tsx
25103
25353
  /** Split a pipe-table row into its cells. */
@@ -25368,8 +25618,8 @@ if (mode === 'still') {
25368
25618
  type: "button",
25369
25619
  className: GameTab_module_css_default.styleChip,
25370
25620
  onClick: onStyle,
25371
- title: t("style.change"),
25372
- children: t("design.style", { style: manifest === null ? "—" : artStyleLabel(manifest.artStyle) })
25621
+ title: manifest === null ? t("style.change") : `${artStyleLabel(manifest.artStyle)}\n${t("style.change")}`,
25622
+ children: t("design.style", { style: manifest === null ? "—" : artStyleName(manifest.artStyle) })
25373
25623
  }),
25374
25624
  !editing && manifest !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
25375
25625
  type: "button",
@@ -25461,6 +25711,10 @@ if (mode === 'still') {
25461
25711
  className: GameTab_module_css_default.pitch,
25462
25712
  children: manifest?.pitch || t("design.noPitch")
25463
25713
  }),
25714
+ manifest !== null && artStyleName(manifest.artStyle) !== artStyleLabel(manifest.artStyle) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
25715
+ className: GameTab_module_css_default.metaLine,
25716
+ children: t("design.styleFull", { style: artStyleLabel(manifest.artStyle) })
25717
+ }),
25464
25718
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
25465
25719
  className: GameTab_module_css_default.typeRow,
25466
25720
  children: (manifest?.elementTypes ?? []).map((type) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -25911,6 +26165,7 @@ if (mode === 'still') {
25911
26165
  "fields.note": "改完离开输入框即保存;提交成新版本后进游戏。",
25912
26166
  "design.onePager": "一页纸",
25913
26167
  "design.style": "风格 · {style}",
26168
+ "design.styleFull": "画风:{style}",
25914
26169
  "design.noPitch": "还没有一句话玩法。",
25915
26170
  "design.pillars": "设计支柱",
25916
26171
  "design.noPillars": "还没定支柱:和 agent 聊出 2–3 条「这个游戏一定要做到的体验」。",
@@ -26142,7 +26397,9 @@ if (mode === 'still') {
26142
26397
  "gltf.bones": "骨骼比例",
26143
26398
  "gltf.boneSearch": "找骨头…",
26144
26399
  "gltf.rotate": "旋转",
26145
- "gltf.moreBones": "另有 {count} 根,搜索名字找"
26400
+ "gltf.moreBones": "另有 {count} 根,搜索名字找",
26401
+ "nav.go": "去看看",
26402
+ "nav.dismiss": "不用了"
26146
26403
  };
26147
26404
  /** English dictionary. */
26148
26405
  const en = {
@@ -26273,6 +26530,7 @@ if (mode === 'still') {
26273
26530
  "fields.note": "Saved when you leave the box; reaches the game once you commit it as a new version.",
26274
26531
  "design.onePager": "One-pager",
26275
26532
  "design.style": "Style · {style}",
26533
+ "design.styleFull": "Look: {style}",
26276
26534
  "design.noPitch": "No pitch yet.",
26277
26535
  "design.pillars": "Design pillars",
26278
26536
  "design.noPillars": "No pillars yet: find 2–3 experiences this game must deliver with the agent.",
@@ -26504,7 +26762,9 @@ if (mode === 'still') {
26504
26762
  "gltf.bones": "Bone sizes",
26505
26763
  "gltf.boneSearch": "Find a bone…",
26506
26764
  "gltf.rotate": "Rotation",
26507
- "gltf.moreBones": "{count} more; search by name"
26765
+ "gltf.moreBones": "{count} more; search by name",
26766
+ "nav.go": "Show me",
26767
+ "nav.dismiss": "Not now"
26508
26768
  };
26509
26769
  /** The dictionary namespace this view binds. */
26510
26770
  const NS = "game";
@@ -26830,7 +27090,10 @@ if (mode === 'still') {
26830
27090
  },
26831
27091
  types
26832
27092
  });
26833
- const shown = project.elements.filter((e) => filter === "all" || e.type === filter);
27093
+ const shown = project.elements.filter((e) => filter === "all" || e.type === filter).map((e, i) => ({
27094
+ e,
27095
+ i
27096
+ })).sort((a, b) => (b.e.updatedAt ?? 0) - (a.e.updatedAt ?? 0) || a.i - b.i).map((x) => x.e);
26834
27097
  const openProposals = new Set(project.proposals.filter((p) => p.picked === void 0).map((p) => p.elementId));
26835
27098
  const toggle = (id) => {
26836
27099
  setSelected((s) => s.includes(id) ? s.filter((x) => x !== id) : [...s, id]);
@@ -26988,11 +27251,13 @@ if (mode === 'still') {
26988
27251
  const [parts, setParts] = (0, react.useState)(null);
26989
27252
  const [clip, setClip] = (0, react.useState)(null);
26990
27253
  const [view, setView] = (0, react.useState)(null);
27254
+ const viewN = (0, react.useRef)(0);
26991
27255
  const turnTo = (yaw) => {
26992
- setView((v) => ({
27256
+ viewN.current++;
27257
+ setView({
26993
27258
  yaw,
26994
- n: (v?.n ?? 0) + 1
26995
- }));
27259
+ n: viewN.current
27260
+ });
26996
27261
  };
26997
27262
  (0, react.useEffect)(() => {
26998
27263
  setClips([]);
@@ -27067,12 +27332,15 @@ if (mode === 'still') {
27067
27332
  setClips(names);
27068
27333
  setParts(found);
27069
27334
  },
27335
+ onTurned: () => {
27336
+ setView(null);
27337
+ },
27070
27338
  clip,
27071
27339
  view
27072
27340
  }),
27073
27341
  clips.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChipRow, {
27074
27342
  label: t("gltf.clips"),
27075
- value: clip?.name ?? "",
27343
+ value: clip?.name ?? autoClip(look3d, clips),
27076
27344
  onSelect: (name) => {
27077
27345
  setClip((c) => ({
27078
27346
  name,
@@ -27085,43 +27353,30 @@ if (mode === 'still') {
27085
27353
  }))
27086
27354
  }),
27087
27355
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
27088
- className: GameTab_module_css_default.toolRow,
27356
+ className: `${GameTab_module_css_default.toolRow} ${GameTab_module_css_default.tight}`,
27089
27357
  children: [
27090
27358
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
27091
27359
  className: GameTab_module_css_default.metaLine,
27092
27360
  children: t("look.drag3d")
27093
27361
  }),
27094
27362
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: GameTab_module_css_default.spacer }),
27095
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
27363
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
27096
27364
  role: "group",
27097
27365
  "aria-label": t("look.views"),
27098
- className: GameTab_module_css_default.toolRow,
27366
+ className: GameTab_module_css_default.segGroup,
27099
27367
  children: [
27100
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27101
- type: "button",
27102
- className: GameTab_module_css_default.seg,
27103
- onClick: () => {
27104
- turnTo(0);
27105
- },
27106
- children: t("look.front")
27107
- }),
27108
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27109
- type: "button",
27110
- className: GameTab_module_css_default.seg,
27111
- onClick: () => {
27112
- turnTo(90);
27113
- },
27114
- children: t("look.side")
27115
- }),
27116
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27117
- type: "button",
27118
- className: GameTab_module_css_default.seg,
27119
- onClick: () => {
27120
- turnTo(180);
27121
- },
27122
- children: t("look.back")
27123
- })
27124
- ]
27368
+ [0, "look.front"],
27369
+ [90, "look.side"],
27370
+ [180, "look.back"]
27371
+ ].map(([yaw, key]) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27372
+ type: "button",
27373
+ className: GameTab_module_css_default.seg,
27374
+ "aria-pressed": view?.yaw === yaw,
27375
+ onClick: () => {
27376
+ turnTo(yaw);
27377
+ },
27378
+ children: t(key)
27379
+ }, yaw))
27125
27380
  }),
27126
27381
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
27127
27382
  className: GameTab_module_css_default.saveState,
@@ -27193,28 +27448,30 @@ if (mode === 'still') {
27193
27448
  }),
27194
27449
  look !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
27195
27450
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
27196
- className: GameTab_module_css_default.toolRow,
27197
- role: "group",
27198
- "aria-label": t("look.tools"),
27451
+ className: `${GameTab_module_css_default.toolRow} ${GameTab_module_css_default.tight}`,
27199
27452
  children: [
27200
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27201
- type: "button",
27202
- className: GameTab_module_css_default.seg,
27203
- "aria-pressed": tool === "pen",
27204
- onClick: () => {
27205
- setTool("pen");
27206
- setRecolorFrom(null);
27207
- },
27208
- children: t("look.pen")
27209
- }),
27210
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27211
- type: "button",
27212
- className: GameTab_module_css_default.seg,
27213
- "aria-pressed": tool === "recolor",
27214
- onClick: () => {
27215
- setTool("recolor");
27216
- },
27217
- children: t("look.recolor")
27453
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
27454
+ className: GameTab_module_css_default.segGroup,
27455
+ role: "group",
27456
+ "aria-label": t("look.tools"),
27457
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27458
+ type: "button",
27459
+ className: GameTab_module_css_default.seg,
27460
+ "aria-pressed": tool === "pen",
27461
+ onClick: () => {
27462
+ setTool("pen");
27463
+ setRecolorFrom(null);
27464
+ },
27465
+ children: t("look.pen")
27466
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27467
+ type: "button",
27468
+ className: GameTab_module_css_default.seg,
27469
+ "aria-pressed": tool === "recolor",
27470
+ onClick: () => {
27471
+ setTool("recolor");
27472
+ },
27473
+ children: t("look.recolor")
27474
+ })]
27218
27475
  }),
27219
27476
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: GameTab_module_css_default.spacer }),
27220
27477
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -27502,7 +27759,7 @@ if (mode === 'still') {
27502
27759
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
27503
27760
  role: "group",
27504
27761
  "aria-label": t("gltf.material"),
27505
- className: GameTab_module_css_default.toolRow,
27762
+ className: GameTab_module_css_default.segGroup,
27506
27763
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
27507
27764
  type: "button",
27508
27765
  className: GameTab_module_css_default.seg,
@@ -27751,6 +28008,11 @@ if (mode === 'still') {
27751
28008
  ]
27752
28009
  });
27753
28010
  }
28011
+ /** The clip a model plays on its own (dsh3d's rule): the look's choice, else an idle-like name, else the first. */
28012
+ function autoClip(look, clips) {
28013
+ const chosen = look.kind === "gltf" ? look.animation : void 0;
28014
+ return chosen !== void 0 && clips.includes(chosen) ? chosen : clips.find((c) => /idle|待机|stand/i.test(c)) ?? clips[0] ?? "";
28015
+ }
27754
28016
  //#endregion
27755
28017
  //#region src/client/PlayFrame.tsx
27756
28018
  /**
@@ -27957,7 +28219,7 @@ if (mode === 'still') {
27957
28219
  }
27958
28220
  /** The play view. */
27959
28221
  function PlayView(props) {
27960
- const { t, sessionId, api, project, refresh, toast, insertDraft, insertRef, onOpenElement, onOpenVersions } = props;
28222
+ const { t, sessionId, api, project, refresh, toast, insertDraft, insertRef, onOpenElement, onOpenVersions, reveal } = props;
27961
28223
  const [which, setWhich] = (0, react.useState)("current");
27962
28224
  const [bundle, setBundle] = (0, react.useState)(null);
27963
28225
  const [error, setError] = (0, react.useState)(null);
@@ -27971,6 +28233,12 @@ if (mode === 'still') {
27971
28233
  const version = (which === "candidate" ? project.candidate : project.current)?.version;
27972
28234
  const loaded = (0, react.useRef)("");
27973
28235
  const [playing, setPlaying] = (0, react.useState)(false);
28236
+ (0, react.useEffect)(() => {
28237
+ reveal.setPlaying(playing);
28238
+ return () => {
28239
+ reveal.setPlaying(false);
28240
+ };
28241
+ }, [reveal, playing]);
27974
28242
  const [poster, setPoster] = (0, react.useState)(null);
27975
28243
  (0, react.useEffect)(() => {
27976
28244
  setPlaying(false);
@@ -28610,7 +28878,8 @@ if (mode === 'still') {
28610
28878
  }),
28611
28879
  card.artStyle !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
28612
28880
  className: GameTab_module_css_default.headChip,
28613
- children: artStyleLabel(card.artStyle)
28881
+ title: artStyleLabel(card.artStyle),
28882
+ children: artStyleName(card.artStyle)
28614
28883
  }),
28615
28884
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
28616
28885
  className: GameTab_module_css_default.headChip,
@@ -29382,7 +29651,7 @@ if (mode === 'still') {
29382
29651
  });
29383
29652
  /** The game tab body. */
29384
29653
  function GameTab(props) {
29385
- const { sessionId, t, api, insertDraft, subscribeSessionEvents, touch, subscribeNav, takeNav } = props;
29654
+ const { sessionId, t, api, insertDraft, subscribeSessionEvents, touch, subscribeNav, takeNav, reveal } = props;
29386
29655
  const [state, setState] = (0, react.useState)(null);
29387
29656
  const [error, setError] = (0, react.useState)(null);
29388
29657
  const [rev, setRev] = (0, react.useState)(0);
@@ -29392,6 +29661,7 @@ if (mode === 'still') {
29392
29661
  const [openElement, setOpenElement] = (0, react.useState)(null);
29393
29662
  const [toastText, setToastText] = (0, react.useState)(null);
29394
29663
  const [openChapter, setOpenChapter] = (0, react.useState)(null);
29664
+ (0, react.useEffect)(() => reveal.mount(), [reveal]);
29395
29665
  const toastTimer = (0, react.useRef)();
29396
29666
  const refresh = (0, react.useCallback)(() => {
29397
29667
  touch(sessionId);
@@ -29445,7 +29715,8 @@ if (mode === 'still') {
29445
29715
  refresh,
29446
29716
  toast,
29447
29717
  insertDraft: (text) => insertDraft(sessionId, text),
29448
- insertRef: (ref) => props.insertRef(sessionId, ref)
29718
+ insertRef: (ref) => props.insertRef(sessionId, ref),
29719
+ reveal
29449
29720
  };
29450
29721
  const project = state?.bound ?? null;
29451
29722
  const choose = (projectId) => {
@@ -29597,7 +29868,12 @@ if (mode === 'still') {
29597
29868
  }
29598
29869
  /** The bound-project workbench. */
29599
29870
  function ProjectWorkbench(p) {
29600
- const { t, sessionId, api, project, view, setView, styling, setStyling, refresh, toast, insertDraft } = p;
29871
+ const { t, sessionId, api, project, view, setView, styling, setStyling, refresh, toast, insertDraft, reveal } = p;
29872
+ const [, rerender] = (0, react.useState)(0);
29873
+ (0, react.useEffect)(() => reveal.subscribe(() => {
29874
+ rerender((n) => n + 1);
29875
+ }), [reveal]);
29876
+ const notice = reveal.notice;
29601
29877
  const autoConfirm = project.manifest?.autoConfirm ?? true;
29602
29878
  const style = project.manifest?.artStyle;
29603
29879
  const exportCurrent = () => {
@@ -29663,6 +29939,12 @@ if (mode === 'still') {
29663
29939
  const openProposals = project.proposals.filter((x) => x.picked === void 0).length;
29664
29940
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PanelRoot, {
29665
29941
  className: GameTab_module_css_default.root,
29942
+ onPointerDownCapture: () => {
29943
+ reveal.touched();
29944
+ },
29945
+ onKeyDownCapture: () => {
29946
+ reveal.touched();
29947
+ },
29666
29948
  children: [
29667
29949
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PanelHeader, {
29668
29950
  title: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
@@ -29679,9 +29961,12 @@ if (mode === 'still') {
29679
29961
  }),
29680
29962
  meta: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
29681
29963
  className: GameTab_module_css_default.headMeta,
29682
- children: [style !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
29683
- tone: "quiet",
29684
- children: artStyleLabel(style)
29964
+ children: [style !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
29965
+ title: artStyleLabel(style),
29966
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
29967
+ tone: "quiet",
29968
+ children: artStyleName(style)
29969
+ })
29685
29970
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
29686
29971
  tone: "quiet",
29687
29972
  children: project.current === null ? t("meta.noVersion") : t("meta.version", { version: project.current.version })
@@ -29779,6 +30064,32 @@ if (mode === 'still') {
29779
30064
  setView("versions");
29780
30065
  }
29781
30066
  }),
30067
+ notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
30068
+ className: GameTab_module_css_default.navNotice,
30069
+ role: "status",
30070
+ children: [
30071
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
30072
+ className: GameTab_module_css_default.navNoticeText,
30073
+ children: notice.text
30074
+ }),
30075
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
30076
+ type: "button",
30077
+ className: GameTab_module_css_default.primary,
30078
+ onClick: () => {
30079
+ reveal.follow();
30080
+ },
30081
+ children: t("nav.go")
30082
+ }),
30083
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
30084
+ type: "button",
30085
+ className: GameTab_module_css_default.link,
30086
+ onClick: () => {
30087
+ reveal.dismiss();
30088
+ },
30089
+ children: t("nav.dismiss")
30090
+ })
30091
+ ]
30092
+ }),
29782
30093
  view === "play" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PlayView, {
29783
30094
  ...p,
29784
30095
  onOpenElement: (id) => {
@@ -30112,6 +30423,7 @@ if (mode === 'still') {
30112
30423
  }, "game: tab type visibility");
30113
30424
  const api = {
30114
30425
  state: (sid) => remote.state(sid),
30426
+ liveVersion: (sid) => remote.liveVersion(sid),
30115
30427
  projectCards: () => remote.projectCards(),
30116
30428
  turnReport: (sid, turn) => remote.turnReport(sid, { turn }),
30117
30429
  bind: (sid, projectId) => remote.bind(sid, { projectId }),
@@ -30228,6 +30540,9 @@ if (mode === 'still') {
30228
30540
  };
30229
30541
  const navListeners = /* @__PURE__ */ new Set();
30230
30542
  let parkedNav = null;
30543
+ const reveal = new Reveal((target) => {
30544
+ face.openAt(target);
30545
+ });
30231
30546
  const face = {
30232
30547
  openAt: (target) => {
30233
30548
  parkedNav = target;
@@ -30297,8 +30612,35 @@ if (mode === 'still') {
30297
30612
  },
30298
30613
  touch: (sessionId) => {
30299
30614
  emit(sessionId);
30300
- }
30615
+ },
30616
+ reveal
30617
+ };
30618
+ const lastBound = /* @__PURE__ */ new Map();
30619
+ let lastLook = 0;
30620
+ const look = () => {
30621
+ const now = Date.now();
30622
+ if (now - lastLook < 3e3) return;
30623
+ lastLook = now;
30624
+ const sid = mainSessionId(ctx.sessions.list.getSnapshot());
30625
+ if (sid === void 0) return;
30626
+ api.liveVersion(sid).then((r) => {
30627
+ if (!r.ok) return;
30628
+ const bound = r.value?.projectId ?? null;
30629
+ const before = lastBound.get(sid);
30630
+ lastBound.set(sid, bound);
30631
+ if (before !== void 0 && before !== bound) emit(sid);
30632
+ if (r.value?.show !== void 0) reveal.request(r.value.projectId, r.value.show);
30633
+ }).catch(() => {});
30301
30634
  };
30635
+ listeners.add(() => {
30636
+ look();
30637
+ });
30638
+ const pollTimer = setInterval(() => {
30639
+ if (document.visibilityState === "visible") look();
30640
+ }, 6e3);
30641
+ disposers.push(async () => {
30642
+ clearInterval(pollTimer);
30643
+ });
30302
30644
  ctx.effect(() => ctx.slots.inject("sidebar.right.pane.tab", () => ctx.slots.register({
30303
30645
  name: "sidebar.right.pane.tab",
30304
30646
  key: GAME_TAB_ID,