-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMainWindow.xaml
More file actions
583 lines (541 loc) · 54.2 KB
/
Copy pathMainWindow.xaml
File metadata and controls
583 lines (541 loc) · 54.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
<Window x:Class="HandshakeDVPN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Handshake dVPN" Height="920" Width="1360"
WindowStartupLocation="CenterScreen" ResizeMode="CanResize" MinWidth="1060" MinHeight="760"
Background="{StaticResource Bg0}" FontFamily="{StaticResource Sans}"
Closing="Window_Closing">
<Grid>
<!-- ═══ MAIN APP ═══ -->
<Grid x:Name="AppGrid">
<Grid.RowDefinitions>
<RowDefinition Height="56"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- ─── TOPBAR ─── -->
<Border Grid.Row="0" Background="{StaticResource Bg0}" BorderBrush="{StaticResource Bdr}" BorderThickness="0,0,0,1">
<Grid Margin="20,0">
<!-- Brand: Handshake logo + name -->
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Viewbox Width="20" Height="21" Margin="0,0,8,0">
<Path Fill="Black" Data="M38.848,15.331 L35.927,10.142 L41.586,10.144 C41.737,10.144 41.913,10.245 41.996,10.38 C42.086,10.529 42.545,11.286 43.097,12.196 C43.758,13.286 44.548,14.588 45,15.331 L38.848,15.331 Z M28.382,46.754 C28.245,47 28.067,47 28.01,47 L25.698,47 C24.474,46.999 23.063,46.998 22.223,46.998 L31.214,30.857 C31.363,30.589 31.36,30.262 31.204,29.997 C31.049,29.733 30.767,29.57 30.461,29.57 L15.137,29.59 L12.09,24.314 L34.409,24.314 C34.433,24.314 34.457,24.31 34.457,24.309 C34.508,24.306 34.558,24.301 34.605,24.289 C34.642,24.281 34.678,24.269 34.714,24.256 C34.733,24.248 34.751,24.241 34.77,24.232 C34.937,24.158 35.085,24.035 35.179,23.862 L38.858,17.06 L44.932,17.06 L28.382,46.754 Z M20.725,46.141 C20.53,45.819 20.276,45.401 19.999,44.946 C19.07,43.412 17.879,41.448 17.744,41.232 C17.699,41.16 17.678,40.982 17.773,40.813 C17.988,40.426 22.057,33.096 23.049,31.31 L28.99,31.302 L20.725,46.141 Z M10.593,36.04 L7.639,30.793 L10.616,25.213 L13.602,30.382 C12.674,32.129 11.226,34.854 10.593,36.04 Z M6.629,36.857 C5.126,36.857 3.631,36.856 3.411,36.856 C3.263,36.856 3.085,36.753 3.004,36.62 L2.043,35.036 C1.358,33.906 0.484,32.466 0,31.669 L6.152,31.669 L9.072,36.858 C8.435,36.858 7.533,36.857 6.629,36.857 Z M16.618,0.246 C16.755,0 16.932,0 16.989,0 L22.802,0.001 L13.786,16.142 C13.779,16.155 13.775,16.17 13.768,16.184 C13.755,16.211 13.743,16.238 13.732,16.267 C13.723,16.295 13.715,16.321 13.707,16.349 C13.7,16.375 13.695,16.401 13.69,16.427 C13.685,16.46 13.682,16.491 13.681,16.523 C13.68,16.538 13.677,16.551 13.677,16.566 C13.677,16.577 13.68,16.587 13.68,16.598 C13.681,16.63 13.685,16.661 13.69,16.692 C13.693,16.718 13.697,16.744 13.704,16.77 C13.71,16.797 13.72,16.823 13.729,16.85 C13.738,16.876 13.747,16.903 13.759,16.928 C13.771,16.953 13.784,16.977 13.798,17.001 C13.812,17.024 13.826,17.048 13.842,17.07 C13.858,17.093 13.877,17.114 13.896,17.136 C13.914,17.156 13.933,17.177 13.953,17.196 C13.973,17.215 13.994,17.231 14.015,17.247 C14.04,17.267 14.064,17.284 14.09,17.3 C14.1,17.306 14.107,17.313 14.117,17.319 C14.127,17.325 14.138,17.327 14.149,17.332 C14.193,17.355 14.24,17.374 14.289,17.389 C14.307,17.394 14.323,17.401 14.342,17.405 C14.405,17.42 14.469,17.429 14.536,17.429 L14.921,17.429 L29.866,17.41 C30.261,18.097 30.999,19.39 31.628,20.491 C32.111,21.337 32.51,22.035 32.824,22.584 L10.594,22.584 C10.584,22.584 10.575,22.587 10.566,22.588 C10.264,22.593 9.972,22.753 9.818,23.041 L6.139,29.939 L0.069,29.939 C2.719,25.184 16.441,0.563 16.618,0.246 Z M24.287,0.879 L24.827,1.767 C25.775,3.331 27.114,5.538 27.256,5.768 C27.301,5.84 27.322,6.017 27.226,6.187 L21.95,15.69 L16.011,15.698 L24.287,0.879 Z M34.405,10.954 L37.36,16.204 L34.347,21.772 C33.988,21.145 33.542,20.364 33.124,19.631 C32.297,18.182 31.694,17.127 31.354,16.538 C31.996,15.362 33.694,12.252 34.405,10.954 Z"/>
</Viewbox>
<TextBlock FontSize="15" VerticalAlignment="Center">
<Run Text="Handshake" FontWeight="SemiBold" Foreground="{StaticResource T1}"/>
<Run Text=" dVPN" FontWeight="Normal" Foreground="{StaticResource T3}"/>
</TextBlock>
</StackPanel>
<!-- Right: wallet + settings + logout -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Border Background="{StaticResource Bg2}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="12,6" Margin="0,0,8,0">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="TbAddr" Text="..." FontFamily="{StaticResource Mono}" FontSize="10.5" Foreground="{StaticResource T2}" VerticalAlignment="Center" Margin="0,0,6,0" Cursor="Hand" MouseLeftButtonUp="TbAddr_Click" ToolTip="Click to copy full address"/>
<TextBlock x:Name="TbBal" FontSize="12" FontWeight="SemiBold" Foreground="{StaticResource T1}" VerticalAlignment="Center">
<Run x:Name="TbBalVal" Text="0.00"/><Run Text=" "/><Run Text="P2P" Foreground="{StaticResource T2}"/>
</TextBlock>
</StackPanel>
</Border>
<Button Style="{StaticResource BtnGhost}" FontSize="11" Padding="6,3" Margin="0,0,6,0" ToolTip="Wallet" Click="BtnWallet_Click">
<StackPanel Orientation="Horizontal">
<Viewbox Width="14" Height="14" Margin="0,0,4,0" VerticalAlignment="Center">
<Path Fill="{StaticResource T2}" Data="M21,18V19A2,2 0 0,1 19,21H5C3.89,21 3,20.1 3,19V5A2,2 0 0,1 5,3H19A2,2 0 0,1 21,5V6H12C10.89,6 10,6.9 10,8V16A2,2 0 0,0 12,18M12,16H22V8H12M16,13.5A1.5,1.5 0 0,1 14.5,12A1.5,1.5 0 0,1 16,10.5A1.5,1.5 0 0,1 17.5,12A1.5,1.5 0 0,1 16,13.5Z"/>
</Viewbox>
</StackPanel>
</Button>
<Button x:Name="BtnSettings" Content="⚙" Style="{StaticResource BtnGhost}" FontSize="15" Padding="6,2" Margin="0,0,6,0" ToolTip="Settings" Click="BtnSettings_Click"/>
<Button Style="{StaticResource BtnGhost}" Foreground="{StaticResource Red}" Padding="4,2" ToolTip="Logout" Click="BtnLogout_Click">
<Viewbox Width="14" Height="14">
<Path Fill="{StaticResource Red}" Data="M16,17V14H9V10H16V7L21,12L16,17M14,2A2,2 0 0,1 16,4V6H14V4H5V20H14V18H16V20A2,2 0 0,1 14,22H5A2,2 0 0,1 3,20V4A2,2 0 0,1 5,2H14Z"/>
</Viewbox>
</Button>
</StackPanel>
</Grid>
</Border>
<!-- ─── BODY: Sidebar + Main ─── -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="360"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ═══ SIDEBAR — Node List ═══ -->
<Border Grid.Column="0" Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="0,0,1,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Sidebar header: Nodes | Sessions | Plans tabs -->
<Border Grid.Row="0" BorderBrush="{StaticResource Bdr}" BorderThickness="0,0,0,1" Padding="10,8,10,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal">
<Button x:Name="TabNodes" Content="Nodes" Click="SidebarTab_Click" Tag="nodes" Padding="10,6" Margin="0,0,2,0" Cursor="Hand"
FontSize="11" FontWeight="SemiBold" Foreground="{StaticResource T1}" Background="Transparent" BorderThickness="0,0,0,2" BorderBrush="{StaticResource Acc}">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button x:Name="TabSessions" Content="Sessions" Click="SidebarTab_Click" Tag="sessions" Padding="10,6" Margin="0,0,2,0" Cursor="Hand"
FontSize="11" FontWeight="Medium" Foreground="{StaticResource T2}" Background="Transparent" BorderThickness="0,0,0,2" BorderBrush="Transparent">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button x:Name="TabPlans" Content="Plans" Click="SidebarTab_Click" Tag="plans" Padding="10,6" Margin="0,0,2,0" Cursor="Hand"
FontSize="11" FontWeight="Medium" Foreground="{StaticResource T2}" Background="Transparent" BorderThickness="0,0,0,2" BorderBrush="Transparent">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button x:Name="TabTest" Content="Test" Click="SidebarTab_Click" Tag="test" Padding="10,6" Cursor="Hand"
FontSize="11" FontWeight="Medium" Foreground="{StaticResource T2}" Background="Transparent" BorderThickness="0,0,0,2" BorderBrush="Transparent">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
<TextBlock x:Name="TbOnlineCount" Grid.Column="1" Text="" Visibility="Collapsed"/>
</Grid>
</Border>
<!-- Search -->
<Border Grid.Row="1" Padding="14,10,14,0">
<Border Background="{StaticResource Bg0}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="10,8">
<Grid>
<TextBlock Text="Search country, city, or name..." FontSize="12" Foreground="{StaticResource T3}" VerticalAlignment="Center" Margin="4,0,0,0" IsHitTestVisible="False" x:Name="SearchPlaceholder"/>
<TextBox x:Name="TbSearch" Background="Transparent" BorderThickness="0" Foreground="{StaticResource T1}"
FontSize="12" Padding="0" VerticalAlignment="Center" CaretBrush="{StaticResource T1}"
TextChanged="TbSearch_Changed" GotFocus="TbSearch_Focus" LostFocus="TbSearch_LostFocus"/>
</Grid>
</Border>
</Border>
<!-- Filters -->
<Border Grid.Row="2" Padding="14,8,14,4">
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,4">
<Button x:Name="FAll" Content="All" Style="{StaticResource FilterBtn}" Click="Filter_Click" Tag="" Foreground="{StaticResource Acc}" Margin="0,0,4,0" Padding="10,5"/>
<Button x:Name="FWg" Content="WG" Style="{StaticResource FilterBtn}" Click="Filter_Click" Tag="wireguard" Margin="0,0,4,0" Padding="10,5"/>
<Button x:Name="FV2" Content="V2" Style="{StaticResource FilterBtn}" Click="Filter_Click" Tag="v2ray" Margin="0,0,4,0" Padding="10,5"/>
<Button x:Name="FGb" Content="Per GB" Style="{StaticResource FilterBtn}" Click="Filter_Click" Tag="gb" Margin="0,0,4,0" Padding="10,5" Visibility="Collapsed"/>
<Button x:Name="FHr" Content="Per Hour" Style="{StaticResource FilterBtn}" Click="Filter_Click" Tag="hr" Padding="10,5" Visibility="Collapsed"/>
</StackPanel>
</StackPanel>
</Border>
<!-- Node list (scrollable) -->
<ScrollViewer Grid.Row="3" VerticalScrollBarVisibility="Auto">
<StackPanel x:Name="NodeListPanel" Margin="8,0"/>
</ScrollViewer>
<!-- Footer -->
<Border Grid.Row="4" BorderBrush="{StaticResource Bdr}" BorderThickness="0,1,0,0" Padding="14,10">
<Grid>
<TextBlock x:Name="TbNodeCount" Text="0 nodes" FontFamily="{StaticResource Mono}" FontSize="10.5" Foreground="{StaticResource T3}" VerticalAlignment="Center"/>
<Button x:Name="BtnRefresh" Content="Refresh" Style="{StaticResource BtnGhost}" HorizontalAlignment="Right" Click="BtnRefresh_Click"/>
</Grid>
</Border>
</Grid>
</Border>
<!-- ═══ MAIN AREA ═══ -->
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Background accent glow -->
<Border Grid.RowSpan="2" x:Name="MainBg" Opacity="0.03">
<Border.Background>
<RadialGradientBrush Center="0.5,0.35" RadiusX="0.6" RadiusY="0.6">
<GradientStop Color="#000000" Offset="0"/>
<GradientStop Color="Transparent" Offset="1"/>
</RadialGradientBrush>
</Border.Background>
</Border>
<!-- Center content -->
<StackPanel Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" MaxWidth="460">
<!-- Selected node info card (compact) -->
<Border x:Name="NodeInfoCard" Visibility="Collapsed"
Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1"
CornerRadius="10" Padding="16,12" Margin="0,0,0,10">
<StackPanel>
<!-- Row 1: flag + name/location stacked -->
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Border x:Name="NodeCardFlag" Width="28" Height="19" CornerRadius="3" ClipToBounds="True" VerticalAlignment="Center" Margin="0,0,10,0" Background="{StaticResource Bg3}">
<Image x:Name="NodeCardFlagImg" Width="26" Height="18" Stretch="Uniform"/>
</Border>
<StackPanel VerticalAlignment="Center">
<TextBlock x:Name="NodeCardName" Text="" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource T1}"/>
<TextBlock x:Name="NodeCardLocation" Text="" FontSize="10.5" Foreground="{StaticResource T3}" Margin="0,1,0,0"/>
</StackPanel>
</StackPanel>
<!-- Row 2: protocol badge + peers | payment buttons -->
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- Protocol + peers -->
<Border Grid.Column="0" Background="{StaticResource GreenDim}" CornerRadius="5" Padding="7,4" Margin="0,0,6,0" VerticalAlignment="Center">
<TextBlock x:Name="NodeCardType" Text="" FontFamily="{StaticResource Mono}" FontSize="9.5" FontWeight="SemiBold" Foreground="{StaticResource Green}"/>
</Border>
<TextBlock x:Name="NodeCardPeers" Grid.Column="1" Text="" FontSize="10" Foreground="{StaticResource T3}" VerticalAlignment="Center" Margin="0,0,10,0"/>
<!-- Payment buttons -->
<Border x:Name="PayGbBtn" Grid.Column="3" Background="{StaticResource AccLight}" BorderBrush="{StaticResource Acc}" BorderThickness="1.5" CornerRadius="6" Padding="10,5" Margin="0,0,4,0" Cursor="Hand" MouseLeftButtonUp="PayGb_Click" VerticalAlignment="Center">
<TextBlock VerticalAlignment="Center">
<Run Text="Per GB " FontSize="10.5" FontWeight="SemiBold" Foreground="{StaticResource T1}"/><Run x:Name="PayGbPrice" Text="—" FontFamily="{StaticResource Mono}" FontSize="10" Foreground="{StaticResource T2}"/>
</TextBlock>
</Border>
<Border x:Name="PayHrBtn" Grid.Column="4" Background="{StaticResource Bg2}" BorderBrush="{StaticResource Bdr}" BorderThickness="1.5" CornerRadius="6" Padding="10,5" Cursor="Hand" MouseLeftButtonUp="PayHr_Click" VerticalAlignment="Center">
<TextBlock VerticalAlignment="Center">
<Run Text="Per Hour " FontSize="10.5" FontWeight="SemiBold" Foreground="{StaticResource T1}"/><Run x:Name="PayHrPrice" Text="—" FontFamily="{StaticResource Mono}" FontSize="10" Foreground="{StaticResource T2}"/>
</TextBlock>
</Border>
</Grid>
<!-- Row 3: amount + total cost -->
<Grid Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="AmountLabel" Text="GB:" FontSize="11" Foreground="{StaticResource T2}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBox x:Name="TbAmount" Grid.Column="1" Text="1" Width="48" FontSize="12" FontWeight="SemiBold" FontFamily="{StaticResource Mono}"
Background="{StaticResource Bg2}" Foreground="{StaticResource T1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1"
Padding="8,4" TextAlignment="Center" TextChanged="TbAmount_Changed"/>
<TextBlock x:Name="TotalCost" Grid.Column="3" Text="= 0 P2P" FontFamily="{StaticResource Mono}" FontSize="11.5" FontWeight="SemiBold" Foreground="{StaticResource T1}" VerticalAlignment="Center"/>
</Grid>
<!-- Existing session info (shown if user has active session with this node) -->
<Border x:Name="ExistingSessionBar" Visibility="Collapsed" Background="{StaticResource GreenDim}" CornerRadius="6" Padding="10,6" Margin="0,8,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Width="6" Height="6" Fill="{StaticResource Green}" Margin="0,0,6,0" VerticalAlignment="Center"/>
<TextBlock x:Name="ExistingSessionText" Text="" FontSize="10.5" Foreground="{StaticResource Green}" FontWeight="Medium"/>
</StackPanel>
<TextBlock x:Name="ExistingSessionDetail" Grid.Column="1" Text="" FontSize="10" Foreground="{StaticResource T2}" HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
</Border>
<!-- Connection Orb -->
<Border x:Name="OrbBorder" Width="180" Height="180" CornerRadius="90"
Background="{StaticResource Bg2}" BorderThickness="2" Cursor="Hand"
MouseLeftButtonUp="Orb_Click" HorizontalAlignment="Center">
<Border.BorderBrush>
<SolidColorBrush x:Name="OrbBorderBrush" Color="#E3E5EA"/>
</Border.BorderBrush>
<Grid>
<Ellipse Width="160" Height="160" StrokeThickness="1" HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse.Stroke><SolidColorBrush x:Name="Ring1Brush" Color="#E3E5EA"/></Ellipse.Stroke>
</Ellipse>
<Ellipse Width="140" Height="140" StrokeThickness="1" HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse.Stroke><SolidColorBrush x:Name="Ring2Brush" Color="#E3E5EA"/></Ellipse.Stroke>
</Ellipse>
<!-- HNS logo inside orb -->
<Viewbox x:Name="OrbLogo" Width="60" Height="63" HorizontalAlignment="Center" VerticalAlignment="Center">
<Path x:Name="OrbLogoPath" Fill="#999999" Data="M38.848,15.331 L35.927,10.142 L41.586,10.144 C41.737,10.144 41.913,10.245 41.996,10.38 C42.086,10.529 42.545,11.286 43.097,12.196 C43.758,13.286 44.548,14.588 45,15.331 L38.848,15.331 Z M28.382,46.754 C28.245,47 28.067,47 28.01,47 L25.698,47 C24.474,46.999 23.063,46.998 22.223,46.998 L31.214,30.857 C31.363,30.589 31.36,30.262 31.204,29.997 C31.049,29.733 30.767,29.57 30.461,29.57 L15.137,29.59 L12.09,24.314 L34.409,24.314 C34.433,24.314 34.457,24.31 34.457,24.309 C34.508,24.306 34.558,24.301 34.605,24.289 C34.642,24.281 34.678,24.269 34.714,24.256 C34.733,24.248 34.751,24.241 34.77,24.232 C34.937,24.158 35.085,24.035 35.179,23.862 L38.858,17.06 L44.932,17.06 L28.382,46.754 Z M20.725,46.141 C20.53,45.819 20.276,45.401 19.999,44.946 C19.07,43.412 17.879,41.448 17.744,41.232 C17.699,41.16 17.678,40.982 17.773,40.813 C17.988,40.426 22.057,33.096 23.049,31.31 L28.99,31.302 L20.725,46.141 Z M10.593,36.04 L7.639,30.793 L10.616,25.213 L13.602,30.382 C12.674,32.129 11.226,34.854 10.593,36.04 Z M6.629,36.857 C5.126,36.857 3.631,36.856 3.411,36.856 C3.263,36.856 3.085,36.753 3.004,36.62 L2.043,35.036 C1.358,33.906 0.484,32.466 0,31.669 L6.152,31.669 L9.072,36.858 C8.435,36.858 7.533,36.857 6.629,36.857 Z M16.618,0.246 C16.755,0 16.932,0 16.989,0 L22.802,0.001 L13.786,16.142 C13.779,16.155 13.775,16.17 13.768,16.184 C13.755,16.211 13.743,16.238 13.732,16.267 C13.723,16.295 13.715,16.321 13.707,16.349 C13.7,16.375 13.695,16.401 13.69,16.427 C13.685,16.46 13.682,16.491 13.681,16.523 C13.68,16.538 13.677,16.551 13.677,16.566 C13.677,16.577 13.68,16.587 13.68,16.598 C13.681,16.63 13.685,16.661 13.69,16.692 C13.693,16.718 13.697,16.744 13.704,16.77 C13.71,16.797 13.72,16.823 13.729,16.85 C13.738,16.876 13.747,16.903 13.759,16.928 C13.771,16.953 13.784,16.977 13.798,17.001 C13.812,17.024 13.826,17.048 13.842,17.07 C13.858,17.093 13.877,17.114 13.896,17.136 C13.914,17.156 13.933,17.177 13.953,17.196 C13.973,17.215 13.994,17.231 14.015,17.247 C14.04,17.267 14.064,17.284 14.09,17.3 C14.1,17.306 14.107,17.313 14.117,17.319 C14.127,17.325 14.138,17.327 14.149,17.332 C14.193,17.355 14.24,17.374 14.289,17.389 C14.307,17.394 14.323,17.401 14.342,17.405 C14.405,17.42 14.469,17.429 14.536,17.429 L14.921,17.429 L29.866,17.41 C30.261,18.097 30.999,19.39 31.628,20.491 C32.111,21.337 32.51,22.035 32.824,22.584 L10.594,22.584 C10.584,22.584 10.575,22.587 10.566,22.588 C10.264,22.593 9.972,22.753 9.818,23.041 L6.139,29.939 L0.069,29.939 C2.719,25.184 16.441,0.563 16.618,0.246 Z M24.287,0.879 L24.827,1.767 C25.775,3.331 27.114,5.538 27.256,5.768 C27.301,5.84 27.322,6.017 27.226,6.187 L21.95,15.69 L16.011,15.698 L24.287,0.879 Z M34.405,10.954 L37.36,16.204 L34.347,21.772 C33.988,21.145 33.542,20.364 33.124,19.631 C32.297,18.182 31.694,17.127 31.354,16.538 C31.996,15.362 33.694,12.252 34.405,10.954 Z"/>
</Viewbox>
</Grid>
</Border>
<!-- Status text -->
<TextBlock x:Name="StatusTxt" Text="DISCONNECTED" FontSize="14" FontWeight="SemiBold"
Foreground="{StaticResource T3}" HorizontalAlignment="Center" Margin="0,18,0,4"/>
<TextBlock x:Name="StatusSub" Text="Select a node to connect" FontSize="12"
Foreground="{StaticResource T3}" HorizontalAlignment="Center" Margin="0,0,0,20"/>
<!-- Connect button -->
<Button x:Name="BtnConnect" HorizontalAlignment="Stretch" Click="BtnConnect_Click" Margin="20,0"
Background="{StaticResource Acc}" Foreground="White" Cursor="Hand" Height="42"
FontSize="13" FontWeight="SemiBold" FontFamily="{StaticResource Sans}">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{StaticResource Acc}" BorderThickness="1.5"
CornerRadius="8" Height="{TemplateBinding Height}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
<TextBlock x:Name="BtnConnectText" Text="Connect" FontSize="13" FontWeight="SemiBold"/>
</Button>
<!-- Remaining allocation bar (always present, content changes) -->
<Border x:Name="AllocationBar" Visibility="Collapsed" MinHeight="40" Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="12,8" Margin="2,16,2,0">
<StackPanel>
<Grid>
<TextBlock x:Name="AllocLabel" Text="REMAINING" FontSize="8" FontWeight="Bold" Foreground="{StaticResource T3}"/>
<TextBlock x:Name="AllocValue" Text="" FontFamily="{StaticResource Mono}" FontSize="11" FontWeight="SemiBold" Foreground="{StaticResource T1}" HorizontalAlignment="Right"/>
</Grid>
<Grid Margin="0,6,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="AllocUsedCol" Width="0*"/>
<ColumnDefinition x:Name="AllocRemainCol" Width="1*"/>
</Grid.ColumnDefinitions>
<Border Grid.ColumnSpan="2" Height="5" Background="{StaticResource Bg3}" CornerRadius="2.5"/>
<Border Grid.Column="0" Height="5" Background="{StaticResource Acc}" CornerRadius="2.5"/>
</Grid>
</StackPanel>
</Border>
<!-- Stats row -->
<UniformGrid Columns="4" Margin="0,8,0,0">
<Border Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="10,8" Margin="2">
<StackPanel>
<TextBlock Text="IP ADDRESS" FontSize="8" FontWeight="Bold" Foreground="{StaticResource T3}"/>
<TextBlock x:Name="StatIp" Text="—" FontFamily="{StaticResource Mono}" FontSize="11" Foreground="{StaticResource T1}" Margin="0,4,0,0"/>
</StackPanel>
</Border>
<Border Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="10,8" Margin="2">
<StackPanel>
<TextBlock Text="UPTIME" FontSize="8" FontWeight="Bold" Foreground="{StaticResource T3}"/>
<TextBlock x:Name="StatUptime" Text="—" FontFamily="{StaticResource Mono}" FontSize="11" Foreground="{StaticResource Acc}" Margin="0,4,0,0"/>
</StackPanel>
</Border>
<Border Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="10,8" Margin="2">
<StackPanel>
<TextBlock Text="PROTOCOL" FontSize="8" FontWeight="Bold" Foreground="{StaticResource T3}"/>
<TextBlock x:Name="StatProto" Text="—" FontFamily="{StaticResource Mono}" FontSize="11" Foreground="{StaticResource T1}" Margin="0,4,0,0"/>
</StackPanel>
</Border>
<Border Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="10,8" Margin="2">
<StackPanel>
<TextBlock Text="SESSION" FontSize="8" FontWeight="Bold" Foreground="{StaticResource T3}"/>
<TextBlock x:Name="StatSession" Text="—" FontFamily="{StaticResource Mono}" FontSize="11" Foreground="{StaticResource T1}" Margin="0,4,0,0"/>
</StackPanel>
</Border>
</UniformGrid>
<!-- DNS info bar -->
<Border Background="{StaticResource GreenDim}" CornerRadius="8" Padding="14,10" Margin="2,12,2,0">
<Grid>
<StackPanel Orientation="Horizontal">
<Ellipse Width="6" Height="6" Fill="{StaticResource Green}" Margin="0,0,6,0" VerticalAlignment="Center"/>
<TextBlock Text="Handshake DNS active" FontSize="11.5" FontWeight="Medium" Foreground="{StaticResource Green}"/>
</StackPanel>
<TextBlock Text="103.196.38.38" FontFamily="{StaticResource Mono}" FontSize="10" Foreground="{StaticResource T2}" HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
<!-- Log area -->
<Border Grid.Row="1" Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="0,1,0,0"
Height="90" Padding="16,6">
<Grid>
<ScrollViewer x:Name="LogScroll" VerticalScrollBarVisibility="Auto" Margin="0,0,30,0">
<StackPanel x:Name="LogPanel"/>
</ScrollViewer>
<Button Content="Copy" ToolTip="Copy logs" Style="{StaticResource BtnGhost}"
HorizontalAlignment="Right" VerticalAlignment="Top" Padding="6,2" FontSize="10"
Click="BtnCopyLogs_Click"/>
</Grid>
</Border>
</Grid>
<!-- ═══ TEST DASHBOARD (overlays main area when Test tab active) ═══ -->
<Grid x:Name="TestDashboard" Grid.Column="1" Visibility="Collapsed" Background="{StaticResource Bg0}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="160"/>
</Grid.RowDefinitions>
<!-- Row 0: Controls -->
<Border Grid.Row="0" Padding="16,10" BorderBrush="{StaticResource Bdr}" BorderThickness="0,0,0,1">
<StackPanel x:Name="TestControls" Orientation="Horizontal"/>
</Border>
<!-- Row 1: Stats grid -->
<Border Grid.Row="1" Padding="12,10">
<Grid x:Name="TestStatsGrid"/>
</Border>
<!-- Row 2: Progress bar -->
<Border Grid.Row="2" Padding="12,4,12,8">
<StackPanel x:Name="TestProgressPanel"/>
</Border>
<!-- Row 3: Results table -->
<Border Grid.Row="3" Padding="12,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="0,0,0,6">
<TextBlock x:Name="TestTableTitle" Text="Node Performance Matrix" FontSize="12" FontWeight="SemiBold" Foreground="{StaticResource T1}"/>
<TextBlock x:Name="TestResultsCount" Text="0 entries" FontSize="10" Foreground="{StaticResource T3}" HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<StackPanel x:Name="TestTableBody"/>
</ScrollViewer>
</Grid>
</Border>
<!-- Row 4: Live log -->
<Border Grid.Row="4" Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="0,1,0,0" Padding="12,6">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Live Log" FontSize="11" FontWeight="SemiBold" Foreground="{StaticResource T2}" Margin="0,0,0,4"/>
<ScrollViewer Grid.Row="1" x:Name="TestLogScroll" VerticalScrollBarVisibility="Auto">
<StackPanel x:Name="TestLogPanel"/>
</ScrollViewer>
</Grid>
</Border>
</Grid>
</Grid>
</Grid>
<!-- ═══ WALLET OVERLAY ═══ -->
<Grid x:Name="WalletOverlay" Visibility="Collapsed" Background="#CC000000">
<Border Width="560" VerticalAlignment="Center" HorizontalAlignment="Center"
Background="{StaticResource Bg0}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="12">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="{StaticResource Bdr}" BorderThickness="0,0,0,1" Padding="20,14">
<Grid>
<TextBlock Text="Wallet" FontSize="15" FontWeight="SemiBold" Foreground="{StaticResource T1}" VerticalAlignment="Center"/>
<Button Content="✕" Style="{StaticResource BtnGhost}" FontSize="14" HorizontalAlignment="Right" Padding="6,2" Click="BtnCloseWallet_Click"/>
</Grid>
</Border>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Hidden" Padding="24,16,24,24">
<StackPanel x:Name="WalletPanel"/>
</ScrollViewer>
</Grid>
</Border>
</Grid>
<!-- ═══ SETTINGS OVERLAY ═══ -->
<Grid x:Name="SettingsOverlay" Visibility="Collapsed" Background="#CC000000">
<Border Width="500" MaxHeight="600" VerticalAlignment="Center" HorizontalAlignment="Center"
Background="{StaticResource Bg0}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="12">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- Header -->
<Border Grid.Row="0" BorderBrush="{StaticResource Bdr}" BorderThickness="0,0,0,1" Padding="20,14">
<Grid>
<TextBlock Text="Settings" FontSize="15" FontWeight="SemiBold" Foreground="{StaticResource T1}" VerticalAlignment="Center"/>
<Button Content="✕" Style="{StaticResource BtnGhost}" FontSize="14" HorizontalAlignment="Right" Padding="6,2" Click="BtnCloseSettings_Click"/>
</Grid>
</Border>
<!-- Content -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Padding="20,16,20,20">
<StackPanel x:Name="SettingsPanel"/>
</ScrollViewer>
</Grid>
</Border>
</Grid>
<!-- ═══ AUTH / WELCOME SCREEN ═══ -->
<Grid x:Name="AuthOverlay" Background="{StaticResource Bg0}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="480"/>
</Grid.ColumnDefinitions>
<!-- Left: Branding hero -->
<Border Grid.Column="0" Background="{StaticResource Bg0}">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" MaxWidth="380">
<!-- Large HNS logo -->
<Viewbox Width="72" Height="75" HorizontalAlignment="Left" Margin="0,0,0,32">
<Path Fill="Black" Data="M38.848,15.331 L35.927,10.142 L41.586,10.144 C41.737,10.144 41.913,10.245 41.996,10.38 C42.086,10.529 42.545,11.286 43.097,12.196 C43.758,13.286 44.548,14.588 45,15.331 L38.848,15.331 Z M28.382,46.754 C28.245,47 28.067,47 28.01,47 L25.698,47 C24.474,46.999 23.063,46.998 22.223,46.998 L31.214,30.857 C31.363,30.589 31.36,30.262 31.204,29.997 C31.049,29.733 30.767,29.57 30.461,29.57 L15.137,29.59 L12.09,24.314 L34.409,24.314 C34.433,24.314 34.457,24.31 34.457,24.309 C34.508,24.306 34.558,24.301 34.605,24.289 C34.642,24.281 34.678,24.269 34.714,24.256 C34.733,24.248 34.751,24.241 34.77,24.232 C34.937,24.158 35.085,24.035 35.179,23.862 L38.858,17.06 L44.932,17.06 L28.382,46.754 Z M20.725,46.141 C20.53,45.819 20.276,45.401 19.999,44.946 C19.07,43.412 17.879,41.448 17.744,41.232 C17.699,41.16 17.678,40.982 17.773,40.813 C17.988,40.426 22.057,33.096 23.049,31.31 L28.99,31.302 L20.725,46.141 Z M10.593,36.04 L7.639,30.793 L10.616,25.213 L13.602,30.382 C12.674,32.129 11.226,34.854 10.593,36.04 Z M6.629,36.857 C5.126,36.857 3.631,36.856 3.411,36.856 C3.263,36.856 3.085,36.753 3.004,36.62 L2.043,35.036 C1.358,33.906 0.484,32.466 0,31.669 L6.152,31.669 L9.072,36.858 C8.435,36.858 7.533,36.857 6.629,36.857 Z M16.618,0.246 C16.755,0 16.932,0 16.989,0 L22.802,0.001 L13.786,16.142 C13.779,16.155 13.775,16.17 13.768,16.184 C13.755,16.211 13.743,16.238 13.732,16.267 C13.723,16.295 13.715,16.321 13.707,16.349 C13.7,16.375 13.695,16.401 13.69,16.427 C13.685,16.46 13.682,16.491 13.681,16.523 C13.68,16.538 13.677,16.551 13.677,16.566 C13.677,16.577 13.68,16.587 13.68,16.598 C13.681,16.63 13.685,16.661 13.69,16.692 C13.693,16.718 13.697,16.744 13.704,16.77 C13.71,16.797 13.72,16.823 13.729,16.85 C13.738,16.876 13.747,16.903 13.759,16.928 C13.771,16.953 13.784,16.977 13.798,17.001 C13.812,17.024 13.826,17.048 13.842,17.07 C13.858,17.093 13.877,17.114 13.896,17.136 C13.914,17.156 13.933,17.177 13.953,17.196 C13.973,17.215 13.994,17.231 14.015,17.247 C14.04,17.267 14.064,17.284 14.09,17.3 C14.1,17.306 14.107,17.313 14.117,17.319 C14.127,17.325 14.138,17.327 14.149,17.332 C14.193,17.355 14.24,17.374 14.289,17.389 C14.307,17.394 14.323,17.401 14.342,17.405 C14.405,17.42 14.469,17.429 14.536,17.429 L14.921,17.429 L29.866,17.41 C30.261,18.097 30.999,19.39 31.628,20.491 C32.111,21.337 32.51,22.035 32.824,22.584 L10.594,22.584 C10.584,22.584 10.575,22.587 10.566,22.588 C10.264,22.593 9.972,22.753 9.818,23.041 L6.139,29.939 L0.069,29.939 C2.719,25.184 16.441,0.563 16.618,0.246 Z M24.287,0.879 L24.827,1.767 C25.775,3.331 27.114,5.538 27.256,5.768 C27.301,5.84 27.322,6.017 27.226,6.187 L21.95,15.69 L16.011,15.698 L24.287,0.879 Z M34.405,10.954 L37.36,16.204 L34.347,21.772 C33.988,21.145 33.542,20.364 33.124,19.631 C32.297,18.182 31.694,17.127 31.354,16.538 C31.996,15.362 33.694,12.252 34.405,10.954 Z"/>
</Viewbox>
<TextBlock Text="Handshake" FontSize="36" FontWeight="Bold" Foreground="{StaticResource T1}" Margin="0,0,0,4"/>
<TextBlock Text="dVPN" FontSize="36" FontWeight="Light" Foreground="{StaticResource T3}" Margin="0,0,0,24"/>
<TextBlock Text="The internet was meant to be free." FontSize="14" Foreground="{StaticResource T2}" Margin="0,0,0,20" TextWrapping="Wrap"/>
<!-- Feature bullets -->
<StackPanel Margin="0,0,0,8">
<StackPanel Orientation="Horizontal" Margin="0,0,0,12">
<Ellipse Width="6" Height="6" Fill="{StaticResource T1}" VerticalAlignment="Center" Margin="0,0,10,0"/>
<TextBlock Text="Decentralized DNS — Handshake resolvers, not Google" FontSize="12" Foreground="{StaticResource T2}" TextWrapping="Wrap"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,12">
<Ellipse Width="6" Height="6" Fill="{StaticResource T1}" VerticalAlignment="Center" Margin="0,0,10,0"/>
<TextBlock Text="900+ nodes across 50+ countries — pay per GB or per hour" FontSize="12" Foreground="{StaticResource T2}" TextWrapping="Wrap"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,12">
<Ellipse Width="6" Height="6" Fill="{StaticResource T1}" VerticalAlignment="Center" Margin="0,0,10,0"/>
<TextBlock Text="No accounts, no subscriptions — just a wallet and a node" FontSize="12" Foreground="{StaticResource T2}" TextWrapping="Wrap"/>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,16,0,0">
<Viewbox Width="28" Height="30" Margin="0,0,10,0" VerticalAlignment="Center">
<Canvas Width="241" Height="241">
<Path Fill="#0156FC" Data="M178.171 60.8573C179.801 60.8573 181.123 62.1775 181.123 63.8045V110.662V113.572C181.161 119.355 181.207 126.551 180.202 134.203C179.028 143.119 176.7 150.371 173.115 156.367C161.437 175.91 140.465 190.218 120.788 192.134C120.695 192.143 120.593 192.152 120.5 192.152C120.407 192.152 120.304 192.152 120.211 192.134C100.506 190.209 79.5436 175.901 67.8844 156.367C64.2898 150.361 61.9804 143.11 60.7977 134.203C59.7919 126.561 59.8385 119.355 59.8851 113.572V110.662L59.8944 63.8045C59.8944 62.1775 61.2167 60.8573 62.8464 60.8573H178.171ZM178.171 55.0001H62.8464C57.9853 55.0001 54.0276 58.9514 54.0276 63.8045V113.554C53.9717 119.16 53.9065 126.867 54.9774 134.965C56.2625 144.69 58.8328 152.667 62.8371 159.361C68.9833 169.662 77.588 178.755 87.7106 185.672C97.917 192.645 108.934 196.894 119.568 197.944C119.876 197.981 120.183 198 120.49 198C120.798 198 121.105 197.981 121.412 197.944C132.038 196.903 143.045 192.664 153.261 185.681C163.383 178.764 171.988 169.662 178.144 159.361C182.157 152.648 184.727 144.671 186.003 134.965C187.065 126.932 187.018 119.513 186.981 113.563V110.644V63.8045C186.981 58.9514 183.023 55.0001 178.162 55.0001L178.171 55.0001Z"/>
<Path Fill="#0156FC" Data="M170.145 120.192C171.011 120.843 172.24 120.229 172.24 119.151L172.213 113.228V71.0006C172.222 70.2754 171.635 69.6804 170.909 69.6804H70.0832C69.3569 69.6804 68.7609 70.2661 68.7609 71.0006V96.9769C68.7609 98.0926 69.0216 99.1896 69.5152 100.184C70.018 101.179 70.7444 102.044 71.6291 102.713L147.479 159.333C148.14 159.826 148.186 160.783 147.591 161.341C146.184 162.662 144.713 163.907 143.176 165.079C142.711 165.432 142.059 165.432 141.593 165.088L70.8655 112.168C69.9994 111.518 68.7702 112.131 68.7702 113.219C68.7702 122.293 67.9693 139.223 75.6055 152.193C84.1357 166.687 98.7841 178.123 113.852 181.823C116.031 182.353 118.201 182.734 120.38 182.92C120.463 182.929 120.547 182.929 120.631 182.92C130.493 182.037 140.532 177.537 149.146 170.741C151.306 169.03 153.374 167.189 155.338 165.209C159.222 161.304 162.602 156.934 165.405 152.202C167.938 147.916 169.531 143.202 170.546 138.489C170.769 137.466 170.965 136.434 171.132 135.402C171.579 132.697 170.48 129.973 168.292 128.327L104.083 80.3814C103.077 79.6283 103.599 78.0199 104.874 78.0199H113.367C113.656 78.0199 113.926 78.1129 114.159 78.2803L170.145 120.183V120.192Z"/>
</Canvas>
</Viewbox>
<TextBlock Text="Powered by Sentinel" FontSize="13" Foreground="{StaticResource T2}" VerticalAlignment="Center" FontWeight="Medium"/>
</StackPanel>
</StackPanel>
</Border>
<!-- Right: Auth card -->
<Border Grid.Column="1" Background="{StaticResource Bg1}" BorderBrush="{StaticResource Bdr}" BorderThickness="1,0,0,0">
<StackPanel VerticalAlignment="Center" Margin="44,0">
<TextBlock Text="Get started" FontSize="22" FontWeight="SemiBold" Foreground="{StaticResource T1}" Margin="0,0,0,4"/>
<TextBlock Text="Import an existing wallet or create a new one" FontSize="12" Foreground="{StaticResource T3}" Margin="0,0,0,28"/>
<!-- Tabs: Import | New Wallet -->
<Border Background="{StaticResource Bg2}" CornerRadius="8" Padding="3" Margin="0,0,0,24">
<UniformGrid Columns="2">
<Button x:Name="AuthTabImport" Content="Import Wallet" Style="{StaticResource FilterBtn}" Click="AuthTab_Click" Tag="import" Foreground="{StaticResource T1}" Background="{StaticResource Bg0}"/>
<Button x:Name="AuthTabNew" Content="Create Wallet" Style="{StaticResource FilterBtn}" Click="AuthTab_Click" Tag="new"/>
</UniformGrid>
</Border>
<!-- Import panel -->
<StackPanel x:Name="ImportPanel">
<TextBlock Text="RECOVERY PHRASE" FontSize="10" FontWeight="Bold" Foreground="{StaticResource T3}" Margin="0,0,0,8"/>
<TextBox x:Name="TbMnemonic" Style="{StaticResource TbLight}" TextWrapping="Wrap" AcceptsReturn="True" Height="110"
FontSize="12.5" VerticalScrollBarVisibility="Auto"/>
<TextBlock Text="Enter your 12 or 24 word mnemonic phrase" FontSize="10.5" Foreground="{StaticResource T3}" Margin="0,6,0,0"/>
<TextBlock x:Name="AuthErr" Foreground="{StaticResource Red}" FontFamily="{StaticResource Mono}" FontSize="11" MinHeight="20" Margin="0,6,0,0"/>
<Button x:Name="BtnImport" Content="Connect Wallet" Style="{StaticResource BtnAcc}" HorizontalAlignment="Stretch" Margin="0,4,0,0" Click="BtnImport_Click"/>
<!-- Test wallet -->
<Border BorderBrush="{StaticResource Bdr}" BorderThickness="0,1,0,0" Margin="0,18,0,0" Padding="0,14,0,0">
<StackPanel>
<TextBlock Text="TEST ACCOUNT" FontSize="9" FontWeight="Bold" Foreground="{StaticResource T3}" Margin="0,0,0,8"/>
<Button Content="Use Test Wallet" Style="{StaticResource BtnGhost}" Foreground="{StaticResource T2}" HorizontalAlignment="Stretch" Click="BtnTestWallet_Click"/>
</StackPanel>
</Border>
</StackPanel>
<!-- Generate panel -->
<StackPanel x:Name="GenPanel" Visibility="Collapsed">
<TextBlock Text="A new Sentinel wallet will be created. You'll need P2P tokens to connect to nodes." FontSize="11.5" Foreground="{StaticResource T2}" TextWrapping="Wrap" Margin="0,0,0,16"/>
<Button x:Name="BtnGen" Content="Generate New Wallet" Style="{StaticResource BtnAcc}" HorizontalAlignment="Stretch" Click="BtnGen_Click"/>
<Border x:Name="GenResult" Visibility="Collapsed" Background="{StaticResource Bg2}" BorderBrush="{StaticResource Bdr}" BorderThickness="1" CornerRadius="8" Padding="16" Margin="0,16,0,0">
<StackPanel>
<TextBlock Text="RECOVERY PHRASE" FontSize="10" FontWeight="Bold" Foreground="{StaticResource Amber}" Margin="0,0,0,8"/>
<TextBlock x:Name="GenMnemonic" FontFamily="{StaticResource Mono}" FontSize="12" Foreground="{StaticResource T1}" TextWrapping="Wrap" LineHeight="22"/>
<TextBlock x:Name="GenAddr" FontFamily="{StaticResource Mono}" FontSize="11" Foreground="{StaticResource T2}" TextWrapping="Wrap" Margin="0,10,0,0"/>
<Border Background="{StaticResource RedDim}" CornerRadius="6" Padding="10,8" Margin="0,10,0,0">
<TextBlock Text="Save this phrase somewhere safe. It is the ONLY way to recover your wallet." FontSize="11" Foreground="{StaticResource Red}" TextWrapping="Wrap"/>
</Border>
<Button Content="I've Saved It — Continue" Style="{StaticResource BtnAcc}" HorizontalAlignment="Stretch" Margin="0,12,0,0" Click="BtnUseGen_Click"/>
</StackPanel>
</Border>
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Grid>
</Window>