shogun-button-react 1.5.32 → 1.5.33

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.
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { ShogunCore } from "shogun-core";
3
3
  import { Observable } from "rxjs";
4
+ import "../styles/index.css";
4
5
  type ShogunContextType = {
5
6
  sdk: ShogunCore | null;
6
7
  options: any;
@@ -1,510 +1,6 @@
1
1
  import React, { useContext, useState, createContext, useEffect, useRef, } from "react";
2
2
  import { Observable } from "rxjs";
3
- // CSS styles embedded directly in the component
4
- const styles = `
5
- /* Base styles */
6
- :root {
7
- --shogun-primary: #3b82f6;
8
- --shogun-primary-hover: #2563eb;
9
- --shogun-secondary: #6b7280;
10
- --shogun-success: #10b981;
11
- --shogun-danger: #ef4444;
12
- --shogun-warning: #f59e0b;
13
- --shogun-text: #1f2937;
14
- --shogun-text-secondary: #6b7280;
15
- --shogun-bg: #ffffff;
16
- --shogun-bg-secondary: #f3f4f6;
17
- --shogun-border: #e5e7eb;
18
- --shogun-border-radius: 12px;
19
- --shogun-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
20
- --shogun-transition: all 0.2s ease;
21
- --shogun-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
22
- }
23
-
24
- /* Dark mode support */
25
- @media (prefers-color-scheme: dark) {
26
- :root {
27
- --shogun-text: #f3f4f6;
28
- --shogun-text-secondary: #9ca3af;
29
- --shogun-bg: #1f2937;
30
- --shogun-bg-secondary: #374151;
31
- --shogun-border: #4b5563;
32
- }
33
- }
34
-
35
- /* Connect Button */
36
- .shogun-connect-button {
37
- display: flex;
38
- align-items: center;
39
- justify-content: center;
40
- gap: 8px;
41
- background-color: var(--shogun-primary);
42
- color: white;
43
- border: none;
44
- border-radius: var(--shogun-border-radius);
45
- padding: 10px 16px;
46
- font-family: var(--shogun-font);
47
- font-weight: 600;
48
- font-size: 14px;
49
- cursor: pointer;
50
- transition: var(--shogun-transition);
51
- box-shadow: var(--shogun-shadow);
52
- }
53
-
54
- .shogun-connect-button:hover {
55
- background-color: var(--shogun-primary-hover);
56
- }
57
-
58
- .shogun-connect-button:focus {
59
- outline: none;
60
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);
61
- }
62
-
63
- /* Logged in state */
64
- .shogun-logged-in-container {
65
- position: relative;
66
- }
67
-
68
- .shogun-dropdown {
69
- position: relative;
70
- }
71
-
72
- .shogun-button.shogun-logged-in {
73
- display: flex;
74
- align-items: center;
75
- gap: 8px;
76
- background-color: var(--shogun-bg-secondary);
77
- color: var(--shogun-text);
78
- border: 1px solid var(--shogun-border);
79
- border-radius: var(--shogun-border-radius);
80
- padding: 8px 12px;
81
- font-family: var(--shogun-font);
82
- font-size: 14px;
83
- cursor: pointer;
84
- transition: var(--shogun-transition);
85
- }
86
-
87
- .shogun-button.shogun-logged-in:hover {
88
- background-color: var(--shogun-bg);
89
- }
90
-
91
- .shogun-avatar {
92
- width: 24px;
93
- height: 24px;
94
- background-color: var(--shogun-primary);
95
- color: white;
96
- border-radius: 50%;
97
- display: flex;
98
- align-items: center;
99
- justify-content: center;
100
- font-weight: 600;
101
- font-size: 12px;
102
- }
103
-
104
- .shogun-username {
105
- font-weight: 500;
106
- }
107
-
108
- .shogun-dropdown-menu {
109
- position: absolute;
110
- top: calc(100% + 8px);
111
- right: 0;
112
- background-color: var(--shogun-bg);
113
- border: 1px solid var(--shogun-border);
114
- border-radius: var(--shogun-border-radius);
115
- box-shadow: var(--shogun-shadow);
116
- width: 240px;
117
- z-index: 9999;
118
- overflow: hidden;
119
- animation: shogun-dropdown-fade 0.2s ease;
120
- }
121
-
122
- @keyframes shogun-dropdown-fade {
123
- from {
124
- opacity: 0;
125
- transform: translateY(-8px);
126
- }
127
- to {
128
- opacity: 1;
129
- transform: translateY(0);
130
- }
131
- }
132
-
133
- .shogun-dropdown-header {
134
- padding: 16px;
135
- border-bottom: 1px solid var(--shogun-border);
136
- display: flex;
137
- align-items: center;
138
- gap: 12px;
139
- }
140
-
141
- .shogun-avatar-large {
142
- width: 40px;
143
- height: 40px;
144
- background-color: var(--shogun-primary);
145
- color: white;
146
- border-radius: 50%;
147
- display: flex;
148
- align-items: center;
149
- justify-content: center;
150
- font-weight: 600;
151
- font-size: 16px;
152
- }
153
-
154
- .shogun-user-info {
155
- display: flex;
156
- flex-direction: column;
157
- }
158
-
159
- .shogun-username-full {
160
- font-weight: 600;
161
- color: var(--shogun-text);
162
- font-size: 14px;
163
- }
164
-
165
- .shogun-dropdown-item {
166
- padding: 12px 16px;
167
- display: flex;
168
- align-items: center;
169
- gap: 12px;
170
- color: var(--shogun-text);
171
- font-size: 14px;
172
- cursor: pointer;
173
- transition: var(--shogun-transition);
174
- }
175
-
176
- .shogun-dropdown-item:hover {
177
- background-color: var(--shogun-bg-secondary);
178
- }
179
-
180
- /* Modal */
181
- .shogun-modal-overlay {
182
- position: fixed;
183
- top: 0;
184
- left: 0;
185
- right: 0;
186
- bottom: 0;
187
- background-color: rgba(0, 0, 0, 0.5);
188
- display: flex;
189
- align-items: center;
190
- justify-content: center;
191
- z-index: 2147483647 !important;
192
- animation: shogun-fade-in 0.2s ease;
193
- position: fixed !important;
194
- top: 0 !important;
195
- left: 0 !important;
196
- right: 0 !important;
197
- bottom: 0 !important;
198
- pointer-events: auto !important;
199
- }
200
-
201
- @keyframes shogun-fade-in {
202
- from {
203
- opacity: 0;
204
- }
205
- to {
206
- opacity: 1;
207
- }
208
- }
209
-
210
- .shogun-modal {
211
- background-color: var(--shogun-bg);
212
- border-radius: var(--shogun-border-radius);
213
- box-shadow: var(--shogun-shadow);
214
- width: 90%;
215
- max-width: 400px;
216
- max-height: 90vh;
217
- overflow-y: auto;
218
- animation: shogun-scale-in 0.2s ease;
219
- z-index: 2147483647 !important;
220
- position: relative !important;
221
- pointer-events: auto !important;
222
- }
223
-
224
- /* Ensure all modal content is also on top */
225
- .shogun-modal * {
226
- z-index: inherit !important;
227
- }
228
-
229
- @keyframes shogun-scale-in {
230
- from {
231
- opacity: 0;
232
- transform: scale(0.95);
233
- }
234
- to {
235
- opacity: 1;
236
- transform: scale(1);
237
- }
238
- }
239
-
240
- .shogun-modal-header {
241
- display: flex;
242
- justify-content: space-between;
243
- align-items: center;
244
- padding: 16px 20px;
245
- border-bottom: 1px solid var(--shogun-border);
246
- }
247
-
248
- .shogun-modal-header h2 {
249
- margin: 0;
250
- font-size: 1.5rem;
251
- font-weight: 600;
252
- color: var(--shogun-text);
253
- text-align: center;
254
- width: 100%;
255
- }
256
-
257
- .shogun-close-button {
258
- background: none;
259
- border: none;
260
- cursor: pointer;
261
- color: var(--shogun-text-secondary);
262
- padding: 4px;
263
- display: flex;
264
- align-items: center;
265
- justify-content: center;
266
- border-radius: 50%;
267
- transition: var(--shogun-transition);
268
- }
269
-
270
- .shogun-close-button:hover {
271
- background-color: var(--shogun-bg-secondary);
272
- color: var(--shogun-text);
273
- }
274
-
275
- .shogun-modal-content {
276
- padding: 20px;
277
- }
278
-
279
- /* Auth options */
280
- .shogun-auth-options {
281
- display: flex;
282
- flex-direction: column;
283
- gap: 12px;
284
- margin-bottom: 24px;
285
- }
286
-
287
- .shogun-auth-option-button {
288
- display: flex;
289
- align-items: center;
290
- justify-content: center;
291
- gap: 12px;
292
- background-color: var(--shogun-bg);
293
- color: var(--shogun-text);
294
- border: 1px solid var(--shogun-border);
295
- border-radius: var(--shogun-border-radius);
296
- padding: 12px 16px;
297
- font-family: var(--shogun-font);
298
- font-weight: 500;
299
- font-size: 14px;
300
- cursor: pointer;
301
- transition: var(--shogun-transition);
302
- width: 100%;
303
- }
304
-
305
- .shogun-auth-option-button:hover {
306
- background-color: var(--shogun-bg-secondary);
307
- }
308
-
309
- .shogun-auth-option-button:disabled {
310
- opacity: 0.6;
311
- cursor: not-allowed;
312
- }
313
-
314
- .shogun-google-button {
315
- border-color: #4285F4;
316
- }
317
-
318
- /* Divider */
319
- .shogun-divider {
320
- display: flex;
321
- align-items: center;
322
- margin: 20px 0;
323
- color: var(--shogun-text-secondary);
324
- font-size: 14px;
325
- }
326
-
327
- .shogun-divider::before,
328
- .shogun-divider::after {
329
- content: "";
330
- flex: 1;
331
- border-bottom: 1px solid var(--shogun-border);
332
- }
333
-
334
- .shogun-divider span {
335
- padding: 0 10px;
336
- }
337
-
338
- /* Form */
339
- .shogun-auth-form {
340
- display: flex;
341
- flex-direction: column;
342
- gap: 16px;
343
- }
344
-
345
- .shogun-form-group {
346
- display: flex;
347
- flex-direction: column;
348
- gap: 8px;
349
- }
350
-
351
- .shogun-form-group label {
352
- display: flex;
353
- align-items: center;
354
- gap: 8px;
355
- font-size: 14px;
356
- font-weight: 500;
357
- color: var(--shogun-text);
358
- }
359
-
360
- .shogun-form-group input {
361
- padding: 12px;
362
- border: 1px solid var(--shogun-border);
363
- border-radius: var(--shogun-border-radius);
364
- background-color: var(--shogun-bg);
365
- color: var(--shogun-text);
366
- font-size: 14px;
367
- transition: var(--shogun-transition);
368
- }
369
-
370
- .shogun-form-group input:focus {
371
- outline: none;
372
- border-color: var(--shogun-primary);
373
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
374
- }
375
-
376
- .shogun-submit-button {
377
- background-color: var(--shogun-primary);
378
- color: white;
379
- border: none;
380
- border-radius: var(--shogun-border-radius);
381
- padding: 12px 16px;
382
- font-family: var(--shogun-font);
383
- font-weight: 600;
384
- font-size: 14px;
385
- cursor: pointer;
386
- transition: var(--shogun-transition);
387
- margin-top: 8px;
388
- }
389
-
390
- .shogun-submit-button:hover:not(:disabled) {
391
- background-color: var(--shogun-primary-hover);
392
- }
393
-
394
- .shogun-submit-button:disabled {
395
- opacity: 0.6;
396
- cursor: not-allowed;
397
- }
398
-
399
- /* Footer */
400
- .shogun-form-footer {
401
- margin-top: 20px;
402
- text-align: center;
403
- font-size: 14px;
404
- color: var(--shogun-text-secondary);
405
- }
406
-
407
- .shogun-toggle-mode {
408
- background: none;
409
- border: none;
410
- color: var(--shogun-primary);
411
- font-weight: 600;
412
- cursor: pointer;
413
- padding: 0;
414
- margin-left: 4px;
415
- transition: var(--shogun-transition);
416
- }
417
-
418
- .shogun-toggle-mode:hover {
419
- text-decoration: underline;
420
- }
421
-
422
- .shogun-toggle-mode:disabled {
423
- opacity: 0.6;
424
- cursor: not-allowed;
425
- }
426
-
427
- /* Error message */
428
- .shogun-error-message {
429
- background-color: rgba(239, 68, 68, 0.1);
430
- color: var(--shogun-danger);
431
- padding: 12px;
432
- border-radius: var(--shogun-border-radius);
433
- margin-bottom: 16px;
434
- font-size: 14px;
435
- border: 1px solid rgba(239, 68, 68, 0.2);
436
- }
437
-
438
- .shogun-back-button {
439
- background: none;
440
- border: none;
441
- color: var(--shogun-text-secondary);
442
- cursor: pointer;
443
- font-size: 14px;
444
- margin-bottom: 16px;
445
- padding: 4px;
446
- display: flex;
447
- align-items: center;
448
- gap: 4px;
449
- font-weight: 500;
450
- transition: color 0.2s ease;
451
- }
452
-
453
- .shogun-back-button:hover {
454
- color: var(--shogun-text);
455
- }
456
-
457
- .shogun-prominent-toggle {
458
- font-weight: 600;
459
- color: var(--shogun-primary);
460
- padding: 8px 16px;
461
- margin-top: 16px;
462
- border: none;
463
- border-radius: 6px;
464
- background-color: transparent;
465
- transition: all 0.2s ease;
466
- cursor: pointer;
467
- display: inline-block;
468
- text-decoration: none;
469
- font-size: 14px;
470
- line-height: 1.4;
471
- min-height: 44px;
472
- display: flex;
473
- align-items: center;
474
- justify-content: center;
475
- }
476
-
477
- .shogun-prominent-toggle:hover {
478
- text-decoration: underline;
479
- background-color: rgba(59, 130, 246, 0.1);
480
- transform: translateY(-1px);
481
- }
482
-
483
- .shogun-prominent-toggle:active {
484
- transform: translateY(0);
485
- }
486
-
487
- .shogun-prominent-toggle:disabled {
488
- opacity: 0.5;
489
- cursor: not-allowed;
490
- pointer-events: none;
491
- }
492
-
493
- .shogun-prominent-toggle:focus {
494
- outline: 2px solid var(--shogun-primary);
495
- outline-offset: 2px;
496
- }
497
-
498
- /* Global styles to ensure modal is always on top */
499
- body.shogun-modal-open {
500
- overflow: hidden;
501
- }
502
-
503
- /* Prevent any other elements from being above the modal */
504
- *:not(.shogun-modal-overlay):not(.shogun-modal):not(.shogun-modal *) {
505
- z-index: auto !important;
506
- }
507
- `;
3
+ import "../styles/index.css";
508
4
  // Default context
509
5
  const defaultShogunContext = {
510
6
  sdk: null,
@@ -1009,52 +505,6 @@ export const ShogunButton = (() => {
1009
505
  };
1010
506
  }
1011
507
  }, [dropdownOpen]);
