Luigi commited on
Commit
46a1221
·
1 Parent(s): e5b7259

feat(ui): modernize UI/UX with new design system

Browse files

- Add modern CSS variables and color palette
- Implement smooth animations and transitions
- Improve responsive design for desktop/tablet/mobile
- Add Inter font for better typography
- Enhance visual feedback and micro-interactions
- Update all components with modern styling
- Add touch-friendly controls for mobile devices

Files changed (2) hide show
  1. static/index.html +1 -1
  2. static/styles.css +838 -521
static/index.html CHANGED
@@ -8,7 +8,7 @@
8
  <!-- CJK Font Support -->
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;700&family=Noto+Sans:wght@400;700&display=swap" rel="stylesheet">
12
 
13
  <link rel="stylesheet" href="/static/styles.css">
14
  </head>
 
8
  <!-- CJK Font Support -->
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+TC:wght@400;700&family=Noto+Sans:wght@400;700&display=swap" rel="stylesheet">
12
 
13
  <link rel="stylesheet" href="/static/styles.css">
14
  </head>
static/styles.css CHANGED
@@ -2,63 +2,280 @@
2
  #production-source {
3
  display: flex;
4
  align-items: center;
5
- gap: 6px;
6
- margin: 6px 0 8px;
7
- font-size: 12px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  }
9
 
10
  /* Game Over Overlay */
11
  #game-over-overlay {
12
  position: fixed;
13
  inset: 0;
14
- background: rgba(0,0,0,0.75);
15
  display: flex;
16
  align-items: center;
17
  justify-content: center;
18
- z-index: 9999;
 
 
 
 
 
 
19
  }
20
- #game-over-overlay.hidden { display: none; }
21
  .game-over-content {
22
- background: #111;
23
- color: #fff;
24
- padding: 24px 28px;
25
- border-radius: 8px;
26
- box-shadow: 0 8px 24px rgba(0,0,0,0.4);
27
- min-width: 320px;
28
  text-align: center;
 
 
29
  }
30
- .game-over-content h2 { margin: 0 0 12px; font-size: 20px; }
31
- .game-over-actions { display: flex; gap: 12px; justify-content: center; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  .game-over-actions button {
33
- background: #2d7ef7;
34
- color: #fff;
35
  border: none;
36
- border-radius: 6px;
37
- padding: 8px 12px;
38
  cursor: pointer;
 
 
 
39
  }
40
- .game-over-actions button:hover { background: #226ad1; }
41
- #production-source .label { opacity: 0.8; }
42
- #production-source-name { font-weight: 700; }
43
- #production-source-clear {
44
- border: none;
45
- background: transparent;
46
- cursor: pointer;
47
- padding: 2px 4px;
48
  }
49
- /* Modern RTS Game Styles */
50
- :root {
51
- --primary-color: #4A90E2;
52
- --secondary-color: #E74C3C;
53
- --success-color: #2ECC71;
54
- --warning-color: #F39C12;
55
- --dark-bg: #1a1a2e;
56
- --dark-panel: #16213e;
57
- --light-text: #eaeaea;
58
- --border-color: #0f3460;
59
- --hover-color: #533483;
60
  }
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  * {
63
  margin: 0;
64
  padding: 0;
@@ -66,11 +283,15 @@
66
  }
67
 
68
  body {
69
- font-family: 'Noto Sans', 'Noto Sans TC', 'Segoe UI', 'Microsoft JhengHei', 'PingFang TC', 'Apple LiGothic Medium', Tahoma, Geneva, Verdana, sans-serif;
70
- background: var(--dark-bg);
71
- color: var(--light-text);
72
  overflow: hidden;
73
  user-select: none;
 
 
 
 
74
  }
75
 
76
  #app {
@@ -80,144 +301,273 @@ body {
80
  width: 100vw;
81
  }
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  /* Top Bar */
84
  #topbar {
85
- background: var(--dark-panel);
86
- padding: 10px 20px;
87
  display: flex;
88
  justify-content: space-between;
89
  align-items: center;
90
- border-bottom: 2px solid var(--border-color);
91
- box-shadow: 0 2px 10px rgba(0,0,0,0.3);
92
- z-index: 100;
 
 
93
  }
94
 
95
  .topbar-left {
96
  display: flex;
97
  align-items: center;
98
- gap: 20px;
99
  }
100
 
101
  .topbar-left h1 {
102
- font-size: 24px;
103
- font-weight: bold;
104
- background: linear-gradient(45deg, var(--primary-color), var(--success-color));
105
  -webkit-background-clip: text;
106
  -webkit-text-fill-color: transparent;
107
  background-clip: text;
 
108
  }
109
 
110
  #game-info {
111
  display: flex;
112
- gap: 10px;
113
  }
114
 
115
  .info-badge {
116
- background: rgba(74, 144, 226, 0.2);
117
- padding: 5px 12px;
118
- border-radius: 12px;
119
- font-size: 14px;
120
- border: 1px solid var(--primary-color);
 
 
 
 
 
 
 
 
121
  }
122
 
123
  .topbar-right {
124
  display: flex;
125
  align-items: center;
126
- gap: 20px;
127
  }
128
 
129
  .resource-display {
130
  display: flex;
131
- gap: 15px;
132
  }
133
 
134
  .resource-item {
135
  display: flex;
136
  align-items: center;
137
- gap: 5px;
138
- background: rgba(46, 204, 113, 0.2);
139
- padding: 8px 15px;
140
- border-radius: 8px;
141
- font-weight: bold;
142
- border: 1px solid var(--success-color);
 
 
 
 
 
 
 
143
  }
144
 
145
  .resource-icon {
146
- font-size: 20px;
 
147
  }
148
 
149
- /* Nuke Indicator */
150
  #nuke-indicator {
151
- background: rgba(231, 76, 60, 0.2);
152
- border: 1px solid var(--danger-color);
153
- padding: 8px 15px;
154
- border-radius: 8px;
155
  min-width: 180px;
156
- transition: all 0.3s ease;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  }
158
 
159
  #nuke-indicator.ready {
160
- background: rgba(46, 204, 113, 0.3);
161
- border-color: var(--success-color);
162
- animation: nukeReady 1s ease-in-out infinite;
 
163
  }
164
 
165
  @keyframes nukeReady {
166
- 0%, 100% { box-shadow: 0 0 10px rgba(46, 204, 113, 0.5); }
167
- 50% { box-shadow: 0 0 20px rgba(46, 204, 113, 0.8); }
 
 
 
 
 
 
168
  }
169
 
170
  .nuke-status {
171
- font-size: 12px;
172
- font-weight: bold;
173
- margin-bottom: 4px;
174
- color: var(--light-text);
 
 
175
  }
176
 
177
  #nuke-indicator.ready .nuke-status {
178
- color: var(--success-color);
179
  }
180
 
181
  .nuke-charge-container {
182
  width: 100%;
183
  height: 6px;
184
- background: rgba(0, 0, 0, 0.3);
185
- border-radius: 3px;
186
  overflow: hidden;
 
187
  }
188
 
