@kawaijs/renderer-dom 0.1.12 → 0.1.14

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.
Files changed (44) hide show
  1. package/dist/components/choice-menu.d.ts.map +1 -1
  2. package/dist/components/choice-menu.js +2 -3
  3. package/dist/components/choice-menu.js.map +1 -1
  4. package/dist/components/hotspot-layer.d.ts.map +1 -1
  5. package/dist/components/hotspot-layer.js +1 -0
  6. package/dist/components/hotspot-layer.js.map +1 -1
  7. package/dist/components/main-menu.d.ts.map +1 -1
  8. package/dist/components/main-menu.js +1 -0
  9. package/dist/components/main-menu.js.map +1 -1
  10. package/dist/components/quick-menu.js +1 -1
  11. package/dist/components/stage-layer.d.ts +4 -0
  12. package/dist/components/stage-layer.d.ts.map +1 -1
  13. package/dist/components/stage-layer.js +150 -25
  14. package/dist/components/stage-layer.js.map +1 -1
  15. package/dist/components/vfx-layer.d.ts +5 -1
  16. package/dist/components/vfx-layer.d.ts.map +1 -1
  17. package/dist/components/vfx-layer.js +75 -28
  18. package/dist/components/vfx-layer.js.map +1 -1
  19. package/dist/gamepad.d.ts +15 -0
  20. package/dist/gamepad.d.ts.map +1 -0
  21. package/dist/gamepad.js +77 -0
  22. package/dist/gamepad.js.map +1 -0
  23. package/dist/icons.js +28 -28
  24. package/dist/icons.js.map +1 -1
  25. package/dist/layout/viewport-adapter.d.ts.map +1 -1
  26. package/dist/layout/viewport-adapter.js +36 -6
  27. package/dist/layout/viewport-adapter.js.map +1 -1
  28. package/dist/modals/settings-modal.d.ts +7 -0
  29. package/dist/modals/settings-modal.d.ts.map +1 -1
  30. package/dist/modals/settings-modal.js +55 -2
  31. package/dist/modals/settings-modal.js.map +1 -1
  32. package/dist/renderer.d.ts +7 -0
  33. package/dist/renderer.d.ts.map +1 -1
  34. package/dist/renderer.js +150 -2
  35. package/dist/renderer.js.map +1 -1
  36. package/dist/touch.d.ts.map +1 -1
  37. package/dist/touch.js +9 -3
  38. package/dist/touch.js.map +1 -1
  39. package/dist/types.d.ts +3 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +37 -12
  42. package/dist/types.js.map +1 -1
  43. package/package.json +4 -4
  44. package/src/theme.css +331 -12
package/dist/types.d.ts CHANGED
@@ -3,7 +3,7 @@ import type { ShareConfig } from './share-meta.js';
3
3
  export type AssetType = 'background' | 'character' | 'audio';
4
4
  export declare function defaultAssetResolver(path: string, type: AssetType): string;
5
5
  /**
6
- * Preload all background and character assets mentioned in a story to eliminate visual flashes.
6
+ * Preload story assets with bounded concurrency to avoid RAM/network spikes on mobile.
7
7
  */
8
8
  export declare function preloadStoryAssets(story: StoryPackage, assetResolver?: (path: string, type: AssetType) => string): void;
9
9
  export interface GalleryItem {
@@ -103,6 +103,8 @@ export interface RendererFeatureOptions {
103
103
  advanceDebounceMs?: number;
104
104
  /** Horizontal swipe gestures on mobile (default: true). */
105
105
  touchGestures?: boolean;
106
+ /** Controller and Gamepad API navigation support (default: true). */
107
+ gamepad?: boolean;
106
108
  }
107
109
  export interface DOMRendererOptions {
108
110
  container: HTMLElement;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -21,7 +21,7 @@ export function defaultAssetResolver(path, type) {
21
21
  return path;
22
22
  }
23
23
  /**
24
- * Preload all background and character assets mentioned in a story to eliminate visual flashes.
24
+ * Preload story assets with bounded concurrency to avoid RAM/network spikes on mobile.
25
25
  */
26
26
  export function preloadStoryAssets(story, assetResolver = defaultAssetResolver) {
27
27
  if (typeof window === 'undefined')
@@ -40,21 +40,46 @@ export function preloadStoryAssets(story, assetResolver = defaultAssetResolver)
40
40
  }
41
41
  }
42
42
  }