1012
- // Debug event listener
1013
- useEffect(() => {
1014
- const handleDebugLogin = (event) => {
1015
- var _a;
1016
- console.log("🔧 Debug login event received:", event.detail);
1017
- if ((_a = event.detail) === null || _a === void 0 ? void 0 : _a.method) {
1018
- console.log("🔧 Attempting debug login with method:", event.detail.method);
1019
- handleAuth(event.detail.method);
1020
- }
1021
- };
1022
- window.addEventListener("shogun-debug-login", handleDebugLogin);
1023
- return () => {
1024
- window.removeEventListener("shogun-debug-login", handleDebugLogin);
1025
- };
1026
- }, []);
1027
- // Auto-close modal when user becomes logged in
1028
- useEffect(() => {
1029
- if (isLoggedIn && modalIsOpen) {
1030
- console.log("🔧 User logged in, auto-closing modal");
1031
- setModalIsOpen(false);
1032
- }
1033
- }, [isLoggedIn, modalIsOpen]);
1034
- // Log error state changes
1035
- useEffect(() => {
1036
- if (error) {
1037
- console.error("🔧 Modal error state:", error);
1038
- }
1039
- }, [error]);
1040
- // Log loading state changes
1041
- useEffect(() => {
1042
- console.log("🔧 Modal loading state:", loading);
1043
- }, [loading]);
1044
- // Add/remove body class when modal is open
1045
- useEffect(() => {
1046
- if (modalIsOpen) {
1047
- document.body.classList.add("shogun-modal-open");
1048
- console.log("🔧 Modal opened, added body class");
1049
- }
1050
- else {
1051
- document.body.classList.remove("shogun-modal-open");
1052
- console.log("🔧 Modal closed, removed body class");
1053
- }
1054
- return () => {
1055
- document.body.classList.remove("shogun-modal-open");
1056
- };
1057
- }, [modalIsOpen]);
1058
508
  // If already logged in, show only logout button