189
  .nuke-charge-bar {
190
  height: 100%;
191
  width: 0%;
192
- background: linear-gradient(90deg, var(--danger-color), #f39c12);
193
- transition: width 0.3s ease;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  }
195
 
196
  #nuke-indicator.ready .nuke-charge-bar {
197
- background: linear-gradient(90deg, var(--success-color), #2ecc71);
198
  }
199
 
200
- /* Sound Control */
201
  .sound-control {
202
  display: flex;
203
  align-items: center;
204
  }
205
 
206
  .sound-btn {
207
- background: rgba(0,0,0,0.3);
208
- border: 1px solid var(--border-color);
209
- padding: 8px 15px;
210
- border-radius: 8px;
211
  cursor: pointer;
212
- transition: all 0.3s ease;
213
- color: var(--light-text);
214
- font-size: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
216
 
217
  .sound-btn:hover {
218
- background: rgba(74, 144, 226, 0.2);
219
- border-color: var(--primary-color);
220
  transform: scale(1.05);
 
 
 
 
 
 
221
  }
222
 
223
  .sound-btn:active {
@@ -225,118 +575,254 @@ body {
225
  }
226
 
227
  .sound-btn.muted {
228
- opacity: 0.5;
229
- border-color: var(--secondary-color);
 
230
  }
231
 
232
- .sound-btn.muted .sound-icon::before {
233
  content: '🔇';
234
  position: absolute;
 
 
 
 
235
  }
236
 
237
  .sound-icon {
238
  display: inline-block;
239
  position: relative;
 
240
  }
241
 
242
- /* Language Selector */
243
  .language-selector {
244
  display: flex;
245
  align-items: center;
246
- gap: 8px;
247
- background: rgba(0,0,0,0.3);
248
- padding: 8px 12px;
249
- border-radius: 8px;
250
- border: 1px solid var(--border-color);
 
 
 
 
 
 
251
  }
252
 
253
  .language-selector label {
254
- font-size: 18px;
 
255
  }
256
 
257
  #language-select {
258
- background: var(--dark-bg);
259
- color: var(--light-text);
260
- border: 1px solid var(--border-color);
261
- padding: 5px 10px;
262
- border-radius: 5px;
263
- font-size: 14px;
264
  cursor: pointer;
265
  outline: none;
266
- transition: all 0.3s ease;
 
267
  }
268
 
269
  #language-select:hover {
270
- border-color: var(--primary-color);
271
  }
272
 
273
  #language-select:focus {
274
- border-color: var(--primary-color);
275
- box-shadow: 0 0 5px rgba(74, 144, 226, 0.5);
276
- }
277
-
278
- .connection-status {
279
- display: flex;
280
- align-items: center;
281
- gap: 8px;
282
- background: rgba(0,0,0,0.3);
283
- padding: 8px 15px;
284
- border-radius: 8px;
285
- }
286
-
287
- .status-dot {
288
- width: 10px;
289
- height: 10px;
290
- border-radius: 50%;
291
- animation: pulse 2s infinite;
292
- }
293
-
294
- .status-dot.connected {
295
- background: var(--success-color);
296
  }
297
 
298
- .status-dot.disconnected {
299
- background: var(--secondary-color);
 
 
300
  }
301
 
302
- @keyframes pulse {
303
- 0%, 100% { opacity: 1; }
304
- 50% { opacity: 0.5; }
305
- }
306
-
307
- /* Game Container */
308
  #game-container {
309
  display: flex;
310
  flex: 1;
311
  overflow: hidden;
 
312
  }
313
 
314
- /* Sidebars */
315
  #left-sidebar, #right-sidebar {
316
- width: 280px;
317
- background: var(--dark-panel);
318
- border-right: 2px solid var(--border-color);
319
  overflow-y: auto;
320
  overflow-x: hidden;
 
 
321
  }
322
 
323
  #right-sidebar {
324
  border-right: none;
325
- border-left: 2px solid var(--border-color);
326
  }
327
 
328
  .sidebar-section {
329
- padding: 15px;
330
- border-bottom: 1px solid var(--border-color);
 
 
 
 
 
 
 
 
 
331
  }
332
 
333
  .sidebar-section h3 {
334
- margin-bottom: 12px;
335
- color: var(--primary-color);
336
- font-size: 16px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
337
  display: flex;
338
  align-items: center;
339
- gap: 8px;
 
 
 
 
 
 
 
 
 
 
 
340
  }
341
 
342
  /* Intel/AI Analysis Panel */
@@ -428,327 +914,131 @@ body {
428
  transform: scale(0.95) rotate(180deg);
429
  }
430
 
431
- /* Build & Unit Buttons */
432
- .build-buttons, .unit-buttons {
433
- display: grid;
434
- grid-template-columns: repeat(2, 1fr);
435
- gap: 10px;
436
- }
437
-
438
- .build-btn, .unit-btn {
439
- background: linear-gradient(135deg, var(--dark-bg), var(--dark-panel));
440
- border: 2px solid var(--border-color);
441
- color: var(--light-text);
442
- padding: 12px;
443
- border-radius: 8px;
444
- cursor: pointer;
445
- transition: all 0.3s ease;
446
  display: flex;
447
  flex-direction: column;
448
- align-items: center;
449
- gap: 5px;
450
- position: relative;
451
- }
452
-
453
- .build-btn:hover, .unit-btn:hover {
454
- transform: translateY(-2px);
455
- border-color: var(--primary-color);
456
- box-shadow: 0 5px 15px rgba(74, 144, 226, 0.3);
457
  }
458
 
459
- .build-btn:active, .unit-btn:active {
460
- transform: translateY(0);
461
- }
462
-
463
- .build-icon, .unit-icon {
464
- font-size: 32px;
465
- }
466
-
467
- .build-name, .unit-name {
468
- font-size: 12px;
469
- font-weight: bold;
470
- }
471
-
472
- .build-cost, .unit-cost {
473
- font-size: 11px;
474
- color: var(--warning-color);
475
- }
476
-
477
- /* Canvas Container */
478
- #canvas-container {
479
- flex: 1;
480
  position: relative;
481
- background: #0a0a0a;
482
- overflow: hidden;
483
- }
484
-
485
- #game-canvas {
486
- width: 100%;
487
- height: 100%;
488
- display: block;
489
- cursor: crosshair;
490
- }
491
-
492
- /* Minimap */
493
- #minimap-container {
494
- position: absolute;
495
- bottom: 20px;
496
- right: 20px;
497
- width: 240px;
498
- height: 180px;
499
- background: rgba(0, 0, 0, 0.8);
500
- border: 2px solid var(--primary-color);
501
- border-radius: 8px;
502
  overflow: hidden;
503
- box-shadow: 0 5px 20px rgba(0,0,0,0.5);
504
- }
505
-
506
- #minimap {
507
- width: 100%;
508
- height: 100%;
509
- display: block;
510
- }
511
-
512
- #minimap-viewport {
513
- position: absolute;
514
- border: 2px solid rgba(255, 255, 255, 0.8);
515
- background: rgba(255, 255, 255, 0.1);
516
- pointer-events: none;
517
  }
518
 
519
- /* Camera Controls */
520
- #camera-controls {
521
  position: absolute;