43
+ const urls = [];
43
44
  for (const bg of bgSet) {
44
- const img = new Image();
45
- img.src = assetResolver(bg, 'background');
45
+ urls.push(assetResolver(bg, 'background'));
46
46
  }
47
47
  for (const char of charSet) {
48
48
  const candidates = characterAssetCandidates(char, assetResolver);
49
- const img = new Image();
50
- let i = 0;
51
- const tryNext = () => {
52
- if (i >= candidates.length)
53
- return;
54
- img.src = candidates[i++];
55
- };
56
- img.onerror = tryNext;
57
- tryNext();
49
+ if (candidates[0])
50
+ urls.push(candidates[0]);
51
+ }
52
+ const saveData = Boolean(navigator.connection?.saveData);
53
+ const coarse = typeof window.matchMedia === 'function' && window.matchMedia('(pointer: coarse)').matches;
54
+ const concurrency = saveData ? 2 : coarse ? 3 : 6;
55
+ let index = 0;
56
+ let active = 0;
57
+ const pump = () => {
58
+ while (active < concurrency && index < urls.length) {
59
+ const url = urls[index++];
60
+ active++;
61
+ const img = new Image();
62
+ const done = () => {
63
+ active--;
64
+ // Drop reference promptly so decode buffers can GC.
65
+ img.onload = null;
66
+ img.onerror = null;
67
+ pump();
68
+ };
69
+ img.onload = done;
70
+ img.onerror = done;
71
+ img.decoding = 'async';
72
+ img.src = url;
73
+ }
74
+ };
75
+ const start = () => {
76
+ pump();
77
+ };
78
+ if (typeof window.requestIdleCallback === 'function') {
79
+ window.requestIdleCallback(() => start(), { timeout: 1200 });
80
+ }
81
+ else {
82
+ setTimeout(start, 0);
58
83
  }
59
84
  }
60
85
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kawaijs/renderer-dom",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
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",
@@ -39,9 +39,9 @@
39
39
  "typecheck": "tsc --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "@kawaijs/ast": "^0.1.12",
43
- "@kawaijs/audio": "^0.1.12",
44
- "@kawaijs/runtime": "^0.1.12"
42
+ "@kawaijs/ast": "^0.1.14",
43
+ "@kawaijs/audio": "^0.1.14",
44
+ "@kawaijs/runtime": "^0.1.14"
45
45
  },
