lnlink-server 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/app.js +409 -357
  2. package/dist/binaries.json +12 -7
  3. package/dist/build-info.json +2 -1
  4. package/dist/index.js +690 -122
  5. package/dist/index.js.map +4 -4
  6. package/dist/node_modules/debug/.coveralls.yml +1 -0
  7. package/dist/node_modules/debug/.eslintrc +11 -0
  8. package/dist/node_modules/debug/.travis.yml +14 -0
  9. package/dist/node_modules/debug/CHANGELOG.md +362 -0
  10. package/dist/node_modules/debug/LICENSE +19 -0
  11. package/dist/node_modules/debug/Makefile +50 -0
  12. package/dist/node_modules/debug/README.md +312 -0
  13. package/dist/node_modules/debug/component.json +19 -0
  14. package/dist/node_modules/debug/karma.conf.js +70 -0
  15. package/dist/node_modules/debug/node.js +1 -0
  16. package/dist/node_modules/debug/package.json +49 -0
  17. package/dist/node_modules/debug/src/browser.js +185 -0
  18. package/dist/node_modules/debug/src/debug.js +202 -0
  19. package/dist/node_modules/debug/src/index.js +10 -0
  20. package/dist/node_modules/debug/src/inspector-log.js +15 -0
  21. package/dist/node_modules/debug/src/node.js +248 -0
  22. package/dist/node_modules/depd/History.md +96 -0
  23. package/dist/node_modules/depd/LICENSE +22 -0
  24. package/dist/node_modules/depd/Readme.md +280 -0
  25. package/dist/node_modules/depd/index.js +522 -0
  26. package/dist/node_modules/depd/lib/browser/index.js +77 -0
  27. package/dist/node_modules/depd/lib/compat/callsite-tostring.js +103 -0
  28. package/dist/node_modules/depd/lib/compat/event-listener-count.js +22 -0
  29. package/dist/node_modules/depd/lib/compat/index.js +79 -0
  30. package/dist/node_modules/depd/package.json +41 -0
  31. package/dist/node_modules/http-errors/HISTORY.md +132 -0
  32. package/dist/node_modules/http-errors/LICENSE +23 -0
  33. package/dist/node_modules/http-errors/README.md +135 -0
  34. package/dist/node_modules/http-errors/index.js +260 -0
  35. package/dist/node_modules/http-errors/package.json +48 -0
  36. package/dist/node_modules/inherits/LICENSE +16 -0
  37. package/dist/node_modules/inherits/README.md +42 -0
  38. package/dist/node_modules/inherits/inherits.js +7 -0
  39. package/dist/node_modules/inherits/inherits_browser.js +23 -0
  40. package/dist/node_modules/inherits/package.json +29 -0
  41. package/dist/node_modules/ms/index.js +152 -0
  42. package/dist/node_modules/ms/license.md +21 -0
  43. package/dist/node_modules/ms/package.json +37 -0
  44. package/dist/node_modules/ms/readme.md +51 -0
  45. package/dist/node_modules/setprototypeof/LICENSE +13 -0
  46. package/dist/node_modules/setprototypeof/README.md +26 -0
  47. package/dist/node_modules/setprototypeof/index.d.ts +2 -0
  48. package/dist/node_modules/setprototypeof/index.js +15 -0
  49. package/dist/node_modules/setprototypeof/package.json +25 -0
  50. package/dist/node_modules/statuses/HISTORY.md +65 -0
  51. package/dist/node_modules/statuses/LICENSE +23 -0
  52. package/dist/node_modules/statuses/README.md +127 -0
  53. package/dist/node_modules/statuses/codes.json +66 -0
  54. package/dist/node_modules/statuses/index.js +113 -0
  55. package/dist/node_modules/statuses/package.json +48 -0
  56. package/dist/package.json +3 -2
  57. package/dist/public/css/initOwner.css +578 -426
  58. package/dist/public/img/logo.svg +1 -0
  59. package/dist/public/init.html +5 -5
  60. package/dist/public/js/init.js +644 -258
  61. package/dist/setting.regtest.json +1 -1
  62. package/package.json +4 -3
@@ -1,553 +1,705 @@
1
+ :root {
2
+ --lime-primary: #d0f224;
3
+ --bg-dark: #0f0f0f;
4
+ --card-bg: #1a1a1a;
5
+ --input-bg: #262626;
6
+ --text-primary: #ffffff;
7
+ --text-secondary: #a0a0a0;
8
+ --border-color: #333333;
9
+ }
10
+
1
11
  * {
2
- margin: 0;
3
- padding: 0;
4
- box-sizing: border-box;
12
+ margin: 0;
13
+ padding: 0;
14
+ box-sizing: border-box;
5
15
  }
6
16
 