522
- top: 20px;
523
- right: 20px;
524
- display: flex;
525
- flex-direction: column;
526
- gap: 10px;
527
- }
528
-
529
- .camera-btn {
530
- width: 50px;
531
- height: 50px;
532
- background: rgba(0, 0, 0, 0.7);
533
- border: 2px solid var(--primary-color);
534
- border-radius: 8px;
535
- color: white;
536
- font-size: 16px;
537
- cursor: pointer;
538
- transition: all 0.3s ease;
539
- }
540
-
541
- .camera-btn:hover {
542
- background: var(--primary-color);
543
- transform: scale(1.1);
544
- }
545
-
546
- /* Selection Info */
547
- #selection-info {
548
- background: rgba(0,0,0,0.3);
549
- padding: 10px;
550
- border-radius: 8px;
551
- min-height: 100px;
552
- }
553
-
554
- .no-selection {
555
- color: #888;
556
- text-align: center;
557
- padding: 20px 0;
558
- }
559
-
560
- .selection-item {
561
- background: rgba(74, 144, 226, 0.2);
562
- padding: 8px;
563
- margin: 5px 0;
564
- border-radius: 5px;
565
- border-left: 3px solid var(--primary-color);
566
- }
567
-
568
- /* Control Groups */
569
- #control-groups-display {
570
- display: grid;
571
- grid-template-columns: repeat(3, 1fr);
572
- gap: 8px;
573
- padding: 10px;
574
- background: rgba(0,0,0,0.3);
575
- border-radius: 8px;
576
- }
577
-
578
- .control-group {
579
- display: flex;
580
- flex-direction: column;
581
- align-items: center;
582
- justify-content: center;
583
- background: rgba(74, 144, 226, 0.1);
584
- border: 2px solid rgba(74, 144, 226, 0.3);
585
- border-radius: 8px;
586
- padding: 8px;
587
- cursor: pointer;
588
- transition: all 0.2s ease;
589
- min-height: 50px;
590
- }
591
-
592
- .control-group:hover {
593
- background: rgba(74, 144, 226, 0.2);
594
- border-color: var(--primary-color);
595
- transform: scale(1.05);
596
- }
597
-
598
- .control-group.active {
599
- background: rgba(46, 204, 113, 0.2);
600
- border-color: var(--success-color);
601
- box-shadow: 0 0 10px rgba(46, 204, 113, 0.3);
602
- }
603
-
604
- .control-group.selected {
605
- border-color: var(--warning-color);
606
- box-shadow: 0 0 15px rgba(243, 156, 18, 0.5);
607
- }
608
-
609
- .group-num {
610
- font-size: 18px;
611
- font-weight: bold;
612
- color: var(--primary-color);
613
- }
614
-
615
- .control-group.active .group-num {
616
- color: var(--success-color);
617
- }
618
-
619
- .group-count {
620
- font-size: 12px;
621
- color: #888;
622
- margin-top: 4px;
623
- }
624
-
625
- .control-group.active .group-count {
626
- color: var(--light-text);
627
- }
628
-
629
- .control-groups-hint {
630
- font-size: 11px;
631
- color: #888;
632
- text-align: center;
633
- margin-top: 8px;
634
- font-style: italic;
635
- }
636
-
637
- /* Production Queue */
638
- #production-queue {
639
- background: rgba(0,0,0,0.3);
640
- padding: 10px;
641
- border-radius: 8px;
642
- min-height: 120px;
643
- }
644
-
645
- .empty-queue {
646
- color: #888;
647
- text-align: center;
648
- padding: 20px 0;
649
- }
650
-
651
- .queue-item {
652
- background: rgba(243, 156, 18, 0.2);
653
- padding: 10px;
654
- margin: 5px 0;
655
- border-radius: 5px;
656
- border-left: 3px solid var(--warning-color);
657
- display: flex;
658
- justify-content: space-between;
659
- align-items: center;
660
- }
661
-
662
- .queue-progress {
663
  width: 100%;
664
- height: 6px;
665
- background: rgba(0,0,0,0.5);
666
- border-radius: 3px;
667
- overflow: hidden;
668
- margin-top: 5px;
669
- }
670
-
671
- .queue-progress-bar {
672
  height: 100%;
673
- background: linear-gradient(90deg, var(--success-color), var(--warning-color));
674
- transition: width 0.3s ease;
675
  }
676
 
677
- /* Action Buttons */
678
- .action-buttons {
679
- display: flex;
680
- flex-direction: column;
681
- gap: 8px;
682
  }
683
 
684
- .action-btn {
685
- background: linear-gradient(135deg, var(--primary-color), var(--hover-color));
686
- border: none;
687
- color: white;
688
- padding: 12px;
689
- border-radius: 8px;
690
- cursor: pointer;
691
- font-weight: bold;
692
- transition: all 0.3s ease;
693
  }
694
 
695
- .action-btn:hover {
696
- transform: translateX(5px);
697
- box-shadow: 0 5px 15px rgba(74, 144, 226, 0.4);
698
  }
699
 
700
- /* Game Stats */
701
  #game-stats {
702
- background: rgba(0,0,0,0.3);
703
- padding: 10px;
704
- border-radius: 8px;
 
705
  }
706
 
707
  .stat-row {
708
  display: flex;
709
  justify-content: space-between;
710
- padding: 8px 0;
711
- border-bottom: 1px solid rgba(255,255,255,0.1);
 
712
  }
713
 
714
  .stat-row:last-child {
715
  border-bottom: none;
716
  }
717
 
 
 
 
 
 
 
 
718
  .stat-row span:last-child {
719
- color: var(--primary-color);
720
- font-weight: bold;
721
  }
722
 
723
- /* Notifications */
724
  #notifications {
725
  position: fixed;
726
  top: 80px;
727
- right: 20px;
728
- z-index: 1000;
729
  display: flex;
730
  flex-direction: column;
731
- gap: 10px;
732
  pointer-events: none;
733
  }
734
 
735
  .notification {
736
- background: rgba(0, 0, 0, 0.9);
737
- border: 2px solid var(--primary-color);
738
- padding: 15px 20px;
739
- border-radius: 8px;
740
- box-shadow: 0 5px 20px rgba(0,0,0,0.5);
 
741
  animation: slideIn 0.3s ease, fadeOut 0.3s ease 2.7s;
742
  pointer-events: all;
 
 
 
 
 
 
 
743
  }
744
 
745
- .notification.success { border-color: var(--success-color); }
746
- .notification.warning { border-color: var(--warning-color); }
747
- .notification.error { border-color: var(--secondary-color); }
 
 
 
 
 
 
 
 
 
748
 
