winebox 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,1086 @@
1
+ /* WineBox - Wine Cellar Management Styles */
2
+
3
+ :root {
4
+ --primary-color: #722f37;
5
+ --primary-light: #8b4049;
6
+ --primary-dark: #5a252c;
7
+ --secondary-color: #d4a373;
8
+ --background-color: #faf8f5;
9
+ --card-background: #ffffff;
10
+ --text-color: #2c2c2c;
11
+ --text-muted: #666666;
12
+ --border-color: #e0dcd5;
13
+ --success-color: #4a7c59;
14
+ --warning-color: #c9a227;
15
+ --error-color: #a63d40;
16
+ --shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
17
+ --shadow-hover: 0 4px 16px rgba(0, 0, 0, 0.12);
18
+ --radius: 8px;
19
+ --radius-lg: 12px;
20
+ }
21
+
22
+ * {
23
+ margin: 0;
24
+ padding: 0;
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ body {
29
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
30
+ background-color: var(--background-color);
31
+ color: var(--text-color);
32
+ line-height: 1.6;
33
+ }
34
+
35
+ /* Header */
36
+ header {
37
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-dark) 100%);
38
+ color: white;
39
+ padding: 1rem 2rem;
40
+ position: sticky;
41
+ top: 0;
42
+ z-index: 100;
43
+ box-shadow: var(--shadow);
44
+ }
45
+
46
+ .header-content {
47
+ max-width: 1400px;
48
+ margin: 0 auto;
49
+ display: flex;
50
+ justify-content: space-between;
51
+ align-items: center;
52
+ flex-wrap: wrap;
53
+ gap: 1rem;
54
+ }
55
+
56
+ header h1 {
57
+ font-size: 1.75rem;
58
+ font-weight: 600;
59
+ letter-spacing: 0.5px;
60
+ }
61
+
62
+ nav {
63
+ display: flex;
64
+ gap: 0.5rem;
65
+ flex-wrap: wrap;
66
+ }
67
+
68
+ .nav-link {
69
+ color: rgba(255, 255, 255, 0.85);
70
+ text-decoration: none;
71
+ padding: 0.5rem 1rem;
72
+ border-radius: var(--radius);
73
+ transition: all 0.2s ease;
74
+ font-weight: 500;
75
+ }
76
+
77
+ .nav-link:hover {
78
+ background: rgba(255, 255, 255, 0.15);
79
+ color: white;
80
+ }
81
+
82
+ .nav-link.active {
83
+ background: rgba(255, 255, 255, 0.2);
84
+ color: white;
85
+ }
86
+
87
+ /* Main Content */
88
+ main {
89
+ max-width: 1400px;
90
+ margin: 0 auto;
91
+ padding: 2rem;
92
+ }
93
+
94
+ .page {
95
+ display: none;
96
+ }
97
+
98
+ .page.active {
99
+ display: block;
100
+ }
101
+
102
+ h2 {
103
+ font-size: 1.75rem;
104
+ margin-bottom: 1.5rem;
105
+ color: var(--primary-color);
106
+ }
107
+
108
+ h3 {
109
+ font-size: 1.25rem;
110
+ margin-bottom: 1rem;
111
+ color: var(--text-color);
112
+ }
113
+
114
+ /* Stats Grid */
115
+ .stats-grid {
116
+ display: grid;
117
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
118
+ gap: 1.5rem;
119
+ margin-bottom: 2rem;
120
+ }
121
+
122
+ .stat-card {
123
+ background: var(--card-background);
124
+ border-radius: var(--radius-lg);
125
+ padding: 1.5rem;
126
+ text-align: center;
127
+ box-shadow: var(--shadow);
128
+ border: 1px solid var(--border-color);
129
+ }
130
+
131
+ .stat-value {
132
+ font-size: 2.5rem;
133
+ font-weight: 700;
134
+ color: var(--primary-color);
135
+ margin-bottom: 0.5rem;
136
+ }
137
+
138
+ .stat-label {
139
+ color: var(--text-muted);
140
+ font-size: 0.9rem;
141
+ text-transform: uppercase;
142
+ letter-spacing: 0.5px;
143
+ }
144
+
145
+ /* Dashboard Sections */
146
+ .dashboard-sections {
147
+ display: grid;
148
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
149
+ gap: 1.5rem;
150
+ margin-bottom: 2rem;
151
+ }
152
+
153
+ .dashboard-section {
154
+ background: var(--card-background);
155
+ border-radius: var(--radius-lg);
156
+ padding: 1.5rem;
157
+ box-shadow: var(--shadow);
158
+ border: 1px solid var(--border-color);
159
+ }
160
+
161
+ .chart-list {
162
+ max-height: 200px;
163
+ overflow-y: auto;
164
+ }
165
+
166
+ .chart-item {
167
+ display: flex;
168
+ justify-content: space-between;
169
+ align-items: center;
170
+ padding: 0.5rem 0;
171
+ border-bottom: 1px solid var(--border-color);
172
+ }
173
+
174
+ .chart-item:last-child {
175
+ border-bottom: none;
176
+ }
177
+
178
+ .chart-item .label {
179
+ font-weight: 500;
180
+ }
181
+
182
+ .chart-item .value {
183
+ background: var(--primary-light);
184
+ color: white;
185
+ padding: 0.25rem 0.75rem;
186
+ border-radius: 999px;
187
+ font-size: 0.85rem;
188
+ font-weight: 600;
189
+ }
190
+
191
+ /* Activity List */
192
+ .activity-list {
193
+ background: var(--card-background);
194
+ border-radius: var(--radius-lg);
195
+ box-shadow: var(--shadow);
196
+ border: 1px solid var(--border-color);
197
+ }
198
+
199
+ .activity-item {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 1rem;
203
+ padding: 1rem 1.5rem;
204
+ border-bottom: 1px solid var(--border-color);
205
+ }
206
+
207
+ .activity-item:last-child {
208
+ border-bottom: none;
209
+ }
210
+
211
+ .activity-icon {
212
+ width: 40px;
213
+ height: 40px;
214
+ border-radius: 50%;
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ font-weight: 600;
219
+ flex-shrink: 0;
220
+ }
221
+
222
+ .activity-icon.check-in {
223
+ background: var(--success-color);
224
+ color: white;
225
+ }
226
+
227
+ .activity-icon.check-out {
228
+ background: var(--warning-color);
229
+ color: white;
230
+ }
231
+
232
+ .activity-content {
233
+ flex: 1;
234
+ }
235
+
236
+ .activity-title {
237
+ font-weight: 500;
238
+ }
239
+
240
+ .activity-meta {
241
+ color: var(--text-muted);
242
+ font-size: 0.85rem;
243
+ }
244
+
245
+ /* Forms */
246
+ .form-section {
247
+ background: var(--card-background);
248
+ border-radius: var(--radius-lg);
249
+ padding: 1.5rem;
250
+ margin-bottom: 1.5rem;
251
+ box-shadow: var(--shadow);
252
+ border: 1px solid var(--border-color);
253
+ }
254
+
255
+ .form-note {
256
+ color: var(--text-muted);
257
+ font-size: 0.9rem;
258
+ margin-bottom: 1rem;
259
+ }
260
+
261
+ .form-grid {
262
+ display: grid;
263
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
264
+ gap: 1rem;
265
+ }
266
+
267
+ .form-group {
268
+ margin-bottom: 1rem;
269
+ }
270
+
271
+ .form-group.full-width {
272
+ grid-column: 1 / -1;
273
+ }
274
+
275
+ .form-group label {
276
+ display: block;
277
+ margin-bottom: 0.5rem;
278
+ font-weight: 500;
279
+ color: var(--text-color);
280
+ }
281
+
282
+ .form-group input[type="text"],
283
+ .form-group input[type="password"],
284
+ .form-group input[type="number"],
285
+ .form-group input[type="date"],
286
+ .form-group select,
287
+ .form-group textarea {
288
+ width: 100%;
289
+ padding: 0.75rem;
290
+ border: 1px solid var(--border-color);
291
+ border-radius: var(--radius);
292
+ font-size: 1rem;
293
+ transition: border-color 0.2s, box-shadow 0.2s;
294
+ }
295
+
296
+ .form-group input:focus,
297
+ .form-group select:focus,
298
+ .form-group textarea:focus {
299
+ outline: none;
300
+ border-color: var(--primary-color);
301
+ box-shadow: 0 0 0 3px rgba(114, 47, 55, 0.1);
302
+ }
303
+
304
+ .form-group input[type="checkbox"] {
305
+ width: auto;
306
+ margin-right: 0.5rem;
307
+ }
308
+
309
+ /* Image Upload */
310
+ .image-upload-grid {
311
+ display: grid;
312
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
313
+ gap: 1.5rem;
314
+ }
315
+
316
+ .image-upload {
317
+ text-align: center;
318
+ }
319
+
320
+ .image-upload input[type="file"] {
321
+ display: block;
322
+ width: 100%;
323
+ padding: 1rem;
324
+ border: 2px dashed var(--border-color);
325
+ border-radius: var(--radius);
326
+ cursor: pointer;
327
+ margin-bottom: 1rem;
328
+ transition: border-color 0.2s;
329
+ }
330
+
331
+ .image-upload input[type="file"]:hover {
332
+ border-color: var(--primary-color);
333
+ }
334
+
335
+ .image-preview {
336
+ min-height: 150px;
337
+ border: 2px dashed var(--border-color);
338
+ border-radius: var(--radius);
339
+ display: flex;
340
+ align-items: center;
341
+ justify-content: center;
342
+ color: var(--text-muted);
343
+ overflow: hidden;
344
+ cursor: pointer;
345
+ transition: border-color 0.2s, background-color 0.2s;
346
+ padding: 1rem;
347
+ text-align: center;
348
+ font-size: 0.9rem;
349
+ }
350
+
351
+ .image-preview:hover {
352
+ border-color: var(--primary-color);
353
+ background-color: rgba(114, 47, 55, 0.05);
354
+ }
355
+
356
+ .image-preview:active {
357
+ background-color: rgba(114, 47, 55, 0.1);
358
+ }
359
+
360
+ .image-preview img {
361
+ max-width: 100%;
362
+ max-height: 200px;
363
+ object-fit: contain;
364
+ }
365
+
366
+ /* Buttons */
367
+ .form-actions {
368
+ display: flex;
369
+ gap: 1rem;
370
+ margin-top: 1.5rem;
371
+ }
372
+
373
+ .btn {
374
+ padding: 0.75rem 1.5rem;
375
+ border: none;
376
+ border-radius: var(--radius);
377
+ font-size: 1rem;
378
+ font-weight: 500;
379
+ cursor: pointer;
380
+ transition: all 0.2s;
381
+ }
382
+
383
+ .btn-primary {
384
+ background: var(--primary-color);
385
+ color: white;
386
+ }
387
+
388
+ .btn-primary:hover {
389
+ background: var(--primary-dark);
390
+ }
391
+
392
+ .btn-secondary {
393
+ background: var(--card-background);
394
+ color: var(--text-color);
395
+ border: 1px solid var(--border-color);
396
+ }
397
+
398
+ .btn-secondary:hover {
399
+ background: var(--background-color);
400
+ }
401
+
402
+ .btn-small {
403
+ padding: 0.5rem 1rem;
404
+ font-size: 0.9rem;
405
+ }
406
+
407
+ .btn-danger {
408
+ background: var(--error-color);
409
+ color: white;
410
+ }
411
+
412
+ .btn-danger:hover {
413
+ background: #8b3235;
414
+ }
415
+
416
+ /* Filter Bar */
417
+ .filter-bar {
418
+ display: flex;
419
+ gap: 1rem;
420
+ margin-bottom: 1.5rem;
421
+ flex-wrap: wrap;
422
+ }
423
+
424
+ .filter-bar select,
425
+ .filter-bar input {
426
+ padding: 0.75rem;
427
+ border: 1px solid var(--border-color);
428
+ border-radius: var(--radius);
429
+ font-size: 1rem;
430
+ background: var(--card-background);
431
+ }
432
+
433
+ .filter-bar input {
434
+ flex: 1;
435
+ min-width: 200px;
436
+ }
437
+
438
+ /* Wine Grid */
439
+ .wine-grid {
440
+ display: grid;
441
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
442
+ gap: 1.5rem;
443
+ }
444
+
445
+ .wine-card {
446
+ background: var(--card-background);
447
+ border-radius: var(--radius-lg);
448
+ overflow: hidden;
449
+ box-shadow: var(--shadow);
450
+ border: 1px solid var(--border-color);
451
+ transition: transform 0.2s, box-shadow 0.2s;
452
+ cursor: pointer;
453
+ }
454
+
455
+ .wine-card:hover {
456
+ transform: translateY(-2px);
457
+ box-shadow: var(--shadow-hover);
458
+ }
459
+
460
+ .wine-card-image {
461
+ height: 180px;
462
+ background: linear-gradient(135deg, var(--primary-light) 0%, var(--primary-color) 100%);
463
+ display: flex;
464
+ align-items: center;
465
+ justify-content: center;
466
+ overflow: hidden;
467
+ }
468
+
469
+ .wine-card-image img {
470
+ max-width: 100%;
471
+ max-height: 100%;
472
+ object-fit: cover;
473
+ }
474
+
475
+ .wine-card-content {
476
+ padding: 1.25rem;
477
+ }
478
+
479
+ .wine-card-title {
480
+ font-size: 1.1rem;
481
+ font-weight: 600;
482
+ margin-bottom: 0.5rem;
483
+ color: var(--text-color);
484
+ }
485
+
486
+ .wine-card-subtitle {
487
+ color: var(--text-muted);
488
+ font-size: 0.9rem;
489
+ margin-bottom: 0.75rem;
490
+ }
491
+
492
+ .wine-card-details {
493
+ display: flex;
494
+ flex-wrap: wrap;
495
+ gap: 0.5rem;
496
+ margin-bottom: 1rem;
497
+ }
498
+
499
+ .wine-tag {
500
+ background: var(--background-color);
501
+ padding: 0.25rem 0.75rem;
502
+ border-radius: 999px;
503
+ font-size: 0.8rem;
504
+ color: var(--text-muted);
505
+ }
506
+
507
+ .wine-card-footer {
508
+ display: flex;
509
+ justify-content: space-between;
510
+ align-items: center;
511
+ padding-top: 1rem;
512
+ border-top: 1px solid var(--border-color);
513
+ }
514
+
515
+ .wine-quantity {
516
+ font-weight: 600;
517
+ color: var(--primary-color);
518
+ }
519
+
520
+ .wine-quantity.out-of-stock {
521
+ color: var(--text-muted);
522
+ }
523
+
524
+ /* Modal */
525
+ .modal {
526
+ display: none;
527
+ position: fixed;
528
+ top: 0;
529
+ left: 0;
530
+ width: 100%;
531
+ height: 100%;
532
+ background: rgba(0, 0, 0, 0.5);
533
+ z-index: 200;
534
+ align-items: center;
535
+ justify-content: center;
536
+ padding: 2rem;
537
+ }
538
+
539
+ .modal.active {
540
+ display: flex;
541
+ }
542
+
543
+ .modal-content {
544
+ background: var(--card-background);
545
+ border-radius: var(--radius-lg);
546
+ max-width: 800px;
547
+ width: 100%;
548
+ max-height: 90vh;
549
+ overflow-y: auto;
550
+ position: relative;
551
+ padding: 2rem;
552
+ }
553
+
554
+ .modal-content.modal-small {
555
+ max-width: 400px;
556
+ }
557
+
558
+ .modal-close {
559
+ position: absolute;
560
+ top: 1rem;
561
+ right: 1rem;
562
+ font-size: 1.5rem;
563
+ cursor: pointer;
564
+ color: var(--text-muted);
565
+ transition: color 0.2s;
566
+ }
567
+
568
+ .modal-close:hover {
569
+ color: var(--text-color);
570
+ }
571
+
572
+ /* Wine Detail */
573
+ #wine-detail {
574
+ display: grid;
575
+ grid-template-columns: 1fr 2fr;
576
+ gap: 2rem;
577
+ }
578
+
579
+ @media (max-width: 600px) {
580
+ #wine-detail {
581
+ grid-template-columns: 1fr;
582
+ }
583
+ }
584
+
585
+ .wine-detail-images {
586
+ display: flex;
587
+ flex-direction: column;
588
+ gap: 1rem;
589
+ }
590
+
591
+ .wine-detail-image {
592
+ border-radius: var(--radius);
593
+ overflow: hidden;
594
+ border: 1px solid var(--border-color);
595
+ }
596
+
597
+ .wine-detail-image img {
598
+ width: 100%;
599
+ height: auto;
600
+ }
601
+
602
+ .wine-detail-info h3 {
603
+ font-size: 1.5rem;
604
+ color: var(--primary-color);
605
+ margin-bottom: 0.5rem;
606
+ }
607
+
608
+ .wine-detail-meta {
609
+ color: var(--text-muted);
610
+ margin-bottom: 1.5rem;
611
+ }
612
+
613
+ .wine-detail-field {
614
+ margin-bottom: 1rem;
615
+ }
616
+
617
+ .wine-detail-field .label {
618
+ font-size: 0.85rem;
619
+ color: var(--text-muted);
620
+ text-transform: uppercase;
621
+ letter-spacing: 0.5px;
622
+ }
623
+
624
+ .wine-detail-field .value {
625
+ font-size: 1.1rem;
626
+ font-weight: 500;
627
+ }
628
+
629
+ .wine-detail-ocr {
630
+ margin-top: 1.5rem;
631
+ padding: 1rem;
632
+ background: var(--background-color);
633
+ border-radius: var(--radius);
634
+ font-size: 0.9rem;
635
+ white-space: pre-wrap;
636
+ max-height: 150px;
637
+ overflow-y: auto;
638
+ }
639
+
640
+ .wine-detail-transactions {
641
+ margin-top: 2rem;
642
+ grid-column: 1 / -1;
643
+ }
644
+
645
+ /* Transaction List */
646
+ .transaction-list {
647
+ background: var(--card-background);
648
+ border-radius: var(--radius-lg);
649
+ box-shadow: var(--shadow);
650
+ border: 1px solid var(--border-color);
651
+ }
652
+
653
+ .transaction-item {
654
+ display: grid;
655
+ grid-template-columns: auto 1fr auto auto;
656
+ gap: 1rem;
657
+ align-items: center;
658
+ padding: 1rem 1.5rem;
659
+ border-bottom: 1px solid var(--border-color);
660
+ }
661
+
662
+ .transaction-item:last-child {
663
+ border-bottom: none;
664
+ }
665
+
666
+ .transaction-type {
667
+ padding: 0.25rem 0.75rem;
668
+ border-radius: 999px;
669
+ font-size: 0.8rem;
670
+ font-weight: 600;
671
+ text-transform: uppercase;
672
+ }
673
+
674
+ .transaction-type.check-in {
675
+ background: rgba(74, 124, 89, 0.1);
676
+ color: var(--success-color);
677
+ }
678
+
679
+ .transaction-type.check-out {
680
+ background: rgba(201, 162, 39, 0.1);
681
+ color: var(--warning-color);
682
+ }
683
+
684
+ .transaction-wine {
685
+ font-weight: 500;
686
+ }
687
+
688
+ .transaction-wine .vintage {
689
+ color: var(--text-muted);
690
+ font-weight: normal;
691
+ }
692
+
693
+ .transaction-quantity {
694
+ font-weight: 600;
695
+ }
696
+
697
+ .transaction-date {
698
+ color: var(--text-muted);
699
+ font-size: 0.9rem;
700
+ }
701
+
702
+ /* Toast Notifications */
703
+ #toast-container {
704
+ position: fixed;
705
+ bottom: 2rem;
706
+ right: 2rem;
707
+ z-index: 300;
708
+ display: flex;
709
+ flex-direction: column;
710
+ gap: 0.75rem;
711
+ }
712
+
713
+ .toast {
714
+ background: var(--card-background);
715
+ padding: 1rem 1.5rem;
716
+ border-radius: var(--radius);
717
+ box-shadow: var(--shadow-hover);
718
+ border-left: 4px solid var(--primary-color);
719
+ animation: slideIn 0.3s ease;
720
+ max-width: 400px;
721
+ }
722
+
723
+ .toast.success {
724
+ border-left-color: var(--success-color);
725
+ }
726
+
727
+ .toast.error {
728
+ border-left-color: var(--error-color);
729
+ }
730
+
731
+ .toast.warning {
732
+ border-left-color: var(--warning-color);
733
+ }
734
+
735
+ @keyframes slideIn {
736
+ from {
737
+ transform: translateX(100%);
738
+ opacity: 0;
739
+ }
740
+ to {
741
+ transform: translateX(0);
742
+ opacity: 1;
743
+ }
744
+ }
745
+
746
+ /* Empty State */
747
+ .empty-state {
748
+ text-align: center;
749
+ padding: 3rem;
750
+ color: var(--text-muted);
751
+ }
752
+
753
+ .empty-state h3 {
754
+ color: var(--text-muted);
755
+ margin-bottom: 0.5rem;
756
+ }
757
+
758
+ /* Responsive */
759
+ @media (max-width: 768px) {
760
+ header {
761
+ padding: 1rem;
762
+ }
763
+
764
+ .header-content {
765
+ flex-direction: column;
766
+ align-items: flex-start;
767
+ }
768
+
769
+ nav {
770
+ width: 100%;
771
+ overflow-x: auto;
772
+ -webkit-overflow-scrolling: touch;
773
+ scrollbar-width: none;
774
+ }
775
+
776
+ nav::-webkit-scrollbar {
777
+ display: none;
778
+ }
779
+
780
+ .nav-link {
781
+ padding: 0.5rem 0.75rem;
782
+ font-size: 0.9rem;
783
+ white-space: nowrap;
784
+ }
785
+
786
+ main {
787
+ padding: 1rem;
788
+ }
789
+
790
+ h2 {
791
+ font-size: 1.5rem;
792
+ }
793
+
794
+ .stats-grid {
795
+ grid-template-columns: 1fr 1fr;
796
+ }
797
+
798
+ /* Check-in page mobile improvements */
799
+ .form-section {
800
+ padding: 1rem;
801
+ margin-bottom: 1rem;
802
+ }
803
+
804
+ .form-section h3 {
805
+ font-size: 1.1rem;
806
+ }
807
+
808
+ .image-upload-grid {
809
+ grid-template-columns: 1fr;
810
+ gap: 1rem;
811
+ }
812
+
813
+ .image-upload {
814
+ margin-bottom: 0.5rem;
815
+ }
816
+
817
+ .image-upload label {
818
+ font-size: 0.95rem;
819
+ font-weight: 600;
820
+ display: block;
821
+ margin-bottom: 0.5rem;
822
+ }
823
+
824
+ .image-upload input[type="file"] {
825
+ padding: 1.25rem 0.75rem;
826
+ font-size: 0.9rem;
827
+ min-height: 60px;
828
+ }
829
+
830
+ .image-preview {
831
+ min-height: 120px;
832
+ }
833
+
834
+ .form-grid {
835
+ grid-template-columns: 1fr;
836
+ gap: 0.75rem;
837
+ }
838
+
839
+ .form-group {
840
+ margin-bottom: 0.75rem;
841
+ }
842
+
843
+ .form-group label {
844
+ font-size: 0.9rem;
845
+ margin-bottom: 0.4rem;
846
+ }
847
+
848
+ .form-group input,
849
+ .form-group select,
850
+ .form-group textarea {
851
+ padding: 0.875rem 0.75rem;
852
+ font-size: 16px; /* Prevents iOS zoom on focus */
853
+ }
854
+
855
+ .form-note {
856
+ font-size: 0.85rem;
857
+ }
858
+
859
+ .form-actions {
860
+ flex-direction: column;
861
+ gap: 0.75rem;
862
+ margin-top: 1rem;
863
+ }
864
+
865
+ .btn {
866
+ width: 100%;
867
+ padding: 1rem;
868
+ font-size: 1rem;
869
+ text-align: center;
870
+ }
871
+
872
+ .wine-grid {
873
+ grid-template-columns: 1fr;
874
+ }
875
+
876
+ .transaction-item {
877
+ grid-template-columns: 1fr;
878
+ gap: 0.5rem;
879
+ }
880
+
881
+ /* Modal mobile improvements */
882
+ .modal {
883
+ padding: 0.5rem;
884
+ align-items: flex-end;
885
+ }
886
+
887
+ .modal-content {
888
+ padding: 1.25rem;
889
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
890
+ max-height: 95vh;
891
+ }
892
+
893
+ .modal-content.modal-small {
894
+ max-width: 100%;
895
+ }
896
+
897
+ /* Toast mobile */
898
+ #toast-container {
899
+ left: 1rem;
900
+ right: 1rem;
901
+ bottom: 1rem;
902
+ }
903
+
904
+ .toast {
905
+ max-width: 100%;
906
+ }
907
+ }
908
+
909
+ /* Extra small screens */
910
+ @media (max-width: 480px) {
911
+ header h1 {
912
+ font-size: 1.4rem;
913
+ }
914
+
915
+ .stats-grid {
916
+ grid-template-columns: 1fr;
917
+ gap: 1rem;
918
+ }
919
+
920
+ .stat-card {
921
+ padding: 1rem;
922
+ }
923
+
924
+ .stat-value {
925
+ font-size: 2rem;
926
+ }
927
+
928
+ .dashboard-sections {
929
+ grid-template-columns: 1fr;
930
+ }
931
+
932
+ .filter-bar {
933
+ flex-direction: column;
934
+ }
935
+
936
+ .filter-bar select,
937
+ .filter-bar input {
938
+ width: 100%;
939
+ min-width: unset;
940
+ }
941
+ }
942
+
943
+ /* Login Page */
944
+ .login-page {
945
+ display: none;
946
+ min-height: calc(100vh - 80px);
947
+ background: linear-gradient(135deg, var(--background-color) 0%, #f0ebe3 100%);
948
+ align-items: center;
949
+ justify-content: center;
950
+ padding: 2rem;
951
+ }
952
+
953
+ .login-page.active {
954
+ display: flex;
955
+ }
956
+
957
+ .login-container {
958
+ width: 100%;
959
+ max-width: 400px;
960
+ }
961
+
962
+ .login-card {
963
+ background: var(--card-background);
964
+ border-radius: var(--radius-lg);
965
+ padding: 2.5rem;
966
+ box-shadow: var(--shadow-hover);
967
+ border: 1px solid var(--border-color);
968
+ text-align: center;
969
+ }
970
+
971
+ .login-card h2 {
972
+ color: var(--primary-color);
973
+ margin-bottom: 0.5rem;
974
+ }
975
+
976
+ .login-subtitle {
977
+ color: var(--text-muted);
978
+ margin-bottom: 2rem;
979
+ }
980
+
981
+ .login-card .form-group {
982
+ text-align: left;
983
+ }
984
+
985
+ .login-error {
986
+ background: rgba(166, 61, 64, 0.1);
987
+ color: var(--error-color);
988
+ padding: 0.75rem 1rem;
989
+ border-radius: var(--radius);
990
+ margin-bottom: 1rem;
991
+ font-size: 0.9rem;
992
+ }
993
+
994
+ .btn-full {
995
+ width: 100%;
996
+ margin-top: 0.5rem;
997
+ }
998
+
999
+ /* User Info in Header */
1000
+ .user-info {
1001
+ display: flex;
1002
+ align-items: center;
1003
+ gap: 1rem;
1004
+ color: rgba(255, 255, 255, 0.9);
1005
+ font-size: 0.9rem;
1006
+ }
1007
+
1008
+ .user-info #username-display {
1009
+ font-weight: 500;
1010
+ }
1011
+
1012
+ .user-info .btn {
1013
+ padding: 0.4rem 0.75rem;
1014
+ font-size: 0.85rem;
1015
+ background: rgba(255, 255, 255, 0.2);
1016
+ border: none;
1017
+ color: white;
1018
+ }
1019
+
1020
+ .user-info .btn:hover {
1021
+ background: rgba(255, 255, 255, 0.3);
1022
+ }
1023
+
1024
+ /* Hide main content when not logged in */
1025
+ body.logged-out main {
1026
+ display: none;
1027
+ }
1028
+
1029
+ body.logged-out #main-nav {
1030
+ display: none;
1031
+ }
1032
+
1033
+ body.logged-out #user-info {
1034
+ display: none !important;
1035
+ }
1036
+
1037
+ @media (max-width: 768px) {
1038
+ .login-card {
1039
+ padding: 1.5rem;
1040
+ }
1041
+
1042
+ .login-page {
1043
+ padding: 1rem;
1044
+ align-items: flex-start;
1045
+ padding-top: 2rem;
1046
+ }
1047
+
1048
+ .header-content {
1049
+ flex-wrap: wrap;
1050
+ }
1051
+
1052
+ .user-info {
1053
+ width: 100%;
1054
+ justify-content: space-between;
1055
+ margin-top: 0.5rem;
1056
+ padding-top: 0.5rem;
1057
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
1058
+ }
1059
+ }
1060
+
1061
+ /* Loading State */
1062
+ .loading {
1063
+ text-align: center;
1064
+ padding: 2rem;
1065
+ color: var(--text-muted);
1066
+ }
1067
+
1068
+ .loading::after {
1069
+ content: '...';
1070
+ animation: dots 1.5s steps(4, end) infinite;
1071
+ }
1072
+
1073
+ @keyframes dots {
1074
+ 0%, 20% {
1075
+ content: '';
1076
+ }
1077
+ 40% {
1078
+ content: '.';
1079
+ }
1080
+ 60% {
1081
+ content: '..';
1082
+ }
1083
+ 80%, 100% {
1084
+ content: '...';
1085
+ }
1086
+ }