codeapp-js 0.2.1 → 0.3.0

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 (100) hide show
  1. package/codeApp/.power/schemas/appschemas/dataSourcesInfo.ts +6275 -0
  2. package/codeApp/.power/schemas/jira/jira.Schema.json +6903 -0
  3. package/codeApp/.power/schemas/keyvault/keyvault.Schema.json +1600 -0
  4. package/codeApp/.power/schemas/teams/teams.Schema.json +11112 -0
  5. package/codeApp/dist/codeapp.js +992 -4
  6. package/codeApp/dist/power-apps-data.js +145 -31
  7. package/codeApp/src/generated/index.ts +12 -0
  8. package/codeApp/src/generated/models/AzureKeyVaultModel.ts +107 -0
  9. package/codeApp/src/generated/models/JiraModel.ts +501 -0
  10. package/codeApp/src/generated/models/Office365GroupsModel.ts +363 -0
  11. package/codeApp/src/generated/models/Office365OutlookModel.ts +2046 -0
  12. package/codeApp/src/generated/models/Office365UsersModel.ts +254 -0
  13. package/codeApp/src/generated/services/AzureKeyVaultService.ts +257 -0
  14. package/codeApp/src/generated/services/JiraService.ts +1124 -0
  15. package/codeApp/src/generated/services/Office365GroupsService.ts +326 -0
  16. package/codeApp/src/generated/services/Office365OutlookService.ts +2476 -0
  17. package/codeApp/src/generated/services/Office365UsersService.ts +358 -0
  18. package/dev files/outlook.js +218 -9
  19. package/examples/combined demo/dist/codeapp.js +1098 -1098
  20. package/examples/combined demo/dist/index.js +470 -470
  21. package/examples/combined demo/dist/power-apps-data.js +3006 -3006
  22. package/examples/combined demo/power.config.json +42 -42
  23. package/examples/dataverse Demo/dist/codeapp.js +1085 -1085
  24. package/examples/dataverse Demo/dist/index.html +54 -54
  25. package/examples/dataverse Demo/dist/index.js +82 -82
  26. package/examples/dataverse Demo/dist/power-apps-data.js +2911 -2911
  27. package/examples/dataverse Demo/power.config.json +34 -34
  28. package/examples/dataverse Demo/readme.md +79 -79
  29. package/examples/groups Demo/dist/codeapp.js +1085 -1085
  30. package/examples/groups Demo/dist/index.js +113 -113
  31. package/examples/groups Demo/dist/power-apps-data.js +2911 -2911
  32. package/examples/kanban/dist/dataverse.js +94 -94
  33. package/examples/kanban/dist/environmentVar.js +55 -55
  34. package/examples/kanban/dist/office365groups.js +97 -97
  35. package/examples/kanban/dist/office365users.js +169 -169
  36. package/examples/kanban/dist/outlook.js +162 -162
  37. package/examples/kanban/dist/power-apps-data.js +2953 -2953
  38. package/examples/kanban/dist/sharepoint.js +339 -339
  39. package/examples/myProfile/dist/index.html +184 -184
  40. package/examples/myProfile/dist/index.js +141 -141
  41. package/examples/myProfile/dist/office365users.js +169 -169
  42. package/examples/myProfile/dist/power-apps-data.js +2953 -2953
  43. package/examples/myProfile/power.config.json +22 -22
  44. package/examples/myProfile/readme.md +79 -79
  45. package/examples/outlook Demo/dist/codeapp.js +1085 -1085
  46. package/examples/outlook Demo/dist/index.html +35 -35
  47. package/examples/outlook Demo/dist/index.js +170 -170
  48. package/examples/outlook Demo/dist/outlook.js +121 -121
  49. package/examples/outlook Demo/dist/power-apps-data.js +2911 -2911
  50. package/examples/outlook Demo/dist/styles.css +84 -84
  51. package/examples/outlook Demo/readme.md +82 -82
  52. package/examples/outlook Demo2/OutlookDemo_1_0_0_1.zip +0 -0
  53. package/examples/outlook Demo2/agent/decision-log.md +7 -0
  54. package/examples/{solution explorer → outlook Demo2}/dist/codeapp.js +245 -9
  55. package/examples/outlook Demo2/dist/index.html +98 -0
  56. package/examples/outlook Demo2/dist/index.js +272 -0
  57. package/examples/outlook Demo2/dist/styles.css +639 -0
  58. package/examples/outlook Demo2/power.config.json +23 -0
  59. package/examples/outlook Demo2/src/generated/index.ts +14 -0
  60. package/examples/outlook Demo2/src/generated/models/Office365GroupsModel.ts +363 -0
  61. package/examples/outlook Demo2/src/generated/models/Office365OutlookModel.ts +2046 -0
  62. package/examples/outlook Demo2/src/generated/models/Office365UsersModel.ts +254 -0
  63. package/examples/outlook Demo2/src/generated/services/Office365GroupsService.ts +326 -0
  64. package/examples/outlook Demo2/src/generated/services/Office365OutlookService.ts +2476 -0
  65. package/examples/outlook Demo2/src/generated/services/Office365UsersService.ts +358 -0
  66. package/examples/planning Poker/.vscode/settings.json +4 -4
  67. package/examples/planning Poker/additional files/customizations (tables).xml +6428 -6428
  68. package/examples/planning Poker/additional files/dataverse-tables.json +165 -165
  69. package/examples/planning Poker/additional files/readme.md +122 -122
  70. package/examples/planning Poker/dist/dataverse.js +78 -78
  71. package/examples/planning Poker/dist/index.html +198 -198
  72. package/examples/planning Poker/dist/index.js +954 -954
  73. package/examples/planning Poker/dist/power-apps-data.js +2953 -2953
  74. package/examples/planning Poker/dist/styles.css +815 -815
  75. package/examples/sharePoint Demo/agent/decision-log.md +5 -5
  76. package/examples/sharePoint Demo/dist/codeapp.js +1085 -1085
  77. package/examples/sharePoint Demo/dist/index.js +262 -262
  78. package/examples/sharePoint Demo/dist/power-apps-data.js +2911 -2911
  79. package/examples/sharePoint Demo/power.config.json +22 -22
  80. package/examples/todo/dist/dataverse.js +64 -64
  81. package/examples/todo/dist/index.html +75 -75
  82. package/examples/todo/dist/index.js +8 -8
  83. package/examples/todo/dist/power-apps-data.js +2953 -2953
  84. package/examples/todo/dist/renderer.js +375 -375
  85. package/examples/todo/dist/styles.css +691 -691
  86. package/examples/todo/power.config.json +34 -34
  87. package/package.json +1 -1
  88. package/readme.md +33 -4
  89. package/examples/solution explorer/agent/decision-log.md +0 -27
  90. package/examples/solution explorer/agent/mockup-01-swiss-grid.html +0 -452
  91. package/examples/solution explorer/agent/mockup-02-dark-glass.html +0 -496
  92. package/examples/solution explorer/agent/mockup-03-paper-console.html +0 -510
  93. package/examples/solution explorer/agent/mockup-04-neon-noir.html +0 -546
  94. package/examples/solution explorer/agent/mockup-05-zen-garden.html +0 -534
  95. package/examples/solution explorer/dist/index.html +0 -80
  96. package/examples/solution explorer/dist/index.js +0 -735
  97. package/examples/solution explorer/dist/styles.css +0 -571
  98. package/examples/solution explorer/power.config.json +0 -151
  99. /package/examples/{solution explorer → outlook Demo2}/dist/icon-512.png +0 -0
  100. /package/examples/{solution explorer → outlook Demo2}/dist/power-apps-data.js +0 -0