749
  @keyframes slideIn {
750
  from {
751
- transform: translateX(400px);
752
  opacity: 0;
753
  }
754
  to {
@@ -760,101 +1050,30 @@ body {
760
  @keyframes fadeOut {
761
  to {
762
  opacity: 0;
763
- transform: translateX(400px);
764
  }
765
  }
766
 
767
- /* Loading Screen */
768
- #loading-screen {
769
- position: fixed;
770
- top: 0;
771
- left: 0;
772
- width: 100%;
773
- height: 100%;
774
- background: var(--dark-bg);
775
- display: flex;
776
- justify-content: center;
777
- align-items: center;
778
- z-index: 9999;
779
- transition: opacity 0.5s ease;
780
- }
781
-
782
- #loading-screen.hidden {
783
- opacity: 0;
784
- pointer-events: none;
785
- }
786
-
787
- .loading-content {
788
- text-align: center;
789
- }
790
-
791
- .loading-content h2 {
792
- font-size: 32px;
793
- margin-bottom: 20px;
794
- background: linear-gradient(45deg, var(--primary-color), var(--success-color));
795
- -webkit-background-clip: text;
796
- -webkit-text-fill-color: transparent;
797
- background-clip: text;
798
- }
799
-
800
- .loading-bar {
801
- width: 300px;
802
- height: 10px;
803
- background: rgba(0,0,0,0.5);
804
- border-radius: 5px;
805
- overflow: hidden;
806
- margin: 20px auto;
807
- }
808
-
809
- .loading-progress {
810
- height: 100%;
811
- background: linear-gradient(90deg, var(--primary-color), var(--success-color));
812
- animation: loading 1.5s infinite;
813
- width: 50%;
814
- }
815
-
816
- @keyframes loading {
817
- 0% { transform: translateX(-100%); }
818
- 100% { transform: translateX(300%); }
819
- }
820
-
821
- /* Scrollbar Styling */
822
- ::-webkit-scrollbar {
823
- width: 8px;
824
- }
825
-
826
- ::-webkit-scrollbar-track {
827
- background: var(--dark-bg);
828
- }
829
-
830
- ::-webkit-scrollbar-thumb {
831
- background: var(--border-color);
832
- border-radius: 4px;
833
- }
834
-
835
- ::-webkit-scrollbar-thumb:hover {
836
- background: var(--primary-color);
837
- }
838
-
839
- /* Hint System */
840
  .hint-container {
841
  position: fixed;
842
  left: 50%;
843
  transform: translateX(-50%);
844
- background: rgba(74, 144, 226, 0.95);
845
  color: white;
846
- padding: 16px 32px;
847
- border-radius: 8px;
848
- font-size: 16px;
849
  font-weight: 500;
850
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
851
- z-index: 10000;
852
  max-width: 600px;
853
  text-align: center;
854
  opacity: 0;
855
- transition: opacity 0.5s ease, transform 0.5s ease;
856
  pointer-events: none;
857
- border: 2px solid rgba(255, 255, 255, 0.3);
 
858
  }
859
 
860
  .hint-container.center {
@@ -882,11 +1101,11 @@ body {
882
  }
883
 
884
  .hint-container.top.visible {
885
- transform: translateX(-50%) translateY(10px);
886
  }
887
 
888
  .hint-container.bottom.visible {
889
- transform: translateX(-50%) translateY(-10px);
890
  }
891
 
892
  /* Hint glow effect */
@@ -897,51 +1116,149 @@ body {
897
  left: -2px;
898
  right: -2px;
899
  bottom: -2px;
900
- background: linear-gradient(45deg, #4A90E2, #2ECC71, #4A90E2);
901
- border-radius: 8px;
902
  z-index: -1;
903
  opacity: 0;
904
- transition: opacity 0.5s ease;
905
  }
906
 
907
  .hint-container.visible::before {
908
- opacity: 0.5;
909
- animation: hintGlow 2s ease-in-out infinite;
910
  }
911
 
912
  @keyframes hintGlow {
913
- 0%, 100% { opacity: 0.3; }
914
- 50% { opacity: 0.7; }
915
  }
916
 
917
  /* Responsive Design */
918
  @media (max-width: 1400px) {
919
  #left-sidebar, #right-sidebar {
920
- width: 220px;
921
  }
922
 
923
  .build-buttons, .unit-buttons {
924
  grid-template-columns: 1fr;
925
  }
 
 
 
 
 
926
  }
927
 
928
  @media (max-width: 1024px) {
929
  #left-sidebar, #right-sidebar {
930
- width: 180px;
931
  }
932
 
933
  .sidebar-section {
934
- padding: 10px;
935
  }
936
 
937
  #minimap-container {
938
  width: 180px;
939
  height: 135px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
940
  }
941
 
942
  .hint-container {
943
- font-size: 14px;
944
- padding: 12px 24px;
945
  max-width: 400px;
946
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
947
  }
 
2
  #production-source {
3
  display: flex;
4
  align-items: center;
5
+ gap: var(--space-sm);
6
+ margin: var(--space-sm) 0 var(--space-md);
7
+ padding: var(--space-sm);
8
+ background: var(--bg-tertiary);
9
+ border-radius: var(--radius-md);
10
+ border: 1px solid var(--border-light);
11
+ font-size: 0.875rem;
12
+ }
13
+
14
+ #production-source .label {
15
+ opacity: 0.8;
16
+ color: var(--text-secondary);
17
+ }
18
+
19
+ #production-source-name {
20
+ font-weight: 600;
21
+ color: var(--primary);
22
+ }
23
+
24
+ #production-source-clear {
25
+ border: none;
26
+ background: transparent;
27
+ cursor: pointer;
28
+ padding: var(--space-xs);
29
+ border-radius: var(--radius-sm);
30
+ transition: all var(--transition-fast);
31
+ color: var(--text-muted);
32
+ }
33
+
34
+ #production-source-clear:hover {
35
+ background: var(--bg-hover);
36
+ color: var(--danger);
37
+ }
38
+
39
+ /* Modern Loading Screen */
40
+ #loading-screen {
41
+ position: fixed;
42
+ top: 0;
43
+ left: 0;
44
+ width: 100%;
45
+ height: 100%;
46
+ background: var(--bg-primary);
47
+ display: flex;
48
+ justify-content: center;
49
+ align-items: center;
50
+ z-index: var(--z-modal);
51
+ transition: opacity var(--transition-slow);
52
+ }
53
+
54
+ #loading-screen.hidden {
55
+ opacity: 0;
56
+ pointer-events: none;
57
+ }
58
+
59
+ .loading-content {
60
+ text-align: center;
61
+ max-width: 400px;
62
+ padding: var(--space-2xl);
63
+ }
64
+
65
+ .loading-content h2 {
66
+ font-size: 2rem;
67
+ margin-bottom: var(--space-xl);
68
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
69
+ -webkit-background-clip: text;
70
+ -webkit-text-fill-color: transparent;
71
+ background-clip: text;
72
+ font-weight: 700;
73
+ letter-spacing: -0.025em;
74
+ }
75
+
76
+ .loading-bar {
77
+ width: 100%;
78
+ height: 8px;
79
+ background: var(--bg-tertiary);
80
+ border-radius: var(--radius-md);
81
+ overflow: hidden;
82
+ margin: var(--space-xl) auto;
83
+ position: relative;
84
+ }
85
+
86
+ .loading-progress {
87
+ height: 100%;
88
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
89
+ animation: loading 2s ease-in-out infinite;
90
+ width: 60%;
91
+ border-radius: var(--radius-md);
92
+ position: relative;
93
+ }
94
+
95
+ .loading-progress::after {
96
+ content: '';
97
+ position: absolute;
98
+ top: 0;
99
+ left: 0;
100
+ right: 0;
101
+ bottom: 0;
102
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
103
+ animation: shimmer 1.5s infinite;
104
+ }
105
+
106
+ @keyframes loading {
107
+ 0% { transform: translateX(-100%); }
108
+ 100% { transform: translateX(200%); }
109
+ }
110
+
111
+ .loading-content p {
112
+ color: var(--text-secondary);
113
+ margin-top: var(--space-md);
114
+ font-size: 0.9rem;
115
  }
116
 
117
  /* Game Over Overlay */
118
  #game-over-overlay {
119
  position: fixed;
120
  inset: 0;
121
+ background: rgba(15, 23, 42, 0.9);
122
  display: flex;
123
  align-items: center;
124
  justify-content: center;
125
+ z-index: var(--z-modal);
126
+ backdrop-filter: blur(10px);
127
+ transition: opacity var(--transition-slow);
128
+ }
129
+
130
+ #game-over-overlay.hidden {
131
+ display: none;
132
  }
133
+
134
  .game-over-content {
135
+ background: var(--bg-secondary);
136
+ color: var(--text-primary);
137
+ padding: var(--space-2xl);
138
+ border-radius: var(--radius-xl);
139
+ box-shadow: var(--shadow-xl);
140
+ min-width: 400px;
141
  text-align: center;
142
+ border: 1px solid var(--border-light);
143
+ animation: gameOverSlideIn 0.5s ease;
144
  }
145
+
146
+ @keyframes gameOverSlideIn {
147
+ from {
148
+ transform: translateY(-50px) scale(0.9);
149
+ opacity: 0;
150
+ }
151
+ to {
152
+ transform: translateY(0) scale(1);
153
+ opacity: 1;
154
+ }
155
+ }
156
+
157
+ .game-over-content h2 {
158
+ margin: 0 0 var(--space-lg);
159
+ font-size: 1.5rem;
160
+ font-weight: 700;
161
+ color: var(--primary);
162
+ }
163
+
164
+ .game-over-actions {
165
+ display: flex;
166
+ gap: var(--space-md);
167
+ justify-content: center;
168
+ margin-top: var(--space-lg);
169
+ }
170
+
171
  .game-over-actions button {
172
+ background: linear-gradient(135deg, var(--primary), var(--primary-dark));
173
+ color: var(--text-primary);
174
  border: none;
175
+ border-radius: var(--radius-lg);
176
+ padding: var(--space-md) var(--space-xl);
177
  cursor: pointer;
178
+ font-weight: 600;
179
+ transition: all var(--transition-fast);
180
+ font-size: 1rem;
181
  }
