winebox 0.1.2__py3-none-any.whl → 0.1.4__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.
@@ -555,6 +555,140 @@ h3 {
555
555
  max-width: 400px;
556
556
  }
557
557
 
558
+ .modal-content.modal-large {
559
+ max-width: 900px;
560
+ }
561
+
562
+ /* Checkin Confirmation Modal */
563
+ .checkin-confirm-header {
564
+ text-align: center;
565
+ margin-bottom: 1.5rem;
566
+ }
567
+
568
+ .checkin-confirm-header h3 {
569
+ color: var(--primary-color);
570
+ margin-bottom: 0.25rem;
571
+ }
572
+
573
+ .checkin-confirm-subtitle {
574
+ color: var(--text-muted);
575
+ font-size: 0.9rem;
576
+ }
577
+
578
+ .checkin-confirm-content {
579
+ display: grid;
580
+ grid-template-columns: 200px 1fr;
581
+ gap: 1.5rem;
582
+ margin-bottom: 1.5rem;
583
+ }
584
+
585
+ .checkin-confirm-image {
586
+ width: 200px;
587
+ height: 250px;
588
+ border-radius: var(--radius);
589
+ overflow: hidden;
590
+ border: 1px solid var(--border-color);
591
+ background: var(--background-color);
592
+ }
593
+
594
+ .checkin-confirm-image img {
595
+ width: 100%;
596
+ height: 100%;
597
+ object-fit: cover;
598
+ }
599
+
600
+ .checkin-confirm-form .form-grid {
601
+ display: grid;
602
+ grid-template-columns: repeat(2, 1fr);
603
+ gap: 1rem;
604
+ }
605
+
606
+ .checkin-confirm-form .form-group {
607
+ margin-bottom: 0;
608
+ }
609
+
610
+ .checkin-confirm-form .form-group.full-width {
611
+ grid-column: 1 / -1;
612
+ }
613
+
614
+ .checkin-confirm-form label {
615
+ display: block;
616
+ font-size: 0.85rem;
617
+ color: var(--text-muted);
618
+ margin-bottom: 0.25rem;
619
+ }
620
+
621
+ .checkin-confirm-form input,
622
+ .checkin-confirm-form textarea {
623
+ width: 100%;
624
+ padding: 0.5rem 0.75rem;
625
+ border: 1px solid var(--border-color);
626
+ border-radius: var(--radius);
627
+ font-size: 0.95rem;
628
+ }
629
+
630
+ .checkin-confirm-form textarea {
631
+ resize: vertical;
632
+ }
633
+
634
+ .checkin-confirm-ocr {
635
+ margin-bottom: 1.5rem;
636
+ border: 1px solid var(--border-color);
637
+ border-radius: var(--radius);
638
+ }
639
+
640
+ .checkin-confirm-ocr .collapsible-header {
641
+ padding: 0.75rem 1rem;
642
+ cursor: pointer;
643
+ display: flex;
644
+ justify-content: space-between;
645
+ align-items: center;
646
+ background: var(--background-color);
647
+ border-radius: var(--radius);
648
+ }
649
+
650
+ .checkin-confirm-ocr .collapsible-header:hover {
651
+ background: #f0ede8;
652
+ }
653
+
654
+ .checkin-confirm-ocr .collapsible-content {
655
+ padding: 1rem;
656
+ border-top: 1px solid var(--border-color);
657
+ }
658
+
659
+ .checkin-confirm-ocr .ocr-text-container {
660
+ max-height: 200px;
661
+ overflow-y: auto;
662
+ }
663
+
664
+ .checkin-confirm-ocr pre {
665
+ white-space: pre-wrap;
666
+ font-size: 0.85rem;
667
+ background: var(--background-color);
668
+ padding: 0.75rem;
669
+ border-radius: var(--radius);
670
+ margin-top: 0.5rem;
671
+ }
672
+
673
+ @media (max-width: 768px) {
674
+ .checkin-confirm-content {
675
+ grid-template-columns: 1fr;
676
+ }
677
+
678
+ .checkin-confirm-image {
679
+ width: 100%;
680
+ height: 200px;
681
+ }
682
+
683
+ .checkin-confirm-form .form-grid {
684
+ grid-template-columns: 1fr;
685
+ }
686
+
687
+ .modal-content.modal-large {
688
+ max-width: 100%;
689
+ }
690
+ }
691
+
558
692
  .modal-close {
559
693
  position: absolute;
560
694
  top: 1rem;
@@ -982,6 +1116,41 @@ h3 {
982
1116
  text-align: left;
983
1117
  }
984
1118
 
1119
+ /* Password Toggle */
1120
+ .password-input-wrapper {
1121
+ position: relative;
1122
+ display: flex;
1123
+ align-items: center;
1124
+ }
1125
+
1126
+ .password-input-wrapper input {
1127
+ flex: 1;
1128
+ padding-right: 3rem;
1129
+ }
1130
+
1131
+ .password-toggle {
1132
+ position: absolute;
1133
+ right: 0.75rem;
1134
+ background: none;
1135
+ border: none;
1136
+ cursor: pointer;
1137
+ padding: 0.5rem;
1138
+ color: var(--text-muted);
1139
+ transition: color 0.2s;
1140
+ display: flex;
1141
+ align-items: center;
1142
+ justify-content: center;
1143
+ }
1144
+
1145
+ .password-toggle:hover {
1146
+ color: var(--primary-color);
1147
+ }
1148
+
1149
+ .password-toggle svg {
1150
+ width: 20px;
1151
+ height: 20px;
1152
+ }
1153
+
985
1154
  .login-error {
986
1155
  background: rgba(166, 61, 64, 0.1);
987
1156
  color: var(--error-color);
@@ -1009,6 +1178,19 @@ h3 {
1009
1178
  font-weight: 500;
1010
1179
  }
1011
1180
 
1181
+ .user-info .username-link {
1182
+ color: rgba(255, 255, 255, 0.9);
1183
+ text-decoration: none;
1184
+ padding: 0.4rem 0.75rem;
1185
+ border-radius: var(--radius);
1186
+ transition: all 0.2s ease;
1187
+ }
1188
+
1189
+ .user-info .username-link:hover {
1190
+ background: rgba(255, 255, 255, 0.15);
1191
+ color: white;
1192
+ }
1193
+
1012
1194
  .user-info .btn {
1013
1195
  padding: 0.4rem 0.75rem;
1014
1196
  font-size: 0.85rem;
@@ -1021,6 +1203,60 @@ h3 {
1021
1203
  background: rgba(255, 255, 255, 0.3);
1022
1204
  }
1023
1205
 
1206
+ /* Settings Page */
1207
+ .settings-section {
1208
+ background: var(--card-background);
1209
+ border-radius: var(--radius-lg);
1210
+ padding: 1.5rem;
1211
+ margin-bottom: 1.5rem;
1212
+ box-shadow: var(--shadow);
1213
+ border: 1px solid var(--border-color);
1214
+ }
1215
+
1216
+ .settings-section h3 {
1217
+ color: var(--primary-color);
1218
+ margin-bottom: 1rem;
1219
+ padding-bottom: 0.75rem;
1220
+ border-bottom: 1px solid var(--border-color);
1221
+ }
1222
+
1223
+ .settings-description {
1224
+ color: var(--text-muted);
1225
+ font-size: 0.9rem;
1226
+ margin-bottom: 1rem;
1227
+ line-height: 1.5;
1228
+ }
1229
+
1230
+ .api-key-status {
1231
+ display: flex;
1232
+ align-items: center;
1233
+ gap: 0.5rem;
1234
+ padding: 0.75rem 1rem;
1235
+ background: var(--background-color);
1236
+ border-radius: var(--radius);
1237
+ margin-bottom: 1rem;
1238
+ }
1239
+
1240
+ .api-key-status .status-indicator {
1241
+ width: 10px;
1242
+ height: 10px;
1243
+ border-radius: 50%;
1244
+ background: var(--text-muted);
1245
+ }
1246
+
1247
+ .api-key-status.configured .status-indicator {
1248
+ background: var(--success-color);
1249
+ }
1250
+
1251
+ .api-key-status.not-configured .status-indicator {
1252
+ background: var(--warning-color);
1253
+ }
1254
+
1255
+ .api-key-status .status-text {
1256
+ font-size: 0.9rem;
1257
+ color: var(--text-color);
1258
+ }
1259
+
1024
1260
  /* Hide main content when not logged in */
1025
1261
  body.logged-out main {
1026
1262
  display: none;
@@ -1084,3 +1320,312 @@ body.logged-out #user-info {
1084
1320
  content: '...';
1085
1321
  }
1086
1322
  }
1323
+
1324
+ /* Checkin Confirmation Modal */
1325
+ .checkin-confirm {
1326
+ text-align: center;
1327
+ }
1328
+
1329
+ .checkin-confirm-header {
1330
+ margin-bottom: 1.5rem;
1331
+ }
1332
+
1333
+ .checkin-confirm-icon {
1334
+ width: 60px;
1335
+ height: 60px;
1336
+ background: var(--success-color);
1337
+ color: white;
1338
+ border-radius: 50%;
1339
+ display: inline-flex;
1340
+ align-items: center;
1341
+ justify-content: center;
1342
+ font-size: 2rem;
1343
+ margin-bottom: 1rem;
1344
+ }
1345
+
1346
+ .checkin-confirm-header h3 {
1347
+ color: var(--success-color);
1348
+ margin: 0;
1349
+ }
1350
+
1351
+ .checkin-confirm-content {
1352
+ display: grid;
1353
+ grid-template-columns: auto 1fr;
1354
+ gap: 1.5rem;
1355
+ text-align: left;
1356
+ margin-bottom: 1.5rem;
1357
+ }
1358
+
1359
+ .checkin-confirm-image {
1360
+ width: 150px;
1361
+ height: 200px;
1362
+ border-radius: var(--radius);
1363
+ overflow: hidden;
1364
+ background: var(--background-color);
1365
+ border: 1px solid var(--border-color);
1366
+ }
1367
+
1368
+ .checkin-confirm-image img {
1369
+ width: 100%;
1370
+ height: 100%;
1371
+ object-fit: cover;
1372
+ }
1373
+
1374
+ .checkin-confirm-details h4 {
1375
+ color: var(--primary-color);
1376
+ margin-bottom: 1rem;
1377
+ font-size: 1.25rem;
1378
+ }
1379
+
1380
+ .checkin-confirm-fields {
1381
+ display: grid;
1382
+ grid-template-columns: repeat(2, 1fr);
1383
+ gap: 0.75rem;
1384
+ }
1385
+
1386
+ .checkin-confirm-field {
1387
+ background: var(--background-color);
1388
+ padding: 0.5rem 0.75rem;
1389
+ border-radius: var(--radius);
1390
+ }
1391
+
1392
+ .checkin-confirm-field .label {
1393
+ font-size: 0.75rem;
1394
+ color: var(--text-muted);
1395
+ text-transform: uppercase;
1396
+ letter-spacing: 0.5px;
1397
+ }
1398
+
1399
+ .checkin-confirm-field .value {
1400
+ font-weight: 500;
1401
+ color: var(--text-color);
1402
+ }
1403
+
1404
+ .checkin-confirm-field .value.empty {
1405
+ color: var(--text-muted);
1406
+ font-style: italic;
1407
+ font-weight: normal;
1408
+ }
1409
+
1410
+ .checkin-confirm-ocr {
1411
+ text-align: left;
1412
+ margin-bottom: 1.5rem;
1413
+ }
1414
+
1415
+ .checkin-confirm-ocr h5 {
1416
+ color: var(--text-color);
1417
+ margin-bottom: 0.75rem;
1418
+ font-size: 0.9rem;
1419
+ }
1420
+
1421
+ .ocr-text-container {
1422
+ background: var(--background-color);
1423
+ border-radius: var(--radius);
1424
+ padding: 1rem;
1425
+ max-height: 200px;
1426
+ overflow-y: auto;
1427
+ }
1428
+
1429
+ .ocr-section {
1430
+ margin-bottom: 1rem;
1431
+ }
1432
+
1433
+ .ocr-section:last-child {
1434
+ margin-bottom: 0;
1435
+ }
1436
+
1437
+ .ocr-section strong {
1438
+ display: block;
1439
+ font-size: 0.8rem;
1440
+ color: var(--text-muted);
1441
+ margin-bottom: 0.25rem;
1442
+ }
1443
+
1444
+ .ocr-section pre {
1445
+ font-family: inherit;
1446
+ font-size: 0.85rem;
1447
+ white-space: pre-wrap;
1448
+ word-break: break-word;
1449
+ margin: 0;
1450
+ color: var(--text-color);
1451
+ }
1452
+
1453
+ .checkin-confirm .form-actions {
1454
+ justify-content: center;
1455
+ }
1456
+
1457
+ @media (max-width: 600px) {
1458
+ .checkin-confirm-content {
1459
+ grid-template-columns: 1fr;
1460
+ }
1461
+
1462
+ .checkin-confirm-image {
1463
+ width: 100%;
1464
+ height: 150px;
1465
+ }
1466
+
1467
+ .checkin-confirm-fields {
1468
+ grid-template-columns: 1fr;
1469
+ }
1470
+ }
1471
+
1472
+ /* Collapsible Sections */
1473
+ .collapsible {
1474
+ margin-bottom: 1.5rem;
1475
+ }
1476
+
1477
+ .collapsible-header {
1478
+ display: flex;
1479
+ justify-content: space-between;
1480
+ align-items: center;
1481
+ cursor: pointer;
1482
+ padding: 0.5rem 0;
1483
+ user-select: none;
1484
+ }
1485
+
1486
+ .collapsible-header h3 {
1487
+ margin: 0;
1488
+ color: var(--text-muted);
1489
+ font-size: 1rem;
1490
+ display: flex;
1491
+ align-items: center;
1492
+ gap: 0.5rem;
1493
+ }
1494
+
1495
+ .scan-method-badge {
1496
+ font-size: 0.7rem;
1497
+ font-weight: 600;
1498
+ padding: 0.2rem 0.5rem;
1499
+ border-radius: 999px;
1500
+ background: var(--primary-color);
1501
+ color: white;
1502
+ text-transform: uppercase;
1503
+ letter-spacing: 0.5px;
1504
+ }
1505
+
1506
+ .collapsible-header:hover h3 {
1507
+ color: var(--primary-color);
1508
+ }
1509
+
1510
+ .collapse-icon {
1511
+ font-size: 1.25rem;
1512
+ font-weight: bold;
1513
+ color: var(--text-muted);
1514
+ transition: transform 0.2s;
1515
+ }
1516
+
1517
+ .collapsible.open .collapse-icon {
1518
+ transform: rotate(45deg);
1519
+ }
1520
+
1521
+ .collapsible-content {
1522
+ padding-top: 1rem;
1523
+ }
1524
+
1525
+ /* Raw OCR Text Display */
1526
+ .ocr-raw-text {
1527
+ background: var(--background-color);
1528
+ border-radius: var(--radius);
1529
+ padding: 1rem;
1530
+ }
1531
+
1532
+ .ocr-raw-section {
1533
+ margin-bottom: 1rem;
1534
+ }
1535
+
1536
+ .ocr-raw-section:last-child {
1537
+ margin-bottom: 0;
1538
+ }
1539
+
1540
+ .ocr-raw-section label {
1541
+ display: block;
1542
+ font-size: 0.85rem;
1543
+ font-weight: 500;
1544
+ color: var(--text-muted);
1545
+ margin-bottom: 0.5rem;
1546
+ }
1547
+
1548
+ .ocr-raw-section pre {
1549
+ background: var(--card-background);
1550
+ border: 1px solid var(--border-color);
1551
+ border-radius: var(--radius);
1552
+ padding: 0.75rem;
1553
+ font-family: monospace;
1554
+ font-size: 0.8rem;
1555
+ white-space: pre-wrap;
1556
+ word-break: break-word;
1557
+ max-height: 150px;
1558
+ overflow-y: auto;
1559
+ margin: 0;
1560
+ }
1561
+
1562
+ /* Wine Detail Label Text */
1563
+ .wine-detail-label-text {
1564
+ margin-top: 1rem;
1565
+ padding-top: 1rem;
1566
+ border-top: 1px solid var(--border-color);
1567
+ }
1568
+
1569
+ .wine-detail-label-text .collapsible-header {
1570
+ padding: 0;
1571
+ }
1572
+
1573
+ .wine-detail-label-text .collapsible-header .label {
1574
+ font-size: 0.85rem;
1575
+ color: var(--primary-color);
1576
+ cursor: pointer;
1577
+ }
1578
+
1579
+ .wine-detail-label-text .collapsible-header .label:hover {
1580
+ text-decoration: underline;
1581
+ }
1582
+
1583
+ /* Auto-fill Animation */
1584
+ .auto-filled {
1585
+ animation: autoFillPulse 0.5s ease;
1586
+ background-color: rgba(74, 124, 89, 0.1) !important;
1587
+ }
1588
+
1589
+ @keyframes autoFillPulse {
1590
+ 0% {
1591
+ background-color: rgba(74, 124, 89, 0.3);
1592
+ }
1593
+ 100% {
1594
+ background-color: rgba(74, 124, 89, 0.1);
1595
+ }
1596
+ }
1597
+
1598
+ /* Scanning Indicator */
1599
+ .form-note.scanning {
1600
+ color: var(--primary-color);
1601
+ font-weight: 500;
1602
+ }
1603
+
1604
+ .form-note.scanning::after {
1605
+ content: '';
1606
+ animation: dots 1.5s steps(4, end) infinite;
1607
+ }
1608
+
1609
+ /* Footer */
1610
+ #app-footer {
1611
+ background: var(--primary-dark);
1612
+ color: rgba(255, 255, 255, 0.7);
1613
+ text-align: center;
1614
+ padding: 1rem 2rem;
1615
+ font-size: 0.85rem;
1616
+ margin-top: 2rem;
1617
+ }
1618
+
1619
+ #app-footer #app-info {
1620
+ display: flex;
1621
+ justify-content: center;
1622
+ align-items: center;
1623
+ gap: 0.5rem;
1624
+ }
1625
+
1626
+ #app-footer .version {
1627
+ background: rgba(255, 255, 255, 0.15);
1628
+ padding: 0.15rem 0.5rem;
1629
+ border-radius: 4px;
1630
+ font-size: 0.75rem;
1631
+ }
@@ -0,0 +1,22 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2
+ <defs>
3
+ <linearGradient id="bottle" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#8b4049"/>
5
+ <stop offset="100%" style="stop-color:#5a252c"/>
6
+ </linearGradient>
7
+ <linearGradient id="wine" x1="0%" y1="0%" x2="0%" y2="100%">
8
+ <stop offset="0%" style="stop-color:#722f37"/>
9
+ <stop offset="100%" style="stop-color:#4a1f24"/>
10
+ </linearGradient>
11
+ </defs>
12
+ <!-- Bottle neck -->
13
+ <rect x="26" y="4" width="12" height="14" rx="2" fill="url(#bottle)"/>
14
+ <!-- Bottle neck ring -->
15
+ <rect x="24" y="16" width="16" height="4" rx="1" fill="url(#bottle)"/>
16
+ <!-- Bottle body -->
17
+ <path d="M24 20 L24 24 Q18 28 18 36 L18 56 Q18 60 22 60 L42 60 Q46 60 46 56 L46 36 Q46 28 40 24 L40 20 Z" fill="url(#bottle)"/>
18
+ <!-- Wine level -->
19
+ <path d="M20 40 L20 56 Q20 58 22 58 L42 58 Q44 58 44 56 L44 40 Q44 38 32 42 Q20 38 20 40 Z" fill="url(#wine)"/>
20
+ <!-- Highlight -->
21
+ <ellipse cx="38" cy="48" rx="2" ry="6" fill="rgba(255,255,255,0.15)"/>
22
+ </svg>