@kawaijs/renderer-dom 0.1.7 → 0.1.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC9C;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CASxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAsB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEzF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC9C;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAWxC"}
package/dist/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  export * from './renderer.js';
2
2
  import { StoryVM } from '@kawaijs/runtime';
3
- import { DOMRenderer } from './renderer.js';
3
+ import { DOMRenderer, preloadStoryAssets } from './renderer.js';
4
4
  /**
5
5
  * High-level helper to initialize and mount a visual novel into the DOM.
6
6
  */
7
7
  export function mountKawaApp(story, container, options) {
8
+ preloadStoryAssets(story, options?.assetResolver);
8
9
  const vm = new StoryVM(story);
9
10
  const renderer = new DOMRenderer(vm, {
10
11
  container,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAA2B,MAAM,eAAe,CAAC;AAErE;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAmB,EACnB,SAAsB,EACtB,OAA+C;IAE/C,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE;QACnC,SAAS;QACT,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAA2B,MAAM,eAAe,CAAC;AAEzF;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAmB,EACnB,SAAsB,EACtB,OAA+C;IAE/C,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAElD,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE;QACnC,SAAS;QACT,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC1B,CAAC"}
@@ -1,6 +1,11 @@
1
+ import type { StoryPackage } from '@kawaijs/ast';
1
2
  import type { StoryVM } from '@kawaijs/runtime';
2
3
  export type AssetType = 'background' | 'character' | 'audio';
3
4
  export declare function defaultAssetResolver(path: string, type: AssetType): string;
5
+ /**
6
+ * Preload all background and character assets mentioned in a story to eliminate visual flashes.
7
+ */
8
+ export declare function preloadStoryAssets(story: StoryPackage, assetResolver?: (path: string, type: AssetType) => string): void;
4
9
  export interface DOMRendererOptions {
5
10
  container: HTMLElement;
6
11
  typewriterSpeed?: number;
@@ -14,7 +19,12 @@ export declare class DOMRenderer {
14
19
  private rootEl;
15
20
  private stageEl;
16
21
  private backgroundEl;
22
+ private bgLayerA;
23
+ private bgLayerB;
24
+ private activeBgLayer;
25
+ private currentBgUrl;
17
26
  private charactersEl;
27
+ private activeCharacters;
18
28
  private dialogueBoxEl;
19
29
  private speakerTagEl;
20
30
  private dialogueTextEl;
@@ -25,6 +35,7 @@ export declare class DOMRenderer {
25
35
  private fullCurrentText;
26
36
  private isChoicePending;
27
37
  private unsubscribeVMState?;
38
+ private boundKeyHandler?;
28
39
  constructor(vm: StoryVM, options: DOMRendererOptions);
29
40
  destroy(): void;
30
41
  shakeScreen(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAEtE,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAE7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CA0B1E;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC;CAC3D;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAU;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4C;IAE1E,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,yBAAyB,CAAuB;IACxD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,kBAAkB,CAAC,CAAa;gBAE5B,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB;IAiB7C,OAAO,IAAI,IAAI;IAUf,WAAW,IAAI,IAAI;IAQnB,WAAW,IAAI,IAAI;IAW1B,OAAO,CAAC,QAAQ;IA0FhB,OAAO,CAAC,UAAU;IAoClB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,MAAM;IAwId,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,gBAAgB;IASX,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoH7D,gBAAgB,IAAI,IAAI;CAwDhC"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAc,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAEtE,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAE7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CA0B1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,GAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,MAA6B,GAAG,IAAI,CA2B7I;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC;CAC3D;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAU;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4C;IAE1E,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,gBAAgB,CAA6G;IAErI,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,yBAAyB,CAAuB;IACxD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,kBAAkB,CAAC,CAAa;IACxC,OAAO,CAAC,eAAe,CAAC,CAA6B;gBAEzC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB;IAiB7C,OAAO,IAAI,IAAI;IAaf,WAAW,IAAI,IAAI;IAQnB,WAAW,IAAI,IAAI;IAW1B,OAAO,CAAC,QAAQ;IAmHhB,OAAO,CAAC,UAAU;IA4ClB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,MAAM;IAuMd,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,gBAAgB;IASX,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2H7D,gBAAgB,IAAI,IAAI;CA4DhC"}
package/dist/renderer.js CHANGED
@@ -7,18 +7,47 @@ export function defaultAssetResolver(path, type) {
7
7
  return path;
8
8
  }
9
9
  if (type === 'background') {
10
- const clean = path.replace(/^bg\s+/, '').trim();
11
- return clean.includes('.') ? `assets/backgrounds/${clean}` : `assets/backgrounds/${clean}.png`;
10
+ const clean = path.replace(/^bg[\s_]+/i, '').trim();
11
+ return clean.includes('.') ? `assets/backgrounds/${clean}` : `assets/backgrounds/${clean}.svg`;
12
12
  }
13
13
  if (type === 'character') {
14
14
  const clean = path.replace(/_/g, '/').replace(/\s+/g, '/').trim();
15
- return clean.includes('.') ? `assets/characters/${clean}` : `assets/characters/${clean}.png`;
15
+ return clean.includes('.') ? `assets/characters/${clean}` : `assets/characters/${clean}.svg`;
16
16
  }
17
17
  if (type === 'audio') {
18
18
  return path.includes('.') ? `assets/audio/${path}` : `assets/audio/${path}.mp3`;
19
19
  }
20
20
  return path;
21
21
  }
22
+ /**
23
+ * Preload all background and character assets mentioned in a story to eliminate visual flashes.
24
+ */
25
+ export function preloadStoryAssets(story, assetResolver = defaultAssetResolver) {
26
+ if (typeof window === 'undefined')
27
+ return;
28
+ const bgSet = new Set();
29
+ const charSet = new Set();
30
+ for (const label of Object.values(story.labels)) {
31
+ for (const inst of label) {
32
+ if (inst.type === 'scene' && inst.background) {
33
+ const clean = inst.background.replace(/^bg[\s_]+/i, '').trim();
34
+ bgSet.add(clean);
35
+ }
36
+ else if (inst.type === 'show') {
37
+ const key = inst.expression ? `${inst.character}/${inst.expression}` : inst.character;
38
+ charSet.add(key);
39
+ }
40
+ }
41
+ }
42
+ for (const bg of bgSet) {
43
+ const img = new Image();
44
+ img.src = assetResolver(bg, 'background');
45
+ }
46
+ for (const char of charSet) {
47
+ const img = new Image();
48
+ img.src = assetResolver(char, 'character');
49
+ }
50
+ }
22
51
  export class DOMRenderer {
23
52
  vm;
24
53
  container;
@@ -27,7 +56,12 @@ export class DOMRenderer {
27
56
  rootEl;
28
57
  stageEl;
29
58
  backgroundEl;
59
+ bgLayerA;
60
+ bgLayerB;
61
+ activeBgLayer = 'A';
62
+ currentBgUrl = '';
30
63
  charactersEl;
64
+ activeCharacters = new Map();
31
65
  dialogueBoxEl;
32
66
  speakerTagEl;
33
67
  dialogueTextEl;
@@ -38,6 +72,7 @@ export class DOMRenderer {
38
72
  fullCurrentText = '';
39
73
  isChoicePending = false;
40
74
  unsubscribeVMState;
75
+ boundKeyHandler;
41
76
  constructor(vm, options) {
42
77
  this.vm = vm;
43
78
  this.container = options.container;
@@ -58,6 +93,9 @@ export class DOMRenderer {
58
93
  if (this.currentTypewriterInterval) {
59
94
  clearInterval(this.currentTypewriterInterval);
60
95
  }
96
+ if (this.boundKeyHandler && typeof window !== 'undefined') {
97
+ window.removeEventListener('keydown', this.boundKeyHandler);
98
+ }
61
99
  this.container.innerHTML = '';
62
100
  }
63
101
  shakeScreen() {
@@ -85,25 +123,42 @@ export class DOMRenderer {
85
123
  this.rootEl.className = 'kawa-root';
86
124
  this.stageEl = document.createElement('div');
87
125
  this.stageEl.className = 'kawa-stage';
126
+ this.stageEl.setAttribute('role', 'main');
127
+ this.stageEl.setAttribute('aria-label', 'Visual Novel Stage');
88
128
  this.backgroundEl = document.createElement('div');
89
129
  this.backgroundEl.className = 'kawa-background';
130
+ this.backgroundEl.setAttribute('aria-hidden', 'true');
131
+ this.bgLayerA = document.createElement('div');
132
+ this.bgLayerA.className = 'kawa-bg-layer active';
133
+ this.bgLayerB = document.createElement('div');
134
+ this.bgLayerB.className = 'kawa-bg-layer';
135
+ this.backgroundEl.appendChild(this.bgLayerA);
136
+ this.backgroundEl.appendChild(this.bgLayerB);
90
137
  this.charactersEl = document.createElement('div');
91
138
  this.charactersEl.className = 'kawa-characters kawa-sprites';
139
+ this.charactersEl.setAttribute('aria-hidden', 'true');
92
140
  const uiLayerEl = document.createElement('div');
93
141
  uiLayerEl.className = 'kawa-ui-layer';
94
142
  // Choice Container
95
143
  this.choiceContainerEl = document.createElement('div');
96
144
  this.choiceContainerEl.className = 'kawa-choice-container kawa-choices';
145
+ this.choiceContainerEl.setAttribute('role', 'group');
146
+ this.choiceContainerEl.setAttribute('aria-label', 'Choices');
97
147
  this.choiceContainerEl.style.display = 'none';
98
148
  // Dialogue Box
99
149
  this.dialogueBoxEl = document.createElement('div');
100
150
  this.dialogueBoxEl.className = 'kawa-dialogue-box kawa-dialogue';
151
+ this.dialogueBoxEl.setAttribute('role', 'region');
152
+ this.dialogueBoxEl.setAttribute('aria-label', 'Dialogue');
153
+ this.dialogueBoxEl.setAttribute('tabindex', '0');
101
154
  this.speakerTagEl = document.createElement('div');
102
155
  this.speakerTagEl.className = 'kawa-speaker-tag kawa-speaker';
103
156
  this.dialogueTextEl = document.createElement('div');
104
157
  this.dialogueTextEl.className = 'kawa-dialogue-text kawa-text';
158
+ this.dialogueTextEl.setAttribute('aria-live', 'polite');
105
159
  const indicatorEl = document.createElement('div');
106
160
  indicatorEl.className = 'kawa-continue-indicator';
161
+ indicatorEl.setAttribute('aria-hidden', 'true');
107
162
  indicatorEl.innerHTML = '▼';
108
163
  this.dialogueBoxEl.appendChild(this.speakerTagEl);
109
164
  this.dialogueBoxEl.appendChild(this.dialogueTextEl);
@@ -111,12 +166,16 @@ export class DOMRenderer {
111
166
  // Quick Menu
112
167
  const quickMenuEl = document.createElement('nav');
113
168
  quickMenuEl.className = 'kawa-quick-menu';
169
+ quickMenuEl.setAttribute('role', 'toolbar');
170
+ quickMenuEl.setAttribute('aria-label', 'Game Menu');
114
171
  this.backBtnEl = document.createElement('button');
115
172
  this.backBtnEl.className = 'kawa-btn';
116
173
  this.backBtnEl.textContent = 'Back';
174
+ this.backBtnEl.setAttribute('aria-label', 'Rollback to previous dialogue');
117
175
  const histBtn = document.createElement('button');
118
176
  histBtn.className = 'kawa-btn';
119
177
  histBtn.textContent = 'History';
178
+ histBtn.setAttribute('aria-label', 'Open dialogue history log');
120
179
  histBtn.addEventListener('click', (e) => {
121
180
  e.stopPropagation();
122
181
  this.showHistoryModal();
@@ -124,6 +183,7 @@ export class DOMRenderer {
124
183
  const saveBtn = document.createElement('button');
125
184
  saveBtn.className = 'kawa-btn';
126
185
  saveBtn.textContent = 'Save';
186
+ saveBtn.setAttribute('aria-label', 'Open save game menu');
127
187
  saveBtn.addEventListener('click', (e) => {
128
188
  e.stopPropagation();
129
189
  this.showSaveLoadModal('save');
@@ -131,6 +191,7 @@ export class DOMRenderer {
131
191
  const loadBtn = document.createElement('button');
132
192
  loadBtn.className = 'kawa-btn';
133
193
  loadBtn.textContent = 'Load';
194
+ loadBtn.setAttribute('aria-label', 'Open load game menu');
134
195
  loadBtn.addEventListener('click', (e) => {
135
196
  e.stopPropagation();
136
197
  this.showSaveLoadModal('load');
@@ -158,7 +219,7 @@ export class DOMRenderer {
158
219
  this.vm.rollback();
159
220
  });
160
221
  // Keyboard controls
161
- window.addEventListener('keydown', (e) => {
222
+ this.boundKeyHandler = (e) => {
162
223
  // If modal is open, let Escape close it
163
224
  const modal = this.rootEl.querySelector('.kawa-modal-overlay');
164
225
  if (modal) {
@@ -167,6 +228,10 @@ export class DOMRenderer {
167
228
  return;
168
229
  }
169
230
  if (e.code === 'Space' || e.code === 'Enter') {
231
+ // If focusing a button, let the default click happen
232
+ if (document.activeElement && document.activeElement.tagName === 'BUTTON') {
233
+ return;
234
+ }
170
235
  e.preventDefault();
171
236
  this.handleUserAdvance();
172
237
  }
@@ -183,7 +248,10 @@ export class DOMRenderer {
183
248
  else if (e.key === 'h' || e.key === 'H') {
184
249
  this.showHistoryModal();
185
250
  }
186
- });
251
+ };
252
+ if (typeof window !== 'undefined') {
253
+ window.addEventListener('keydown', this.boundKeyHandler);
254
+ }
187
255
  }
188
256
  handleUserAdvance() {
189
257
  if (this.isTypewriting) {
@@ -196,63 +264,121 @@ export class DOMRenderer {
196
264
  render(state) {
197
265
  this.isChoicePending = false;
198
266
  this.backBtnEl.disabled = !this.vm.canRollback();
199
- // Render background
267
+ // 1. Dual-Layer Background Crossfading
200
268
  if (state.visual.background) {
201
- const bgUrl = this.assetResolver(state.visual.background, 'background');
202
- this.backgroundEl.style.backgroundImage = `url("${bgUrl}")`;
203
- this.backgroundEl.style.opacity = '1';
269
+ this.backgroundEl.dataset.transition = state.visual.transition ?? 'none';
270
+ const rawBg = state.visual.background;
271
+ const cleanBg = rawBg.replace(/^bg[\s_]+/i, '').trim();
272
+ const baseName = cleanBg.replace(/\.(svg|png|jpg|jpeg|webp)$/i, '');
273
+ const primaryUrl = this.assetResolver(cleanBg, 'background');
274
+ if (primaryUrl !== this.currentBgUrl) {
275
+ this.currentBgUrl = primaryUrl;
276
+ const incomingLayer = this.activeBgLayer === 'A' ? this.bgLayerB : this.bgLayerA;
277
+ const outgoingLayer = this.activeBgLayer === 'A' ? this.bgLayerA : this.bgLayerB;
278
+ incomingLayer.style.backgroundImage = `url("${primaryUrl}")`;
279
+ incomingLayer.classList.add('active');
280
+ outgoingLayer.classList.remove('active');
281
+ this.activeBgLayer = this.activeBgLayer === 'A' ? 'B' : 'A';
282
+ // Verify and fallback if image fails to load
283
+ const testImg = new Image();
284
+ testImg.onerror = () => {
285
+ const fallbackPng = this.assetResolver(`${baseName}.png`, 'background');
286
+ const img2 = new Image();
287
+ img2.onload = () => {
288
+ incomingLayer.style.backgroundImage = `url("${fallbackPng}")`;
289
+ };
290
+ img2.onerror = () => {
291
+ incomingLayer.style.backgroundImage = 'radial-gradient(ellipse at center, #334155 0%, #0f172a 100%)';
292
+ };
293
+ img2.src = fallbackPng;
294
+ };
295
+ testImg.src = primaryUrl;
296
+ }
204
297
  }
205
298
  else {
206
- this.backgroundEl.style.opacity = '0';
299
+ this.currentBgUrl = '';
300
+ this.bgLayerA.classList.remove('active');
301
+ this.bgLayerB.classList.remove('active');
207
302
  }
208
- // Render character sprites
209
- this.charactersEl.innerHTML = '';
210
- for (const [charId, charState] of Object.entries(state.visual.characters)) {
211
- const spriteDiv = document.createElement('div');
212
- const posClass = `kawa-pos-${charState.position ?? 'center'}`;
213
- spriteDiv.className = `kawa-sprite ${posClass}`;
214
- spriteDiv.dataset.character = charId;
215
- if (charState.expression) {
216
- spriteDiv.dataset.expression = charState.expression;
303
+ // 2. Character Sprites DOM Reconciliation
304
+ const currentChars = state.visual.characters;
305
+ const currentIds = new Set(Object.keys(currentChars));
306
+ // Remove sprites no longer active
307
+ for (const [id, record] of this.activeCharacters.entries()) {
308
+ if (!currentIds.has(id)) {
309
+ record.div.remove();
310
+ this.activeCharacters.delete(id);
217
311
  }
218
- const img = document.createElement('img');
312
+ }
313
+ // Add or update active sprites
314
+ for (const [charId, charState] of Object.entries(currentChars)) {
315
+ const posClass = `kawa-pos-${charState.position ?? 'center'}`;
219
316
  const charAssetKey = charState.expression ? `${charId}/${charState.expression}` : charId;
220
- img.src = this.assetResolver(charAssetKey, 'character');
221
- img.alt = `${charId} ${charState.expression ?? ''}`;
222
- let fallbackStep = 0;
223
- img.onerror = () => {
224
- fallbackStep++;
225
- if (fallbackStep === 1) {
226
- // Try .svg extension
227
- img.src = this.assetResolver(`${charAssetKey}.svg`, 'character');
317
+ const primarySpriteUrl = this.assetResolver(charAssetKey, 'character');
318
+ let existing = this.activeCharacters.get(charId);
319
+ if (!existing) {
320
+ const spriteDiv = document.createElement('div');
321
+ spriteDiv.className = `kawa-sprite ${posClass}`;
322
+ spriteDiv.dataset.character = charId;
323
+ if (charState.expression) {
324
+ spriteDiv.dataset.expression = charState.expression;
228
325
  }
229
- else if (fallbackStep === 2 && charState.expression) {
230
- // Try flat filename e.g. yumia_happy.png
231
- img.src = this.assetResolver(`${charId}_${charState.expression}`, 'character');
232
- }
233
- else if (fallbackStep === 3 && charState.expression) {
234
- // Try flat filename with svg e.g. yumia_happy.svg
235
- img.src = this.assetResolver(`${charId}_${charState.expression}.svg`, 'character');
326
+ const img = document.createElement('img');
327
+ img.src = primarySpriteUrl;
328
+ img.alt = `${charId} ${charState.expression ?? ''}`;
329
+ let fallbackStep = 0;
330
+ img.onerror = () => {
331
+ fallbackStep++;
332
+ if (fallbackStep === 1) {
333
+ img.src = this.assetResolver(`${charAssetKey}.svg`, 'character');
334
+ }
335
+ else if (fallbackStep === 2 && charState.expression) {
336
+ img.src = this.assetResolver(`${charId}_${charState.expression}`, 'character');
337
+ }
338
+ else if (fallbackStep === 3 && charState.expression) {
339
+ img.src = this.assetResolver(`${charId}_${charState.expression}.svg`, 'character');
340
+ }
341
+ else {
342
+ img.style.display = 'none';
343
+ spriteDiv.style.width = '220px';
344
+ spriteDiv.style.height = '420px';
345
+ spriteDiv.style.background = 'rgba(244, 63, 94, 0.25)';
346
+ spriteDiv.style.border = '2px dashed #f43f5e';
347
+ spriteDiv.style.borderRadius = '16px';
348
+ spriteDiv.style.display = 'flex';
349
+ spriteDiv.style.alignItems = 'center';
350
+ spriteDiv.style.justifyContent = 'center';
351
+ spriteDiv.style.color = '#ffffff';
352
+ spriteDiv.style.fontWeight = '600';
353
+ spriteDiv.style.fontSize = '1.1rem';
354
+ spriteDiv.textContent = `${charId}\n(${charState.expression ?? 'normal'})`;
355
+ }
356
+ };
357
+ spriteDiv.appendChild(img);
358
+ this.charactersEl.appendChild(spriteDiv);
359
+ existing = {
360
+ div: spriteDiv,
361
+ img,
362
+ expression: charState.expression,
363
+ position: charState.position
364
+ };
365
+ this.activeCharacters.set(charId, existing);
366
+ }
367
+ else {
368
+ // Update existing sprite classes and image if changed
369
+ existing.div.className = `kawa-sprite ${posClass}`;
370
+ if (charState.expression) {
371
+ existing.div.dataset.expression = charState.expression;
236
372
  }
237
373
  else {
238
- // Fallback placeholder sprite if image is missing
239
- img.style.display = 'none';
240
- spriteDiv.style.width = '220px';
241
- spriteDiv.style.height = '420px';
242
- spriteDiv.style.background = 'rgba(244, 63, 94, 0.25)';
243
- spriteDiv.style.border = '2px dashed #f43f5e';
244
- spriteDiv.style.borderRadius = '16px';
245
- spriteDiv.style.display = 'flex';
246
- spriteDiv.style.alignItems = 'center';
247
- spriteDiv.style.justifyContent = 'center';
248
- spriteDiv.style.color = '#ffffff';
249
- spriteDiv.style.fontWeight = '600';
250
- spriteDiv.style.fontSize = '1.1rem';
251
- spriteDiv.textContent = `${charId}\n(${charState.expression ?? 'normal'})`;
374
+ delete existing.div.dataset.expression;
252
375
  }
253
- };
254
- spriteDiv.appendChild(img);
255
- this.charactersEl.appendChild(spriteDiv);
376
+ if (existing.expression !== charState.expression) {
377
+ existing.expression = charState.expression;
378
+ existing.img.style.display = 'block';
379
+ existing.img.src = primarySpriteUrl;
380
+ }
381
+ }
256
382
  }
257
383
  // Render dialogue
258
384
  if (state.dialogue) {
@@ -364,6 +490,9 @@ export class DOMRenderer {
364
490
  overlay.className = 'kawa-modal-overlay';
365
491
  const card = document.createElement('div');
366
492
  card.className = 'kawa-modal-card';
493
+ card.setAttribute('role', 'dialog');
494
+ card.setAttribute('aria-modal', 'true');
495
+ card.setAttribute('aria-label', mode === 'save' ? 'Save Game' : 'Load Game');
367
496
  const header = document.createElement('div');
368
497
  header.className = 'kawa-modal-header';
369
498
  const title = document.createElement('div');
@@ -372,6 +501,7 @@ export class DOMRenderer {
372
501
  const closeBtn = document.createElement('button');
373
502
  closeBtn.className = 'kawa-btn';
374
503
  closeBtn.textContent = '✕ Close';
504
+ closeBtn.setAttribute('aria-label', 'Close modal');
375
505
  closeBtn.addEventListener('click', () => overlay.remove());
376
506
  header.appendChild(title);
377
507
  header.appendChild(closeBtn);
@@ -414,6 +544,7 @@ export class DOMRenderer {
414
544
  const saveActionBtn = document.createElement('button');
415
545
  saveActionBtn.className = 'kawa-slot-btn kawa-slot-btn-save';
416
546
  saveActionBtn.textContent = 'Save Here';
547
+ saveActionBtn.setAttribute('aria-label', `Save to slot ${slotNum}`);
417
548
  saveActionBtn.addEventListener('click', async () => {
418
549
  await this.vm.save(slotNum);
419
550
  overlay.remove();
@@ -426,6 +557,7 @@ export class DOMRenderer {
426
557
  const loadActionBtn = document.createElement('button');
427
558
  loadActionBtn.className = 'kawa-slot-btn kawa-slot-btn-load';
428
559
  loadActionBtn.textContent = 'Load';
560
+ loadActionBtn.setAttribute('aria-label', `Load slot ${slotNum}`);
429
561
  loadActionBtn.addEventListener('click', async () => {
430
562
  const ok = await this.vm.load(slotNum);
431
563
  if (ok)
@@ -439,6 +571,7 @@ export class DOMRenderer {
439
571
  delBtn.className = 'kawa-slot-btn kawa-slot-btn-del';
440
572
  delBtn.textContent = '🗑';
441
573
  delBtn.title = 'Delete Save';
574
+ delBtn.setAttribute('aria-label', `Delete slot ${slotNum}`);
442
575
  delBtn.addEventListener('click', async () => {
443
576
  await saveManager.deleteSlot(slotNum);
444
577
  overlay.remove();
@@ -463,6 +596,9 @@ export class DOMRenderer {
463
596
  overlay.className = 'kawa-modal-overlay';
464
597
  const card = document.createElement('div');
465
598
  card.className = 'kawa-modal-card';
599
+ card.setAttribute('role', 'dialog');
600
+ card.setAttribute('aria-modal', 'true');
601
+ card.setAttribute('aria-label', 'Dialogue History');
466
602
  const header = document.createElement('div');
467
603
  header.className = 'kawa-modal-header';
468
604
  const title = document.createElement('div');
@@ -471,6 +607,7 @@ export class DOMRenderer {
471
607
  const closeBtn = document.createElement('button');
472
608
  closeBtn.className = 'kawa-btn';
473
609
  closeBtn.textContent = '✕ Close';
610
+ closeBtn.setAttribute('aria-label', 'Close history modal');
474
611
  closeBtn.addEventListener('click', () => overlay.remove());
475
612
  header.appendChild(title);
476
613
  header.appendChild(closeBtn);
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAAe;IAChE,IACE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EACrB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC,CAAC,sBAAsB,KAAK,MAAM,CAAC;IACjG,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,KAAK,MAAM,CAAC;IAC/F,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC,gBAAgB,IAAI,MAAM,CAAC;IAClF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB,EAAE,gBAA2D,oBAAoB;IACrI,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAE1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/D,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAQD,MAAM,OAAO,WAAW;IACL,EAAE,CAAU;IACZ,SAAS,CAAc;IACvB,eAAe,CAAS;IACxB,aAAa,CAA4C;IAElE,MAAM,CAAkB;IACxB,OAAO,CAAkB;IACzB,YAAY,CAAkB;IAC9B,QAAQ,CAAkB;IAC1B,QAAQ,CAAkB;IAC1B,aAAa,GAAc,GAAG,CAAC;IAC/B,YAAY,GAAG,EAAE,CAAC;IAElB,YAAY,CAAkB;IAC9B,gBAAgB,GAAG,IAAI,GAAG,EAAkG,CAAC;IAE7H,aAAa,CAAkB;IAC/B,YAAY,CAAkB;IAC9B,cAAc,CAAkB;IAChC,iBAAiB,CAAkB;IACnC,SAAS,CAAqB;IAE9B,yBAAyB,GAAkB,IAAI,CAAC;IAChD,aAAa,GAAG,KAAK,CAAC;IACtB,eAAe,GAAG,EAAE,CAAC;IACrB,eAAe,GAAG,KAAK,CAAC;IACxB,kBAAkB,CAAc;IAChC,eAAe,CAA8B;IAErD,YAAY,EAAW,EAAE,OAA2B;QAClD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,oBAAoB,CAAC;QAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE;YACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC;IAEM,OAAO;QACZ,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAC1D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;IAChC,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5C,sCAAsC;QACtC,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACnE,IAAI,QAAQ;YAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEhC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QAE9B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;QAEpC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;QAE9D,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,sBAAsB,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,eAAe,CAAC;QAE1C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,8BAA8B,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,SAAS,CAAC,SAAS,GAAG,eAAe,CAAC;QAEtC,mBAAmB;QACnB,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,oCAAoC,CAAC;QACxE,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAE9C,eAAe;QACf,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,iCAAiC,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAEjD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,+BAA+B,CAAC;QAE9D,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,8BAA8B,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAExD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,WAAW,CAAC,SAAS,GAAG,yBAAyB,CAAC;QAClD,WAAW,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAChD,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;QAElC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5C,aAAa;QACb,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,WAAW,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAC1C,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5C,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAEpD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,+BAA+B,CAAC,CAAC;QAE3E,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;QAC/B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;QAChC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAC;QAChE,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACtC,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;QAC/B,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAC1D,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACtC,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;QAC/B,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAC1D,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACtC,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEjC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9C,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1C,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEnC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAEO,UAAU;QAChB,uDAAuD;QACvD,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAC7C,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAgB,EAAE,EAAE;YAC1C,wCAAwC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;YAC/D,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;oBAAE,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7C,qDAAqD;gBACrD,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC1E,OAAO;gBACT,CAAC;gBACD,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;YACrB,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC1C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC1C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,KAAiB;QAC9B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAEjD,uCAAuC;QACvC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;YACzE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;YACpE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAE7D,IAAI,UAAU,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;gBAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACjF,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAEjF,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,QAAQ,UAAU,IAAI,CAAC;gBAC7D,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACtC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAE5D,6CAA6C;gBAC7C,MAAM,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC;gBAC5B,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;oBACrB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,QAAQ,MAAM,EAAE,YAAY,CAAC,CAAC;oBACxE,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;wBACjB,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,QAAQ,WAAW,IAAI,CAAC;oBAChE,CAAC,CAAC;oBACF,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE;wBAClB,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,8DAA8D,CAAC;oBACvG,CAAC,CAAC;oBACF,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC;gBACzB,CAAC,CAAC;gBACF,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,0CAA0C;QAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAEtD,kCAAkC;QAClC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,YAAY,SAAS,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAC9D,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACzF,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAEvE,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAChD,SAAS,CAAC,SAAS,GAAG,eAAe,QAAQ,EAAE,CAAC;gBAChD,SAAS,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;gBACrC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;oBACzB,SAAS,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;gBACtD,CAAC;gBAED,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1C,GAAG,CAAC,GAAG,GAAG,gBAAgB,CAAC;gBAC3B,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,IAAI,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;gBAEpD,IAAI,YAAY,GAAG,CAAC,CAAC;gBACrB,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;oBACjB,YAAY,EAAE,CAAC;oBACf,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;wBACvB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,YAAY,MAAM,EAAE,WAAW,CAAC,CAAC;oBACnE,CAAC;yBAAM,IAAI,YAAY,KAAK,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;wBACtD,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC;oBACjF,CAAC;yBAAM,IAAI,YAAY,KAAK,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;wBACtD,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC,UAAU,MAAM,EAAE,WAAW,CAAC,CAAC;oBACrF,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;wBAC3B,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;wBAChC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;wBACjC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,yBAAyB,CAAC;wBACvD,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,oBAAoB,CAAC;wBAC9C,SAAS,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;wBACtC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;wBACjC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;wBACtC,SAAS,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;wBAC1C,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;wBAClC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;wBACnC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;wBACpC,SAAS,CAAC,WAAW,GAAG,GAAG,MAAM,MAAM,SAAS,CAAC,UAAU,IAAI,QAAQ,GAAG,CAAC;oBAC7E,CAAC;gBACH,CAAC,CAAC;gBAEF,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAEzC,QAAQ,GAAG;oBACT,GAAG,EAAE,SAAS;oBACd,GAAG;oBACH,UAAU,EAAE,SAAS,CAAC,UAAU;oBAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ;iBAC7B,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,sDAAsD;gBACtD,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,eAAe,QAAQ,EAAE,CAAC;gBACnD,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;oBACzB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACN,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;gBACzC,CAAC;gBACD,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;oBACjD,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;oBAC3C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;oBACrC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,gBAAgB,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAE3C,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBACtC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;gBACjD,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAClE,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;oBAChC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACxE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC5C,CAAC;QAED,iBAAiB;QACjB,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC9C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;YACpD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAE3C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC7C,GAAG,CAAC,SAAS,GAAG,6BAA6B,CAAC;gBAC9C,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC9B,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBAClC,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,IAAI,IAAI,CAAC,eAAe;wBAAE,OAAO;oBACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;oBACpD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;oBAC7C,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAChD,CAAC;QAED,0CAA0C;QAC1C,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;YACnE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC;gBACvC,OAAO,CAAC,SAAS,GAAG;;;;;;;SAOnB,CAAC;gBACF,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACxE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC1E,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;YACnE,IAAI,WAAW;gBAAE,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,EAAE,CAAC;QAErC,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;YACvD,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvE,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBACzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3B,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC9C,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,IAAqB;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAClE,IAAI,QAAQ;YAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,oBAAoB,CAAC;QAEzC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAE7E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;QAEvC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;QACrC,KAAK,CAAC,WAAW,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC;QAEtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAClD,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC;QAChC,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC;QACjC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACnD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAEnC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAEnC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE7C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAqB,EAAE,GAAW,EAAE,EAAE;YACnD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC;YAEtC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACjD,UAAU,CAAC,SAAS,GAAG,kBAAkB,CAAC;YAE1C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7C,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAC;YACpC,KAAK,CAAC,WAAW,GAAG,QAAQ,OAAO,EAAE,CAAC;YAEtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAChD,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC;YACtC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAElF,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC9B,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACjC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAEjC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC;gBACxC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvF,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAChD,SAAS,CAAC,SAAS,GAAG,sBAAsB,CAAC;gBAC7C,SAAS,CAAC,WAAW,GAAG,cAAc,CAAC;gBACvC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC;YAExC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACvD,aAAa,CAAC,SAAS,GAAG,kCAAkC,CAAC;gBAC7D,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC;gBACxC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,gBAAgB,OAAO,EAAE,CAAC,CAAC;gBACpE,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;oBACjD,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACvD,aAAa,CAAC,SAAS,GAAG,kCAAkC,CAAC;oBAC7D,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC;oBACnC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,OAAO,EAAE,CAAC,CAAC;oBACjE,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;wBACjD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACvC,IAAI,EAAE;4BAAE,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC3B,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChD,MAAM,CAAC,SAAS,GAAG,iCAAiC,CAAC;gBACrD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1B,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;gBAC7B,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;oBAC1C,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBACtC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;YAED,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAEM,gBAAgB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAClE,IAAI,QAAQ;YAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,oBAAoB,CAAC;QAEzC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;QAEvC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;QACrC,KAAK,CAAC,WAAW,GAAG,qBAAqB,CAAC;QAE1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAClD,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC;QAChC,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC;QACjC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,WAAW,GAAG,0BAA0B,CAAC;YAClD,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC;gBACrC,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;oBAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC1C,GAAG,CAAC,SAAS,GAAG,sBAAsB,CAAC;oBACvC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC;oBAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;gBACD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1C,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kawaijs/renderer-dom",
3
- "version": "0.1.7",
3
+ "version": "0.1.10",
4
4
  "description": "Standard semantic DOM and CSS rendering engine for Kawaijs visual novels",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -26,8 +26,8 @@
26
26
  "typecheck": "tsc --noEmit"
27
27
  },
28
28
  "dependencies": {
29
- "@kawaijs/ast": "^0.1.7",
30
- "@kawaijs/runtime": "^0.1.7"
29
+ "@kawaijs/ast": "^0.1.10",
30
+ "@kawaijs/runtime": "^0.1.10"
31
31
  },
32
32
  "keywords": [
33
33
  "kawaijs",
package/src/theme.css CHANGED
@@ -22,11 +22,20 @@
22
22
  }
23
23
 
24
24
  /* Base Reset & Root Container */
25
+ html, body {
26
+ margin: 0;
27
+ padding: 0;
28
+ width: 100%;
29
+ height: 100%;
30
+ background: #030712;
31
+ overflow: hidden;
32
+ }
33
+
25
34
  .kawa-root {
26
35
  position: relative;
27
36
  width: 100vw;
28
37
  height: 100vh;
29
- background-color: var(--kawa-bg-color);
38
+ background: radial-gradient(circle at 50% 50%, #0f172a 0%, #020617 100%);
30
39
  color: var(--kawa-text-color);
31
40
  font-family: var(--kawa-font-family);
32
41
  display: flex;
@@ -47,7 +56,7 @@
47
56
  width: 100%;
48
57
  max-width: calc(100vh * (16 / 9));
49
58
  aspect-ratio: var(--kawa-stage-aspect-ratio);
50
- background-color: #000000;
59
+ background: radial-gradient(ellipse at center, #1e293b 0%, #0f172a 100%);
51
60
  overflow: hidden;
52
61
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8);
53
62
  }
@@ -83,15 +92,27 @@
83
92
  animation: kawa-screen-flash 0.5s ease-out forwards;
84
93
  }
85
94
 
86
- /* Background Scene Layer */
95
+ /* Background Scene Layer with Crossfade Support */
87
96
  .kawa-background {
97
+ position: absolute;
98
+ inset: 0;
99
+ z-index: 1;
100
+ background: radial-gradient(ellipse at center, #1e293b 0%, #0f172a 100%);
101
+ overflow: hidden;
102
+ }
103
+
104
+ .kawa-bg-layer {
88
105
  position: absolute;
89
106
  inset: 0;
90
107
  background-size: cover;
91
108
  background-position: center;
92
109
  background-repeat: no-repeat;
93
- transition: opacity 0.4s ease-in-out, background-image 0.4s ease-in-out;
94
- z-index: 1;
110
+ transition: opacity 0.4s ease-in-out;
111
+ opacity: 0;
112
+ }
113
+
114
+ .kawa-bg-layer.active {
115
+ opacity: 1;
95
116
  }
96
117
 
97
118
  /* Characters Layer */
@@ -479,3 +500,24 @@
479
500
  margin-bottom: 16px;
480
501
  }
481
502
 
503
+ /* Accessible Focus States */
504
+ .kawa-btn:focus-visible,
505
+ .kawa-choice-btn:focus-visible,
506
+ .kawa-slot-btn:focus-visible,
507
+ .kawa-dialogue-box:focus-visible {
508
+ outline: 2px solid var(--kawa-primary-accent);
509
+ outline-offset: 3px;
510
+ }
511
+
512
+ /* Reduced Motion Support */
513
+ @media (prefers-reduced-motion: reduce) {
514
+ *,
515
+ *::before,
516
+ *::after {
517
+ animation-duration: 0.01ms !important;
518
+ animation-iteration-count: 1 !important;
519
+ transition-duration: 0.01ms !important;
520
+ scroll-behavior: auto !important;
521
+ }
522
+ }
523
+