182
+
183
+ .game-over-actions button:hover {
184
+ background: linear-gradient(135deg, var(--primary-light), var(--primary));
185
+ transform: translateY(-2px);
186
+ box-shadow: var(--shadow-lg);
 
 
 
187
  }
188
+
189
+ .game-over-actions button:active {
190
+ transform: translateY(0);
 
 
 
 
 
 
 
 
191
  }
192
 
193
+ /* Modern RTS Game Styles */
194
+ :root {
195
+ /* Modern Color Palette */
196
+ --primary: #3B82F6;
197
+ --primary-dark: #2563EB;
198
+ --primary-light: #60A5FA;
199
+ --secondary: #10B981;
200
+ --secondary-dark: #059669;
201
+ --accent: #F59E0B;
202
+ --accent-dark: #D97706;
203
+ --danger: #EF4444;
204
+ --danger-dark: #DC2626;
205
+ --warning: #F59E0B;
206
+ --success: #10B981;
207
+ --info: #06B6D4;
208
+
209
+ /* Dark Theme Colors */
210
+ --bg-primary: #0F172A;
211
+ --bg-secondary: #1E293B;
212
+ --bg-tertiary: #334155;
213
+ --bg-card: #1E293B;
214
+ --bg-hover: #334155;
215
+ --bg-active: #475569;
216
+
217
+ /* Text Colors */
218
+ --text-primary: #F8FAFC;
219
+ --text-secondary: #CBD5E1;
220
+ --text-muted: #94A3B8;
221
+ --text-inverse: #0F172A;
222
+
223
+ /* Border Colors */
224
+ --border-light: #334155;
225
+ --border-medium: #475569;
226
+ --border-dark: #64748B;
227
+
228
+ /* Spacing Scale */
229
+ --space-xs: 0.25rem;
230
+ --space-sm: 0.5rem;
231
+ --space-md: 1rem;
232
+ --space-lg: 1.5rem;
233
+ --space-xl: 2rem;
234
+ --space-2xl: 3rem;
235
+
236
+ /* Border Radius */
237
+ --radius-sm: 0.375rem;
238
+ --radius-md: 0.5rem;
239
+ --radius-lg: 0.75rem;
240
+ --radius-xl: 1rem;
241
+
242
+ /* Shadows */
243
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
244
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
245
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
246
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
247
+ --shadow-glow: 0 0 20px rgba(0, 130, 246, 0.5);
248
+
249
+ /* Transitions */
250
+ --transition-fast: 150ms ease;
251
+ --transition-normal: 250ms ease;
252
+ --transition-slow: 350ms ease;
253
+
254
+ /* Z-Index Scale */
255
+ --z-dropdown: 1000;
256
+ --z-sticky: 1020;
257
+ --z-fixed: 1030;
258
+ --z-modal-backdrop: 1040;
259
+ --z-modal: 1050;
260
+ --z-popover: 1060;
261
+ --z-tooltip: 1070;
262
+ --z-toast: 1080;
263
+ }
264
+
265
+ /* Legacy Variables (for compatibility) */
266
+ :root {
267
+ --primary-color: var(--primary);
268
+ --secondary-color: var(--secondary);
269
+ --success-color: var(--success);
270
+ --warning-color: var(--warning);
271
+ --dark-bg: var(--bg-primary);
272
+ --dark-panel: var(--bg-secondary);
273
+ --light-text: var(--text-primary);
274
+ --border-color: var(--border-light);
275
+ --hover-color: var(--bg-hover);
276
+ }
277
+
278
+ /* Modern Base Styles */
279
  * {
280
  margin: 0;
281
  padding: 0;
 
283
  }
284
 
285
  body {
286
+ font-family: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
287
+ background: var(--bg-primary);
288
+ color: var(--text-primary);
289
  overflow: hidden;
290
  user-select: none;
291
+ line-height: 1.6;
292
+ font-size: 14px;
293
+ -webkit-font-smoothing: antialiased;
294
+ -moz-osx-font-smoothing: grayscale;
295
  }
296
 
297
  #app {
 
301
  width: 100vw;
302
  }
303
 
304
+ /* Modern Scrollbar */
305
+ ::-webkit-scrollbar {
306
+ width: 8px;
307
+ height: 8px;
308
+ }
309
+
310
+ ::-webkit-scrollbar-track {
311
+ background: var(--bg-secondary);
312
+ }
313
+
314
+ ::-webkit-scrollbar-thumb {
315
+ background: var(--border-medium);
316
+ border-radius: var(--radius-md);
317
+ transition: background var(--transition-fast);
318
+ }
319
+
320
+ ::-webkit-scrollbar-thumb:hover {
321
+ background: var(--border-dark);
322
+ }
323
+
324
+ /* Focus Styles */
325
+ *:focus {
326
+ outline: 2px solid var(--primary);
327
+ outline-offset: 2px;
328
+ }
329
+
330
+ *:focus:not(:focus-visible) {
331
+ outline: none;
332
+ }
333
+
334
+ /* Selection Styles */
335
+ ::selection {
336
+ background: var(--primary);
337
+ color: var(--text-inverse);
338
+ }
339
+
340
  /* Top Bar */
341
  #topbar {
342
+ background: var(--bg-secondary);
343
+ padding: var(--space-md) var(--space-lg);
344
  display: flex;
345
  justify-content: space-between;
346
  align-items: center;
347
+ border-bottom: 1px solid var(--border-light);
348
+ box-shadow: var(--shadow-md);
349
+ z-index: var(--z-sticky);
350
+ backdrop-filter: blur(10px);
351
+ background: rgba(30, 41, 59, 0.8);
352
  }
353
 
354
  .topbar-left {
355
  display: flex;
356
  align-items: center;
357
+ gap: var(--space-xl);
358
  }
359
 
360
  .topbar-left h1 {
361
+ font-size: 1.5rem;
362
+ font-weight: 700;
363
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
364
  -webkit-background-clip: text;
365
  -webkit-text-fill-color: transparent;
366
  background-clip: text;
367
+ letter-spacing: -0.025em;
368
  }
369
 
370
  #game-info {
371
  display: flex;
372
+ gap: var(--space-md);
373
  }
374
 
375
  .info-badge {
376
+ background: var(--bg-tertiary);
377
+ padding: var(--space-sm) var(--space-md);
378
+ border-radius: var(--radius-lg);
379
+ font-size: 0.875rem;
380
+ border: 1px solid var(--border-light);
381
+ font-weight: 500;
382
+ transition: all var(--transition-fast);
383
+ }
384
+
385
+ .info-badge:hover {
386
+ background: var(--bg-hover);
387
+ border-color: var(--primary);
388
+ transform: translateY(-1px);
389
  }
390
 
391
  .topbar-right {
392
  display: flex;
393
  align-items: center;
394
+ gap: var(--space-xl);
395
  }
396
 
397
  .resource-display {
398
  display: flex;
399
+ gap: var(--space-md);
400
  }
401
 
402
  .resource-item {
403
  display: flex;
404
  align-items: center;
405
+ gap: var(--space-sm);
406
+ background: var(--bg-tertiary);
407
+ padding: var(--space-sm) var(--space-md);
408
+ border-radius: var(--radius-lg);
409
+ font-weight: 600;
410
+ border: 1px solid var(--border-light);
411
+ transition: all var(--transition-fast);
412
+ }
413
+
414
+ .resource-item:hover {
415
+ background: var(--bg-hover);
416
+ border-color: var(--success);
417
+ transform: translateY(-1px);
418
  }
