blacktrigram 0.7.11 → 0.7.13
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/DATA_MODEL.md +347 -0
- package/lib/App.d.ts.map +1 -1
- package/lib/App2.js +0 -6
- package/lib/App2.js.map +1 -1
- package/lib/assets/index.css +102 -94
- package/lib/components/screens/combat/CombatScreen3D.d.ts +1 -1
- package/lib/components/screens/combat/CombatScreen3D.js +2 -2
- package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatButtons.d.ts.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatButtons.js +22 -7
- package/lib/components/screens/combat/components/controls/CombatButtons.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatControlsPanel.d.ts +2 -0
- package/lib/components/screens/combat/components/controls/CombatControlsPanel.d.ts.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatControlsPanel.js +7 -4
- package/lib/components/screens/combat/components/controls/CombatControlsPanel.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.d.ts.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.js +15 -5
- package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js +15 -16
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.js +1 -2
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js +28 -24
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js +2 -4
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.d.ts.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js +3 -2
- package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js +28 -30
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.d.ts.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.js +4 -3
- package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.d.ts.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js +5 -2
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/philosophy/components/TrigramSymbol3D.d.ts.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js +4 -4
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.js +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
- package/lib/components/shared/base/ResponsiveContainer.d.ts +6 -0
- package/lib/components/shared/base/ResponsiveContainer.d.ts.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.js +1 -2
- package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.js +1 -2
- package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.js +5 -5
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator2.js +3 -2
- package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.d.ts.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.js +27 -30
- package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.d.ts.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js +57 -59
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.d.ts +40 -0
- package/lib/components/shared/ui/BaseHUDContainer.d.ts.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.js +40 -0
- package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
- package/lib/components/shared/ui/MobileHUDLayout.d.ts +13 -0
- package/lib/components/shared/ui/MobileHUDLayout.d.ts.map +1 -1
- package/lib/components/shared/ui/SplashScreen.js +10 -10
- package/lib/components/shared/ui/SplashScreen.js.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.d.ts.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.js +57 -62
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
- package/lib/components/shared/ui/VolumeControl.js +7 -7
- package/lib/components/shared/ui/VolumeControl.js.map +1 -1
- package/package.json +9 -9
package/lib/assets/index.css
CHANGED
|
@@ -13,10 +13,10 @@ body {
|
|
|
13
13
|
font-family: var(--font-korean);
|
|
14
14
|
background: linear-gradient(
|
|
15
15
|
135deg,
|
|
16
|
-
var(--
|
|
17
|
-
var(--
|
|
16
|
+
var(--color-bg-dark) 0%,
|
|
17
|
+
var(--color-bg-medium) 100%
|
|
18
18
|
);
|
|
19
|
-
color: var(--
|
|
19
|
+
color: var(--color-text-primary);
|
|
20
20
|
overflow: hidden;
|
|
21
21
|
user-select: none;
|
|
22
22
|
}
|
|
@@ -28,15 +28,15 @@ body {
|
|
|
28
28
|
align-items: center;
|
|
29
29
|
background: radial-gradient(
|
|
30
30
|
ellipse at center,
|
|
31
|
-
var(--
|
|
32
|
-
var(--
|
|
31
|
+
var(--color-bg-medium) 0%,
|
|
32
|
+
var(--color-bg-dark) 100%
|
|
33
33
|
);
|
|
34
34
|
}
|
|
35
35
|
/* Korean Text Enhancement */
|
|
36
36
|
.korean-text {
|
|
37
37
|
font-family: var(--font-korean);
|
|
38
38
|
font-weight: 400;
|
|
39
|
-
text-shadow: 0 0 8px var(--korean-
|
|
39
|
+
text-shadow: 0 0 8px var(--color-korean-east);
|
|
40
40
|
letter-spacing: 0.02em;
|
|
41
41
|
}
|
|
42
42
|
.korean-title {
|
|
@@ -45,42 +45,42 @@ body {
|
|
|
45
45
|
font-size: 3rem;
|
|
46
46
|
background: linear-gradient(
|
|
47
47
|
45deg,
|
|
48
|
-
var(--
|
|
49
|
-
var(--
|
|
48
|
+
var(--color-accent-cyan),
|
|
49
|
+
var(--color-warning)
|
|
50
50
|
);
|
|
51
51
|
-webkit-background-clip: text;
|
|
52
52
|
-webkit-text-fill-color: transparent;
|
|
53
53
|
background-clip: text;
|
|
54
|
-
text-shadow: 0 0 20px var(--
|
|
54
|
+
text-shadow: 0 0 20px var(--color-accent-cyan);
|
|
55
55
|
}
|
|
56
56
|
.cyber-text {
|
|
57
57
|
font-family: var(--font-cyber);
|
|
58
|
-
color: var(--
|
|
58
|
+
color: var(--color-accent-cyan);
|
|
59
59
|
text-transform: uppercase;
|
|
60
60
|
letter-spacing: 0.1em;
|
|
61
61
|
text-shadow: 0 0 10px currentColor;
|
|
62
62
|
}
|
|
63
63
|
/* Cyberpunk UI Elements */
|
|
64
64
|
.cyberpunk-border {
|
|
65
|
-
border: 2px solid var(--
|
|
65
|
+
border: 2px solid var(--color-accent-cyan);
|
|
66
66
|
border-image: linear-gradient(
|
|
67
67
|
45deg,
|
|
68
|
-
var(--
|
|
69
|
-
var(--
|
|
70
|
-
var(--
|
|
68
|
+
var(--color-accent-cyan),
|
|
69
|
+
var(--color-warning),
|
|
70
|
+
var(--color-accent-cyan)
|
|
71
71
|
)
|
|
72
72
|
1;
|
|
73
|
-
box-shadow: 0 0 10px var(--
|
|
74
|
-
inset 0 0 10px
|
|
73
|
+
box-shadow: 0 0 10px var(--color-accent-cyan),
|
|
74
|
+
inset 0 0 10px color-mix(in srgb, var(--color-accent-cyan) 10%, transparent);
|
|
75
75
|
}
|
|
76
76
|
.cyberpunk-button {
|
|
77
77
|
background: linear-gradient(
|
|
78
78
|
135deg,
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
color-mix(in srgb, var(--color-accent-cyan) 10%, transparent),
|
|
80
|
+
color-mix(in srgb, var(--color-warning) 10%, transparent)
|
|
81
81
|
);
|
|
82
|
-
border: 1px solid var(--
|
|
83
|
-
color: var(--
|
|
82
|
+
border: 1px solid var(--color-accent-cyan);
|
|
83
|
+
color: var(--color-text-primary);
|
|
84
84
|
padding: 0.8rem 1.5rem;
|
|
85
85
|
cursor: pointer;
|
|
86
86
|
transition: all 0.3s ease;
|
|
@@ -92,10 +92,10 @@ body {
|
|
|
92
92
|
.cyberpunk-button:hover {
|
|
93
93
|
background: linear-gradient(
|
|
94
94
|
135deg,
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
color-mix(in srgb, var(--color-accent-cyan) 20%, transparent),
|
|
96
|
+
color-mix(in srgb, var(--color-warning) 20%, transparent)
|
|
97
97
|
);
|
|
98
|
-
box-shadow: 0 0 20px var(--
|
|
98
|
+
box-shadow: 0 0 20px var(--color-accent-cyan);
|
|
99
99
|
transform: translateY(-2px);
|
|
100
100
|
}
|
|
101
101
|
.cyberpunk-button:before {
|
|
@@ -108,7 +108,7 @@ body {
|
|
|
108
108
|
background: linear-gradient(
|
|
109
109
|
90deg,
|
|
110
110
|
transparent,
|
|
111
|
-
|
|
111
|
+
color-mix(in srgb, var(--color-text-primary) 20%, transparent),
|
|
112
112
|
transparent
|
|
113
113
|
);
|
|
114
114
|
transition: left 0.5s;
|
|
@@ -124,15 +124,15 @@ body {
|
|
|
124
124
|
right: 0;
|
|
125
125
|
background: linear-gradient(
|
|
126
126
|
180deg,
|
|
127
|
-
|
|
127
|
+
color-mix(in srgb, var(--color-bg-dark) 90%, transparent) 0%,
|
|
128
128
|
transparent 100%
|
|
129
129
|
);
|
|
130
130
|
padding: 1rem;
|
|
131
|
-
border-bottom: 1px solid var(--
|
|
131
|
+
border-bottom: 1px solid var(--color-accent-cyan);
|
|
132
132
|
}
|
|
133
133
|
.health-bar {
|
|
134
|
-
background: var(--
|
|
135
|
-
border: 1px solid var(--
|
|
134
|
+
background: var(--color-bg-dark);
|
|
135
|
+
border: 1px solid var(--color-accent-cyan);
|
|
136
136
|
height: 8px;
|
|
137
137
|
border-radius: 4px;
|
|
138
138
|
overflow: hidden;
|
|
@@ -141,9 +141,9 @@ body {
|
|
|
141
141
|
.health-bar-fill {
|
|
142
142
|
background: linear-gradient(
|
|
143
143
|
90deg,
|
|
144
|
-
var(--
|
|
145
|
-
var(--
|
|
146
|
-
var(--korean-
|
|
144
|
+
var(--color-danger) 0%,
|
|
145
|
+
var(--color-warning) 50%,
|
|
146
|
+
var(--color-korean-east) 100%
|
|
147
147
|
);
|
|
148
148
|
height: 100%;
|
|
149
149
|
transition: width 0.3s ease;
|
|
@@ -153,10 +153,10 @@ body {
|
|
|
153
153
|
@keyframes korean-glow {
|
|
154
154
|
0%,
|
|
155
155
|
100% {
|
|
156
|
-
text-shadow: 0 0 5px var(--korean-
|
|
156
|
+
text-shadow: 0 0 5px var(--color-korean-east);
|
|
157
157
|
}
|
|
158
158
|
50% {
|
|
159
|
-
text-shadow: 0 0 20px var(--korean-
|
|
159
|
+
text-shadow: 0 0 20px var(--color-korean-east);
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
.animate-glow {
|
|
@@ -164,13 +164,13 @@ body {
|
|
|
164
164
|
}
|
|
165
165
|
@keyframes combat-flash {
|
|
166
166
|
0% {
|
|
167
|
-
background-color:
|
|
167
|
+
background-color: color-mix(in srgb, var(--color-danger) 10%, transparent);
|
|
168
168
|
}
|
|
169
169
|
50% {
|
|
170
|
-
background-color:
|
|
170
|
+
background-color: color-mix(in srgb, var(--color-danger) 30%, transparent);
|
|
171
171
|
}
|
|
172
172
|
100% {
|
|
173
|
-
background-color:
|
|
173
|
+
background-color: color-mix(in srgb, var(--color-danger) 10%, transparent);
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
.combat-flash {
|
|
@@ -232,8 +232,8 @@ body {
|
|
|
232
232
|
}
|
|
233
233
|
/* Loading and Error States */
|
|
234
234
|
.loading-spinner {
|
|
235
|
-
border: 2px solid var(--
|
|
236
|
-
border-top: 2px solid var(--
|
|
235
|
+
border: 2px solid var(--color-bg-medium);
|
|
236
|
+
border-top: 2px solid var(--color-accent-cyan);
|
|
237
237
|
border-radius: 50%;
|
|
238
238
|
width: 40px;
|
|
239
239
|
height: 40px;
|
|
@@ -249,9 +249,9 @@ body {
|
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
251
|
.error-message {
|
|
252
|
-
color: var(--
|
|
253
|
-
background:
|
|
254
|
-
border: 1px solid var(--
|
|
252
|
+
color: var(--color-danger);
|
|
253
|
+
background: color-mix(in srgb, var(--color-danger) 10%, transparent);
|
|
254
|
+
border: 1px solid var(--color-danger);
|
|
255
255
|
padding: 1rem;
|
|
256
256
|
border-radius: 4px;
|
|
257
257
|
margin: 1rem 0;
|
|
@@ -349,6 +349,11 @@ body {
|
|
|
349
349
|
display: none !important;
|
|
350
350
|
}
|
|
351
351
|
/* Korean typography support */
|
|
352
|
+
/* NOTE: overflow: hidden on body prevents the page itself from scrolling.
|
|
353
|
+
* This is intentional for a full-screen game. Individual screens that need
|
|
354
|
+
* scrollable content (Philosophy, Controls) use internal scrollable containers
|
|
355
|
+
* with overflowY: "auto" on their content areas, which works correctly
|
|
356
|
+
* because the content div has a fixed height within the viewport. */
|
|
352
357
|
body {
|
|
353
358
|
font-family: "Noto Sans KR", sans-serif;
|
|
354
359
|
margin: 0;
|
|
@@ -368,8 +373,8 @@ body {
|
|
|
368
373
|
bottom: 0;
|
|
369
374
|
background: radial-gradient(
|
|
370
375
|
circle at center,
|
|
371
|
-
|
|
372
|
-
|
|
376
|
+
color-mix(in srgb, var(--color-korean-south) 10%, transparent) 0%,
|
|
377
|
+
var(--color-primary-black) 70%
|
|
373
378
|
);
|
|
374
379
|
pointer-events: none;
|
|
375
380
|
z-index: -1;
|
|
@@ -441,15 +446,18 @@ body {
|
|
|
441
446
|
color: #ffffff;
|
|
442
447
|
font-family: "Noto Sans KR", Arial, sans-serif;
|
|
443
448
|
overflow: hidden;
|
|
449
|
+
/* Remove focus outline when the app container is focused via tabIndex.
|
|
450
|
+
* The game container is made focusable for keyboard input capture. */
|
|
451
|
+
outline: none;
|
|
444
452
|
}
|
|
445
453
|
.app-header {
|
|
446
454
|
padding: 1rem 2rem;
|
|
447
|
-
background:
|
|
448
|
-
border-bottom: 2px solid
|
|
455
|
+
background: color-mix(in srgb, var(--color-bg-dark) 90%, transparent);
|
|
456
|
+
border-bottom: 2px solid var(--color-primary-gold);
|
|
449
457
|
display: flex;
|
|
450
458
|
justify-content: space-between;
|
|
451
459
|
align-items: center;
|
|
452
|
-
box-shadow: 0 2px 10px
|
|
460
|
+
box-shadow: 0 2px 10px color-mix(in srgb, var(--color-primary-gold) 30%, transparent);
|
|
453
461
|
}
|
|
454
462
|
.app-title {
|
|
455
463
|
margin: 0;
|
|
@@ -460,14 +468,14 @@ body {
|
|
|
460
468
|
.korean-title {
|
|
461
469
|
font-size: 1.8rem;
|
|
462
470
|
font-weight: bold;
|
|
463
|
-
color:
|
|
464
|
-
text-shadow: 2px 2px 4px
|
|
471
|
+
color: var(--color-primary-gold);
|
|
472
|
+
text-shadow: 2px 2px 4px color-mix(in srgb, var(--color-primary-black) 80%, transparent);
|
|
465
473
|
}
|
|
466
474
|
.english-title {
|
|
467
475
|
font-size: 1rem;
|
|
468
|
-
color:
|
|
476
|
+
color: var(--color-info);
|
|
469
477
|
font-style: italic;
|
|
470
|
-
text-shadow: 1px 1px 2px
|
|
478
|
+
text-shadow: 1px 1px 2px color-mix(in srgb, var(--color-primary-black) 60%, transparent);
|
|
471
479
|
}
|
|
472
480
|
.app-status {
|
|
473
481
|
display: flex;
|
|
@@ -483,14 +491,14 @@ body {
|
|
|
483
491
|
font-weight: bold;
|
|
484
492
|
}
|
|
485
493
|
.phase-indicator {
|
|
486
|
-
background:
|
|
487
|
-
color:
|
|
488
|
-
border: 1px solid
|
|
494
|
+
background: color-mix(in srgb, var(--color-primary-gold) 20%, transparent);
|
|
495
|
+
color: var(--color-primary-gold);
|
|
496
|
+
border: 1px solid var(--color-primary-gold);
|
|
489
497
|
}
|
|
490
498
|
.time-indicator {
|
|
491
|
-
background:
|
|
492
|
-
color:
|
|
493
|
-
border: 1px solid
|
|
499
|
+
background: color-mix(in srgb, var(--color-info) 20%, transparent);
|
|
500
|
+
color: var(--color-info);
|
|
501
|
+
border: 1px solid var(--color-info);
|
|
494
502
|
}
|
|
495
503
|
.app-main {
|
|
496
504
|
flex: 1;
|
|
@@ -500,7 +508,7 @@ body {
|
|
|
500
508
|
overflow: hidden;
|
|
501
509
|
}
|
|
502
510
|
.app-debug {
|
|
503
|
-
background:
|
|
511
|
+
background: color-mix(in srgb, var(--color-primary-black) 80%, transparent);
|
|
504
512
|
color: #00ff00;
|
|
505
513
|
font-family: "Courier New", monospace;
|
|
506
514
|
font-size: 0.8rem;
|
|
@@ -510,7 +518,7 @@ body {
|
|
|
510
518
|
.app-debug summary {
|
|
511
519
|
padding: 0.5rem;
|
|
512
520
|
cursor: pointer;
|
|
513
|
-
background:
|
|
521
|
+
background: color-mix(in srgb, var(--color-success) 10%, transparent);
|
|
514
522
|
border-bottom: 1px solid #00ff00;
|
|
515
523
|
}
|
|
516
524
|
.app-debug pre {
|
|
@@ -550,12 +558,12 @@ body {
|
|
|
550
558
|
bottom: 0;
|
|
551
559
|
background-image: radial-gradient(
|
|
552
560
|
circle at 20% 20%,
|
|
553
|
-
|
|
561
|
+
color-mix(in srgb, var(--color-primary-gold) 5%, transparent) 0%,
|
|
554
562
|
transparent 50%
|
|
555
563
|
),
|
|
556
564
|
radial-gradient(
|
|
557
565
|
circle at 80% 80%,
|
|
558
|
-
|
|
566
|
+
color-mix(in srgb, var(--color-info) 5%, transparent) 0%,
|
|
559
567
|
transparent 50%
|
|
560
568
|
);
|
|
561
569
|
pointer-events: none;
|
|
@@ -580,7 +588,7 @@ body {
|
|
|
580
588
|
font-weight: 700;
|
|
581
589
|
color: #ffd700;
|
|
582
590
|
margin-bottom: 1rem;
|
|
583
|
-
text-shadow: 0 0 20px
|
|
591
|
+
text-shadow: 0 0 20px color-mix(in srgb, var(--color-primary-gold) 50%, transparent);
|
|
584
592
|
}
|
|
585
593
|
.english-subtitle {
|
|
586
594
|
font-size: 1.2rem;
|
|
@@ -644,7 +652,7 @@ body {
|
|
|
644
652
|
left: 50%;
|
|
645
653
|
transform: translate(-50%, -50%);
|
|
646
654
|
text-align: center;
|
|
647
|
-
color: var(--primary-cyan);
|
|
655
|
+
color: var(--color-primary-cyan);
|
|
648
656
|
}
|
|
649
657
|
.error-screen {
|
|
650
658
|
position: absolute;
|
|
@@ -655,7 +663,7 @@ body {
|
|
|
655
663
|
color: #ff4136;
|
|
656
664
|
padding: 2rem;
|
|
657
665
|
border: 1px solid #ff4136;
|
|
658
|
-
background:
|
|
666
|
+
background: color-mix(in srgb, var(--color-danger) 10%, transparent);
|
|
659
667
|
}
|
|
660
668
|
/* Fix UI overlay positioning to not interfere with canvas visibility */
|
|
661
669
|
.test-overlay {
|
|
@@ -823,14 +831,14 @@ body {
|
|
|
823
831
|
/* Timer Flash - Final seconds warning */
|
|
824
832
|
@keyframes timerFlash {
|
|
825
833
|
0%, 100% {
|
|
826
|
-
color:
|
|
827
|
-
text-shadow: 0 0 10px
|
|
828
|
-
0 0 20px
|
|
834
|
+
color: var(--color-korean-south);
|
|
835
|
+
text-shadow: 0 0 10px color-mix(in srgb, var(--color-korean-south) 80%, transparent),
|
|
836
|
+
0 0 20px color-mix(in srgb, var(--color-korean-south) 50%, transparent);
|
|
829
837
|
}
|
|
830
838
|
50% {
|
|
831
|
-
color:
|
|
832
|
-
text-shadow: 0 0 15px
|
|
833
|
-
0 0 30px
|
|
839
|
+
color: var(--color-korean-center);
|
|
840
|
+
text-shadow: 0 0 15px var(--color-korean-center),
|
|
841
|
+
0 0 30px color-mix(in srgb, var(--color-korean-center) 70%, transparent);
|
|
834
842
|
}
|
|
835
843
|
}
|
|
836
844
|
|
|
@@ -1006,9 +1014,9 @@ body {
|
|
|
1006
1014
|
.training-button {
|
|
1007
1015
|
width: 100%;
|
|
1008
1016
|
height: 40px;
|
|
1009
|
-
border: 2px solid
|
|
1017
|
+
border: 2px solid color-mix(in srgb, var(--color-text-primary) 80%, transparent);
|
|
1010
1018
|
border-radius: 8px;
|
|
1011
|
-
color:
|
|
1019
|
+
color: var(--color-text-primary);
|
|
1012
1020
|
font-weight: bold;
|
|
1013
1021
|
cursor: pointer;
|
|
1014
1022
|
display: flex;
|
|
@@ -1019,11 +1027,11 @@ body {
|
|
|
1019
1027
|
}
|
|
1020
1028
|
|
|
1021
1029
|
.training-button-start {
|
|
1022
|
-
background:
|
|
1030
|
+
background: var(--color-success);
|
|
1023
1031
|
}
|
|
1024
1032
|
|
|
1025
1033
|
.training-button-stop {
|
|
1026
|
-
background:
|
|
1034
|
+
background: var(--color-korean-south);
|
|
1027
1035
|
}
|
|
1028
1036
|
|
|
1029
1037
|
.training-button:hover {
|
|
@@ -1033,52 +1041,52 @@ body {
|
|
|
1033
1041
|
|
|
1034
1042
|
/* Training Mode Selector */
|
|
1035
1043
|
.mode-button {
|
|
1036
|
-
background:
|
|
1037
|
-
border: 2px solid
|
|
1044
|
+
background: color-mix(in srgb, var(--color-bg-light) 50%, transparent);
|
|
1045
|
+
border: 2px solid color-mix(in srgb, var(--color-primary-cyan) 40%, transparent);
|
|
1038
1046
|
border-radius: 8px;
|
|
1039
1047
|
padding: 10px;
|
|
1040
1048
|
cursor: pointer;
|
|
1041
1049
|
text-align: left;
|
|
1042
|
-
color:
|
|
1050
|
+
color: var(--color-text-primary);
|
|
1043
1051
|
transition: all 0.2s ease;
|
|
1044
1052
|
}
|
|
1045
1053
|
|
|
1046
1054
|
.mode-button.selected {
|
|
1047
|
-
background:
|
|
1048
|
-
border-color:
|
|
1049
|
-
box-shadow: 0 0 12px
|
|
1055
|
+
background: color-mix(in srgb, var(--color-primary-cyan) 25%, transparent);
|
|
1056
|
+
border-color: var(--color-primary-cyan);
|
|
1057
|
+
box-shadow: 0 0 12px color-mix(in srgb, var(--color-primary-cyan) 50%, transparent);
|
|
1050
1058
|
}
|
|
1051
1059
|
|
|
1052
1060
|
.mode-button:not(.selected):hover {
|
|
1053
|
-
background:
|
|
1054
|
-
border-color:
|
|
1061
|
+
background: color-mix(in srgb, var(--color-gray-300) 70%, transparent);
|
|
1062
|
+
border-color: var(--color-primary-cyan);
|
|
1055
1063
|
transform: scale(1.02);
|
|
1056
1064
|
}
|
|
1057
1065
|
|
|
1058
1066
|
.mode-button:focus-visible {
|
|
1059
|
-
outline: 2px solid
|
|
1067
|
+
outline: 2px solid var(--color-primary-cyan);
|
|
1060
1068
|
outline-offset: 2px;
|
|
1061
|
-
box-shadow: 0 0 12px
|
|
1069
|
+
box-shadow: 0 0 12px color-mix(in srgb, var(--color-primary-cyan) 80%, transparent);
|
|
1062
1070
|
}
|
|
1063
1071
|
|
|
1064
1072
|
/* Vital Point Button */
|
|
1065
1073
|
.vital-point-button {
|
|
1066
|
-
background:
|
|
1067
|
-
border: 2px solid
|
|
1074
|
+
background: color-mix(in srgb, var(--color-bg-light) 50%, transparent);
|
|
1075
|
+
border: 2px solid color-mix(in srgb, var(--color-korean-center) 50%, transparent);
|
|
1068
1076
|
border-radius: 8px;
|
|
1069
1077
|
padding: 8px;
|
|
1070
1078
|
cursor: pointer;
|
|
1071
1079
|
text-align: left;
|
|
1072
|
-
color:
|
|
1080
|
+
color: var(--color-text-primary);
|
|
1073
1081
|
transition: all 0.2s ease;
|
|
1074
1082
|
}
|
|
1075
1083
|
|
|
1076
1084
|
.vital-point-button.selected {
|
|
1077
|
-
background:
|
|
1085
|
+
background: color-mix(in srgb, var(--color-korean-center) 30%, transparent);
|
|
1078
1086
|
}
|
|
1079
1087
|
|
|
1080
1088
|
.vital-point-button:not(.selected):hover {
|
|
1081
|
-
background:
|
|
1089
|
+
background: color-mix(in srgb, var(--color-gray-300) 70%, transparent);
|
|
1082
1090
|
}
|
|
1083
1091
|
|
|
1084
1092
|
/* Training Feedback Animation - Fast and snappy */
|
|
@@ -1097,12 +1105,12 @@ body {
|
|
|
1097
1105
|
}
|
|
1098
1106
|
|
|
1099
1107
|
.training-feedback {
|
|
1100
|
-
background:
|
|
1101
|
-
border: 3px solid
|
|
1108
|
+
background: color-mix(in srgb, var(--color-primary-black) 90%, transparent);
|
|
1109
|
+
border: 3px solid var(--color-primary-gold);
|
|
1102
1110
|
border-radius: 16px;
|
|
1103
|
-
color:
|
|
1111
|
+
color: var(--color-primary-gold);
|
|
1104
1112
|
text-align: center;
|
|
1105
|
-
box-shadow: 0 0 30px
|
|
1113
|
+
box-shadow: 0 0 30px color-mix(in srgb, var(--color-primary-gold) 50%, transparent);
|
|
1106
1114
|
animation: feedbackPulse 0.4s ease-out;
|
|
1107
1115
|
min-width: 200px;
|
|
1108
1116
|
}
|
|
@@ -1133,7 +1141,7 @@ body {
|
|
|
1133
1141
|
width: 12px;
|
|
1134
1142
|
height: 12px;
|
|
1135
1143
|
border-radius: 50%;
|
|
1136
|
-
background:
|
|
1144
|
+
background: var(--color-success);
|
|
1137
1145
|
}
|
|
1138
1146
|
|
|
1139
1147
|
.status-indicator.active {
|
|
@@ -1141,6 +1149,6 @@ body {
|
|
|
1141
1149
|
}
|
|
1142
1150
|
|
|
1143
1151
|
.status-indicator.inactive {
|
|
1144
|
-
background:
|
|
1152
|
+
background: var(--color-gray-500);
|
|
1145
1153
|
}
|
|
1146
1154
|
/*$vite$:1*/
|
|
@@ -78,7 +78,7 @@ import { Html } from "@react-three/drei";
|
|
|
78
78
|
import { Bloom, EffectComposer, Noise, Vignette } from "@react-three/postprocessing";
|
|
79
79
|
//#region src/components/screens/combat/CombatScreen3D.tsx
|
|
80
80
|
/**
|
|
81
|
-
* CombatScreen3D - Three.js-based combat screen
|
|
81
|
+
* CombatScreen3D - Three.js-based combat screen (Black Trigram 흑괘)
|
|
82
82
|
*
|
|
83
83
|
* Maintains all existing combat logic and state management
|
|
84
84
|
* Uses Html overlays for UI and 3D meshes for game objects
|
|
@@ -1415,7 +1415,7 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
|
|
|
1415
1415
|
width: `${width}px`,
|
|
1416
1416
|
height: `${height}px`,
|
|
1417
1417
|
position: "relative",
|
|
1418
|
-
backgroundColor:
|
|
1418
|
+
backgroundColor: toHexColor(KOREAN_COLORS.UI_BACKGROUND_DARK),
|
|
1419
1419
|
overflow: "hidden"
|
|
1420
1420
|
},
|
|
1421
1421
|
"data-testid": "combat-screen",
|