popsite-ui 1.0.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 (87) hide show
  1. package/App.jsx +95 -0
  2. package/README.md +92 -0
  3. package/components/layout/PortalHeader.jsx +18 -0
  4. package/components/layout/SystemSidebar.jsx +33 -0
  5. package/components/modules/AnalyticsDashboardModule.jsx +17 -0
  6. package/components/modules/ChatMessagingModule.jsx +17 -0
  7. package/components/modules/EcommerceStoreModule.jsx +17 -0
  8. package/components/modules/EventTicketBookingModule.jsx +17 -0
  9. package/components/modules/FlightBookingModule.jsx +17 -0
  10. package/components/modules/FoodOrderingModule.jsx +17 -0
  11. package/components/modules/HospitalAppointmentModule.jsx +17 -0
  12. package/components/modules/HotelBookingModule.jsx +17 -0
  13. package/components/modules/InvoiceBillingModule.jsx +17 -0
  14. package/components/modules/LibraryManagementModule.jsx +17 -0
  15. package/components/modules/ModuleContentDeck.jsx +44 -0
  16. package/components/modules/MovieBookingModule.jsx +17 -0
  17. package/components/modules/QuizExamModule.jsx +17 -0
  18. package/components/modules/StudentRegistrationModule.jsx +17 -0
  19. package/components/modules/SystemModuleRenderer.jsx +19 -0
  20. package/components/modules/SystemModuleTemplate.jsx +62 -0
  21. package/components/modules/SystemVisualWidget.jsx +123 -0
  22. package/components/modules/moduleContentMap.js +238 -0
  23. package/components/modules/moduleEnhancementsMap.js +439 -0
  24. package/components/modules/systemModuleMap.js +31 -0
  25. package/components/system/DynamicSystemForm.jsx +154 -0
  26. package/components/system/SystemHero.jsx +21 -0
  27. package/components/system/SystemSummaryCard.jsx +53 -0
  28. package/data/systems/analyticsDashboard.js +48 -0
  29. package/data/systems/chatMessaging.js +43 -0
  30. package/data/systems/ecommerceStore.js +50 -0
  31. package/data/systems/eventTicketBooking.js +50 -0
  32. package/data/systems/flightBooking.js +38 -0
  33. package/data/systems/foodOrdering.js +48 -0
  34. package/data/systems/hospitalAppointment.js +50 -0
  35. package/data/systems/hotelBooking.js +38 -0
  36. package/data/systems/index.js +31 -0
  37. package/data/systems/invoiceBilling.js +50 -0
  38. package/data/systems/libraryManagement.js +43 -0
  39. package/data/systems/movieBooking.js +48 -0
  40. package/data/systems/quizExam.js +38 -0
  41. package/data/systems/studentRegistration.js +43 -0
  42. package/dist/popsite-ui.es.js +4368 -0
  43. package/dist/popsite-ui.umd.js +60 -0
  44. package/dist/style.css +1 -0
  45. package/index.html +13 -0
  46. package/library/index.js +20 -0
  47. package/main.jsx +15 -0
  48. package/package.json +40 -0
  49. package/src/App.jsx +12 -0
  50. package/src/components/modules/AnalyticsDashboardModule.jsx +224 -0
  51. package/src/components/modules/ChatMessagingModule.jsx +294 -0
  52. package/src/components/modules/EcommerceStoreModule.jsx +405 -0
  53. package/src/components/modules/EventTicketBookingModule.jsx +253 -0
  54. package/src/components/modules/FlightBookingModule.jsx +399 -0
  55. package/src/components/modules/FoodOrderingModule.jsx +316 -0
  56. package/src/components/modules/HospitalAppointmentModule.jsx +267 -0
  57. package/src/components/modules/HotelBookingModule.jsx +317 -0
  58. package/src/components/modules/InvoiceBillingModule.jsx +302 -0
  59. package/src/components/modules/LandingPageModule.jsx +185 -0
  60. package/src/components/modules/LibraryManagementModule.jsx +189 -0
  61. package/src/components/modules/MovieBookingModule.jsx +337 -0
  62. package/src/components/modules/QuizExamModule.jsx +255 -0
  63. package/src/components/modules/StudentRegistrationModule.jsx +292 -0
  64. package/src/components/system/SystemHero.jsx +44 -0
  65. package/src/components/system/SystemSummaryCard.jsx +29 -0
  66. package/src/components/system/Toast.jsx +69 -0
  67. package/src/data/systems/analyticsDashboard.js +32 -0
  68. package/src/data/systems/chatMessaging.js +59 -0
  69. package/src/data/systems/ecommerceStore.js +84 -0
  70. package/src/data/systems/eventBooking.js +33 -0
  71. package/src/data/systems/flightBooking.js +59 -0
  72. package/src/data/systems/foodOrdering.js +48 -0
  73. package/src/data/systems/hospitalAppointment.js +48 -0
  74. package/src/data/systems/hotelBooking.js +59 -0
  75. package/src/data/systems/invoiceBilling.js +19 -0
  76. package/src/data/systems/landingPage.js +29 -0
  77. package/src/data/systems/libraryManagement.js +17 -0
  78. package/src/data/systems/movieBooking.js +49 -0
  79. package/src/data/systems/quizExam.js +31 -0
  80. package/src/data/systems/studentRegistration.js +9 -0
  81. package/src/index.js +22 -0
  82. package/src/main.jsx +10 -0
  83. package/src/styles.css +296 -0
  84. package/styles.css +820 -0
  85. package/utils/systemEngine.js +128 -0
  86. package/vite.config.js +8 -0
  87. package/vite.lib.config.js +27 -0