419
 
420
  .resource-icon {
421
+ font-size: 1.25rem;
422
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));
423
  }
424
 
425
+ /* Modern Nuke Indicator */
426
  #nuke-indicator {
427
+ background: var(--bg-tertiary);
428
+ border: 1px solid var(--border-light);
429
+ padding: var(--space-sm) var(--space-md);
430
+ border-radius: var(--radius-lg);
431
  min-width: 180px;
432
+ transition: all var(--transition-normal);
433
+ position: relative;
434
+ overflow: hidden;
435
+ }
436
+
437
+ #nuke-indicator::before {
438
+ content: '';
439
+ position: absolute;
440
+ top: 0;
441
+ left: 0;
442
+ right: 0;
443
+ bottom: 0;
444
+ background: linear-gradient(45deg, transparent, rgba(239, 68, 68, 0.1), transparent);
445
+ transform: translateX(-100%);
446
+ transition: transform 0.6s ease;
447
+ }
448
+
449
+ #nuke-indicator.ready::before {
450
+ transform: translateX(100%);
451
  }
452
 
453
  #nuke-indicator.ready {
454
+ background: var(--bg-tertiary);
455
+ border-color: var(--success);
456
+ animation: nukeReady 2s ease-in-out infinite;
457
+ box-shadow: 0 0 15px rgba(16, 185, 129, 0.3);
458
  }
459
 
460
  @keyframes nukeReady {
461
+ 0%, 100% {
462
+ box-shadow: 0 0 10px rgba(16, 185, 129, 0.3);
463
+ border-color: var(--success);
464
+ }
465
+ 50% {
466
+ box-shadow: 0 0 25px rgba(16, 185, 129, 0.6);
467
+ border-color: var(--secondary);
468
+ }
469
  }
470
 
471
  .nuke-status {
472
+ font-size: 0.75rem;
473
+ font-weight: 600;
474
+ margin-bottom: var(--space-xs);
475
+ color: var(--text-secondary);
476
+ text-transform: uppercase;
477
+ letter-spacing: 0.05em;
478
  }
479
 
480
  #nuke-indicator.ready .nuke-status {
481
+ color: var(--success);
482
  }
483
 
484
  .nuke-charge-container {
485
  width: 100%;
486
  height: 6px;
487
+ background: var(--bg-primary);
488
+ border-radius: var(--radius-md);
489
  overflow: hidden;
490
+ position: relative;
491
  }
492
 
493
  .nuke-charge-bar {
494
  height: 100%;
495
  width: 0%;
496
+ background: linear-gradient(90deg, var(--danger), var(--warning));
497
+ transition: width var(--transition-normal);
498
+ border-radius: var(--radius-md);
499
+ position: relative;
500
+ overflow: hidden;
501
+ }
502
+
503
+ .nuke-charge-bar::after {
504
+ content: '';
505
+ position: absolute;
506
+ top: 0;
507
+ left: 0;
508
+ right: 0;
509
+ bottom: 0;
510
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
511
+ transform: translateX(-100%);
512
+ animation: shimmer 2s infinite;
513
+ }
514
+
515
+ @keyframes shimmer {
516
+ 0% { transform: translateX(-100%); }
517
+ 100% { transform: translateX(100%); }
518
  }
519
 
520
  #nuke-indicator.ready .nuke-charge-bar {
521
+ background: linear-gradient(90deg, var(--success), var(--secondary));
522
  }
523
 
524
+ /* Modern Sound Control */
525
  .sound-control {
526
  display: flex;
527
  align-items: center;
528
  }
529
 
530
  .sound-btn {
531
+ background: var(--bg-tertiary);
532
+ border: 1px solid var(--border-light);
533
+ padding: var(--space-sm) var(--space-md);
534
+ border-radius: var(--radius-lg);
535
  cursor: pointer;
536
+ transition: all var(--transition-fast);
537
+ color: var(--text-primary);
538
+ font-size: 1.25rem;
539
+ display: flex;
540
+ align-items: center;
541
+ justify-content: center;
542
+ min-width: 44px;
543
+ min-height: 44px;
544
+ position: relative;
545
+ overflow: hidden;
546
+ }
547
+
548
+ .sound-btn::before {
549
+ content: '';
550
+ position: absolute;
551
+ top: 50%;
552
+ left: 50%;
553
+ width: 0;
554
+ height: 0;
555
+ background: rgba(59, 130, 246, 0.2);
556
+ border-radius: 50%;
557
+ transform: translate(-50%, -50%);
558
+ transition: width var(--transition-normal), height var(--transition-normal);
559
  }
560
 
561
  .sound-btn:hover {
562
+ background: var(--bg-hover);
563
+ border-color: var(--primary);
564
  transform: scale(1.05);
565
+ box-shadow: var(--shadow-md);
566
+ }
567
+
568
+ .sound-btn:hover::before {
569
+ width: 100%;
570
+ height: 100%;
571
  }
572
 
573
  .sound-btn:active {
 
575
  }
576
 
577
  .sound-btn.muted {
578
+ opacity: 0.6;
579
+ border-color: var(--danger);
580
+ color: var(--text-muted);
581
  }
582
 
583
+ .sound-btn.muted::after {
584
  content: '🔇';
585
  position: absolute;
586
+ top: 50%;
587
+ left: 50%;
588
+ transform: translate(-50%, -50%);
589
+ font-size: 1rem;
590
  }
591
 
592
  .sound-icon {
593
  display: inline-block;
594
  position: relative;
595
+ z-index: 1;
596
  }
597
 
598
+ /* Modern Language Selector */
599
  .language-selector {
600
  display: flex;
601
  align-items: center;
602
+ gap: var(--space-sm);
603
+ background: var(--bg-tertiary);
604
+ padding: var(--space-sm) var(--space-md);
605
+ border-radius: var(--radius-lg);
606
+ border: 1px solid var(--border-light);
607
+ transition: all var(--transition-fast);
608
+ }
609
+
610
+ .language-selector:hover {
611
+ border-color: var(--primary);
612
+ background: var(--bg-hover);
613
  }
614
 
615
  .language-selector label {
616
+ font-size: 1.125rem;
617
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));
618
  }
619
 
620
  #language-select {
621
+ background: var(--bg-primary);
622
+ color: var(--text-primary);
623
+ border: 1px solid var(--border-light);
624
+ padding: var(--space-xs) var(--space-sm);
625
+ border-radius: var(--radius-md);
626
+ font-size: 0.875rem;
627
  cursor: pointer;
628
  outline: none;
629
+ transition: all var(--transition-fast);
630
+ min-width: 100px;
631
  }
632
 
633
  #language-select:hover {
634
+ border-color: var(--primary);
635
  }
636
 
637
  #language-select:focus {
638
+ border-color: var(--primary);
639
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
640
  }
641
 
642
+ #language-select option {
643
+ background: var(--bg-secondary);
644
+ color: var(--text-primary);
645
+ padding: var(--space-xs);
646
  }
647
 
648
+ /* Modern Game Container */
 
 
 
 
 
649
  #game-container {
650
  display: flex;
651
  flex: 1;
652
  overflow: hidden;
653
+ background: var(--bg-primary);
654
  }
655
 
656
+ /* Modern Sidebars */
657
  #left-sidebar, #right-sidebar {
658
+ width: 320px;
659
+ background: var(--bg-secondary);
660
+ border-right: 1px solid var(--border-light);
661
  overflow-y: auto;
662
  overflow-x: hidden;