1059
509
  if (isLoggedIn && username && !modalIsOpen) {
1060
510
  return (React.createElement("div", { className: "shogun-logged-in-container" },
@@ -1327,7 +777,7 @@ export const ShogunButton = (() => {
1327
777
  React.createElement("input", { type: "text", id: "securityQuestion", value: formSecurityQuestion, disabled: true })),
1328
778
  React.createElement("div", { className: "shogun-form-group" },
1329
779
  React.createElement("label", { htmlFor: "securityAnswer" },
1330
- React.createElement(KeyIcon, null),
780
+ React.createElement(UserIcon, null),
1331
781
  React.createElement("span", null, "Security Answer")),
1332
782
  React.createElement("input", { type: "text", id: "securityAnswer", value: formSecurityAnswer, onChange: (e) => setFormSecurityAnswer(e.target.value), disabled: loading, required: true, placeholder: "Enter your security answer" })))),
1333
783
  React.createElement("button", { type: "submit", className: "shogun-submit-button", disabled: loading }, loading
@@ -1513,7 +963,6 @@ export const ShogunButton = (() => {
1513
963
  }, disabled: loading }, "Back to Login Options"))));
1514
964
  // Render logic
1515
965
  return (React.createElement(React.Fragment, null,
1516
- React.createElement("style", { dangerouslySetInnerHTML: { __html: styles } }),
1517
966
  React.createElement("button", { className: "shogun-connect-button", onClick: openModal },
1518
967
  React.createElement(WalletIcon, null),
1519
968
  React.createElement("span", null, "Login / Sign Up")),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shogun-button-react",
3
3
  "description": "Shogun connector button",
4
- "version": "1.5.32",
4
+ "version": "1.5.33",
5
5
  "files": [
6
6
  "dist",
7
7
  "src/styles/index.css"
@@ -0,0 +1,480 @@
1
+ /* Base styles */
2
+ :root {
3
+ --shogun-primary: #3b82f6;
4
+ --shogun-primary-hover: #2563eb;
5
+ --shogun-secondary: #6b7280;
6
+ --shogun-success: #10b981;
7
+ --shogun-danger: #ef4444;
8
+ --shogun-warning: #f59e0b;
9
+ --shogun-text: #1f2937;
10
+ --shogun-text-secondary: #6b7280;
11
+ --shogun-bg: #ffffff;
12
+ --shogun-bg-secondary: #f3f4f6;
13
+ --shogun-border: #e5e7eb;
14
+ --shogun-border-radius: 12px;
15
+ --shogun-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
16
+ --shogun-transition: all 0.2s ease;
17
+ --shogun-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
18
+ }
19
+
20
+ /* Dark mode support */
21
+ @media (prefers-color-scheme: dark) {
22
+ :root {
23
+ --shogun-text: #f3f4f6;
24
+ --shogun-text-secondary: #9ca3af;
25
+ --shogun-bg: #1f2937;
26
+ --shogun-bg-secondary: #374151;
27
+ --shogun-border: #4b5563;
28
+ }
29
+ }
30
+
31
+ /* Connect Button */
32
+ .shogun-connect-button {
33
+ display: flex;
34
+ align-items: center;
35
+ justify-content: center;
36
+ gap: 8px;
37
+ background-color: var(--shogun-primary);
38
+ color: white;
39
+ border: none;
40
+ border-radius: var(--shogun-border-radius);
41
+ padding: 10px 16px;
42
+ font-family: var(--shogun-font);
43
+ font-weight: 600;
44
+ font-size: 14px;
45
+ cursor: pointer;
46
+ transition: var(--shogun-transition);
47
+ box-shadow: var(--shogun-shadow);
48
+ }
49
+
50
+ .shogun-connect-button:hover {
51
+ background-color: var(--shogun-primary-hover);
52
+ }
53
+
54
+ .shogun-connect-button:focus {
55
+ outline: none;
56
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);
57
+ }
58
+
59
+ /* Logged in state */
60
+ .shogun-logged-in-container {
61
+ position: relative;
62
+ }
63
+
64
+ .shogun-dropdown {
65
+ position: relative;
66
+ }
67
+
68
+ .shogun-button.shogun-logged-in {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 8px;
72
+ background-color: var(--shogun-bg-secondary);
73
+ color: var(--shogun-text);
74
+ border: 1px solid var(--shogun-border);
75
+ border-radius: var(--shogun-border-radius);
76
+ padding: 8px 12px;
77
+ font-family: var(--shogun-font);
78
+ font-size: 14px;
79
+ cursor: pointer;
80
+ transition: var(--shogun-transition);
81
+ }
82
+
83
+ .shogun-button.shogun-logged-in:hover {
84
+ background-color: var(--shogun-bg);
85
+ }
86
+
87
+ .shogun-avatar {
88
+ width: 24px;
89
+ height: 24px;
90
+ background-color: var(--shogun-primary);
91
+ color: white;
92
+ border-radius: 50%;
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ font-weight: 600;
97
+ font-size: 12px;
98
+ }
99
+
100
+ .shogun-username {
101
+ font-weight: 500;
102
+ }
103
+
104
+ .shogun-dropdown-menu {
105
+ position: absolute;
106
+ top: calc(100% + 8px);
107
+ right: 0;
108
+ background-color: var(--shogun-bg);
109
+ border: 1px solid var(--shogun-border);
110
+ border-radius: var(--shogun-border-radius);
111
+ box-shadow: var(--shogun-shadow);
112
+ width: 240px;
113
+ z-index: 9999;
114
+ overflow: hidden;
115
+ animation: shogun-dropdown-fade 0.2s ease;
116
+ }
117
+
118
+ @keyframes shogun-dropdown-fade {
119
+ from {
120
+ opacity: 0;
121
+ transform: translateY(-8px);
122
+ }
123
+ to {
124
+ opacity: 1;
125
+ transform: translateY(0);
126
+ }
127
+ }
128
+
129
+ .shogun-dropdown-header {
130
+ padding: 16px;
131
+ border-bottom: 1px solid var(--shogun-border);
132
+ display: flex;
133
+ align-items: center;
134
+ gap: 12px;
135
+ }
136
+
137
+ .shogun-avatar-large {
138
+ width: 40px;
139
+ height: 40px;
140
+ background-color: var(--shogun-primary);
141
+ color: white;
142
+ border-radius: 50%;
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ font-weight: 600;
147
+ font-size: 16px;
148
+ }
149
+
150
+ .shogun-user-info {
151
+ display: flex;
152
+ flex-direction: column;
153
+ }
154
+
155
+ .shogun-username-full {
156
+ font-weight: 600;
157
+ color: var(--shogun-text);
158
+ font-size: 14px;
159
+ }
160
+
161
+ .shogun-dropdown-item {
162
+ padding: 12px 16px;
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 12px;
166
+ color: var(--shogun-text);
167
+ font-size: 14px;
168
+ cursor: pointer;
169
+ transition: var(--shogun-transition);
170
+ }
171
+
172
+ .shogun-dropdown-item:hover {
173
+ background-color: var(--shogun-bg-secondary);
174
+ }
175
+
176
+ /* Modal */
177
+ .shogun-modal-overlay {
178
+ position: fixed;
179
+ top: 0;
180
+ left: 0;
181
+ right: 0;
182
+ bottom: 0;
183
+ background-color: rgba(0, 0, 0, 0.5);
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ z-index: 1000;
188
+ animation: shogun-fade-in 0.2s ease;
189
+ }
190
+
191
+ @keyframes shogun-fade-in {
192
+ from {
193
+ opacity: 0;
194
+ }
195
+ to {
196
+ opacity: 1;
197
+ }
198
+ }
199
+
200
+ .shogun-modal {
201
+ background-color: var(--shogun-bg);
202
+ border-radius: var(--shogun-border-radius);
203
+ box-shadow: var(--shogun-shadow);
204
+ width: 90%;
205
+ max-width: 400px;
206
+ max-height: 90vh;
207
+ overflow-y: auto;
208
+ animation: shogun-scale-in 0.2s ease;
209
+ }
210
+
211
+ @keyframes shogun-scale-in {
212
+ from {
213
+ opacity: 0;
214
+ transform: scale(0.95);
215
+ }
216
+ to {
217
+ opacity: 1;
218
+ transform: scale(1);
219
+ }
220
+ }
221
+
222
+ .shogun-modal-header {
223
+ display: flex;
224
+ justify-content: space-between;
225
+ align-items: center;
226
+ padding: 16px 20px;
227
+ border-bottom: 1px solid var(--shogun-border);
228
+ }
229
+
230
+ .shogun-modal-header h2 {
231
+ margin: 0;
232
+ font-size: 1.5rem;
233
+ font-weight: 600;
234
+ color: var(--shogun-text);
235
+ text-align: center;
236
+ width: 100%;
237
+ }
238
+
239
+ .shogun-close-button {
240
+ background: none;
241
+ border: none;
242
+ cursor: pointer;
243
+ color: var(--shogun-text-secondary);
244
+ padding: 4px;
245
+ display: flex;
246
+ align-items: center;
247
+ justify-content: center;
248
+ border-radius: 50%;
249
+ transition: var(--shogun-transition);
250
+ }
251
+
252
+ .shogun-close-button:hover {
253
+ background-color: var(--shogun-bg-secondary);
254
+ color: var(--shogun-text);
255
+ }
256
+
257
+ .shogun-modal-content {
258
+ padding: 20px;
259
+ }
260
+
261
+ /* Auth options */
262
+ .shogun-auth-options {
263
+ display: flex;
264
+ flex-direction: column;
265
+ gap: 12px;
266
+ margin-bottom: 24px;
267
+ }
268
+
269
+ .shogun-auth-option-button {
270
+ display: flex;
271
+ align-items: center;
272
+ justify-content: center;
273
+ gap: 12px;
274
+ background-color: var(--shogun-bg);
275
+ color: var(--shogun-text);
276
+ border: 1px solid var(--shogun-border);
277
+ border-radius: var(--shogun-border-radius);
278
+ padding: 12px 16px;
279
+ font-family: var(--shogun-font);
280
+ font-weight: 500;
281
+ font-size: 14px;
282
+ cursor: pointer;
283
+ transition: var(--shogun-transition);
284
+ width: 100%;
285
+ }
286
+
287
+ .shogun-auth-option-button:hover {
288
+ background-color: var(--shogun-bg-secondary);
289
+ }
290
+
291
+ .shogun-auth-option-button:disabled {
292
+ opacity: 0.6;
293
+ cursor: not-allowed;
294
+ }
295
+
296
+ .shogun-google-button {
297
+ border-color: #4285F4;
298
+ }
299
+
300
+ /* Divider */
301
+ .shogun-divider {
302
+ display: flex;
303
+ align-items: center;
304
+ margin: 20px 0;
305
+ color: var(--shogun-text-secondary);
306
+ font-size: 14px;
307
+ }
308
+
309
+ .shogun-divider::before,
310
+ .shogun-divider::after {
311
+ content: "";
312
+ flex: 1;
313
+ border-bottom: 1px solid var(--shogun-border);
314
+ }
315
+
316
+ .shogun-divider span {
317
+ padding: 0 10px;
318
+ }
319
+
320
+ /* Form */
321
+ .shogun-auth-form {
322
+ display: flex;
323
+ flex-direction: column;
324
+ gap: 16px;
325
+ }
326
+
327
+ .shogun-form-group {
328
+ display: flex;
329
+ flex-direction: column;
330
+ gap: 8px;
331
+ }
332
+
333
+ .shogun-form-group label {
334
+ display: flex;
335
+ align-items: center;
336
+ gap: 8px;
337
+ font-size: 14px;
338
+ font-weight: 500;
339
+ color: var(--shogun-text);
340
+ }
341
+
342
+ .shogun-form-group input {
343
+ padding: 12px;
344
+ border: 1px solid var(--shogun-border);
345
+ border-radius: var(--shogun-border-radius);
346
+ background-color: var(--shogun-bg);
347
+ color: var(--shogun-text);
348
+ font-size: 14px;
349
+ transition: var(--shogun-transition);
350
+ }
351
+
352
+ .shogun-form-group input:focus {
353
+ outline: none;
354
+ border-color: var(--shogun-primary);
355
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
356
+ }
357
+
358
+ .shogun-submit-button {
359
+ background-color: var(--shogun-primary);
360
+ color: white;
361
+ border: none;
362
+ border-radius: var(--shogun-border-radius);
363
+ padding: 12px 16px;
364
+ font-family: var(--shogun-font);
365
+ font-weight: 600;
366
+ font-size: 14px;
367
+ cursor: pointer;
368
+ transition: var(--shogun-transition);
369
+ margin-top: 8px;
370
+ }
371
+
372
+ .shogun-submit-button:hover:not(:disabled) {
373
+ background-color: var(--shogun-primary-hover);
374
+ }
375
+
376
+ .shogun-submit-button:disabled {
377
+ opacity: 0.6;
378
+ cursor: not-allowed;
379
+ }
380
+
381
+ /* Footer */
382
+ .shogun-form-footer {
383
+ margin-top: 20px;
384
+ text-align: center;
385
+ font-size: 14px;
386
+ color: var(--shogun-text-secondary);
387
+ }
388
+
389
+ .shogun-toggle-mode {
390
+ background: none;
391
+ border: none;
392
+ color: var(--shogun-primary);
393
+ font-weight: 600;
394
+ cursor: pointer;
395
+ padding: 0;
396
+ margin-left: 4px;
397
+ transition: var(--shogun-transition);
398
+ }
399
+
400
+ .shogun-toggle-mode:hover {
401
+ text-decoration: underline;
402
+ }
403
+
404
+ .shogun-toggle-mode:disabled {
405
+ opacity: 0.6;
406
+ cursor: not-allowed;
407
+ }
408
+
409
+ /* Error message */
410
+ .shogun-error-message {
411
+ background-color: rgba(239, 68, 68, 0.1);
412
+ color: var(--shogun-danger);
413
+ padding: 12px;
414
+ border-radius: var(--shogun-border-radius);
415
+ margin-bottom: 16px;
416
+ font-size: 14px;
417
+ border: 1px solid rgba(239, 68, 68, 0.2);
418
+ }
419
+
420
+ .shogun-back-button {
421
+ background: none;
422
+ border: none;
423
+ color: var(--shogun-text-secondary);
424
+ cursor: pointer;
425
+ font-size: 14px;
426
+ margin-bottom: 16px;
427
+ padding: 4px;
428
+ display: flex;
429
+ align-items: center;
430
+ gap: 4px;
431
+ font-weight: 500;
432
+ transition: color 0.2s ease;
433
+ }
434
+
435
+ .shogun-back-button:hover {
436
+ color: var(--shogun-text);
437
+ }
438
+
439
+ .shogun-prominent-toggle {
440
+ font-weight: 600;
441
+ color: var(--shogun-primary);
442
+ padding: 8px 16px;
443
+ margin-top: 16px;
444
+ border: none;
445
+ border-radius: 6px;
446
+ background-color: transparent;
447
+ transition: all 0.2s ease;
448
+ cursor: pointer;
449
+ display: inline-block;
450
+ text-decoration: none;
451
+ font-size: 14px;
452
+ line-height: 1.4;
453
+ min-height: 44px;
454
+ display: flex;
455
+ align-items: center;
456
+ justify-content: center;
457
+ }
458
+
459
+ .shogun-prominent-toggle:hover {
460
+ text-decoration: underline;
461
+ background-color: rgba(59, 130, 246, 0.1);
462
+ transform: translateY(-1px);
463
+ }
464
+
465
+ .shogun-prominent-toggle:active {
466
+ transform: translateY(0);
467
+ }
468
+
469
+ .shogun-prominent-toggle:disabled {
470
+ opacity: 0.5;
471
+ cursor: not-allowed;
472
+ pointer-events: none;
473
+ }
474
+
475
+ .shogun-prominent-toggle:focus {
476
+ outline: 2px solid var(--shogun-primary);
477
+ outline-offset: 2px;
478
+ }
479
+
480
+ /* Redundant dark theme styles removed */