46
46
  "keywords": [
47
47
  "kawaijs",
package/src/theme.css CHANGED
@@ -140,16 +140,25 @@ body.kawa-fullscreen {
140
140
  transition: opacity 0.85s cubic-bezier(0.4, 0, 0.2, 1);
141
141
  }
142
142
 
143
- /* Directional wipe transitions */
143
+ /* Directional wipe & push & zoom transitions */
144
144
  .kawa-background[data-transition="wipeleft"] .kawa-bg-layer,
145
- .kawa-background[data-transition="wiperight"] .kawa-bg-layer {
146
- transition: opacity 0.55s ease, clip-path 0.55s cubic-bezier(0.4, 0, 0.2, 1);
145
+ .kawa-background[data-transition="wiperight"] .kawa-bg-layer,
146
+ .kawa-background[data-transition="wipeup"] .kawa-bg-layer,
147
+ .kawa-background[data-transition="wipedown"] .kawa-bg-layer,
148
+ .kawa-background[data-transition="circlewipe"] .kawa-bg-layer,
149
+ .kawa-background[data-transition="iris"] .kawa-bg-layer,
150
+ .kawa-background[data-transition="pushleft"] .kawa-bg-layer,
151
+ .kawa-background[data-transition="pushright"] .kawa-bg-layer,
152
+ .kawa-background[data-transition="pushup"] .kawa-bg-layer,
153
+ .kawa-background[data-transition="pushdown"] .kawa-bg-layer,
154
+ .kawa-background[data-transition="zoom"] .kawa-bg-layer,
155
+ .kawa-background[data-transition="blur"] .kawa-bg-layer {
156
+ transition: opacity 0.55s ease, clip-path 0.55s cubic-bezier(0.4, 0, 0.2, 1), transform 0.55s cubic-bezier(0.4, 0, 0.2, 1), filter 0.55s ease;
147
157
  }
148
158
 
149
159
  .kawa-bg-layer.kawa-wipe-from-left {
150
160
  clip-path: inset(0 100% 0 0);
151
161
  }
152
-
153
162
  .kawa-bg-layer.kawa-wipe-from-left.active {
154
163
  clip-path: inset(0 0 0 0);
155
164
  }
@@ -157,11 +166,75 @@ body.kawa-fullscreen {
157
166
  .kawa-bg-layer.kawa-wipe-from-right {
158
167
  clip-path: inset(0 0 0 100%);
159
168
  }
160
-
161
169
  .kawa-bg-layer.kawa-wipe-from-right.active {
162
170
  clip-path: inset(0 0 0 0);
163
171
  }
164
172
 
173
+ .kawa-bg-layer.kawa-wipe-from-up {
174
+ clip-path: inset(0 0 100% 0);
175
+ }
176
+ .kawa-bg-layer.kawa-wipe-from-up.active {
177
+ clip-path: inset(0 0 0 0);
178
+ }
179
+
180
+ .kawa-bg-layer.kawa-wipe-from-down {
181
+ clip-path: inset(100% 0 0 0);
182
+ }
183
+ .kawa-bg-layer.kawa-wipe-from-down.active {
184
+ clip-path: inset(0 0 0 0);
185
+ }
186
+
187
+ .kawa-bg-layer.kawa-wipe-circle {
188
+ clip-path: circle(0% at 50% 50%);
189
+ }
190
+ .kawa-bg-layer.kawa-wipe-circle.active {
191
+ clip-path: circle(120% at 50% 50%);
192
+ }
193
+
194
+ .kawa-bg-layer.kawa-push-from-left {
195
+ transform: translateX(-100%);
196
+ }
197
+ .kawa-bg-layer.kawa-push-from-left.active {
198
+ transform: translateX(0);
199
+ }
200
+
201
+ .kawa-bg-layer.kawa-push-from-right {
202
+ transform: translateX(100%);
203
+ }
204
+ .kawa-bg-layer.kawa-push-from-right.active {
205
+ transform: translateX(0);
206
+ }
207
+
208
+ .kawa-bg-layer.kawa-push-from-up {
209
+ transform: translateY(-100%);
210
+ }
211
+ .kawa-bg-layer.kawa-push-from-up.active {
212
+ transform: translateY(0);
213
+ }
214
+
215
+ .kawa-bg-layer.kawa-push-from-down {
216
+ transform: translateY(100%);
217
+ }
218
+ .kawa-bg-layer.kawa-push-from-down.active {
219
+ transform: translateY(0);
220
+ }
221
+
222
+ .kawa-bg-layer.kawa-zoom-in {
223
+ transform: scale(1.15);
224
+ filter: blur(8px);
225
+ }
226
+ .kawa-bg-layer.kawa-zoom-in.active {
227
+ transform: scale(1);
228
+ filter: blur(0px);
229
+ }
230
+
231
+ .kawa-bg-layer.kawa-blur-transition {
232
+ filter: blur(16px);
233
+ }
234
+ .kawa-bg-layer.kawa-blur-transition.active {
235
+ filter: blur(0px);
236
+ }
237
+
165
238
  /* Characters Layer */
166
239
  .kawa-characters {
167
240
  position: absolute;
@@ -1330,6 +1403,17 @@ body.kawa-fullscreen {
1330
1403
  animation: kawa-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1);
1331
1404
  }
1332
1405
 
1406
+ .kawa-bg-video,
1407
+ .kawa-cg-video {
1408
+ position: absolute;
1409
+ inset: 0;
1410
+ width: 100%;
1411
+ height: 100%;
1412
+ object-fit: cover;
1413
+ pointer-events: none;
1414
+ z-index: 1;
1415
+ }
1416
+
1333
1417
  /* ==========================================================================
1334
1418
  Camera Shake, Flash & Stage Directives
1335
1419
  ========================================================================== */
@@ -1810,13 +1894,55 @@ body.kawa-fullscreen {
1810
1894
  display: none !important;
1811
1895
  }
1812
1896
 
1813
- /* Embed / iframe compact chrome (`?embed=1`) */
1814
- .kawa-root.kawa-embed .kawa-quick-menu {
1815
- display: none !important;
1897
+ /* Embed: always letterbox 16:9 — never inherit full-page mobile fill sizing. */
1898
+ .kawa-root.kawa-embed {
1899
+ min-height: 0 !important;
1900
+ height: 100% !important;
1901
+ max-height: 100% !important;
1902
+ }
1903
+
1904
+ .kawa-root.kawa-embed .kawa-stage {
1905
+ max-width: 100% !important;
1906
+ max-height: 100% !important;
1907
+ border-radius: 0;
1908
+ box-shadow: none;
1909
+ }
1910
+
1911
+ .kawa-root.kawa-embed .kawa-ui-layer {
1912
+ padding: clamp(8px, 2.2vh, 16px) clamp(10px, 2.5vw, 18px);
1816
1913
  }
1817
1914
 
1818
1915
  .kawa-root.kawa-embed .kawa-dialogue-box {
1916
+ min-height: 0;
1819
1917
  max-width: min(920px, 94%);
1918
+ padding: clamp(10px, 1.8vh, 16px) clamp(12px, 2.5vw, 20px);
1919
+ }
1920
+
1921
+ .kawa-root.kawa-embed .kawa-dialogue-text {
1922
+ font-size: clamp(0.88rem, 2.6vw, 1.05rem);
1923
+ line-height: 1.45;
1924
+ }
1925
+
1926
+ .kawa-root.kawa-embed .kawa-choice-container {
1927
+ width: min(92%, 440px);
1928
+ gap: 8px;
1929
+ top: 48%;
1930
+ }
1931
+
1932
+ .kawa-root.kawa-embed .kawa-choice-btn {
1933
+ font-size: clamp(0.82rem, 2.4vw, 1rem);
1934
+ padding: 0.65rem 0.9rem;
1935
+ min-height: 42px;
1936
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4);
1937
+ }
1938
+
1939
+ .kawa-root.kawa-embed .kawa-choice-btn:hover,
1940
+ .kawa-root.kawa-embed .kawa-choice-btn:focus-visible {
1941
+ transform: none;
1942
+ }
1943
+
1944
+ .kawa-root.kawa-embed .kawa-quick-menu {
1945
+ display: none !important;
1820
1946
  }
1821
1947
 
1822
1948
  .kawa-continue-link-btn {
@@ -1863,6 +1989,66 @@ body.kawa-fullscreen {
1863
1989
  }
1864
1990
 
1865
1991
  @media (max-width: 768px), (pointer: coarse) {
1992
+ /* Full-page player only — never blow up embedded previews (playground / iframe). */
1993
+ .kawa-root:not(.kawa-embed) {
1994
+ /* Use dynamic viewport so mobile browser chrome doesn't clip the stage */
1995
+ min-height: 100dvh;
1996
+ height: 100dvh;
1997
+ }
1998
+
1999
+ .kawa-root:not(.kawa-embed) .kawa-stage {
2000
+ width: 100% !important;
2001
+ max-width: none;
2002
+ max-height: none;
2003
+ border-radius: 0;
2004
+ box-shadow: none;
2005
+ border-left: none;
2006
+ border-right: none;
2007
+ }
2008
+
2009
+ @media (orientation: portrait) {
2010
+ .kawa-root:not(.kawa-embed) .kawa-stage {
2011
+ height: 100% !important;
2012
+ aspect-ratio: auto;
2013
+ }
2014
+ }
2015
+
2016
+ .kawa-main-menu-backdrop {
2017
+ backdrop-filter: none;
2018
+ -webkit-backdrop-filter: none;
2019
+ }
2020
+
2021
+ .kawa-main-menu-btn {
2022
+ backdrop-filter: none;
2023
+ -webkit-backdrop-filter: none;
2024
+ width: min(100%, 420px);
2025
+ }
2026
+
2027
+ .kawa-ui-layer {
2028
+ padding: 10px 12px max(10px, env(safe-area-inset-bottom));
2029
+ }
2030
+
2031
+ .kawa-dialogue-box {
2032
+ min-height: 112px;
2033
+ padding: 14px 16px 18px;
2034
+ padding-bottom: max(14px, env(safe-area-inset-bottom));
2035
+ /* backdrop-filter is expensive on mobile GPUs */
2036
+ backdrop-filter: none;
2037
+ -webkit-backdrop-filter: none;
2038
+ background: rgba(10, 15, 29, 0.94);
2039
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.55);
2040
+ }
2041
+
2042
+ .kawa-dialogue-text {
2043
+ font-size: clamp(0.95rem, 3.6vw, 1.1rem);
2044
+ line-height: 1.45;
2045
+ }
2046
+
2047
+ .kawa-choice-container {
2048
+ backdrop-filter: none;
2049
+ -webkit-backdrop-filter: none;
2050
+ }
2051
+
1866
2052
  .kawa-choice-btn {
1867
2053
  min-height: 48px;
1868
2054
  padding: 0.85rem 1.1rem;
@@ -1877,6 +2063,9 @@ body.kawa-fullscreen {
1877
2063
  justify-content: center;
1878
2064
  align-self: stretch;
1879
2065
  border-radius: 16px;
2066
+ backdrop-filter: none;
2067
+ -webkit-backdrop-filter: none;
2068
+ background: rgba(15, 23, 42, 0.92);
1880
2069
  }
1881
2070
 
1882
2071
  .kawa-quick-menu .kawa-btn {
@@ -1890,19 +2079,32 @@ body.kawa-fullscreen {
1890
2079
  display: none;
1891
2080
  }
1892
2081
 
1893
- .kawa-dialogue-box {
1894
- padding-bottom: max(12px, env(safe-area-inset-bottom));
2082
+ .kawa-sprite img {
2083
+ filter: none;
2084
+ animation: none;
1895
2085
  }
1896
2086
 
1897
2087
  .kawa-hotspot {
1898
- min-width: 44px;
1899
- min-height: 44px;
2088
+ min-width: 48px;
2089
+ min-height: 48px;
2090
+ }
2091
+
2092
+ .kawa-main-menu {
2093
+ overflow-y: auto;
2094
+ -webkit-overflow-scrolling: touch;
2095
+ padding: max(16px, env(safe-area-inset-top)) 16px max(16px, env(safe-area-inset-bottom));
1900
2096
  }
1901
2097
 
1902
2098
  .kawa-main-menu-btn {
1903
2099
  min-height: 48px;
1904
2100
  }
1905
2101
 
2102
+ .kawa-modal-overlay,
2103
+ .kawa-modal {
2104
+ backdrop-filter: none;
2105
+ -webkit-backdrop-filter: none;
2106
+ }
2107
+
1906
2108
  .kawa-slot-actions {
1907
2109
  flex-wrap: wrap;
1908
2110
  }
@@ -1910,6 +2112,17 @@ body.kawa-fullscreen {
1910
2112
  .kawa-slot-btn {
1911
2113
  min-height: 44px;
1912
2114
  }
2115
+
2116
+ .kawa-ending-card {
2117
+ backdrop-filter: none;
2118
+ -webkit-backdrop-filter: none;
2119
+ }
2120
+ }
2121
+
2122
+ @media (prefers-reduced-motion: reduce) {
2123
+ .kawa-sprite img {
2124
+ animation: none !important;
2125
+ }
1913
2126
  }
1914
2127
 
1915
2128
 
@@ -1993,3 +2206,109 @@ body.kawa-fullscreen {
1993
2206
  font-size: 0.75rem;
1994
2207
  color: #64748b;
1995
2208
  }
2209
+
2210
+ /* ==========================================================================
2211
+ Accessibility & Themes (A11y, Dyslexia Font & High Contrast)
2212
+ ========================================================================== */
2213
+
2214
+ .kawa-dyslexia-font,
2215
+ .kawa-dyslexia-font .kawa-dialogue-text,
2216
+ .kawa-dyslexia-font .kawa-speaker-tag,
2217
+ .kawa-dyslexia-font .kawa-choice-btn,
2218
+ .kawa-dyslexia-font .kawa-modal-card {
2219
+ font-family: 'OpenDyslexic', 'Comic Sans MS', sans-serif !important;
2220
+ letter-spacing: 0.05em !important;
2221
+ word-spacing: 0.12em !important;
2222
+ line-height: 1.7 !important;
2223
+ }
2224
+
2225
+ .kawa-high-contrast .kawa-dialogue-box {
2226
+ background: #000000 !important;
2227
+ border: 3px solid #ffffff !important;
2228
+ box-shadow: 0 0 0 2px #000000 !important;
2229
+ }
2230
+
2231
+ .kawa-high-contrast .kawa-dialogue-text {
2232
+ color: #ffffff !important;
2233
+ font-weight: 700 !important;
2234
+ text-shadow: none !important;
2235
+ }
2236
+
2237
+ .kawa-high-contrast .kawa-speaker-tag {
2238
+ background: #ffff00 !important;
2239
+ color: #000000 !important;
2240
+ border: 2px solid #ffffff !important;
2241
+ font-weight: 900 !important;
2242
+ }
2243
+
2244
+ .kawa-high-contrast .kawa-choice-btn {
2245
+ background: #000000 !important;
2246
+ color: #ffffff !important;
2247
+ border: 2px solid #ffff00 !important;
2248
+ font-weight: 700 !important;
2249
+ }
2250
+
2251
+ .kawa-high-contrast .kawa-choice-btn:hover,
2252
+ .kawa-high-contrast .kawa-choice-btn:focus-visible {
2253
+ background: #ffff00 !important;
2254
+ color: #000000 !important;
2255
+ }
2256
+
2257
+ .kawa-setting-section {
2258
+ margin-top: 14px;
2259
+ padding-top: 12px;
2260
+ border-top: 1px solid rgba(255, 255, 255, 0.12);
2261
+ display: flex;
2262
+ flex-direction: column;
2263
+ gap: 10px;
2264
+ }
2265
+
2266
+ .kawa-setting-section-title {
2267
+ font-size: 0.95rem;
2268
+ font-weight: 700;
2269
+ color: #f8fafc;
2270
+ margin-bottom: 2px;
2271
+ }
2272
+
2273
+ .kawa-toggle-label {
2274
+ display: flex;
2275
+ align-items: center;
2276
+ gap: 10px;
2277
+ font-size: 0.9rem;
2278
+ color: #cbd5e1;
2279
+ cursor: pointer;
2280
+ }
2281
+
2282
+ .kawa-toggle-label input[type="checkbox"] {
2283
+ width: 18px;
2284
+ height: 18px;
2285
+ accent-color: var(--kawa-primary-accent, #f43f5e);
2286
+ cursor: pointer;
2287
+ }
2288
+
2289
+ .kawa-select {
2290
+ width: 100%;
2291
+ padding: 8px 12px;
2292
+ border-radius: 8px;
2293
+ background: rgba(15, 23, 42, 0.8);
2294
+ color: #f8fafc;
2295
+ border: 1px solid rgba(255, 255, 255, 0.2);
2296
+ font-size: 0.95rem;
2297
+ cursor: pointer;
2298
+ outline: none;
2299
+ }
2300
+
2301
+ .kawa-select:focus {
2302
+ border-color: var(--kawa-primary-accent, #f43f5e);
2303
+ }
2304
+
2305
+ .kawa-sprite.kawa-speaking {
2306
+ animation: kawa-sprite-lip-sync 0.35s ease-in-out infinite alternate;
2307
+ }
2308
+
2309
+ @keyframes kawa-sprite-lip-sync {
2310
+ 0% { transform: translateY(0) scale(1); }
2311
+ 100% { transform: translateY(-3px) scale(1.015); }
2312
+ }
2313
+
2314
+