663
+ transition: all var(--transition-normal);
664
+ position: relative;
665
  }
666
 
667
  #right-sidebar {
668
  border-right: none;
669
+ border-left: 1px solid var(--border-light);
670
  }
671
 
672
  .sidebar-section {
673
+ padding: var(--space-lg);
674
+ border-bottom: 1px solid var(--border-light);
675
+ transition: background var(--transition-fast);
676
+ }
677
+
678
+ .sidebar-section:hover {
679
+ background: var(--bg-tertiary);
680
+ }
681
+
682
+ .sidebar-section:last-child {
683
+ border-bottom: none;
684
  }
685
 
686
  .sidebar-section h3 {
687
+ margin-bottom: var(--space-md);
688
+ color: var(--primary);
689
+ font-size: 1rem;
690
+ font-weight: 600;
691
+ display: flex;
692
+ align-items: center;
693
+ gap: var(--space-sm);
694
+ text-transform: uppercase;
695
+ letter-spacing: 0.05em;
696
+ }
697
+
698
+ /* Modern Intel Panel */
699
+ .intel-section {
700
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(16, 185, 129, 0.1));
701
+ border: 1px solid var(--primary);
702
+ border-radius: var(--radius-lg);
703
+ padding: var(--space-lg);
704
+ position: relative;
705
+ overflow: hidden;
706
+ }
707
+
708
+ .intel-section::before {
709
+ content: '';
710
+ position: absolute;
711
+ top: 0;
712
+ left: 0;
713
+ right: 0;
714
+ height: 2px;
715
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
716
+ animation: intelGlow 3s ease-in-out infinite;
717
+ }
718
+
719
+ @keyframes intelGlow {
720
+ 0%, 100% { opacity: 0.7; }
721
+ 50% { opacity: 1; }
722
+ }
723
+
724
+ #intel-panel {
725
+ background: rgba(15, 23, 42, 0.6);
726
+ padding: var(--space-md);
727
+ border-radius: var(--radius-md);
728
+ border: 1px solid var(--border-light);
729
+ min-height: 100px;
730
+ backdrop-filter: blur(10px);
731
+ }
732
+
733
+ .intel-status {
734
+ font-size: 0.875rem;
735
+ color: var(--warning);
736
+ margin-bottom: var(--space-sm);
737
+ font-style: italic;
738
+ opacity: 0.8;
739
+ }
740
+
741
+ .intel-summary {
742
+ font-size: 0.9rem;
743
+ color: var(--text-primary);
744
+ margin-bottom: var(--space-md);
745
+ line-height: 1.6;
746
+ font-weight: 500;
747
+ }
748
+
749
+ .intel-tips {
750
+ font-size: 0.875rem;
751
+ color: var(--success);
752
+ line-height: 1.5;
753
+ }
754
+
755
+ .intel-tips > div {
756
+ margin-bottom: var(--space-xs);
757
+ padding-left: var(--space-md);
758
+ position: relative;
759
+ }
760
+
761
+ .intel-tips > div::before {
762
+ content: "→";
763
+ position: absolute;
764
+ left: 0;
765
+ color: var(--primary);
766
+ font-weight: bold;
767
+ }
768
+
769
+ #intel-header {
770
+ color: var(--primary);
771
+ font-size: 0.9rem;
772
+ font-weight: 600;
773
+ margin-bottom: var(--space-md);
774
+ display: flex;
775
+ align-items: center;
776
+ gap: var(--space-sm);
777
+ }
778
+
779
+ #intel-header.offline {
780
+ color: var(--text-muted);
781
+ }
782
+
783
+ #intel-header.updating {
784
+ color: var(--warning);
785
+ }
786
+
787
+ #intel-header.active {
788
+ color: var(--success);
789
+ }
790
+
791
+ .intel-source-badge {
792
+ background: var(--bg-tertiary);
793
+ color: var(--text-secondary);
794
+ padding: var(--space-xs) var(--space-sm);
795
+ border-radius: var(--radius-sm);
796
+ font-size: 0.75rem;
797
+ font-weight: 500;
798
+ border: 1px solid var(--border-light);
799
+ text-transform: uppercase;
800
+ letter-spacing: 0.05em;
801
+ }
802
+
803
+ .intel-refresh-btn {
804
+ background: var(--primary);
805
+ color: white;
806
+ border: none;
807
+ padding: var(--space-xs) var(--space-sm);
808
+ border-radius: var(--radius-md);
809
+ cursor: pointer;
810
+ font-size: 0.875rem;
811
+ transition: all var(--transition-fast);
812
  display: flex;
813
  align-items: center;
814
+ justify-content: center;
815
+ min-width: 32px;
816
+ min-height: 32px;
817
+ }
818
+
819
+ .intel-refresh-btn:hover {
820
+ background: var(--primary-dark);
821
+ transform: rotate(180deg);
822
+ }
823
+
824
+ .intel-refresh-btn:active {
825
+ transform: scale(0.95) rotate(180deg);
826
  }
827
 
828
  /* Intel/AI Analysis Panel */
 
914
  transform: scale(0.95) rotate(180deg);
915
  }
916
 
917
+ /* Modern Action Buttons */
918
+ .action-buttons {
 
 
 
 
 
 
 
 
 
 
 
 
 
919
  display: flex;
920
  flex-direction: column;
921
+ gap: var(--space-sm);
 
 
 
 
 
 
 
 
922
  }
923
 
924
+ .action-btn {
925
+ background: linear-gradient(135deg, var(--primary), var(--primary-dark));
926
+ border: 1px solid var(--primary);
927
+ color: white;
928
+ padding: var(--space-md);
929
+ border-radius: var(--radius-lg);
930
+ cursor: pointer;
931
+ font-weight: 600;
932
+ transition: all var(--transition-fast);
 
 
 
 
 
 
 
 
 
 
 
 
933
  position: relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
934
  overflow: hidden;
935
+ text-align: left;
936
+ font-size: 0.875rem;
 
 
 
 
 
 
 
 
 
 
 
 
937
  }
938
 
939
+ .action-btn::before {
940
+ content: '';
941
  position: absolute;
942
+ top: 0;
943
+ left: -100%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
944
  width: 100%;
 
 
 
 
 
 
 
 
945
  height: 100%;
946
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
947
+ transition: left var(--transition-slow);
948
  }
949
 
950
+ .action-btn:hover {
951
+ transform: translateX(4px);
952
+ box-shadow: var(--shadow-lg);
953
+ border-color: var(--primary-light);
 
954
  }
955
 
956
+ .action-btn:hover::before {
957
+ left: 100%;
 
 
 
 
 
 
 
958
  }
959
 
960
+ .action-btn:active {
961
+ transform: translateX(2px);
 
962
  }
963
 
964
+ /* Modern Game Stats */
965
  #game-stats {
966
+ background: var(--bg-tertiary);
967
+ padding: var(--space-md);
968
+ border-radius: var(--radius-lg);
969
+ border: 1px solid var(--border-light);
970
  }
971
 
972
  .stat-row {
973
  display: flex;
974
  justify-content: space-between;
975
+ padding: var(--space-sm) 0;
976
+ border-bottom: 1px solid var(--border-light);
977
+ transition: all var(--transition-fast);
978
  }
979
 
980
  .stat-row:last-child {
981
  border-bottom: none;
982
  }
983
 
984
+ .stat-row:hover {
985
+ background: var(--bg-hover);
986
+ margin: 0 calc(-1 * var(--space-md));
987
+ padding: var(--space-sm) var(--space-md);
988
+ border-radius: var(--radius-sm);
989
+ }
990
+
991
  .stat-row span:last-child {
992
+ color: var(--primary);
993
+ font-weight: 600;
994
  }
995
 