package/styles.css ADDED
@@ -0,0 +1,820 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700;800&family=Sora:wght@500;600;700&display=swap');
2
+
3
+ :root {
4
+ --primary: #4f46e5;
5
+ --surface: #ffffff;
6
+ --surface-soft: #f8fafc;
7
+ --surface-elevated: #ffffff;
8
+ --text-main: #0f172a;
9
+ --text-muted: #4b5563;
10
+ --border-soft: rgba(148, 163, 184, 0.35);
11
+ --shadow-soft: 0 14px 34px rgba(15, 23, 42, 0.12);
12
+ --bg-layer: radial-gradient(circle at 16% 8%, #4f46e522 0%, transparent 38%), linear-gradient(130deg, #f8fbff 0%, #eef3fb 100%);
13
+ }
14
+
15
+ * {
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ html,
20
+ body,
21
+ #root {
22
+ min-height: 100%;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ font-family: 'Manrope', 'Segoe UI', sans-serif;
28
+ color: var(--text-main);
29
+ background: var(--bg-layer);
30
+ }
31
+
32
+ h1,
33
+ h2,
34
+ h3,
35
+ h4 {
36
+ margin: 0;
37
+ font-family: 'Sora', 'Segoe UI', sans-serif;
38
+ letter-spacing: -0.02em;
39
+ }
40
+
41
+ p {
42
+ margin: 0;
43
+ }
44
+
45
+ .app-shell {
46
+ min-height: 100vh;
47
+ padding-bottom: 2rem;
48
+ }
49
+
50
+ .portal-header {
51
+ position: relative;
52
+ overflow: hidden;
53
+ margin: 1rem;
54
+ border-radius: 24px;
55
+ border: 1px solid var(--border-soft);
56
+ padding: clamp(1.25rem, 2vw, 2rem);
57
+ background: linear-gradient(120deg, color-mix(in srgb, var(--primary) 16%, var(--surface-elevated)), var(--surface-elevated));
58
+ box-shadow: var(--shadow-soft);
59
+ animation: rise-in 0.45s ease both;
60
+ }
61
+
62
+ .portal-header::after {
63
+ content: '';
64
+ position: absolute;
65
+ inset: auto -60px -90px auto;
66
+ width: 220px;
67
+ height: 220px;
68
+ border-radius: 999px;
69
+ background: radial-gradient(circle, color-mix(in srgb, var(--primary) 55%, transparent) 0%, transparent 70%);
70
+ opacity: 0.45;
71
+ pointer-events: none;
72
+ }
73
+
74
+ .eyebrow {
75
+ margin-bottom: 0.5rem;
76
+ font-size: 0.78rem;
77
+ letter-spacing: 0.08em;
78
+ text-transform: uppercase;
79
+ color: color-mix(in srgb, var(--primary) 70%, var(--text-main));
80
+ font-weight: 800;
81
+ }
82
+
83
+ .portal-header h1 {
84
+ font-size: clamp(1.35rem, 2.2vw, 2rem);
85
+ }
86
+
87
+ .header-description {
88
+ max-width: 65ch;
89
+ margin-top: 0.65rem;
90
+ color: var(--text-muted);
91
+ line-height: 1.5;
92
+ }
93
+
94
+ .header-meta {
95
+ margin-top: 1rem;
96
+ display: flex;
97
+ flex-wrap: wrap;
98
+ gap: 0.5rem;
99
+ }
100
+
101
+ .header-meta span {
102
+ border: 1px solid var(--border-soft);
103
+ background: var(--surface);
104
+ color: var(--text-muted);
105
+ padding: 0.42rem 0.65rem;
106
+ border-radius: 999px;
107
+ font-size: 0.82rem;
108
+ font-weight: 700;
109
+ }
110
+
111
+ .app-layout {
112
+ display: grid;
113
+ grid-template-columns: 320px minmax(0, 1fr);
114
+ gap: 1rem;
115
+ padding: 0.35rem 1rem;
116
+ }
117
+
118
+ .system-sidebar,
119
+ .system-hero,
120
+ .form-shell,
121
+ .summary-shell,
122
+ .empty-state {
123
+ border-radius: 22px;
124
+ border: 1px solid var(--border-soft);
125
+ background: var(--surface-elevated);
126
+ box-shadow: var(--shadow-soft);
127
+ }
128
+
129
+ .system-sidebar {
130
+ padding: 1rem;
131
+ animation: rise-in 0.5s ease both;
132
+ }
133
+
134
+ .system-sidebar h2 {
135
+ font-size: 1.02rem;
136
+ }
137
+
138
+ .system-sidebar p {
139
+ margin-top: 0.4rem;
140
+ color: var(--text-muted);
141
+ font-size: 0.92rem;
142
+ line-height: 1.45;
143
+ }
144
+
145
+ .system-list {
146
+ margin-top: 1rem;
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: 0.5rem;
150
+ max-height: calc(100vh - 255px);
151
+ overflow: auto;
152
+ padding-right: 0.2rem;
153
+ }
154
+
155
+ .system-button {
156
+ display: flex;
157
+ align-items: center;
158
+ gap: 0.75rem;
159
+ width: 100%;
160
+ border-radius: 14px;
161
+ border: 1px solid var(--border-soft);
162
+ background: var(--surface-soft);
163
+ color: var(--text-main);
164
+ text-align: left;
165
+ padding: 0.65rem;
166
+ cursor: pointer;
167
+ transition: transform 0.18s ease, border-color 0.18s ease, background-color 0.18s ease;
168
+ }
169
+
170
+ .system-button:hover {
171
+ transform: translateY(-1px);
172
+ border-color: color-mix(in srgb, var(--primary) 45%, var(--border-soft));
173
+ }
174
+
175
+ .system-button.active {
176
+ border-color: color-mix(in srgb, var(--primary) 70%, var(--border-soft));
177
+ background: color-mix(in srgb, var(--primary) 13%, var(--surface-soft));
178
+ }
179
+
180
+ .color-chip {
181
+ width: 12px;
182
+ height: 38px;
183
+ border-radius: 10px;
184
+ flex-shrink: 0;
185
+ }
186
+
187
+ .button-content {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: 0.2rem;
191
+ }
192
+
193
+ .button-content strong {
194
+ font-size: 0.9rem;
195
+ }
196
+
197
+ .button-content small {
198
+ color: var(--text-muted);
199
+ font-size: 0.75rem;
200
+ font-weight: 700;
201
+ }
202
+
203
+ .workspace-column {
204
+ display: flex;
205
+ flex-direction: column;
206
+ gap: 1rem;
207
+ }
208
+
209
+ .system-hero {
210
+ padding: 1rem 1.1rem;
211
+ display: flex;
212
+ justify-content: space-between;
213
+ gap: 1rem;
214
+ align-items: center;
215
+ animation: rise-in 0.55s ease both;
216
+ }
217
+
218
+ .hero-kicker {
219
+ text-transform: uppercase;
220
+ letter-spacing: 0.08em;
221
+ font-size: 0.76rem;
222
+ color: color-mix(in srgb, var(--primary) 75%, var(--text-main));
223
+ font-weight: 800;
224
+ margin-bottom: 0.35rem;
225
+ }
226
+
227
+ .system-hero h2 {
228
+ font-size: 1.28rem;
229
+ }
230
+
231
+ .system-hero p {
232
+ margin-top: 0.4rem;
233
+ color: var(--text-muted);
234
+ }
235
+
236
+ .hero-tags {
237
+ display: flex;
238
+ flex-wrap: wrap;
239
+ justify-content: flex-end;
240
+ gap: 0.45rem;
241
+ }
242
+
243
+ .hero-tags span {
244
+ border: 1px dashed color-mix(in srgb, var(--primary) 60%, var(--border-soft));
245
+ color: color-mix(in srgb, var(--primary) 80%, var(--text-main));
246
+ padding: 0.4rem 0.56rem;
247
+ border-radius: 999px;
248
+ font-size: 0.76rem;
249
+ font-weight: 700;
250
+ background: color-mix(in srgb, var(--primary) 8%, var(--surface));
251
+ }
252
+
253
+ .form-shell,
254
+ .summary-shell,
255
+ .empty-state {
256
+ padding: 1.1rem;
257
+ animation: rise-in 0.6s ease both;
258
+ }
259
+
260
+ .module-intro {
261
+ border-radius: 16px;
262
+ border: 1px dashed color-mix(in srgb, var(--primary) 50%, var(--border-soft));
263
+ background: color-mix(in srgb, var(--primary) 9%, var(--surface));
264
+ padding: 0.8rem 0.9rem;
265
+ }
266
+
267
+ .module-intro p {
268
+ color: var(--text-muted);
269
+ font-size: 0.92rem;
270
+ line-height: 1.45;
271
+ }
272
+
273
+ .module-content-grid {
274
+ display: grid;
275
+ grid-template-columns: repeat(2, minmax(0, 1fr));
276
+ gap: 0.85rem;
277
+ }
278
+
279
+ .module-panel {
280
+ border: 1px solid var(--border-soft);
281
+ border-radius: 16px;
282
+ background: var(--surface-elevated);
283
+ padding: 0.9rem;
284
+ }
285
+
286
+ .module-panel h4 {
287
+ font-size: 0.95rem;
288
+ margin-bottom: 0.45rem;
289
+ }
290
+
291
+ .module-overview {
292
+ grid-column: 1 / -1;
293
+ background: color-mix(in srgb, var(--primary) 7%, var(--surface));
294
+ }
295
+
296
+ .module-overview p {
297
+ color: var(--text-muted);
298
+ line-height: 1.5;
299
+ }
300
+
301
+ .visual-widget {
302
+ border: 1px solid var(--border-soft);
303
+ border-radius: 18px;
304
+ background: var(--surface-elevated);
305
+ box-shadow: var(--shadow-soft);
306
+ padding: 0.9rem;
307
+ }
308
+
309
+ .visual-head {
310
+ display: flex;
311
+ align-items: center;
312
+ justify-content: space-between;
313
+ margin-bottom: 0.65rem;
314
+ }
315
+
316
+ .visual-head h4 {
317
+ font-size: 0.95rem;
318
+ }
319
+
320
+ .visual-head span {
321
+ color: var(--text-muted);
322
+ font-size: 0.78rem;
323
+ font-weight: 700;
324
+ }
325
+
326
+ .seat-map-grid {
327
+ display: flex;
328
+ flex-direction: column;
329
+ gap: 0.35rem;
330
+ }
331
+
332
+ .seat-row {
333
+ display: grid;
334
+ grid-template-columns: 20px 1fr;
335
+ gap: 0.45rem;
336
+ align-items: center;
337
+ }
338
+
339
+ .seat-row small {
340
+ color: var(--text-muted);
341
+ font-weight: 700;
342
+ }
343
+
344
+ .seat-row-cells {
345
+ display: grid;
346
+ grid-template-columns: repeat(8, minmax(0, 1fr));
347
+ gap: 0.3rem;
348
+ }
349
+
350
+ .seat-cell {
351
+ font-size: 0.7rem;
352
+ border-radius: 8px;
353
+ border: 1px solid var(--border-soft);
354
+ padding: 0.25rem 0.18rem;
355
+ text-align: center;
356
+ }
357
+
358
+ .seat-cell.available {
359
+ background: color-mix(in srgb, #22c55e 18%, var(--surface));
360
+ }
361
+
362
+ .seat-cell.occupied {
363
+ background: color-mix(in srgb, #ef4444 18%, var(--surface));
364
+ }
365
+
366
+ .route-timeline {
367
+ display: flex;
368
+ flex-wrap: wrap;
369
+ gap: 0.5rem;
370
+ }
371
+
372
+ .route-point {
373
+ display: inline-flex;
374
+ align-items: center;
375
+ gap: 0.4rem;
376
+ border: 1px solid var(--border-soft);
377
+ border-radius: 999px;
378
+ padding: 0.35rem 0.55rem;
379
+ background: var(--surface-soft);
380
+ }
381
+
382
+ .route-dot {
383
+ width: 0.5rem;
384
+ height: 0.5rem;
385
+ border-radius: 999px;
386
+ background: var(--primary);
387
+ }
388
+
389
+ .route-point p {
390
+ font-size: 0.82rem;
391
+ color: var(--text-main);
392
+ }
393
+
394
+ .meter-track {
395
+ height: 0.8rem;
396
+ border-radius: 999px;
397
+ background: color-mix(in srgb, var(--border-soft) 55%, var(--surface));
398
+ overflow: hidden;
399
+ }
400
+
401
+ .meter-fill {
402
+ display: block;
403
+ height: 100%;
404
+ border-radius: 999px;
405
+ background: linear-gradient(90deg, var(--primary), color-mix(in srgb, var(--primary) 60%, #22c55e));
406
+ }
407
+
408
+ .meter-note {
409
+ margin-top: 0.55rem;
410
+ color: var(--text-muted);
411
+ font-size: 0.82rem;
412
+ }
413
+
414
+ .kpi-spark-grid {
415
+ display: grid;
416
+ grid-template-columns: repeat(3, minmax(0, 1fr));
417
+ gap: 0.55rem;
418
+ }
419
+
420
+ .kpi-card {
421
+ border: 1px solid var(--border-soft);
422
+ border-radius: 12px;
423
+ background: var(--surface-soft);
424
+ padding: 0.5rem;
425
+ }
426
+
427
+ .kpi-card small {
428
+ display: block;
429
+ color: var(--text-muted);
430
+ margin-bottom: 0.18rem;
431
+ }
432
+
433
+ .kpi-card strong {
434
+ display: block;
435
+ margin-bottom: 0.35rem;
436
+ }
437
+
438
+ .spark-bars {
439
+ height: 40px;
440
+ display: flex;
441
+ align-items: flex-end;
442
+ gap: 0.2rem;
443
+ }
444
+
445
+ .spark-bars span {
446
+ flex: 1;
447
+ border-radius: 4px 4px 2px 2px;
448
+ background: color-mix(in srgb, var(--primary) 80%, #111827);
449
+ }
450
+
451
+ .module-list,
452
+ .module-steps,
453
+ .module-policies {
454
+ margin: 0;
455
+ padding: 0;
456
+ list-style: none;
457
+ display: flex;
458
+ flex-direction: column;
459
+ gap: 0.45rem;
460
+ }
461
+
462
+ .module-list li,
463
+ .module-steps li,
464
+ .module-policies li {
465
+ border: 1px solid var(--border-soft);
466
+ border-radius: 12px;
467
+ padding: 0.48rem 0.56rem;
468
+ background: var(--surface-soft);
469
+ color: var(--text-main);
470
+ line-height: 1.42;
471
+ }
472
+
473
+ .module-list li {
474
+ display: flex;
475
+ justify-content: space-between;
476
+ gap: 0.6rem;
477
+ }
478
+
479
+ .module-list li span {
480
+ color: var(--text-muted);
481
+ font-size: 0.83rem;
482
+ }
483
+
484
+ .module-list li strong {
485
+ font-size: 0.85rem;
486
+ }
487
+
488
+ .module-steps {
489
+ counter-reset: flow-steps;
490
+ }
491
+
492
+ .module-steps li {
493
+ position: relative;
494
+ padding-left: 2rem;
495
+ }
496
+
497
+ .module-steps li::before {
498
+ counter-increment: flow-steps;
499
+ content: counter(flow-steps);
500
+ position: absolute;
501
+ left: 0.6rem;
502
+ top: 0.5rem;
503
+ width: 1rem;
504
+ height: 1rem;
505
+ border-radius: 999px;
506
+ display: inline-flex;
507
+ align-items: center;
508
+ justify-content: center;
509
+ font-size: 0.72rem;
510
+ font-weight: 800;
511
+ color: #fff;
512
+ background: var(--primary);
513
+ }
514
+
515
+ .form-shell p,
516
+ .empty-state p {
517
+ margin-top: 0.4rem;
518
+ color: var(--text-muted);
519
+ }
520
+
521
+ .dynamic-form {
522
+ margin-top: 0.95rem;
523
+ }
524
+
525
+ .form-actions-bar {
526
+ margin-top: 0.9rem;
527
+ display: flex;
528
+ align-items: center;
529
+ justify-content: space-between;
530
+ gap: 0.7rem;
531
+ flex-wrap: wrap;
532
+ }
533
+
534
+ .preset-list {
535
+ display: flex;
536
+ flex-wrap: wrap;
537
+ gap: 0.45rem;
538
+ }
539
+
540
+ .preset-btn,
541
+ .secondary-btn {
542
+ border: 1px solid var(--border-soft);
543
+ border-radius: 999px;
544
+ padding: 0.35rem 0.65rem;
545
+ background: var(--surface-soft);
546
+ color: var(--text-main);
547
+ cursor: pointer;
548
+ font-size: 0.8rem;
549
+ font-weight: 700;
550
+ }
551
+
552
+ .preset-btn:hover,
553
+ .secondary-btn:hover {
554
+ border-color: color-mix(in srgb, var(--primary) 55%, var(--border-soft));
555
+ }
556
+
557
+ .form-grid {
558
+ display: grid;
559
+ grid-template-columns: repeat(2, minmax(0, 1fr));
560
+ gap: 0.85rem;
561
+ }
562
+
563
+ .field-group {
564
+ display: flex;
565
+ flex-direction: column;
566
+ gap: 0.32rem;
567
+ }
568
+
569
+ .field-group label {
570
+ font-size: 0.84rem;
571
+ color: var(--text-muted);
572
+ font-weight: 700;
573
+ }
574
+
575
+ .field-group input,
576
+ .field-group select,
577
+ .field-group textarea {
578
+ width: 100%;
579
+ border: 1px solid var(--border-soft);
580
+ border-radius: 12px;
581
+ padding: 0.72rem 0.72rem;
582
+ background: var(--surface);
583
+ color: var(--text-main);
584
+ font: inherit;
585
+ }
586
+
587
+ .field-group input:focus,
588
+ .field-group select:focus,
589
+ .field-group textarea:focus {
590
+ outline: 2px solid color-mix(in srgb, var(--primary) 45%, transparent);
591
+ border-color: color-mix(in srgb, var(--primary) 70%, var(--border-soft));
592
+ }
593
+
594
+ .full-width {
595
+ grid-column: 1 / -1;
596
+ }
597
+
598
+ .radio-group {
599
+ display: flex;
600
+ flex-wrap: wrap;
601
+ gap: 0.5rem;
602
+ }
603
+
604
+ .radio-group label {
605
+ display: inline-flex;
606
+ align-items: center;
607
+ gap: 0.35rem;
608
+ border: 1px solid var(--border-soft);
609
+ border-radius: 999px;
610
+ padding: 0.38rem 0.65rem;
611
+ background: var(--surface-soft);
612
+ color: var(--text-main);
613
+ cursor: pointer;
614
+ }
615
+
616
+ .radio-group input {
617
+ accent-color: var(--primary);
618
+ }
619
+
620
+ .primary-btn {
621
+ margin-top: 1rem;
622
+ width: 100%;
623
+ border: none;
624
+ border-radius: 12px;
625
+ padding: 0.85rem 1rem;
626
+ background: linear-gradient(120deg, var(--primary), color-mix(in srgb, var(--primary) 72%, #000));
627
+ color: #ffffff;
628
+ font-weight: 800;
629
+ cursor: pointer;
630
+ transition: transform 0.2s ease, filter 0.2s ease;
631
+ }
632
+
633
+ .primary-btn:hover {
634
+ transform: translateY(-1px);
635
+ filter: brightness(1.03);
636
+ }
637
+
638
+ .summary-head {
639
+ display: flex;
640
+ align-items: center;
641
+ justify-content: space-between;
642
+ gap: 1rem;
643
+ }
644
+
645
+ .summary-head span {
646
+ font-size: 0.79rem;
647
+ color: var(--text-muted);
648
+ }
649
+
650
+ .summary-grid {
651
+ margin: 0.95rem 0;
652
+ padding: 0;
653
+ list-style: none;
654
+ display: grid;
655
+ grid-template-columns: repeat(2, minmax(0, 1fr));
656
+ gap: 0.7rem;
657
+ }
658
+
659
+ .summary-grid li {
660
+ border: 1px solid var(--border-soft);
661
+ border-radius: 12px;
662
+ padding: 0.6rem;
663
+ background: var(--surface-soft);
664
+ }
665
+
666
+ .summary-grid small {
667
+ display: block;
668
+ color: var(--text-muted);
669
+ margin-bottom: 0.25rem;
670
+ }
671
+
672
+ .summary-grid strong {
673
+ word-break: break-word;
674
+ }
675
+
676
+ .price-board {
677
+ display: grid;
678
+ grid-template-columns: repeat(4, minmax(0, 1fr));
679
+ gap: 0.6rem;
680
+ }
681
+
682
+ .price-board div {
683
+ border-radius: 12px;
684
+ border: 1px solid var(--border-soft);
685
+ padding: 0.58rem;
686
+ background: var(--surface-soft);
687
+ }
688
+
689
+ .price-board span {
690
+ display: block;
691
+ font-size: 0.74rem;
692
+ color: var(--text-muted);
693
+ margin-bottom: 0.25rem;
694
+ }
695
+
696
+ .grand-total {
697
+ margin-top: 0.85rem;
698
+ border: 1px solid color-mix(in srgb, var(--primary) 60%, var(--border-soft));
699
+ border-radius: 14px;
700
+ background: color-mix(in srgb, var(--primary) 10%, var(--surface));
701
+ padding: 0.78rem;
702
+ display: flex;
703
+ align-items: center;
704
+ justify-content: space-between;
705
+ gap: 1rem;
706
+ }
707
+
708
+ .grand-total span {
709
+ color: var(--text-muted);
710
+ }
711
+
712
+ .grand-total h4 {
713
+ color: color-mix(in srgb, var(--primary) 88%, var(--text-main));
714
+ font-size: 1.3rem;
715
+ }
716
+
717
+ .empty-state {
718
+ text-align: center;
719
+ }
720
+
721
+ .portal-footer-note {
722
+ margin: 1rem;
723
+ margin-top: 1.25rem;
724
+ border-radius: 18px;
725
+ border: 1px solid var(--border-soft);
726
+ background: color-mix(in srgb, var(--surface-elevated) 88%, var(--primary));
727
+ padding: 0.8rem 1rem;
728
+ box-shadow: var(--shadow-soft);
729
+ }
730
+
731
+ .portal-footer-note p {
732
+ color: var(--text-muted);
733
+ text-align: center;
734
+ font-size: 0.9rem;
735
+ }
736
+
737
+ .legacy-header h3 {
738
+ margin-top: 0.45rem;
739
+ }
740
+
741
+ .legacy-footer p {
742
+ margin-top: 0.45rem;
743
+ }
744
+
745
+ .legacy-footer a {
746
+ color: color-mix(in srgb, var(--primary) 85%, #1f2937);
747
+ font-weight: 700;
748
+ text-decoration: none;
749
+ }
750
+
751
+ .legacy-footer a:hover {
752
+ text-decoration: underline;
753
+ }
754
+
755
+ .ticket-note {
756
+ margin-top: 0.6rem;
757
+ color: var(--text-muted);
758
+ font-size: 0.9rem;
759
+ }
760
+
761
+ @keyframes rise-in {
762
+ from {
763
+ opacity: 0;
764
+ transform: translateY(8px);
765
+ }
766
+
767
+ to {
768
+ opacity: 1;
769
+ transform: translateY(0);
770
+ }
771
+ }
772
+
773
+ @media (max-width: 1080px) {
774
+ .app-layout {
775
+ grid-template-columns: 1fr;
776
+ }
777
+
778
+ .system-list {
779
+ max-height: none;
780
+ display: grid;
781
+ grid-template-columns: repeat(2, minmax(0, 1fr));
782
+ }
783
+ }
784
+
785
+ @media (max-width: 760px) {
786
+ .portal-header {
787
+ margin: 0.75rem;
788
+ border-radius: 20px;
789
+ }
790
+
791
+ .app-layout {
792
+ padding: 0.25rem 0.75rem;
793
+ }
794
+
795
+ .system-hero {
796
+ flex-direction: column;
797
+ align-items: flex-start;
798
+ }
799
+
800
+ .hero-tags {
801
+ justify-content: flex-start;
802
+ }
803
+
804
+ .form-grid,
805
+ .module-content-grid,
806
+ .summary-grid,
807
+ .price-board,
808
+ .system-list {
809
+ grid-template-columns: 1fr;
810
+ }
811
+
812
+ .kpi-spark-grid,
813
+ .seat-row-cells {
814
+ grid-template-columns: repeat(4, minmax(0, 1fr));
815
+ }
816
+
817
+ .portal-footer-note {
818
+ margin: 0.75rem;
819
+ }
820
+ }