7
17
  body {
8
- background: linear-gradient(135deg, #0c0c0c 0%, #1a1a2e 50%, #16213e 100%);
9
- min-height: 100vh;
10
- color: #e0e0e0;
11
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
12
- overflow-x: hidden;
13
- }
14
-
15
- /* Animated background particles */
16
- body::before {
17
- content: '';
18
- position: fixed;
19
- top: 0;
20
- left: 0;
21
- width: 100%;
22
- height: 100%;
23
- background-image:
24
- radial-gradient(2px 2px at 20px 30px, rgba(255, 255, 255, 0.1), transparent),
25
- radial-gradient(2px 2px at 40px 70px, rgba(255, 255, 255, 0.05), transparent),
26
- radial-gradient(1px 1px at 90px 40px, rgba(255, 255, 255, 0.08), transparent);
27
- background-size: 100px 100px;
28
- animation: float 20s infinite linear;
29
- pointer-events: none;
30
- z-index: -1;
31
- }
32
-
33
- @keyframes float {
34
- 0% {
35
- transform: translate(0, 0);
36
- }
37
- 50% {
38
- transform: translate(-10px, -10px);
39
- }
40
- 100% {
41
- transform: translate(0, 0);
42
- }
18
+ background-color: var(--bg-dark);
19
+ color: var(--text-primary);
20
+ font-family: "Inter", "Segoe UI", sans-serif;
21
+ min-height: 100vh;
22
+ display: flex;
23
+ justify-content: center;
24
+ /* Removed align-items: center to prevent vertical centering */
25
+ align-items: flex-start;
43
26
  }
44
27
 
45
28
  .root {
46
- max-width: 1000px;
47
- margin: 40px auto;
48
- padding: 40px;
49
- background: rgba(30, 30, 30, 0.95);
50
- border-radius: 20px;
51
- box-shadow:
52
- 0 20px 60px rgba(0, 0, 0, 0.4),
53
- 0 0 0 1px rgba(255, 255, 255, 0.05);
54
- backdrop-filter: blur(10px);
55
- position: relative;
56
- overflow: hidden;
57
- }
58
-
59
- .root::before {
60
- content: '';
61
- position: absolute;
62
- top: 0;
63
- left: 0;
64
- right: 0;
65
- height: 3px;
66
- background: linear-gradient(90deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #ffeaa7);
67
- background-size: 200% 100%;
68
- animation: shimmer 3s infinite;
69
- }
70
-
71
- @keyframes shimmer {
72
- 0%, 100% {
73
- background-position: 200% 0;
74
- }
75
- 50% {
76
- background-position: -200% 0;
77
- }
78
- }
79
-
80
- h1 {
81
- color: #fff;
82
- text-align: center;
83
- margin-bottom: 40px;
84
- font-size: 2.5rem;
85
- font-weight: 300;
86
- text-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
87
- position: relative;
88
- }
89
-
90
- h1::after {
91
- content: '';
92
- position: absolute;
93
- bottom: -10px;
94
- left: 50%;
95
- transform: translateX(-50%);
96
- width: 80px;
97
- height: 2px;
98
- background: linear-gradient(90deg, #4ecdc4, #45b7d1);
99
- border-radius: 1px;
100
- }
101
-
102
- /* Tab styling */
103
- .nav-tabs {
104
- border-bottom: 2px solid rgba(255, 255, 255, 0.1);
105
- margin-bottom: 30px;
106
- }
107
-
108
- .nav-tabs .nav-link {
109
- background: transparent;
110
- border: none;
111
- color: #b0b0b0;
112
- padding: 15px 25px;
113
- font-weight: 500;
114
- transition: all 0.3s ease;
115
- position: relative;
116
- border-radius: 10px 10px 0 0;
117
- }
118
-
119
- .nav-tabs .nav-link:hover {
120
- color: #4ecdc4;
121
- background: rgba(78, 205, 196, 0.1);
122
- border-color: transparent;
123
- }
124
-
125
- .nav-tabs .nav-link.active {
126
- color: #fff;
127
- background: rgba(78, 205, 196, 0.2);
128
- border-color: transparent;
129
- border-bottom: 2px solid #4ecdc4;
130
- }
131
-
132
- .nav-tabs .nav-link.active::after {
133
- content: '';
134
- position: absolute;
135
- bottom: -2px;
136
- left: 0;
137
- width: 100%;
138
- height: 2px;
139
- background: linear-gradient(90deg, #4ecdc4, #45b7d1);
140
- }
141
-
142
- .tab-content {
143
- min-height: 400px;
29
+ width: 100%;
30
+ max-width: 800px;
31
+ margin: 30px auto;
32
+ padding: 30px;
33
+ /* No background for root itself based on some designs, but let's keep it if it's a card style */
34
+ /* If the design is a centered card on dark bg: */
35
+ background: transparent;
36
+ }
37
+
38
+ /* Header Logo Area */
39
+ .header-logo {
40
+ margin-bottom: 0 !important;
41
+ }
42
+
43
+ h2 {
44
+ font-weight: 600;
45
+ margin-bottom: 0.5rem;
46
+ font-size: 2rem;
144
47
  }
145
48
 
49
+ p.text-muted {
50
+ color: var(--text-secondary) !important;
51
+ font-size: 0.95rem;
52
+ }
53
+ .network-type {
54
+ padding-bottom: 1.2rem;
55
+ border-bottom: 0.5px solid #262626;
56
+ }
57
+ /* Main Card Container */
146
58
  .info-section {
147
- margin-bottom: 30px;
59
+ background: var(--card-bg);
60
+ border-radius: 16px;
61
+ padding: 30px;
62
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
63
+ margin-top: 2rem;
148
64
  }
149
65
 
150
- .info-title {
151
- font-size: 1.2rem;
152
- font-weight: 500;
153
- color: #b0b0b0;
154
- margin-bottom: 20px;
155
- display: flex;
156
- align-items: center;
157
- gap: 10px;
66
+ /* Form Controls */
67
+ .form-label {
68
+ color: #e0e0e0 !important; /* Increased brightness for better visibility */
69
+ font-size: 0.85rem;
70
+ margin-bottom: 4px;
71
+ }
72
+
73
+ .form-control {
74
+ background-color: var(--input-bg);
75
+ border: 1px solid var(--input-bg);
76
+ color: var(--text-primary);
77
+ border-radius: 8px;
78
+ padding: 0 16px; /* Use flex alignment or line-height for vertical centering with fixed height */
79
+ height: 48px; /* Fixed height as requested */
80
+ display: flex;
81
+ align-items: center;
82
+ font-size: 0.95rem;
83
+ }
84
+
85
+ /* Readonly inputs specific style */
86
+ .form-control[readonly] {
87
+ background-color: var(--input-bg);
88
+ color: #666; /* Dimmer color for readonly fields */
89
+ opacity: 1;
90
+ }
91
+
92
+ /* Editable inputs should stand out slightly more if needed, or just standard white */
93
+ .form-control:not([readonly]) {
94
+ color: #fff;
95
+ }
96
+ .form-control:focus {
97
+ background-color: var(--input-bg);
98
+ border-color: var(--lime-primary);
99
+ box-shadow: none;
100
+ color: var(--text-primary);
101
+ outline: none;
102
+ z-index: 3; /* Ensure shadow is visible over adjacent elements */
103
+ }
104
+
105
+ /* Fix for Chrome/Edge autofill turning background white */
106
+ input:-webkit-autofill,
107
+ input:-webkit-autofill:hover,
108
+ input:-webkit-autofill:focus,
109
+ input:-webkit-autofill:active {
110
+ -webkit-box-shadow: none !important;
111
+ -webkit-text-fill-color: var(--text-primary) !important;
112
+ caret-color: var(--text-primary);
113
+ transition: background-color 5000s ease-in-out 0s;
114
+ }
115
+
116
+ /* Input Group for Icon */
117
+ .input-group {
118
+ position: relative;
119
+ display: flex;
120
+ align-items: center;
121
+ }
122
+
123
+ .input-group .form-control {
124
+ /* Ensure input takes full width but leaves space for icon if absolutely positioned,
125
+ or use flex layout. Here we use flex layout so no right padding needed on input unless abs pos. */
126
+ border-top-right-radius: 0;
127
+ border-bottom-right-radius: 0;
128
+ /* border-right: none; Seamless connection */
129
+ flex: 1;
130
+ }
131
+
132
+ .input-group .form-control:last-child {
133
+ border-top-right-radius: 8px;
134
+ border-bottom-right-radius: 8px;
135
+ /* border-right: 1px solid transparent; */
136
+ }
137
+
138
+ .input-icon {
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+ background-color: var(--input-bg);
143
+ color: var(--lime-primary);
144
+ padding: 0 12px;
145
+ cursor: pointer;
146
+ border-top-right-radius: 8px;
147
+ border-bottom-right-radius: 8px;
148
+ height: 48px; /* Match input height */
149
+ min-height: 48px; /* Ensure consistency */
150
+ transition: color 0.2s ease;
151
+ /* Simulate border to match input */
152
+ border-top: 1px solid transparent;
153
+ border-bottom: 1px solid transparent;
154
+ border-right: 1px solid transparent;
155
+ }
156
+
157
+ .input-icon:hover {
158
+ color: rgba(208, 242, 36, 0.9);
159
+ }
160
+
161
+ /* When input is focused, we need to handle the border of the icon to look like part of the focus ring
162
+ This is tricky with separate elements.
163
+ Simpler approach: Let the input have the focus ring, and the icon just sits there.
164
+ But the input has no right border.
165
+
166
+ Alternative: Wrap them in a div that handles the border/focus.
167
+
168
+ For now, let's keep it simple:
169
+ Give the icon the same background and make it look integrated.
170
+ */
171
+
172
+ /* Remove old btn styles within input-group */
173
+
174
+ .input-group .btn:hover {
175
+ background-color: var(--input-bg);
176
+ color: #fff;
177
+ }
178
+
179
+ /* Readonly inputs specific style if needed - already handled above but removing duplicate block */
180
+
181
+ /* Network Selector */
182
+ .network-selector {
183
+ background: transparent;
184
+ gap: 10px;
185
+ }
186
+
187
+ .btn-network {
188
+ flex: 1;
189
+ background-color: var(--input-bg);
190
+ color: var(--text-secondary);
191
+ border: 1px solid transparent;
192
+ border-radius: 8px;
193
+ padding: 10px 0;
194
+ font-weight: 500;
195
+ transition: all 0.2s;
196
+ }
197
+
198
+ .btn-network:hover {
199
+ background-color: #333;
200
+ color: var(--text-primary);
158
201
  }
159
202
 
160
- .info-title i {
161
- color: #4ecdc4;
203
+ .btn-network.active {
204
+ background-color: var(--lime-primary);
205
+ color: #000; /* Black text for contrast on lime */
206
+ font-weight: 600;
162
207
  }
163
208
 
164
- .list-group {
165
- background: transparent;
166
- border: none;
167
- gap: 12px;
168
- display: grid;
169
- grid-template-columns: repeat(2, 1fr);
209
+ /* Advanced Toggle */
210
+ .advanced-toggle {
211
+ color: var(--lime-primary);
212
+ font-size: 0.9rem;
213
+ display: inline-flex;
214
+ align-items: center;
215
+ gap: 5px;
216
+ i {
217
+ padding-top: 3px;
218
+ }
170
219
  }
171
220
 
172
- .list-group-item {
173
- background: rgba(45, 45, 55, 0.6);
174
- border: 1px solid rgba(255, 255, 255, 0.1);
175
- border-radius: 12px;
176
- padding: 15px 20px;
177
- color: #e0e0e0;
178
- transition: all 0.3s ease;
179
- position: relative;
180
- overflow: hidden;
181
- display: flex;
182
- flex-direction: column;
183
- gap: 8px;
221
+ .advanced-toggle:hover {
222
+ color: #e0f878;
184
223
  }
185
224
 
186
- .list-group-item::before {
187
- content: '';
188
- position: absolute;
189
- top: 0;
190
- left: 0;
191
- width: 4px;
192
- height: 100%;
193
- background: linear-gradient(180deg, #4ecdc4, #45b7d1);
194
- opacity: 0;
195
- transition: opacity 0.3s ease;
225
+ .customizable-badge {
226
+ background-color: rgba(208, 242, 36, 0.1);
227
+ color: var(--lime-primary);
228
+ border: 1px solid rgba(208, 242, 36, 0.2);
229
+ border-radius: 20px;
230
+ padding: 4px 12px;
231
+ font-size: 0.75rem;
232
+ font-weight: 500;
233
+ letter-spacing: 0.3px;
196
234
  }
197
235
 
198
- .list-group-item:hover {
199
- background: rgba(55, 55, 65, 0.8);
200
- border-color: rgba(255, 255, 255, 0.2);
201
- transform: translateY(-2px);
202
- box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
236
+ /* Config Sections */
237
+ .config-section h6 {
238
+ color: var(--lime-primary);
239
+ font-size: 0.9rem;
240
+ margin-top: 10px;
241
+ margin-bottom: 15px;
242
+ text-transform: uppercase;
243
+ letter-spacing: 0.5px;
203
244
  }
204
245
 
205
- .list-group-item:hover::before {
206
- opacity: 1;
246
+ /* Save Button */
247
+ .btn-lime {
248
+ background-color: var(--lime-primary);
249
+ color: #000;
250
+ border: none;
251
+ border-radius: 8px;
252
+ font-weight: 600;
253
+ font-size: 1rem;
254
+ padding: 12px;
255
+ transition: transform 0.1s;
207
256
  }
208
257
 
209
- .info-key {
210
- font-weight: 600;
211
- color: #b0b0b0;
212
- font-size: 0.9rem;
213
- text-transform: uppercase;
214
- letter-spacing: 0.5px;
215
- margin-bottom: 4px;
258
+ .btn-lime:hover {
259
+ background-color: #bce600; /* Slightly darker lime */
260
+ color: #000;
216
261
  }
217
262
 
218
- .info-value-container {
219
- display: flex;
220
- align-items: center;
263
+ .btn-lime:active {
264
+ background-color: #bce600;
265
+ color: #000;
266
+ transform: scale(0.98);
221
267
  }
222
268
 
223
- .info-value {
224
- color: #e0e0e0;
225
- word-break: break-all;
226
- font-size: 0.95rem;
227
- line-height: 1.4;
228
- font-weight: 500;
269
+ .btn-lime:focus {
270
+ background-color: #bce600;
271
+ color: #000;
272
+ box-shadow: 0 0 0 0.25rem rgba(208, 242, 36, 0.4);
229
273
  }
230
274
 
231
- /* Status colors */
232
- .status-success {
233
- color: #4ade80 !important;
234
- text-shadow: 0 0 10px rgba(74, 222, 128, 0.3);
275
+ .btn-lime:disabled,
276
+ .btn-lime[disabled] {
277
+ background-color: var(--lime-primary);
278
+ opacity: 0.7;
279
+ color: #000;
280
+ cursor: not-allowed;
235
281
  }
236
282
 
237
- .status-error {
238
- color: #f87171 !important;
239
- text-shadow: 0 0 10px rgba(248, 113, 113, 0.3);
283
+ /* Utilities */
284
+ .text-lime {
285
+ color: var(--lime-primary) !important;
240
286
  }
241
287
 
242
- .status-warning {
243
- color: #fbbf24 !important;
244
- text-shadow: 0 0 10px rgba(251, 191, 36, 0.3);
288
+ /* Modal Overrides (Bootstrap) */
289
+ .modal-content {
290
+ background-color: var(--card-bg);
291
+ border: 1px solid var(--border-color);
292
+ color: var(--text-primary);
245
293
  }
246
294
 
247
- /* Status icons */
248
- .status-icon {
249
- margin-right: 8px;
250
- font-size: 0.9rem;
295
+ .modal-header {
296
+ border-bottom: 1px solid var(--border-color);
251
297
  }
252
298
 
253
- /* Link styling */
254
- .info-link {
255
- color: #4ecdc4;
256
- text-decoration: none;
257
- transition: all 0.3s ease;
258
- position: relative;
299
+ .modal-footer {
300
+ border-top: 1px solid var(--border-color);
259
301
  }
260
302
 
261
- .info-link:hover {
262
- color: #45b7d1;
263
- text-decoration: none;
303
+ .btn-close {
304
+ filter: invert(1);
264
305
  }
265
306
 
266
- .info-link::after {
267
- content: '';
268
- position: absolute;
269
- bottom: -2px;
270
- left: 0;
271
- width: 0;
272
- height: 2px;
273
- background: linear-gradient(90deg, #4ecdc4, #45b7d1);
274
- transition: width 0.3s ease;
307
+ /* Custom Scrollbar */
308
+ ::-webkit-scrollbar {
309
+ width: 8px;
275
310
  }
276
311
 
277
- .info-link:hover::after {
278
- width: 100%;
312
+ ::-webkit-scrollbar-track {
313
+ background: var(--bg-dark);
279
314
  }
280
315
 
281
- /* Form styling */
282
- .form-section {
283
- margin-top: 20px;
316
+ ::-webkit-scrollbar-thumb {
317
+ background: #333;
318
+ border-radius: 4px;
284
319
  }
285
320
 
286
- .form-control, .form-select {
287
- background: rgba(45, 45, 55, 0.6);
288
- border: 1px solid rgba(255, 255, 255, 0.1);
289
- border-radius: 10px;
290
- color: #e0e0e0;
291
- padding: 12px 16px;
292
- transition: all 0.3s ease;
321
+ ::-webkit-scrollbar-thumb:hover {
322
+ background: #444;
293
323
  }
294
324
 
295
- /* Placeholder styling for better visibility */
296
- .form-control::placeholder {
297
- color: #a0a0a0;
298
- opacity: 1;
325
+ /* Loading Spinner */
326
+ @keyframes spin {
327
+ to {
328
+ transform: rotate(360deg);
329
+ }
299
330
  }
300
331
 
301
- .form-control::-webkit-input-placeholder {
302
- color: #a0a0a0;
303
- opacity: 1;
332
+ .loading {
333
+ display: inline-block;
334
+ width: 1.5rem;
335
+ height: 1.5rem;
336
+ vertical-align: text-bottom;
337
+ border: 3px solid rgba(255, 255, 255, 0.1);
338
+ border-radius: 50%;
339
+ border-top-color: var(--lime-primary);
340
+ animation: spin 1s linear infinite;
341
+ margin-right: 0.5rem;
342
+ }
343
+
344
+ /* Adjust loading spinner inside buttons */
345
+ .btn .loading {
346
+ width: 1rem;
347
+ height: 1rem;
348
+ border-width: 2px;
349
+ }
350
+
351
+ /* Specific adjustment for Lime button (black text) */
352
+ .btn-lime .loading {
353
+ border-color: rgba(0, 0, 0, 0.1);
354
+ border-top-color: #000;
304
355
  }
305
356
 
306
- .form-control::-moz-placeholder {
307
- color: #a0a0a0;
308
- opacity: 1;
357
+ /* Main Loading Container (Vertically Centered) */
358
+ .loading-container {
359
+ display: flex;
360
+ flex-direction: column;
361
+ justify-content: center;
362
+ align-items: center;
363
+ min-height: 60vh;
364
+ width: 100%;
365
+ color: var(--text-secondary);
309
366
  }
310
367
 
311
- .form-control:-ms-input-placeholder {
312
- color: #a0a0a0;
313
- opacity: 1;
368
+ .loading-container .loading {
369
+ margin-right: 0;
370
+ margin-bottom: 1rem;
371
+ width: 2.5rem;
372
+ height: 2.5rem;
373
+ border-width: 4px;
314
374
  }
315
375
 
316
- .form-control:focus, .form-select:focus {
317
- background: rgba(55, 55, 65, 0.8);
318
- border-color: #4ecdc4;
319
- color: #e0e0e0;
320
- box-shadow: 0 0 0 0.25rem rgba(78, 205, 196, 0.15);
376
+ /* Welcome Page Styles */
377
+ .welcome-container {
378
+ max-width: 600px;
379
+ margin: 0 auto;
380
+ /* padding: 2rem 0; */
381
+ text-align: left;
321
382
  }
322
383
 
323
- .form-select option {
324
- background: #2d2d37;
325
- color: #e0e0e0;
384
+ .welcome-title {
385
+ font-size: 2.4rem;
386
+ font-weight: 700;
387
+ color: #fff;
388
+ margin-bottom: 0.5rem;
326
389
  }
327
390
 
328
- .form-label {
329
- color: #b0b0b0;
330
- font-weight: 500;
331
- margin-bottom: 8px;
391
+ .welcome-subtitle {
392
+ font-size: 1.2rem;
393
+ color: var(--text-secondary);
394
+ margin-bottom: 1.2rem;
332
395
  }
333
396
 
334
- .btn-primary {
335
- background: linear-gradient(135deg, #4ecdc4, #45b7d1);
336
- border: none;
337
- border-radius: 10px;
338
- padding: 12px 30px;
339
- font-weight: 500;
340
- transition: all 0.3s ease;
341
- box-shadow: 0 4px 15px rgba(78, 205, 196, 0.3);
397
+ .status-card {
398
+ background-color: #1e1e1e;
399
+ border-radius: 16px;
400
+ padding: 24px;
401
+ margin-bottom: 24px;
402
+ border: 1px solid rgba(255, 255, 255, 0.05);
342
403
  }
343
404
 
344
- .btn-primary:hover {
345
- background: linear-gradient(135deg, #45b7d1, #4ecdc4);
346
- transform: translateY(-2px);
347
- box-shadow: 0 6px 20px rgba(78, 205, 196, 0.4);
405
+ .card-label {
406
+ display: block;
407
+ font-size: 0.9rem;
408
+ color: var(--text-secondary);
409
+ margin-bottom: 8px;
348
410
  }
349
411
 
350
- .btn-secondary {
351
- background: rgba(108, 117, 125, 0.6);
352
- border: 1px solid rgba(255, 255, 255, 0.1);
353
- border-radius: 10px;
354
- padding: 12px 30px;
355
- font-weight: 500;
356
- transition: all 0.3s ease;
357
- color: #e0e0e0;
412
+ .card-label i {
413
+ margin-left: 4px;
414
+ font-size: 0.8rem;
415
+ cursor: help;
358
416
  }
359
417
 
360
- .btn-secondary:hover {
361
- background: rgba(108, 117, 125, 0.8);
362
- border-color: rgba(255, 255, 255, 0.2);
363
- transform: translateY(-2px);
364
- color: #e0e0e0;
418
+ .read-only-input-group {
419
+ position: relative;
420
+ margin-bottom: 20px;
365
421
  }
366
422
 
367
- .valid-feedback {
368
- color: #4ade80;
423
+ .read-only-input {
424
+ width: 100%;
425
+ background-color: #2a2a2a;
426
+ border: 1px solid #333;
427
+ border-radius: 8px;
428
+ padding: 12px 40px 12px 16px;
429
+ color: var(--text-primary);
430
+ font-family: monospace;
431
+ font-size: 0.95rem;
432
+ white-space: nowrap;
433
+ overflow: hidden;
434
+ text-overflow: ellipsis;
369
435
  }
370
436
 
371
- .invalid-feedback {
372
- color: #f87171;
437
+ .copy-icon-btn {
438
+ position: absolute;
439
+ right: 12px;
440
+ top: 50%;
441
+ transform: translateY(-50%);
442
+ color: var(--lime-primary);
443
+ cursor: pointer;
444
+ background: none;
445
+ border: none;
446
+ padding: 4px;
373
447
  }
374
448
 
375
- /* Loading animation */
376
- .loading {
377
- display: inline-block;
378
- width: 20px;
379
- height: 20px;
380
- border: 2px solid rgba(255, 255, 255, 0.3);
381
- border-radius: 50%;
382
- border-top-color: #4ecdc4;
383
- animation: spin 1s ease-in-out infinite;
384
- margin-right: 10px;
449
+ .copy-icon-btn:hover {
450
+ color: #fff;
385
451
  }
386
452
 
387
- @keyframes spin {
388
- to {
389
- transform: rotate(360deg);
390
- }
453
+ .service-status-section {
454
+ margin-bottom: 20px;
391
455
  }
392
456
 
393
- /* Advanced config grid */
394
- .config-grid {
395
- display: grid;
396
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
397
- gap: 20px;
398
- margin-top: 20px;
457
+ .status-grid {
458
+ display: flex;
459
+ gap: 16px;
399
460
  }
400
461
 
401
- .config-group {
402
- background: rgba(45, 45, 55, 0.3);
403
- border-radius: 10px;
404
- padding: 20px;
405
- border: 1px solid rgba(255, 255, 255, 0.05);
462
+ .status-box {
463
+ flex: 1;
464
+ background-color: #2a2a2a;
465
+ border-radius: 8px;
466
+ padding: 12px 16px;
467
+ display: flex;
468
+ align-items: center;
469
+ justify-content: space-between;
406
470
  }
407
471
 
408
- .config-group h6 {
409
- color: #4ecdc4;
410
- margin-bottom: 15px;
411
- font-weight: 600;
412
- display: flex;
413
- align-items: center;
414
- gap: 8px;
472
+ .status-name {
473
+ display: flex;
474
+ align-items: center;
475
+ font-weight: 600;
476
+ color: #fff;
415
477
  }
416
478
 
417
- /* Responsive design */
418
- @media (max-width: 768px) {
419
- .root {
420
- margin: 20px;
421
- padding: 30px 20px;
422
- }
479
+ .status-dot {
480
+ width: 8px;
481
+ height: 8px;
482
+ border-radius: 50%;
483
+ margin-right: 8px;
484
+ }
423
485
 
424
- h1 {
425
- font-size: 2rem;
426
- }
486
+ .status-dot.running {
487
+ background-color: var(--lime-primary);
488
+ }
427
489
 
428
- .info-key {
429
- font-size: 0.85rem;
430
- margin-bottom: 6px;
431
- }
490
+ .status-dot.stopped {
491
+ background-color: var(--text-secondary);
492
+ }
432
493
 
433
- .config-grid {
434
- grid-template-columns: 1fr;
435
- }
494
+ .status-value {
495
+ font-size: 0.9rem;
496
+ }
436
497
 
437
- .list-group {
438
- grid-template-columns: 1fr;
439
- }
498
+ .status-value.running {
499
+ color: var(--lime-primary);
500
+ }
440
501
 
441
- .nav-tabs .nav-link {
442
- padding: 12px 15px;
443
- font-size: 0.9rem;
444
- }
502
+ .status-value.stopped {
503
+ color: var(--text-secondary);
445
504
  }
446
505
 
447
- /* Network indicator */
448
- .network-indicator {
449
- display: inline-block;
450
- padding: 4px 12px;
451
- border-radius: 20px;
452
- font-size: 0.75rem;
453
- font-weight: 600;
454
- text-transform: uppercase;
455
- margin-left: 10px;
506
+ .card-footer-row {
507
+ display: flex;
508
+ align-items: center;
509
+ margin-top: 24px;
510
+ gap: 12px;
456
511
  }
457
512
 
458
- .network-regtest {
459
- background: rgba(251, 191, 36, 0.2);
460
- color: #fbbf24;
461
- border: 1px solid rgba(251, 191, 36, 0.3);
513
+ .regtest-badge {
514
+ display: inline-block;
515
+ padding: 6px 16px;
516
+ border: 1px solid var(--lime-primary);
517
+ color: var(--lime-primary);
518
+ border-radius: 20px;
519
+ font-size: 0.9rem;
520
+ font-weight: 500;
462
521
  }
463
522
 
464
- .network-testnet {
465
- background: rgba(59, 130, 246, 0.2);
466
- color: #3b82f6;
467
- border: 1px solid rgba(59, 130, 246, 0.3);
523
+ .settings-icon-btn {
524
+ background: none;
525
+ border: none;
526
+ color: var(--text-secondary);
527
+ font-size: 1.2rem;
528
+ cursor: pointer;
529
+ padding: 4px;
530
+ transition: color 0.2s;
468
531
  }
469
532
 
470
- .network-mainnet {
471
- background: rgba(34, 197, 94, 0.2);
472
- color: #22c55e;
473
- border: 1px solid rgba(34, 197, 94, 0.3);
533
+ .settings-icon-btn:hover {
534
+ color: #fff;
535
+ /* animation: spin 2s linear infinite; */
474
536
  }
475
537
 
476
- /* Modal styling improvements */
477
- .modal-content {
478
- background: rgba(30, 30, 30, 0.95);
479
- border: 1px solid rgba(255, 255, 255, 0.1);
480
- border-radius: 15px;
481
- color: #e0e0e0;
482
- backdrop-filter: blur(10px);
538
+ .manage-btn {
539
+ width: 100%;
540
+ background-color: var(--lime-primary);
541
+ color: #000;
542
+ font-weight: 700;
543
+ padding: 16px;
544
+ border-radius: 12px;
545
+ border: none;
546
+ font-size: 1.1rem;
547
+ display: flex;
548
+ justify-content: center;
549
+ align-items: center;
550
+ cursor: pointer;
551
+ transition: opacity 0.2s;
483
552
  }
484
553
 
485
- .modal-header {
486
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
487
- background: rgba(40, 40, 50, 0.8);
488
- border-radius: 15px 15px 0 0;
554
+ .manage-btn:hover {
555
+ opacity: 0.9;
489
556
  }
490
557
 
491
- .modal-footer {
492
- border-top: 1px solid rgba(255, 255, 255, 0.1);
493
- background: rgba(40, 40, 50, 0.8);
494
- border-radius: 0 0 15px 15px;
558
+ .manage-btn i {
559
+ margin-left: 8px;
495
560
  }
496
561
 
497
- .modal-title {
498
- color: #fff;
499
- font-weight: 500;
500
- font-size: 1.25rem;
562
+ /* Settings Modal Styles */
563
+ .settings-modal-overlay {
564
+ position: fixed;
565
+ top: 0;
566
+ left: 0;
567
+ width: 100%;
568
+ height: 100%;
569
+ background-color: rgba(0, 0, 0, 0.8);
570
+ z-index: 2000;
571
+ display: flex;
572
+ align-items: center;
573
+ justify-content: center;
574
+ backdrop-filter: blur(4px);
501
575
  }
502
576
 
503
- .modal-body {
504
- background: rgba(25, 25, 35, 0.9);
505
- color: #f0f0f0;
506
- font-size: 1.1rem;
507
- line-height: 1.6;
508
- padding: 25px;
509
- font-weight: 500;
577
+ .settings-modal {
578
+ background-color: #1a1a1a;
579
+ width: 90%;
580
+ max-width: 800px;
581
+ max-height: 90vh;
582
+ border-radius: 12px;
583
+ display: flex;
584
+ flex-direction: column;
585
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
586
+ border: 1px solid rgba(255, 255, 255, 0.1);
510
587
  }
511
588
 
512
- /* Success modal styling */
513
- #successModal .modal-title {
514
- color: #4ade80;
589
+ .settings-header {
590
+ padding: 20px 24px;
591
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
592
+ display: flex;
593
+ justify-content: space-between;
594
+ align-items: center;
515
595
  }
516
596
 
517
- #successModal .modal-body {
518
- color: #4ade80;
519
- font-weight: 600;
520
- text-shadow: 0 1px 3px rgba(74, 222, 128, 0.2);
597
+ .settings-header h3 {
598
+ margin: 0;
599
+ font-size: 1.25rem;
600
+ font-weight: 600;
601
+ color: #fff;
521
602
  }
522
603
 
523
- #successModal .modal-header {
524
- background: rgba(34, 197, 94, 0.1);
525
- border-bottom-color: rgba(74, 222, 128, 0.2);
604
+ .close-modal-btn {
605
+ background: none;
606
+ border: none;
607
+ color: var(--text-secondary);
608
+ font-size: 1.2rem;
609
+ cursor: pointer;
526
610
  }
527
611
 
528
- /* Error modal styling */
529
- #errorModal .modal-title {
530
- color: #f87171;
612
+ .close-modal-btn:hover {
613
+ color: #fff;
531
614
  }
532
615
 
533
- #errorModal .modal-body {
534
- color: #f87171;
535
- font-weight: 600;
536
- text-shadow: 0 1px 3px rgba(248, 113, 113, 0.2);
616
+ .settings-content {
617
+ padding: 24px;
618
+ overflow-y: auto;
537
619
  }
538
620
 
539
- #errorModal .modal-header {
540
- background: rgba(239, 68, 68, 0.1);
541
- border-bottom-color: rgba(248, 113, 113, 0.2);
621
+ .settings-section-title {
622
+ color: var(--lime-primary);
623
+ font-size: 0.9rem;
624
+ font-weight: 600;
625
+ margin-bottom: 16px;
626
+ margin-top: 24px;
542
627
  }
543
628
 
544
- .btn-close {
545
- filter: invert(1);
546
- opacity: 0.7;
547
- transition: opacity 0.3s ease;
629
+ .settings-section-title:first-child {
630
+ margin-top: 0;
631
+ }
632
+
633
+ .settings-grid {
634
+ display: grid;
635
+ grid-template-columns: 1fr 1fr;
636
+ gap: 16px;
637
+ }
638
+
639
+ .settings-field {
640
+ margin-bottom: 6px;
641
+ }
642
+
643
+ .settings-field label {
644
+ display: block;
645
+ font-size: 0.85rem;
646
+ color: var(--text-secondary);
647
+ margin-bottom: 8px;
648
+ }
649
+
650
+ .settings-input-group {
651
+ position: relative;
652
+ }
653
+
654
+ .settings-input {
655
+ width: 100%;
656
+ background-color: #2a2a2a;
657
+ border: none;
658
+ border-radius: 6px;
659
+ padding: 10px 12px;
660
+ color: #fff;
661
+ font-size: 0.95rem;
662
+ font-family: inherit;
663
+ }
664
+
665
+ .settings-input:focus {
666
+ outline: 1px solid var(--lime-primary);
548
667
  }
549
668
 
550
- .btn-close:hover {
551
- opacity: 1;
552
- transform: scale(1.1);
553
- }
669
+ .full-width {
670
+ grid-column: 1 / -1;
671
+ }
672
+
673
+ .password-toggle-icon {
674
+ position: absolute;
675
+ right: 12px;
676
+ top: 50%;
677
+ transform: translateY(-50%);
678
+ color: var(--text-secondary);
679
+ cursor: pointer;
680
+ font-size: 0.9rem;
681
+ }
682
+
683
+ /* Responsive */
684
+ @media (max-width: 768px) {
685
+ .status-grid {
686
+ flex-direction: column;
687
+ }
688
+
689
+ .settings-grid {
690
+ grid-template-columns: 1fr;
691
+ }
692
+
693
+ .welcome-title {
694
+ font-size: 2rem;
695
+ }
696
+
697
+ .root {
698
+ padding: 20px;
699
+ margin: 0;
700
+ }
701
+
702
+ .info-section {
703
+ padding: 20px;
704
+ }
705
+ }