996
+ /* Modern Notifications */
997
  #notifications {
998
  position: fixed;
999
  top: 80px;
1000
+ right: var(--space-lg);
1001
+ z-index: var(--z-toast);
1002
  display: flex;
1003
  flex-direction: column;
1004
+ gap: var(--space-sm);
1005
  pointer-events: none;
1006
  }
1007
 
1008
  .notification {
1009
+ background: rgba(15, 23, 42, 0.95);
1010
+ border: 1px solid var(--border-light);
1011
+ padding: var(--space-md) var(--space-lg);
1012
+ border-radius: var(--radius-lg);
1013
+ box-shadow: var(--shadow-xl);
1014
+ backdrop-filter: blur(10px);
1015
  animation: slideIn 0.3s ease, fadeOut 0.3s ease 2.7s;
1016
  pointer-events: all;
1017
+ transition: all var(--transition-fast);
1018
+ max-width: 400px;
1019
+ }
1020
+
1021
+ .notification:hover {
1022
+ transform: translateX(-4px);
1023
+ box-shadow: var(--shadow-glow);
1024
  }
1025
 
1026
+ .notification.success {
1027
+ border-color: var(--success);
1028
+ background: rgba(16, 185, 129, 0.1);
1029
+ }
1030
+ .notification.warning {
1031
+ border-color: var(--warning);
1032
+ background: rgba(245, 158, 11, 0.1);
1033
+ }
1034
+ .notification.error {
1035
+ border-color: var(--danger);
1036
+ background: rgba(239, 68, 68, 0.1);
1037
+ }
1038
 
1039
  @keyframes slideIn {
1040
  from {
1041
+ transform: translateX(100%);
1042
  opacity: 0;
1043
  }
1044
  to {
 
1050
  @keyframes fadeOut {
1051
  to {
1052
  opacity: 0;
1053
+ transform: translateX(100%);
1054
  }
1055
  }
1056
 
1057
+ /* Modern Hint System */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1058
  .hint-container {
1059
  position: fixed;
1060
  left: 50%;
1061
  transform: translateX(-50%);
1062
+ background: linear-gradient(135deg, var(--primary), var(--primary-dark));
1063
  color: white;
1064
+ padding: var(--space-md) var(--space-xl);
1065
+ border-radius: var(--radius-lg);
1066
+ font-size: 1rem;
1067
  font-weight: 500;
1068
+ box-shadow: var(--shadow-xl);
1069
+ z-index: var(--z-tooltip);
1070
  max-width: 600px;
1071
  text-align: center;
1072
  opacity: 0;
1073
+ transition: all var(--transition-normal);
1074
  pointer-events: none;
1075
+ border: 1px solid rgba(255, 255, 255, 0.2);
1076
+ backdrop-filter: blur(10px);
1077
  }
1078
 
1079
  .hint-container.center {
 
1101
  }
1102
 
1103
  .hint-container.top.visible {
1104
+ transform: translateX(-50%) translateY(8px);
1105
  }
1106
 
1107
  .hint-container.bottom.visible {
1108
+ transform: translateX(-50%) translateY(-8px);
1109
  }
1110
 
1111
  /* Hint glow effect */
 
1116
  left: -2px;
1117
  right: -2px;
1118
  bottom: -2px;
1119
+ background: linear-gradient(45deg, var(--primary), var(--secondary), var(--primary));
1120
+ border-radius: var(--radius-lg);
1121
  z-index: -1;
1122
  opacity: 0;
1123
+ transition: opacity var(--transition-normal);
1124
  }
1125
 
1126
  .hint-container.visible::before {
1127
+ opacity: 0.6;
1128
+ animation: hintGlow 3s ease-in-out infinite;
1129
  }
1130
 
1131
  @keyframes hintGlow {
1132
+ 0%, 100% { opacity: 0.4; }
1133
+ 50% { opacity: 0.8; }
1134
  }
1135
 
1136
  /* Responsive Design */
1137
  @media (max-width: 1400px) {
1138
  #left-sidebar, #right-sidebar {
1139
+ width: 280px;
1140
  }
1141
 
1142
  .build-buttons, .unit-buttons {
1143
  grid-template-columns: 1fr;
1144
  }
1145
+
1146
+ #minimap-container {
1147
+ width: 200px;
1148
+ height: 150px;
1149
+ }
1150
  }
1151
 
1152
  @media (max-width: 1024px) {
1153
  #left-sidebar, #right-sidebar {
1154
+ width: 240px;
1155
  }
1156
 
1157
  .sidebar-section {
1158
+ padding: var(--space-md);
1159
  }
1160
 
1161
  #minimap-container {
1162
  width: 180px;
1163
  height: 135px;
1164
+ bottom: var(--space-md);
1165
+ right: var(--space-md);
1166
+ }
1167
+
1168
+ #camera-controls {
1169
+ top: var(--space-md);
1170
+ right: var(--space-md);
1171
+ }
1172
+
1173
+ .camera-btn {
1174
+ width: 40px;
1175
+ height: 40px;
1176
+ font-size: 1rem;
1177
+ }
1178
+
1179
+ .hint-container {
1180
+ font-size: 0.875rem;
1181
+ padding: var(--space-md) var(--space-lg);
1182
+ max-width: 500px;
1183
+ }
1184
+
1185
+ .game-over-content {
1186
+ min-width: 320px;
1187
+ padding: var(--space-xl);
1188
+ }
1189
+ }
1190
+
1191
+ @media (max-width: 768px) {
1192
+ #topbar {
1193
+ padding: var(--space-sm) var(--space-md);
1194
+ flex-wrap: wrap;
1195
+ gap: var(--space-sm);
1196
+ }
1197
+
1198
+ .topbar-left h1 {
1199
+ font-size: 1.25rem;
1200
+ }
1201
+
1202
+ .resource-display {
1203
+ gap: var(--space-sm);
1204
+ }
1205
+
1206
+ .resource-item {
1207
+ padding: var(--space-xs) var(--space-sm);
1208
+ font-size: 0.875rem;
1209
+ }
1210
+
1211
+ #left-sidebar, #right-sidebar {
1212
+ width: 200px;
1213
+ }
1214
+
1215
+ .build-buttons, .unit-buttons {
1216
+ grid-template-columns: 1fr;
1217
+ gap: var(--space-sm);
1218
+ }
1219
+
1220
+ .build-btn, .unit-btn {
1221
+ padding: var(--space-sm);
1222
+ }
1223
+
1224
+ .build-icon, .unit-icon {
1225
+ font-size: 1.5rem;
1226
+ }
1227
+
1228
+ #minimap-container {
1229
+ width: 160px;
1230
+ height: 120px;
1231
  }
1232
 
1233
  .hint-container {
1234
+ font-size: 0.8rem;
1235
+ padding: var(--space-sm) var(--space-md);
1236
  max-width: 400px;
1237
  }
1238
+
1239
+ .game-over-content {
1240
+ min-width: 280px;
1241
+ padding: var(--space-lg);
1242
+ }
1243
+
1244
+ .game-over-content h2 {
1245
+ font-size: 1.25rem;
1246
+ }
1247
+ }
1248
+
1249
+ /* Touch-friendly adjustments for tablets/mobile */
1250
+ @media (hover: none) and (pointer: coarse) {
1251
+ .build-btn, .unit-btn, .action-btn, .camera-btn, .sound-btn {
1252
+ min-height: 44px;
1253
+ min-width: 44px;
1254
+ }
1255
+
1256
+ .control-group {
1257
+ min-height: 48px;
1258
+ }
1259
+
1260
+ #language-select {
1261
+ min-height: 44px;
1262
+ padding: var(--space-sm);
1263
+ }
1264
  }