@@ -1,815 +1,815 @@
1
- /* ═══════════════════════════════════════════
2
- Planning Poker — Neo-Brutalist Theme
3
- Off-white + Black + Electric Lime
4
- Space Mono + Work Sans
5
- ═══════════════════════════════════════════ */
6
-
7
-
8
- :root {
9
- --bg: #f5f0e8;
10
- --bg-alt: #ebe5d9;
11
- --black: #111111;
12
- --lime: #b8f72e;
13
- --lime-dark: #8ec41a;
14
- --red: #ff3b30;
15
- --white: #ffffff;
16
- --border: 3px solid var(--black);
17
- --shadow: 5px 5px 0 var(--black);
18
- --shadow-sm: 3px 3px 0 var(--black);
19
- }
20
-
21
- * { margin: 0; padding: 0; box-sizing: border-box; }
22
-
23
- body {
24
- font-family: 'Work Sans', sans-serif;
25
- background: var(--bg);
26
- color: var(--black);
27
- min-height: 100vh;
28
- overflow-x: hidden;
29
- }
30
-
31
- /* ── Grid Background ── */
32
- body::before {
33
- content: '';
34
- position: fixed;
35
- inset: 0;
36
- background-image:
37
- linear-gradient(rgba(17,17,17,0.04) 1px, transparent 1px),
38
- linear-gradient(90deg, rgba(17,17,17,0.04) 1px, transparent 1px);
39
- background-size: 24px 24px;
40
- pointer-events: none;
41
- z-index: 0;
42
- }
43
-
44
- /* ── Error Toast ── */
45
- .error-toast {
46
- position: fixed;
47
- top: 1rem;
48
- left: 50%;
49
- transform: translateX(-50%);
50
- background: var(--red);
51
- color: var(--white);
52
- padding: 0.75rem 1.5rem;
53
- font-family: 'Space Mono', monospace;
54
- font-weight: 700;
55
- font-size: 0.8rem;
56
- border: var(--border);
57
- box-shadow: var(--shadow-sm);
58
- z-index: 1000;
59
- text-transform: uppercase;
60
- letter-spacing: 0.05em;
61
- animation: slideDown 0.3s ease-out;
62
- }
63
-
64
- @keyframes slideDown {
65
- from { transform: translateX(-50%) translateY(-100%); opacity: 0; }
66
- to { transform: translateX(-50%) translateY(0); opacity: 1; }
67
- }
68
-
69
- /* ── Header ── */
70
- .app-header {
71
- display: flex;
72
- align-items: stretch;
73
- border-bottom: var(--border);
74
- position: relative;
75
- z-index: 2;
76
- background: var(--white);
77
- }
78
-
79
- .brand-block {
80
- background: var(--black);
81
- color: var(--lime);
82
- padding: 0.8rem 1.5rem;
83
- font-family: 'Space Mono', monospace;
84
- font-weight: 700;
85
- font-size: 1rem;
86
- letter-spacing: 0.05em;
87
- text-transform: uppercase;
88
- display: flex;
89
- align-items: center;
90
- gap: 0.5rem;
91
- white-space: nowrap;
92
- }
93
-
94
- .session-info {
95
- flex: 1;
96
- padding: 0.8rem 1.25rem;
97
- display: flex;
98
- align-items: center;
99
- gap: 1rem;
100
- border-right: var(--border);
101
- }
102
-
103
- .session-badge {
104
- background: var(--lime);
105
- padding: 0.2rem 0.6rem;
106
- font-family: 'Space Mono', monospace;
107
- font-weight: 700;
108
- font-size: 0.7rem;
109
- text-transform: uppercase;
110
- border: 2px solid var(--black);
111
- white-space: nowrap;
112
- }
113
-
114
- .session-name-text {
115
- font-weight: 600;
116
- font-size: 0.95rem;
117
- overflow: hidden;
118
- text-overflow: ellipsis;
119
- white-space: nowrap;
120
- }
121
-
122
- .participants-count {
123
- padding: 0.8rem 1.25rem;
124
- font-family: 'Space Mono', monospace;
125
- font-weight: 700;
126
- font-size: 0.85rem;
127
- display: flex;
128
- align-items: center;
129
- gap: 0.5rem;
130
- }
131
-
132
- .btn-leave {
133
- background: var(--red);
134
- color: var(--white);
135
- border: none;
136
- border-left: var(--border);
137
- padding: 0.8rem 1.25rem;
138
- font-family: 'Space Mono', monospace;
139
- font-weight: 700;
140
- font-size: 1rem;
141
- cursor: pointer;
142
- transition: background 0.15s;
143
- }
144
-
145
- .btn-leave:hover {
146
- background: #cc2f26;
147
- }
148
-
149
- /* ── Main Layout ── */
150
- .app-main {
151
- position: relative;
152
- z-index: 1;
153
- max-width: 1100px;
154
- margin: 0 auto;
155
- padding: 2rem;
156
- }
157
-
158
- /* ── Footer ── */
159
- .app-footer {
160
- text-align: center;
161
- margin-top: 2rem;
162
- padding: 1rem 2rem;
163
- border-top: 2px dashed var(--black);
164
- font-family: 'Space Mono', monospace;
165
- font-size: 0.7rem;
166
- text-transform: uppercase;
167
- letter-spacing: 0.1em;
168
- color: #666;
169
- }
170
-
171
- /* ═══════════════════════════════════════════
172
- WELCOME VIEW
173
- ═══════════════════════════════════════════ */
174
-
175
- .welcome-hero {
176
- text-align: center;
177
- margin-bottom: 2.5rem;
178
- }
179
-
180
- .welcome-hero h2 {
181
- font-family: 'Space Mono', monospace;
182
- font-weight: 700;
183
- font-size: 2.5rem;
184
- text-transform: uppercase;
185
- letter-spacing: 0.05em;
186
- margin-bottom: 0.5rem;
187
- }
188
-
189
- .welcome-hero p {
190
- font-size: 1rem;
191
- color: #555;
192
- }
193
-
194
- .welcome-grid {
195
- display: grid;
196
- grid-template-columns: 1fr 1fr;
197
- gap: 2rem;
198
- }
199
-
200
- /* ── Panel (shared) ── */
201
- .panel {
202
- background: var(--white);
203
- border: var(--border);
204
- box-shadow: var(--shadow);
205
- padding: 1.5rem 2rem;
206
- }
207
-
208
- .panel-title {
209
- font-family: 'Space Mono', monospace;
210
- font-weight: 700;
211
- font-size: 1.1rem;
212
- text-transform: uppercase;
213
- margin-bottom: 1.25rem;
214
- display: flex;
215
- align-items: center;
216
- gap: 0.5rem;
217
- }
218
-
219
- .panel-title::before {
220
- content: '//';
221
- color: var(--lime-dark);
222
- }
223
-
224
- /* ── Forms ── */
225
- .form-group {
226
- margin-bottom: 1rem;
227
- }
228
-
229
- .form-group label {
230
- display: block;
231
- font-family: 'Space Mono', monospace;
232
- font-weight: 700;
233
- font-size: 0.7rem;
234
- text-transform: uppercase;
235
- letter-spacing: 0.1em;
236
- margin-bottom: 0.4rem;
237
- color: #444;
238
- }
239
-
240
- .form-group input,
241
- .form-group select {
242
- width: 100%;
243
- padding: 0.7rem 0.9rem;
244
- font-family: 'Work Sans', sans-serif;
245
- font-size: 0.9rem;
246
- border: var(--border);
247
- background: var(--bg);
248
- color: var(--black);
249
- outline: none;
250
- transition: box-shadow 0.15s;
251
- }
252
-
253
- .form-group input:focus,
254
- .form-group select:focus {
255
- box-shadow: var(--shadow-sm);
256
- background: var(--white);
257
- }
258
-
259
- .form-group input::placeholder {
260
- color: #999;
261
- }
262
-
263
- .form-row {
264
- display: flex;
265
- gap: 1rem;
266
- }
267
-
268
- .form-group-grow {
269
- flex: 1;
270
- }
271
-
272
- /* ── Buttons ── */
273
- .btn-brutal {
274
- padding: 0.85rem 2.5rem;
275
- font-family: 'Space Mono', monospace;
276
- font-weight: 700;
277
- font-size: 0.85rem;
278
- text-transform: uppercase;
279
- letter-spacing: 0.08em;
280
- border: var(--border);
281
- cursor: pointer;
282
- transition: all 0.15s;
283
- display: inline-block;
284
- }
285
-
286
- .btn-brutal-primary {
287
- background: var(--lime);
288
- color: var(--black);
289
- box-shadow: var(--shadow-sm);
290
- }
291
-
292
- .btn-brutal-primary:hover {
293
- box-shadow: 6px 6px 0 var(--black);
294
- transform: translate(-1px, -1px);
295
- }
296
-
297
- .btn-brutal-primary:disabled {
298
- opacity: 0.5;
299
- cursor: not-allowed;
300
- box-shadow: none;
301
- transform: none;
302
- }
303
-
304
- .btn-brutal-share {
305
- background: var(--white);
306
- color: var(--black);
307
- box-shadow: var(--shadow-sm);
308
- padding: 0.5rem 1.2rem;
309
- font-size: 0.75rem;
310
- }
311
-
312
- .btn-brutal-share:hover {
313
- box-shadow: 6px 6px 0 var(--black);
314
- transform: translate(-1px, -1px);
315
- }
316
-
317
- .btn-brutal-danger {
318
- background: var(--red);
319
- color: var(--white);
320
- box-shadow: var(--shadow-sm);
321
- padding: 0.5rem 1.2rem;
322
- font-size: 0.75rem;
323
- }
324
-
325
- .btn-brutal-danger:hover {
326
- box-shadow: 6px 6px 0 var(--black);
327
- transform: translate(-1px, -1px);
328
- }
329
-
330
- .btn-brutal-secondary {
331
- background: var(--white);
332
- color: var(--black);
333
- box-shadow: var(--shadow-sm);
334
- }
335
-
336
- .btn-brutal-secondary:hover {
337
- background: var(--bg-alt);
338
- }
339
-
340
- .btn-disabled {
341
- opacity: 0.6;
342
- cursor: default;
343
- }
344
-
345
- .btn-disabled:hover {
346
- background: var(--white);
347
- }
348
-
349
- /* ═══════════════════════════════════════════
350
- SESSION VIEW
351
- ═══════════════════════════════════════════ */
352
-
353
- /* ── Waiting Message ── */
354
- .waiting-message {
355
- text-align: center;
356
- padding: 2rem;
357
- }
358
-
359
- .waiting-icon {
360
- font-size: 2.5rem;
361
- display: block;
362
- margin-bottom: 0.75rem;
363
- }
364
-
365
- .waiting-message h3 {
366
- font-family: 'Space Mono', monospace;
367
- font-weight: 700;
368
- font-size: 1.1rem;
369
- text-transform: uppercase;
370
- margin-bottom: 0.5rem;
371
- }
372
-
373
- .waiting-message p {
374
- font-size: 0.9rem;
375
- color: #666;
376
- }
377
-
378
- /* ── Story / Round Panel ── */
379
- .story-panel {
380
- background: var(--white);
381
- border: var(--border);
382
- box-shadow: var(--shadow);
383
- padding: 1.5rem 2rem;
384
- margin-bottom: 2rem;
385
- }
386
-
387
- .story-panel h2 {
388
- font-family: 'Space Mono', monospace;
389
- font-weight: 700;
390
- font-size: 1.1rem;
391
- text-transform: uppercase;
392
- margin-bottom: 0.75rem;
393
- display: flex;
394
- align-items: center;
395
- gap: 0.75rem;
396
- }
397
-
398
- .story-badge {
399
- background: var(--lime);
400
- padding: 0.2rem 0.6rem;
401
- font-family: 'Space Mono', monospace;
402
- font-weight: 700;
403
- font-size: 0.7rem;
404
- text-transform: uppercase;
405
- border: 2px solid var(--black);
406
- white-space: nowrap;
407
- }
408
-
409
- .story-panel p {
410
- font-size: 0.95rem;
411
- line-height: 1.6;
412
- color: #333;
413
- }
414
-
415
- /* ── Participants Strip ── */
416
- .participants-strip {
417
- display: flex;
418
- gap: 1rem;
419
- margin-bottom: 2rem;
420
- flex-wrap: wrap;
421
- justify-content: center;
422
- }
423
-
424
- .participant {
425
- display: flex;
426
- flex-direction: column;
427
- align-items: center;
428
- gap: 0.35rem;
429
- }
430
-
431
- .participant-avatar {
432
- width: 48px;
433
- height: 48px;
434
- border: 3px solid var(--black);
435
- background: var(--bg-alt);
436
- display: flex;
437
- align-items: center;
438
- justify-content: center;
439
- font-family: 'Space Mono', monospace;
440
- font-weight: 700;
441
- font-size: 0.9rem;
442
- position: relative;
443
- }
444
-
445
- .participant-avatar.voted::after {
446
- content: '\2713';
447
- position: absolute;
448
- bottom: -4px;
449
- right: -4px;
450
- width: 18px;
451
- height: 18px;
452
- background: var(--lime);
453
- border: 2px solid var(--black);
454
- font-size: 0.6rem;
455
- display: flex;
456
- align-items: center;
457
- justify-content: center;
458
- }
459
-
460
- .participant-avatar.waiting {
461
- border-style: dashed;
462
- }
463
-
464
- .participant-avatar.owner {
465
- border-color: var(--lime-dark);
466
- }
467
-
468
- .participant-name {
469
- font-size: 0.65rem;
470
- font-weight: 600;
471
- text-transform: uppercase;
472
- letter-spacing: 0.05em;
473
- }
474
-
475
- /* ── Card Hand ── */
476
- .card-hand-section {
477
- text-align: center;
478
- margin-top: 1rem;
479
- }
480
-
481
- .card-hand-label {
482
- font-family: 'Space Mono', monospace;
483
- font-weight: 700;
484
- font-size: 0.8rem;
485
- text-transform: uppercase;
486
- letter-spacing: 0.15em;
487
- margin-bottom: 1.25rem;
488
- display: inline-block;
489
- background: var(--black);
490
- color: var(--lime);
491
- padding: 0.4rem 1rem;
492
- }
493
-
494
- .card-hand {
495
- display: flex;
496
- justify-content: center;
497
- gap: 0.75rem;
498
- flex-wrap: wrap;
499
- padding: 1rem 0;
500
- }
501
-
502
- .poker-card {
503
- width: 72px;
504
- height: 104px;
505
- background: var(--white);
506
- border: var(--border);
507
- box-shadow: var(--shadow-sm);
508
- display: flex;
509
- align-items: center;
510
- justify-content: center;
511
- font-family: 'Space Mono', monospace;
512
- font-weight: 700;
513
- font-size: 1.4rem;
514
- cursor: pointer;
515
- transition: all 0.15s;
516
- position: relative;
517
- user-select: none;
518
- }
519
-
520
- .poker-card::before {
521
- content: '';
522
- position: absolute;
523
- top: 4px;
524
- left: 4px;
525
- right: 4px;
526
- bottom: 4px;
527
- border: 1px solid var(--bg-alt);
528
- pointer-events: none;
529
- }
530
-
531
- .poker-card:hover {
532
- transform: translateY(-12px);
533
- box-shadow: 5px 12px 0 var(--black);
534
- background: var(--lime);
535
- }
536
-
537
- .poker-card.selected {
538
- background: var(--lime);
539
- transform: translateY(-16px) scale(1.05);
540
- box-shadow: 6px 14px 0 var(--black);
541
- }
542
-
543
- .poker-card.special {
544
- font-size: 1rem;
545
- }
546
-
547
- /* ── Vote Actions ── */
548
- .vote-actions {
549
- display: flex;
550
- justify-content: center;
551
- gap: 1rem;
552
- margin-top: 2rem;
553
- }
554
-
555
- /* ── Voted Confirmation ── */
556
- .voted-message {
557
- text-align: center;
558
- margin-top: 2rem;
559
- padding: 1rem;
560
- font-family: 'Space Mono', monospace;
561
- font-weight: 700;
562
- font-size: 0.9rem;
563
- text-transform: uppercase;
564
- letter-spacing: 0.05em;
565
- background: var(--lime);
566
- border: var(--border);
567
- box-shadow: var(--shadow-sm);
568
- }
569
-
570
- /* ── Card Slam Animation ── */
571
- @keyframes slamIn {
572
- 0% { opacity: 0; transform: translateY(30px) rotate(-2deg); }
573
- 60% { transform: translateY(-3px) rotate(0.5deg); }
574
- 100% { opacity: 1; transform: translateY(0) rotate(0); }
575
- }
576
-
577
- .poker-card { animation: slamIn 0.3s ease-out both; }
578
- .poker-card:nth-child(1) { animation-delay: 0.05s; }
579
- .poker-card:nth-child(2) { animation-delay: 0.08s; }
580
- .poker-card:nth-child(3) { animation-delay: 0.11s; }
581
- .poker-card:nth-child(4) { animation-delay: 0.14s; }
582
- .poker-card:nth-child(5) { animation-delay: 0.17s; }
583
- .poker-card:nth-child(6) { animation-delay: 0.20s; }
584
- .poker-card:nth-child(7) { animation-delay: 0.23s; }
585
- .poker-card:nth-child(8) { animation-delay: 0.26s; }
586
- .poker-card:nth-child(9) { animation-delay: 0.29s; }
587
- .poker-card:nth-child(10) { animation-delay: 0.32s; }
588
- .poker-card:nth-child(11) { animation-delay: 0.35s; }
589
- .poker-card:nth-child(12) { animation-delay: 0.38s; }
590
-
591
- /* ═══════════════════════════════════════════
592
- RESULTS VIEW
593
- ═══════════════════════════════════════════ */
594
-
595
- .results-header {
596
- text-align: center;
597
- margin-bottom: 2rem;
598
- }
599
-
600
- .results-header h2 {
601
- font-family: 'Space Mono', monospace;
602
- font-weight: 700;
603
- font-size: 1.4rem;
604
- text-transform: uppercase;
605
- margin-top: 0.75rem;
606
- }
607
-
608
- .stats-row {
609
- display: flex;
610
- justify-content: center;
611
- gap: 2rem;
612
- margin-bottom: 2.5rem;
613
- }
614
-
615
- .stat-card {
616
- background: var(--white);
617
- border: var(--border);
618
- box-shadow: var(--shadow);
619
- padding: 1.5rem 2.5rem;
620
- text-align: center;
621
- display: flex;
622
- flex-direction: column;
623
- gap: 0.25rem;
624
- }
625
-
626
- .stat-value {
627
- font-family: 'Space Mono', monospace;
628
- font-weight: 700;
629
- font-size: 2.5rem;
630
- color: var(--black);
631
- }
632
-
633
- .stat-label {
634
- font-family: 'Space Mono', monospace;
635
- font-weight: 700;
636
- font-size: 0.7rem;
637
- text-transform: uppercase;
638
- letter-spacing: 0.15em;
639
- color: #666;
640
- }
641
-
642
- .votes-grid {
643
- display: flex;
644
- flex-wrap: wrap;
645
- justify-content: center;
646
- gap: 1rem;
647
- margin-bottom: 2rem;
648
- }
649
-
650
- .vote-card {
651
- display: flex;
652
- align-items: center;
653
- gap: 0.75rem;
654
- padding: 0.85rem 1.25rem;
655
- background: var(--white);
656
- border: var(--border);
657
- box-shadow: var(--shadow-sm);
658
- min-width: 160px;
659
- opacity: 0;
660
- animation: cardReveal 0.4s ease-out forwards;
661
- }
662
-
663
- .vote-card:nth-child(1) { animation-delay: 0.1s; }
664
- .vote-card:nth-child(2) { animation-delay: 0.2s; }
665
- .vote-card:nth-child(3) { animation-delay: 0.3s; }
666
- .vote-card:nth-child(4) { animation-delay: 0.4s; }
667
- .vote-card:nth-child(5) { animation-delay: 0.5s; }
668
- .vote-card:nth-child(6) { animation-delay: 0.6s; }
669
- .vote-card:nth-child(7) { animation-delay: 0.7s; }
670
- .vote-card:nth-child(8) { animation-delay: 0.8s; }
671
-
672
- @keyframes cardReveal {
673
- from { opacity: 0; transform: rotateY(90deg) scale(0.8); }
674
- to { opacity: 1; transform: rotateY(0) scale(1); }
675
- }
676
-
677
- .vote-card-avatar {
678
- width: 40px;
679
- height: 40px;
680
- background: var(--black);
681
- color: var(--lime);
682
- border: 2px solid var(--black);
683
- display: flex;
684
- align-items: center;
685
- justify-content: center;
686
- font-family: 'Space Mono', monospace;
687
- font-weight: 700;
688
- font-size: 0.8rem;
689
- }
690
-
691
- .vote-card-info {
692
- display: flex;
693
- flex-direction: column;
694
- gap: 0.15rem;
695
- }
696
-
697
- .vote-card-name {
698
- font-size: 0.8rem;
699
- font-weight: 600;
700
- }
701
-
702
- .vote-card-value {
703
- font-family: 'Space Mono', monospace;
704
- font-weight: 700;
705
- font-size: 1.2rem;
706
- color: var(--lime-dark);
707
- }
708
-
709
- /* ═══════════════════════════════════════════
710
- RESPONSIVE
711
- ═══════════════════════════════════════════ */
712
-
713
- /* ═══════════════════════════════════════════
714
- PREVIOUS ROUNDS TABLE
715
- ═══════════════════════════════════════════ */
716
-
717
- .previous-rounds-panel {
718
- margin-top: 2rem;
719
- }
720
-
721
- .previous-rounds-table-wrap {
722
- overflow-x: auto;
723
- }
724
-
725
- .previous-rounds-table {
726
- width: 100%;
727
- border-collapse: collapse;
728
- font-size: 0.85rem;
729
- }
730
-
731
- .previous-rounds-table th,
732
- .previous-rounds-table td {
733
- text-align: left;
734
- padding: 0.6rem 0.75rem;
735
- border-bottom: 2px solid var(--black);
736
- }
737
-
738
- .previous-rounds-table th {
739
- font-family: 'Space Mono', monospace;
740
- font-weight: 700;
741
- font-size: 0.7rem;
742
- text-transform: uppercase;
743
- letter-spacing: 0.08em;
744
- background: var(--bg-alt);
745
- white-space: nowrap;
746
- }
747
-
748
- .previous-rounds-table tbody tr:hover {
749
- background: var(--bg-alt);
750
- }
751
-
752
- .previous-rounds-table td:nth-child(4),
753
- .previous-rounds-table td:nth-child(5),
754
- .previous-rounds-table th:nth-child(4),
755
- .previous-rounds-table th:nth-child(5) {
756
- text-align: right;
757
- font-family: 'Space Mono', monospace;
758
- font-weight: 700;
759
- }
760
-
761
- .sort-btn {
762
- background: none;
763
- border: none;
764
- cursor: pointer;
765
- font-size: 0.55rem;
766
- padding: 0 0.25rem;
767
- vertical-align: middle;
768
- color: #999;
769
- transition: color 0.15s;
770
- }
771
-
772
- .sort-btn:hover {
773
- color: var(--black);
774
- }
775
-
776
- .sort-btn.asc,
777
- .sort-btn.desc {
778
- color: var(--lime-dark);
779
- }
780
-
781
- @media (max-width: 768px) {
782
- .app-header {
783
- flex-wrap: wrap;
784
- }
785
- .session-info {
786
- border-right: none;
787
- border-bottom: var(--border);
788
- flex: 1 1 100%;
789
- order: 2;
790
- }
791
- .welcome-grid {
792
- grid-template-columns: 1fr;
793
- }
794
- .form-row {
795
- flex-direction: column;
796
- gap: 0;
797
- }
798
- .poker-card {
799
- width: 60px;
800
- height: 88px;
801
- font-size: 1.1rem;
802
- }
803
- .card-hand {
804
- gap: 0.5rem;
805
- }
806
- .stats-row {
807
- gap: 1rem;
808
- }
809
- .stat-card {
810
- padding: 1rem 1.5rem;
811
- }
812
- .stat-value {
813
- font-size: 2rem;
814
- }
815
- }
1
+ /* ═══════════════════════════════════════════
2
+ Planning Poker — Neo-Brutalist Theme
3
+ Off-white + Black + Electric Lime
4
+ Space Mono + Work Sans
5
+ ═══════════════════════════════════════════ */
6
+
7
+
8
+ :root {
9
+ --bg: #f5f0e8;
10
+ --bg-alt: #ebe5d9;
11
+ --black: #111111;
12
+ --lime: #b8f72e;
13
+ --lime-dark: #8ec41a;
14
+ --red: #ff3b30;
15
+ --white: #ffffff;
16
+ --border: 3px solid var(--black);
17
+ --shadow: 5px 5px 0 var(--black);
18
+ --shadow-sm: 3px 3px 0 var(--black);
19
+ }
20
+
21
+ * { margin: 0; padding: 0; box-sizing: border-box; }
22
+
23
+ body {
24
+ font-family: 'Work Sans', sans-serif;
25
+ background: var(--bg);
26
+ color: var(--black);
27
+ min-height: 100vh;
28
+ overflow-x: hidden;
29
+ }
30
+
31
+ /* ── Grid Background ── */
32
+ body::before {
33
+ content: '';
34
+ position: fixed;
35
+ inset: 0;
36
+ background-image:
37
+ linear-gradient(rgba(17,17,17,0.04) 1px, transparent 1px),
38
+ linear-gradient(90deg, rgba(17,17,17,0.04) 1px, transparent 1px);
39
+ background-size: 24px 24px;
40
+ pointer-events: none;
41
+ z-index: 0;
42
+ }
43
+
44
+ /* ── Error Toast ── */
45
+ .error-toast {
46
+ position: fixed;
47
+ top: 1rem;
48
+ left: 50%;
49
+ transform: translateX(-50%);
50
+ background: var(--red);
51
+ color: var(--white);
52
+ padding: 0.75rem 1.5rem;
53
+ font-family: 'Space Mono', monospace;
54
+ font-weight: 700;
55
+ font-size: 0.8rem;
56
+ border: var(--border);
57
+ box-shadow: var(--shadow-sm);
58
+ z-index: 1000;
59
+ text-transform: uppercase;
60
+ letter-spacing: 0.05em;
61
+ animation: slideDown 0.3s ease-out;
62
+ }
63
+
64
+ @keyframes slideDown {
65
+ from { transform: translateX(-50%) translateY(-100%); opacity: 0; }
66
+ to { transform: translateX(-50%) translateY(0); opacity: 1; }
67
+ }
68
+
69
+ /* ── Header ── */
70
+ .app-header {
71
+ display: flex;
72
+ align-items: stretch;
73
+ border-bottom: var(--border);
74
+ position: relative;
75
+ z-index: 2;
76
+ background: var(--white);
77
+ }
78
+
79
+ .brand-block {
80
+ background: var(--black);
81
+ color: var(--lime);
82
+ padding: 0.8rem 1.5rem;
83
+ font-family: 'Space Mono', monospace;
84
+ font-weight: 700;
85
+ font-size: 1rem;
86
+ letter-spacing: 0.05em;
87
+ text-transform: uppercase;
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 0.5rem;
91
+ white-space: nowrap;
92
+ }
93
+
94
+ .session-info {
95
+ flex: 1;
96
+ padding: 0.8rem 1.25rem;
97
+ display: flex;
98
+ align-items: center;
99
+ gap: 1rem;
100
+ border-right: var(--border);
101
+ }
102
+
103
+ .session-badge {
104
+ background: var(--lime);
105
+ padding: 0.2rem 0.6rem;
106
+ font-family: 'Space Mono', monospace;
107
+ font-weight: 700;
108
+ font-size: 0.7rem;
109
+ text-transform: uppercase;
110
+ border: 2px solid var(--black);
111
+ white-space: nowrap;
112
+ }
113
+
114
+ .session-name-text {
115
+ font-weight: 600;
116
+ font-size: 0.95rem;
117
+ overflow: hidden;
118
+ text-overflow: ellipsis;
119
+ white-space: nowrap;
120
+ }
121
+
122
+ .participants-count {
123
+ padding: 0.8rem 1.25rem;
124
+ font-family: 'Space Mono', monospace;
125
+ font-weight: 700;
126
+ font-size: 0.85rem;
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 0.5rem;
130
+ }
131
+
132
+ .btn-leave {
133
+ background: var(--red);
134
+ color: var(--white);
135
+ border: none;
136
+ border-left: var(--border);
137
+ padding: 0.8rem 1.25rem;
138
+ font-family: 'Space Mono', monospace;
139
+ font-weight: 700;
140
+ font-size: 1rem;
141
+ cursor: pointer;
142
+ transition: background 0.15s;
143
+ }
144
+
145
+ .btn-leave:hover {
146
+ background: #cc2f26;
147
+ }
148
+
149
+ /* ── Main Layout ── */
150
+ .app-main {
151
+ position: relative;
152
+ z-index: 1;
153
+ max-width: 1100px;
154
+ margin: 0 auto;
155
+ padding: 2rem;
156
+ }
157
+
158
+ /* ── Footer ── */
159
+ .app-footer {
160
+ text-align: center;
161
+ margin-top: 2rem;
162
+ padding: 1rem 2rem;
163
+ border-top: 2px dashed var(--black);
164
+ font-family: 'Space Mono', monospace;
165
+ font-size: 0.7rem;
166
+ text-transform: uppercase;
167
+ letter-spacing: 0.1em;
168
+ color: #666;
169
+ }
170
+
171
+ /* ═══════════════════════════════════════════
172
+ WELCOME VIEW
173
+ ═══════════════════════════════════════════ */
174
+
175
+ .welcome-hero {
176
+ text-align: center;
177
+ margin-bottom: 2.5rem;
178
+ }
179
+
180
+ .welcome-hero h2 {
181
+ font-family: 'Space Mono', monospace;
182
+ font-weight: 700;
183
+ font-size: 2.5rem;
184
+ text-transform: uppercase;
185
+ letter-spacing: 0.05em;
186
+ margin-bottom: 0.5rem;
187
+ }
188
+
189
+ .welcome-hero p {
190
+ font-size: 1rem;
191
+ color: #555;
192
+ }
193
+
194
+ .welcome-grid {
195
+ display: grid;
196
+ grid-template-columns: 1fr 1fr;
197
+ gap: 2rem;
198
+ }
199
+
200
+ /* ── Panel (shared) ── */
201
+ .panel {
202
+ background: var(--white);
203
+ border: var(--border);
204
+ box-shadow: var(--shadow);
205
+ padding: 1.5rem 2rem;
206
+ }
207
+
208
+ .panel-title {
209
+ font-family: 'Space Mono', monospace;
210
+ font-weight: 700;
211
+ font-size: 1.1rem;
212
+ text-transform: uppercase;
213
+ margin-bottom: 1.25rem;
214
+ display: flex;
215
+ align-items: center;
216
+ gap: 0.5rem;
217
+ }
218
+
219
+ .panel-title::before {
220
+ content: '//';
221
+ color: var(--lime-dark);
222
+ }
223
+
224
+ /* ── Forms ── */
225
+ .form-group {
226
+ margin-bottom: 1rem;
227
+ }
228
+
229
+ .form-group label {
230
+ display: block;
231
+ font-family: 'Space Mono', monospace;
232
+ font-weight: 700;
233
+ font-size: 0.7rem;
234
+ text-transform: uppercase;
235
+ letter-spacing: 0.1em;
236
+ margin-bottom: 0.4rem;
237
+ color: #444;
238
+ }
239
+
240
+ .form-group input,
241
+ .form-group select {
242
+ width: 100%;
243
+ padding: 0.7rem 0.9rem;
244
+ font-family: 'Work Sans', sans-serif;
245
+ font-size: 0.9rem;
246
+ border: var(--border);
247
+ background: var(--bg);
248
+ color: var(--black);
249
+ outline: none;
250
+ transition: box-shadow 0.15s;
251
+ }
252
+
253
+ .form-group input:focus,
254
+ .form-group select:focus {
255
+ box-shadow: var(--shadow-sm);
256
+ background: var(--white);
257
+ }
258
+
259
+ .form-group input::placeholder {
260
+ color: #999;
261
+ }
262
+
263
+ .form-row {
264
+ display: flex;
265
+ gap: 1rem;
266
+ }
267
+
268
+ .form-group-grow {
269
+ flex: 1;
270
+ }
271
+
272
+ /* ── Buttons ── */
273
+ .btn-brutal {
274
+ padding: 0.85rem 2.5rem;
275
+ font-family: 'Space Mono', monospace;
276
+ font-weight: 700;
277
+ font-size: 0.85rem;
278
+ text-transform: uppercase;
279
+ letter-spacing: 0.08em;
280
+ border: var(--border);
281
+ cursor: pointer;
282
+ transition: all 0.15s;
283
+ display: inline-block;
284
+ }
285
+
286
+ .btn-brutal-primary {
287
+ background: var(--lime);
288
+ color: var(--black);
289
+ box-shadow: var(--shadow-sm);
290
+ }
291
+
292
+ .btn-brutal-primary:hover {
293
+ box-shadow: 6px 6px 0 var(--black);
294
+ transform: translate(-1px, -1px);
295
+ }
296
+
297
+ .btn-brutal-primary:disabled {
298
+ opacity: 0.5;
299
+ cursor: not-allowed;
300
+ box-shadow: none;
301
+ transform: none;
302
+ }
303
+
304
+ .btn-brutal-share {
305
+ background: var(--white);
306
+ color: var(--black);
307
+ box-shadow: var(--shadow-sm);
308
+ padding: 0.5rem 1.2rem;
309
+ font-size: 0.75rem;
310
+ }
311
+
312
+ .btn-brutal-share:hover {
313
+ box-shadow: 6px 6px 0 var(--black);
314
+ transform: translate(-1px, -1px);
315
+ }
316
+
317
+ .btn-brutal-danger {
318
+ background: var(--red);
319
+ color: var(--white);
320
+ box-shadow: var(--shadow-sm);
321
+ padding: 0.5rem 1.2rem;
322
+ font-size: 0.75rem;
323
+ }
324
+
325
+ .btn-brutal-danger:hover {
326
+ box-shadow: 6px 6px 0 var(--black);
327
+ transform: translate(-1px, -1px);
328
+ }
329
+
330
+ .btn-brutal-secondary {
331
+ background: var(--white);
332
+ color: var(--black);
333
+ box-shadow: var(--shadow-sm);
334
+ }
335
+
336
+ .btn-brutal-secondary:hover {
337
+ background: var(--bg-alt);
338
+ }
339
+
340
+ .btn-disabled {
341
+ opacity: 0.6;
342
+ cursor: default;
343
+ }
344
+
345
+ .btn-disabled:hover {
346
+ background: var(--white);
347
+ }
348
+
349
+ /* ═══════════════════════════════════════════
350
+ SESSION VIEW
351
+ ═══════════════════════════════════════════ */
352
+
353
+ /* ── Waiting Message ── */
354
+ .waiting-message {
355
+ text-align: center;
356
+ padding: 2rem;
357
+ }
358
+
359
+ .waiting-icon {
360
+ font-size: 2.5rem;
361
+ display: block;
362
+ margin-bottom: 0.75rem;
363
+ }
364
+
365
+ .waiting-message h3 {
366
+ font-family: 'Space Mono', monospace;
367
+ font-weight: 700;
368
+ font-size: 1.1rem;
369
+ text-transform: uppercase;
370
+ margin-bottom: 0.5rem;
371
+ }
372
+
373
+ .waiting-message p {
374
+ font-size: 0.9rem;
375
+ color: #666;
376
+ }
377
+
378
+ /* ── Story / Round Panel ── */
379
+ .story-panel {
380
+ background: var(--white);
381
+ border: var(--border);
382
+ box-shadow: var(--shadow);
383
+ padding: 1.5rem 2rem;
384
+ margin-bottom: 2rem;
385
+ }
386
+
387
+ .story-panel h2 {
388
+ font-family: 'Space Mono', monospace;
389
+ font-weight: 700;
390
+ font-size: 1.1rem;
391
+ text-transform: uppercase;
392
+ margin-bottom: 0.75rem;
393
+ display: flex;
394
+ align-items: center;
395
+ gap: 0.75rem;
396
+ }
397
+
398
+ .story-badge {
399
+ background: var(--lime);
400
+ padding: 0.2rem 0.6rem;
401
+ font-family: 'Space Mono', monospace;
402
+ font-weight: 700;
403
+ font-size: 0.7rem;
404
+ text-transform: uppercase;
405
+ border: 2px solid var(--black);
406
+ white-space: nowrap;
407
+ }
408
+
409
+ .story-panel p {
410
+ font-size: 0.95rem;
411
+ line-height: 1.6;
412
+ color: #333;
413
+ }
414
+
415
+ /* ── Participants Strip ── */
416
+ .participants-strip {
417
+ display: flex;
418
+ gap: 1rem;
419
+ margin-bottom: 2rem;
420
+ flex-wrap: wrap;
421
+ justify-content: center;
422
+ }
423
+
424
+ .participant {
425
+ display: flex;
426
+ flex-direction: column;
427
+ align-items: center;
428
+ gap: 0.35rem;
429
+ }
430
+
431
+ .participant-avatar {
432
+ width: 48px;
433
+ height: 48px;
434
+ border: 3px solid var(--black);
435
+ background: var(--bg-alt);
436
+ display: flex;
437
+ align-items: center;
438
+ justify-content: center;
439
+ font-family: 'Space Mono', monospace;
440
+ font-weight: 700;
441
+ font-size: 0.9rem;
442
+ position: relative;
443
+ }
444
+
445
+ .participant-avatar.voted::after {
446
+ content: '\2713';
447
+ position: absolute;
448
+ bottom: -4px;
449
+ right: -4px;
450
+ width: 18px;
451
+ height: 18px;
452
+ background: var(--lime);
453
+ border: 2px solid var(--black);
454
+ font-size: 0.6rem;
455
+ display: flex;
456
+ align-items: center;
457
+ justify-content: center;
458
+ }
459
+
460
+ .participant-avatar.waiting {
461
+ border-style: dashed;
462
+ }
463
+
464
+ .participant-avatar.owner {
465
+ border-color: var(--lime-dark);
466
+ }
467
+
468
+ .participant-name {
469
+ font-size: 0.65rem;
470
+ font-weight: 600;
471
+ text-transform: uppercase;
472
+ letter-spacing: 0.05em;
473
+ }
474
+
475
+ /* ── Card Hand ── */
476
+ .card-hand-section {
477
+ text-align: center;
478
+ margin-top: 1rem;
479
+ }
480
+
481
+ .card-hand-label {
482
+ font-family: 'Space Mono', monospace;
483
+ font-weight: 700;
484
+ font-size: 0.8rem;
485
+ text-transform: uppercase;
486
+ letter-spacing: 0.15em;
487
+ margin-bottom: 1.25rem;
488
+ display: inline-block;
489
+ background: var(--black);
490
+ color: var(--lime);
491
+ padding: 0.4rem 1rem;
492
+ }
493
+
494
+ .card-hand {
495
+ display: flex;
496
+ justify-content: center;
497
+ gap: 0.75rem;
498
+ flex-wrap: wrap;
499
+ padding: 1rem 0;
500
+ }
501
+
502
+ .poker-card {
503
+ width: 72px;
504
+ height: 104px;
505
+ background: var(--white);
506
+ border: var(--border);
507
+ box-shadow: var(--shadow-sm);
508
+ display: flex;
509
+ align-items: center;
510
+ justify-content: center;
511
+ font-family: 'Space Mono', monospace;
512
+ font-weight: 700;
513
+ font-size: 1.4rem;
514
+ cursor: pointer;
515
+ transition: all 0.15s;
516
+ position: relative;
517
+ user-select: none;
518
+ }
519
+
520
+ .poker-card::before {
521
+ content: '';
522
+ position: absolute;
523
+ top: 4px;
524
+ left: 4px;
525
+ right: 4px;
526
+ bottom: 4px;
527
+ border: 1px solid var(--bg-alt);
528
+ pointer-events: none;
529
+ }
530
+
531
+ .poker-card:hover {
532
+ transform: translateY(-12px);
533
+ box-shadow: 5px 12px 0 var(--black);
534
+ background: var(--lime);
535
+ }
536
+
537
+ .poker-card.selected {
538
+ background: var(--lime);
539
+ transform: translateY(-16px) scale(1.05);
540
+ box-shadow: 6px 14px 0 var(--black);
541
+ }
542
+
543
+ .poker-card.special {
544
+ font-size: 1rem;
545
+ }
546
+
547
+ /* ── Vote Actions ── */
548
+ .vote-actions {
549
+ display: flex;
550
+ justify-content: center;
551
+ gap: 1rem;
552
+ margin-top: 2rem;
553
+ }
554
+
555
+ /* ── Voted Confirmation ── */
556
+ .voted-message {
557
+ text-align: center;
558
+ margin-top: 2rem;
559
+ padding: 1rem;
560
+ font-family: 'Space Mono', monospace;
561
+ font-weight: 700;
562
+ font-size: 0.9rem;
563
+ text-transform: uppercase;
564
+ letter-spacing: 0.05em;
565
+ background: var(--lime);
566
+ border: var(--border);
567
+ box-shadow: var(--shadow-sm);
568
+ }
569
+
570
+ /* ── Card Slam Animation ── */
571
+ @keyframes slamIn {
572
+ 0% { opacity: 0; transform: translateY(30px) rotate(-2deg); }
573
+ 60% { transform: translateY(-3px) rotate(0.5deg); }
574
+ 100% { opacity: 1; transform: translateY(0) rotate(0); }
575
+ }
576
+
577
+ .poker-card { animation: slamIn 0.3s ease-out both; }
578
+ .poker-card:nth-child(1) { animation-delay: 0.05s; }
579
+ .poker-card:nth-child(2) { animation-delay: 0.08s; }
580
+ .poker-card:nth-child(3) { animation-delay: 0.11s; }
581
+ .poker-card:nth-child(4) { animation-delay: 0.14s; }
582
+ .poker-card:nth-child(5) { animation-delay: 0.17s; }
583
+ .poker-card:nth-child(6) { animation-delay: 0.20s; }
584
+ .poker-card:nth-child(7) { animation-delay: 0.23s; }
585
+ .poker-card:nth-child(8) { animation-delay: 0.26s; }
586
+ .poker-card:nth-child(9) { animation-delay: 0.29s; }
587
+ .poker-card:nth-child(10) { animation-delay: 0.32s; }
588
+ .poker-card:nth-child(11) { animation-delay: 0.35s; }
589
+ .poker-card:nth-child(12) { animation-delay: 0.38s; }
590
+
591
+ /* ═══════════════════════════════════════════
592
+ RESULTS VIEW
593
+ ═══════════════════════════════════════════ */
594
+
595
+ .results-header {
596
+ text-align: center;
597
+ margin-bottom: 2rem;
598
+ }
599
+
600
+ .results-header h2 {
601
+ font-family: 'Space Mono', monospace;
602
+ font-weight: 700;
603
+ font-size: 1.4rem;
604
+ text-transform: uppercase;
605
+ margin-top: 0.75rem;
606
+ }
607
+
608
+ .stats-row {
609
+ display: flex;
610
+ justify-content: center;
611
+ gap: 2rem;
612
+ margin-bottom: 2.5rem;
613
+ }
614
+
615
+ .stat-card {
616
+ background: var(--white);
617
+ border: var(--border);
618
+ box-shadow: var(--shadow);
619
+ padding: 1.5rem 2.5rem;
620
+ text-align: center;
621
+ display: flex;
622
+ flex-direction: column;
623
+ gap: 0.25rem;
624
+ }
625
+
626
+ .stat-value {
627
+ font-family: 'Space Mono', monospace;
628
+ font-weight: 700;
629
+ font-size: 2.5rem;
630
+ color: var(--black);
631
+ }
632
+
633
+ .stat-label {
634
+ font-family: 'Space Mono', monospace;
635
+ font-weight: 700;
636
+ font-size: 0.7rem;
637
+ text-transform: uppercase;
638
+ letter-spacing: 0.15em;
639
+ color: #666;
640
+ }
641
+
642
+ .votes-grid {
643
+ display: flex;
644
+ flex-wrap: wrap;
645
+ justify-content: center;
646
+ gap: 1rem;
647
+ margin-bottom: 2rem;
648
+ }
649
+
650
+ .vote-card {
651
+ display: flex;
652
+ align-items: center;
653
+ gap: 0.75rem;
654
+ padding: 0.85rem 1.25rem;
655
+ background: var(--white);
656
+ border: var(--border);
657
+ box-shadow: var(--shadow-sm);
658
+ min-width: 160px;
659
+ opacity: 0;
660
+ animation: cardReveal 0.4s ease-out forwards;
661
+ }
662
+
663
+ .vote-card:nth-child(1) { animation-delay: 0.1s; }
664
+ .vote-card:nth-child(2) { animation-delay: 0.2s; }
665
+ .vote-card:nth-child(3) { animation-delay: 0.3s; }
666
+ .vote-card:nth-child(4) { animation-delay: 0.4s; }
667
+ .vote-card:nth-child(5) { animation-delay: 0.5s; }
668
+ .vote-card:nth-child(6) { animation-delay: 0.6s; }
669
+ .vote-card:nth-child(7) { animation-delay: 0.7s; }
670
+ .vote-card:nth-child(8) { animation-delay: 0.8s; }
671
+
672
+ @keyframes cardReveal {
673
+ from { opacity: 0; transform: rotateY(90deg) scale(0.8); }
674
+ to { opacity: 1; transform: rotateY(0) scale(1); }
675
+ }
676
+
677
+ .vote-card-avatar {
678
+ width: 40px;
679
+ height: 40px;
680
+ background: var(--black);
681
+ color: var(--lime);
682
+ border: 2px solid var(--black);
683
+ display: flex;
684
+ align-items: center;
685
+ justify-content: center;
686
+ font-family: 'Space Mono', monospace;
687
+ font-weight: 700;
688
+ font-size: 0.8rem;
689
+ }
690
+
691
+ .vote-card-info {
692
+ display: flex;
693
+ flex-direction: column;
694
+ gap: 0.15rem;
695
+ }
696
+
697
+ .vote-card-name {
698
+ font-size: 0.8rem;
699
+ font-weight: 600;
700
+ }
701
+
702
+ .vote-card-value {
703
+ font-family: 'Space Mono', monospace;
704
+ font-weight: 700;
705
+ font-size: 1.2rem;
706
+ color: var(--lime-dark);
707
+ }
708
+
709
+ /* ═══════════════════════════════════════════
710
+ RESPONSIVE
711
+ ═══════════════════════════════════════════ */
712
+
713
+ /* ═══════════════════════════════════════════
714
+ PREVIOUS ROUNDS TABLE
715
+ ═══════════════════════════════════════════ */
716
+
717
+ .previous-rounds-panel {
718
+ margin-top: 2rem;
719
+ }
720
+
721
+ .previous-rounds-table-wrap {
722
+ overflow-x: auto;
723
+ }
724
+
725
+ .previous-rounds-table {
726
+ width: 100%;
727
+ border-collapse: collapse;
728
+ font-size: 0.85rem;
729
+ }
730
+
731
+ .previous-rounds-table th,
732
+ .previous-rounds-table td {
733
+ text-align: left;
734
+ padding: 0.6rem 0.75rem;
735
+ border-bottom: 2px solid var(--black);
736
+ }
737
+
738
+ .previous-rounds-table th {
739
+ font-family: 'Space Mono', monospace;
740
+ font-weight: 700;
741
+ font-size: 0.7rem;
742
+ text-transform: uppercase;
743
+ letter-spacing: 0.08em;
744
+ background: var(--bg-alt);
745
+ white-space: nowrap;
746
+ }
747
+
748
+ .previous-rounds-table tbody tr:hover {
749
+ background: var(--bg-alt);
750
+ }
751
+
752
+ .previous-rounds-table td:nth-child(4),
753
+ .previous-rounds-table td:nth-child(5),
754
+ .previous-rounds-table th:nth-child(4),
755
+ .previous-rounds-table th:nth-child(5) {
756
+ text-align: right;
757
+ font-family: 'Space Mono', monospace;
758
+ font-weight: 700;
759
+ }
760
+
761
+ .sort-btn {
762
+ background: none;
763
+ border: none;
764
+ cursor: pointer;
765
+ font-size: 0.55rem;
766
+ padding: 0 0.25rem;
767
+ vertical-align: middle;
768
+ color: #999;
769
+ transition: color 0.15s;
770
+ }
771
+
772
+ .sort-btn:hover {
773
+ color: var(--black);
774
+ }
775
+
776
+ .sort-btn.asc,
777
+ .sort-btn.desc {
778
+ color: var(--lime-dark);
779
+ }
780
+
781
+ @media (max-width: 768px) {
782
+ .app-header {
783
+ flex-wrap: wrap;
784
+ }
785
+ .session-info {
786
+ border-right: none;
787
+ border-bottom: var(--border);
788
+ flex: 1 1 100%;
789
+ order: 2;
790
+ }
791
+ .welcome-grid {
792
+ grid-template-columns: 1fr;
793
+ }
794
+ .form-row {
795
+ flex-direction: column;
796
+ gap: 0;
797
+ }
798
+ .poker-card {
799
+ width: 60px;
800
+ height: 88px;
801
+ font-size: 1.1rem;
802
+ }
803
+ .card-hand {
804
+ gap: 0.5rem;
805
+ }
806
+ .stats-row {
807
+ gap: 1rem;
808
+ }
809
+ .stat-card {
810
+ padding: 1rem 1.5rem;
811
+ }
812
+ .stat-value {
813
+ font-size: 2rem;
814
+ }
815
+ }