@jjlmoya/utils-alcohol 1.11.0 → 1.12.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.
@@ -3,7 +3,6 @@ import { getAllIngredients } from "./data/IngredientRepository";
3
3
  import { Icon } from "astro-icon/components";
4
4
  import { COCKTAIL_PRESETS } from "./data/Presets";
5
5
  import type { CocktailBalancerUI } from "./index";
6
- import './component.css';
7
6
 
8
7
  interface Props {
9
8
  ui: CocktailBalancerUI;
@@ -394,3 +393,1224 @@ function getIngIconName(type: string): string {
394
393
 
395
394
  new CocktailApp();
396
395
  </script>
396
+
397
+ <style>
398
+ .balancer-app {
399
+ max-width: 72rem;
400
+ margin: 0 auto;
401
+ padding: 0.5rem;
402
+ color: #1e293b;
403
+ }
404
+
405
+ :global(.theme-dark) .balancer-app {
406
+ color: #f1f5f9;
407
+ }
408
+
409
+ .balancer-card {
410
+ background: #fff;
411
+ border: 1px solid #e2e8f0;
412
+ border-radius: 1.25rem;
413
+ overflow: clip;
414
+ box-shadow: 0 4px 20px rgba(0,0,0,0.06);
415
+ }
416
+
417
+ :global(.theme-dark) .balancer-card {
418
+ background: #0f172a;
419
+ border-color: #1e293b;
420
+ }
421
+
422
+ .balancer-header {
423
+ display: flex;
424
+ flex-direction: column;
425
+ gap: 1rem;
426
+ align-items: center;
427
+ padding: 1rem 1.5rem;
428
+ border-bottom: 1px solid #e2e8f0;
429
+ }
430
+
431
+ @media (min-width: 768px) {
432
+ .balancer-header {
433
+ flex-direction: row;
434
+ justify-content: space-between;
435
+ }
436
+ }
437
+
438
+ :global(.theme-dark) .balancer-header {
439
+ border-color: #1e293b;
440
+ }
441
+
442
+ .balancer-title {
443
+ font-size: 1.25rem;
444
+ font-weight: 700;
445
+ display: flex;
446
+ align-items: center;
447
+ gap: 0.5rem;
448
+ margin: 0;
449
+ }
450
+
451
+ .balancer-title-icon {
452
+ color: #6366f1;
453
+ font-size: 1.5rem;
454
+ display: flex;
455
+ }
456
+
457
+ .balancer-version {
458
+ font-size: 0.75rem;
459
+ padding: 0.25rem 0.5rem;
460
+ background: #e0e7ff;
461
+ color: #4f46e5;
462
+ border-radius: 9999px;
463
+ }
464
+
465
+ :global(.theme-dark) .balancer-version {
466
+ background: #1e1b4b;
467
+ color: #a5b4fc;
468
+ }
469
+
470
+ .balancer-actions {
471
+ display: flex;
472
+ align-items: center;
473
+ gap: 0.75rem;
474
+ }
475
+
476
+ .btn-primary {
477
+ display: flex;
478
+ align-items: center;
479
+ gap: 0.5rem;
480
+ padding: 0.5rem 1rem;
481
+ background: #4f46e5;
482
+ color: #fff;
483
+ border: none;
484
+ border-radius: 0.75rem;
485
+ font-weight: 700;
486
+ font-size: 0.875rem;
487
+ cursor: pointer;
488
+ box-shadow: 0 4px 12px rgba(99,102,241,0.3);
489
+ transition: background 0.2s;
490
+ }
491
+
492
+ .btn-primary:hover {
493
+ background: #4338ca;
494
+ }
495
+
496
+ .btn-secondary {
497
+ display: flex;
498
+ align-items: center;
499
+ gap: 0.5rem;
500
+ padding: 0.5rem 1rem;
501
+ background: #f1f5f9;
502
+ color: #475569;
503
+ border: none;
504
+ border-radius: 0.75rem;
505
+ font-weight: 500;
506
+ font-size: 0.875rem;
507
+ cursor: pointer;
508
+ transition: background 0.2s;
509
+ }
510
+
511
+ :global(.theme-dark) .btn-secondary {
512
+ background: #1e293b;
513
+ color: #94a3b8;
514
+ }
515
+
516
+ .btn-secondary:hover {
517
+ background: #e0e7ff;
518
+ color: #4f46e5;
519
+ }
520
+
521
+ :global(.theme-dark) .btn-secondary:hover {
522
+ background: rgba(99,102,241,0.2);
523
+ }
524
+
525
+ .btn-danger {
526
+ display: flex;
527
+ align-items: center;
528
+ gap: 0.5rem;
529
+ padding: 0.5rem;
530
+ color: #ef4444;
531
+ background: none;
532
+ border: none;
533
+ border-radius: 0.75rem;
534
+ cursor: pointer;
535
+ font-weight: 700;
536
+ font-size: 0.875rem;
537
+ transition: background 0.2s;
538
+ }
539
+
540
+ .btn-danger:hover {
541
+ background: #fef2f2;
542
+ }
543
+
544
+ :global(.theme-dark) .btn-danger:hover {
545
+ background: rgba(239,68,68,0.1);
546
+ }
547
+
548
+ .btn-danger-solid {
549
+ background: #ef4444;
550
+ color: #fff;
551
+ border: none;
552
+ border-radius: 0.75rem;
553
+ font-weight: 700;
554
+ padding: 0.75rem;
555
+ cursor: pointer;
556
+ transition: background 0.2s;
557
+ box-shadow: 0 4px 12px rgba(239,68,68,0.3);
558
+ }
559
+
560
+ .btn-danger-solid:hover {
561
+ background: #dc2626;
562
+ }
563
+
564
+ .balancer-grid {
565
+ display: grid;
566
+ align-items: start;
567
+ }
568
+
569
+ @media (min-width: 1024px) {
570
+ .balancer-grid {
571
+ grid-template-columns: 7fr 5fr;
572
+ }
573
+ }
574
+
575
+ .recipe-column {
576
+ display: flex;
577
+ flex-direction: column;
578
+ gap: 1.5rem;
579
+ padding: 1.5rem;
580
+ }
581
+
582
+ @media (min-width: 1024px) {
583
+ .recipe-column {
584
+ border-right: 1px solid #e2e8f0;
585
+ }
586
+ }
587
+
588
+ :global(.theme-dark) .recipe-column {
589
+ border-color: #1e293b;
590
+ }
591
+
592
+ .recipe-container {
593
+ min-height: 300px;
594
+ display: flex;
595
+ flex-direction: column;
596
+ gap: 1rem;
597
+ }
598
+
599
+ .empty-state {
600
+ display: flex;
601
+ flex-direction: column;
602
+ align-items: center;
603
+ justify-content: center;
604
+ padding: 4rem 1rem;
605
+ border: 2px dashed #e2e8f0;
606
+ border-radius: 1.5rem;
607
+ background: rgba(248,250,252,0.5);
608
+ }
609
+
610
+ :global(.theme-dark) .empty-state {
611
+ border-color: #334155;
612
+ background: rgba(30,41,59,0.5);
613
+ }
614
+
615
+ .empty-icon-wrap {
616
+ width: 5rem;
617
+ height: 5rem;
618
+ background: #e0e7ff;
619
+ color: #6366f1;
620
+ border-radius: 50%;
621
+ display: flex;
622
+ align-items: center;
623
+ justify-content: center;
624
+ font-size: 2.5rem;
625
+ margin-bottom: 1rem;
626
+ }
627
+
628
+ :global(.theme-dark) .empty-icon-wrap {
629
+ background: rgba(99,102,241,0.2);
630
+ }
631
+
632
+ .empty-flask-icon {
633
+ width: 2.5rem;
634
+ height: 2.5rem;
635
+ }
636
+
637
+ .empty-title {
638
+ font-size: 1.125rem;
639
+ font-weight: 700;
640
+ color: #334155;
641
+ margin: 0 0 0.5rem;
642
+ }
643
+
644
+ :global(.theme-dark) .empty-title {
645
+ color: #e2e8f0;
646
+ }
647
+
648
+ .empty-desc {
649
+ color: #64748b;
650
+ font-size: 0.875rem;
651
+ margin: 0 0 1.5rem;
652
+ max-width: 20rem;
653
+ text-align: center;
654
+ }
655
+
656
+ :global(.theme-dark) .empty-desc {
657
+ color: #94a3b8;
658
+ }
659
+
660
+ .btn-add-first {
661
+ padding: 0.75rem 1.5rem;
662
+ font-size: 1rem;
663
+ }
664
+
665
+ .btn-add-more {
666
+ width: 100%;
667
+ padding: 1rem;
668
+ border: 2px dashed #cbd5e1;
669
+ border-radius: 1rem;
670
+ color: #64748b;
671
+ background: none;
672
+ cursor: pointer;
673
+ font-weight: 700;
674
+ display: flex;
675
+ align-items: center;
676
+ justify-content: center;
677
+ gap: 0.5rem;
678
+ transition: all 0.2s;
679
+ }
680
+
681
+ :global(.theme-dark) .btn-add-more {
682
+ border-color: #334155;
683
+ }
684
+
685
+ .btn-add-more:hover {
686
+ border-color: #6366f1;
687
+ color: #6366f1;
688
+ }
689
+
690
+ .add-more-icon {
691
+ font-size: 1.5rem;
692
+ }
693
+
694
+ .dashboard-column {
695
+ display: flex;
696
+ flex-direction: column;
697
+ position: sticky;
698
+ top: 0;
699
+ background: #f8fafc;
700
+ }
701
+
702
+ :global(.theme-dark) .dashboard-column {
703
+ background: rgba(0,0,0,0.15);
704
+ }
705
+
706
+ .flavor-card {
707
+ padding: 1.5rem;
708
+ border-bottom: 1px solid #e2e8f0;
709
+ position: relative;
710
+ overflow: hidden;
711
+ }
712
+
713
+ :global(.theme-dark) .flavor-card {
714
+ border-color: #1e293b;
715
+ }
716
+
717
+ .flavor-card-accent {
718
+ position: absolute;
719
+ top: 0;
720
+ left: 0;
721
+ right: 0;
722
+ height: 3px;
723
+ background: linear-gradient(to right, #6366f1, #a855f7, #ec4899);
724
+ }
725
+
726
+ .flavor-card-header {
727
+ display: flex;
728
+ justify-content: space-between;
729
+ align-items: flex-start;
730
+ margin-bottom: 1rem;
731
+ }
732
+
733
+ .flavor-card-title {
734
+ font-size: 1.125rem;
735
+ font-weight: 700;
736
+ margin: 0;
737
+ }
738
+
739
+ .abv-badge {
740
+ padding: 0.25rem 0.75rem;
741
+ border-radius: 9999px;
742
+ background: #f1f5f9;
743
+ font-size: 0.75rem;
744
+ font-weight: 700;
745
+ color: #64748b;
746
+ }
747
+
748
+ :global(.theme-dark) .abv-badge {
749
+ background: #1e293b;
750
+ }
751
+
752
+ .radar-wrap {
753
+ position: relative;
754
+ width: 100%;
755
+ max-width: 280px;
756
+ margin: 0 auto;
757
+ aspect-ratio: 1;
758
+ }
759
+
760
+ .radar-svg {
761
+ width: 100%;
762
+ height: 100%;
763
+ filter: drop-shadow(0 4px 12px rgba(0,0,0,0.1));
764
+ }
765
+
766
+ .radar-bg-poly {
767
+ stroke: #e2e8f0;
768
+ }
769
+
770
+ :global(.theme-dark) .radar-bg-poly {
771
+ stroke: #334155;
772
+ }
773
+
774
+ .radar-shape {
775
+ fill: rgba(99,102,241,0.2);
776
+ stroke: #6366f1;
777
+ transition: all 0.7s;
778
+ }
779
+
780
+ .radar-dot {
781
+ fill: #4f46e5;
782
+ transition: all 0.7s;
783
+ }
784
+
785
+ .radar-label {
786
+ position: absolute;
787
+ font-size: 0.625rem;
788
+ text-transform: uppercase;
789
+ font-weight: 700;
790
+ color: #94a3b8;
791
+ letter-spacing: 0.05em;
792
+ background: #f8fafc;
793
+ padding: 0 2px;
794
+ }
795
+
796
+ :global(.theme-dark) .radar-label {
797
+ background: transparent;
798
+ }
799
+
800
+ .radar-top {
801
+ top: 0;
802
+ left: 50%;
803
+ transform: translateX(-50%) translateY(-0.5rem);
804
+ }
805
+
806
+ .radar-right-top {
807
+ top: 35%;
808
+ right: 0;
809
+ transform: translateX(0.5rem);
810
+ }
811
+
812
+ .radar-right-bot {
813
+ bottom: 15%;
814
+ right: 0;
815
+ transform: translateX(0.5rem);
816
+ }
817
+
818
+ .radar-left-bot {
819
+ bottom: 15%;
820
+ left: 0;
821
+ transform: translateX(-0.5rem);
822
+ }
823
+
824
+ .radar-left-top {
825
+ top: 35%;
826
+ left: 0;
827
+ transform: translateX(-1rem);
828
+ }
829
+
830
+ .stats-grid {
831
+ display: grid;
832
+ grid-template-columns: repeat(3, 1fr);
833
+ padding: 1rem 1.5rem;
834
+ border-bottom: 1px solid #e2e8f0;
835
+ gap: 0.75rem;
836
+ }
837
+
838
+ :global(.theme-dark) .stats-grid {
839
+ border-color: #1e293b;
840
+ }
841
+
842
+ .stat-card {
843
+ padding: 0.75rem;
844
+ border-radius: 0.75rem;
845
+ border: 1px solid #e2e8f0;
846
+ text-align: center;
847
+ }
848
+
849
+ :global(.theme-dark) .stat-card {
850
+ border-color: #1e293b;
851
+ }
852
+
853
+ .stat-card-label {
854
+ font-size: 0.75rem;
855
+ color: #94a3b8;
856
+ text-transform: uppercase;
857
+ font-weight: 700;
858
+ margin-bottom: 0.25rem;
859
+ }
860
+
861
+ .stat-card-value {
862
+ font-size: 1.25rem;
863
+ font-weight: 900;
864
+ color: #334155;
865
+ }
866
+
867
+ :global(.theme-dark) .stat-card-value {
868
+ color: #e2e8f0;
869
+ }
870
+
871
+ .stat-value-amber {
872
+ color: #f59e0b;
873
+ }
874
+
875
+ .stat-card-unit {
876
+ font-size: 0.75rem;
877
+ color: #94a3b8;
878
+ font-weight: 400;
879
+ margin-left: 0.25rem;
880
+ }
881
+
882
+ .stat-card-color {
883
+ display: flex;
884
+ flex-direction: column;
885
+ align-items: center;
886
+ }
887
+
888
+ .color-swatch {
889
+ width: 2rem;
890
+ height: 2rem;
891
+ border-radius: 50%;
892
+ box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
893
+ border: 2px solid #f1f5f9;
894
+ overflow: hidden;
895
+ margin-top: 0.5rem;
896
+ }
897
+
898
+ :global(.theme-dark) .color-swatch {
899
+ border-color: #334155;
900
+ }
901
+
902
+ .color-swatch-inner {
903
+ width: 100%;
904
+ height: 100%;
905
+ background: transparent;
906
+ transition: background-color 0.5s;
907
+ }
908
+
909
+ .balance-card {
910
+ padding: 1.25rem 1.5rem;
911
+ border-bottom: 1px solid #e2e8f0;
912
+ }
913
+
914
+ :global(.theme-dark) .balance-card {
915
+ border-color: #1e293b;
916
+ }
917
+
918
+ .balance-card-header {
919
+ display: flex;
920
+ align-items: center;
921
+ justify-content: space-between;
922
+ margin-bottom: 1.5rem;
923
+ }
924
+
925
+ .balance-card-title {
926
+ font-size: 0.875rem;
927
+ font-weight: 700;
928
+ color: #64748b;
929
+ text-transform: uppercase;
930
+ letter-spacing: 0.1em;
931
+ margin: 0;
932
+ }
933
+
934
+ .balance-verdict {
935
+ font-size: 1rem;
936
+ font-weight: 900;
937
+ color: #cbd5e1;
938
+ }
939
+
940
+ .balance-track {
941
+ position: relative;
942
+ height: 1rem;
943
+ background: #f1f5f9;
944
+ border-radius: 9999px;
945
+ margin: 0 0.5rem 2rem;
946
+ }
947
+
948
+ :global(.theme-dark) .balance-track {
949
+ background: #1e293b;
950
+ }
951
+
952
+ .balance-zone {
953
+ position: absolute;
954
+ top: 0;
955
+ height: 100%;
956
+ width: 30%;
957
+ }
958
+
959
+ .balance-zone-left {
960
+ left: 0;
961
+ background: linear-gradient(to right, rgba(132,204,22,0.2), rgba(132,204,22,0.05));
962
+ border-radius: 9999px 0 0 9999px;
963
+ }
964
+
965
+ .balance-zone-right {
966
+ right: 0;
967
+ background: linear-gradient(to left, rgba(245,158,11,0.2), rgba(245,158,11,0.05));
968
+ border-radius: 0 9999px 9999px 0;
969
+ }
970
+
971
+ .balance-center-line {
972
+ position: absolute;
973
+ left: 50%;
974
+ top: 0;
975
+ height: 100%;
976
+ width: 4px;
977
+ background: rgba(203,213,225,0.5);
978
+ transform: translateX(-50%);
979
+ }
980
+
981
+ .balance-needle {
982
+ position: absolute;
983
+ top: 50%;
984
+ transform: translate(-50%, -50%);
985
+ width: 1.5rem;
986
+ height: 1.5rem;
987
+ background: #fff;
988
+ border: 4px solid #0f172a;
989
+ border-radius: 50%;
990
+ box-shadow: 0 2px 8px rgba(0,0,0,0.2);
991
+ transition: left 0.5s;
992
+ z-index: 1;
993
+ }
994
+
995
+ :global(.theme-dark) .balance-needle {
996
+ background: #334155;
997
+ border-color: #fff;
998
+ }
999
+
1000
+ .balance-labels {
1001
+ display: flex;
1002
+ justify-content: space-between;
1003
+ font-size: 0.625rem;
1004
+ font-weight: 700;
1005
+ text-transform: uppercase;
1006
+ letter-spacing: 0.1em;
1007
+ padding: 0 0.25rem;
1008
+ }
1009
+
1010
+ .balance-lbl-acid {
1011
+ color: #65a30d;
1012
+ }
1013
+
1014
+ .balance-lbl-mid {
1015
+ color: #cbd5e1;
1016
+ }
1017
+
1018
+ .balance-lbl-sweet {
1019
+ color: #d97706;
1020
+ }
1021
+
1022
+ .fix-box {
1023
+ background: #eef2ff;
1024
+ padding: 1.25rem 1.5rem;
1025
+ display: flex;
1026
+ gap: 1rem;
1027
+ border-top: 1px solid #e0e7ff;
1028
+ }
1029
+
1030
+ :global(.theme-dark) .fix-box {
1031
+ background: rgba(99,102,241,0.08);
1032
+ border-color: rgba(99,102,241,0.2);
1033
+ }
1034
+
1035
+ .fix-icon-wrap {
1036
+ width: 2.5rem;
1037
+ height: 2.5rem;
1038
+ border-radius: 50%;
1039
+ background: #e0e7ff;
1040
+ color: #4f46e5;
1041
+ flex-shrink: 0;
1042
+ display: flex;
1043
+ align-items: center;
1044
+ justify-content: center;
1045
+ font-size: 1.25rem;
1046
+ }
1047
+
1048
+ :global(.theme-dark) .fix-icon-wrap {
1049
+ background: rgba(99,102,241,0.2);
1050
+ color: #818cf8;
1051
+ }
1052
+
1053
+ .fix-icon {
1054
+ width: 1.5rem;
1055
+ height: 1.5rem;
1056
+ }
1057
+
1058
+ .fix-title {
1059
+ font-weight: 700;
1060
+ color: #1e1b4b;
1061
+ margin: 0 0 0.25rem;
1062
+ font-size: 0.875rem;
1063
+ }
1064
+
1065
+ :global(.theme-dark) .fix-title {
1066
+ color: #c7d2fe;
1067
+ }
1068
+
1069
+ .fix-text {
1070
+ font-size: 0.875rem;
1071
+ color: rgba(30,27,75,0.8);
1072
+ line-height: 1.6;
1073
+ margin: 0;
1074
+ }
1075
+
1076
+ :global(.theme-dark) .fix-text {
1077
+ color: #a5b4fc;
1078
+ }
1079
+
1080
+ .modal-dialog {
1081
+ margin: auto;
1082
+ border: none;
1083
+ background: transparent;
1084
+ padding: 0;
1085
+ width: 100%;
1086
+ max-width: 42rem;
1087
+ border-radius: 1.5rem;
1088
+ box-shadow: 0 25px 50px rgba(0,0,0,0.25);
1089
+ }
1090
+
1091
+ .modal-dialog::backdrop {
1092
+ background: rgba(15,23,42,0.4);
1093
+ backdrop-filter: blur(4px);
1094
+ }
1095
+
1096
+ .modal-dialog-wide {
1097
+ max-width: 56rem;
1098
+ }
1099
+
1100
+ .modal-dialog-sm {
1101
+ max-width: 24rem;
1102
+ }
1103
+
1104
+ .modal-body {
1105
+ background: #fff;
1106
+ border: 1px solid #e2e8f0;
1107
+ border-radius: 1.5rem;
1108
+ overflow: hidden;
1109
+ max-height: 85vh;
1110
+ display: flex;
1111
+ flex-direction: column;
1112
+ }
1113
+
1114
+ :global(.theme-dark) .modal-body {
1115
+ background: #0f172a;
1116
+ border-color: #1e293b;
1117
+ }
1118
+
1119
+ .modal-header {
1120
+ padding: 1.5rem;
1121
+ border-bottom: 1px solid #f1f5f9;
1122
+ background: rgba(248,250,252,0.8);
1123
+ backdrop-filter: blur(4px);
1124
+ position: sticky;
1125
+ top: 0;
1126
+ z-index: 1;
1127
+ }
1128
+
1129
+ :global(.theme-dark) .modal-header {
1130
+ background: rgba(15,23,42,0.8);
1131
+ border-color: #1e293b;
1132
+ }
1133
+
1134
+ .modal-header-row {
1135
+ display: flex;
1136
+ justify-content: space-between;
1137
+ align-items: center;
1138
+ margin-bottom: 1rem;
1139
+ }
1140
+
1141
+ .modal-header-simple {
1142
+ display: flex;
1143
+ justify-content: space-between;
1144
+ align-items: center;
1145
+ }
1146
+
1147
+ .modal-title {
1148
+ font-size: 1.25rem;
1149
+ font-weight: 700;
1150
+ margin: 0;
1151
+ }
1152
+
1153
+ .modal-title-with-icon {
1154
+ display: flex;
1155
+ align-items: center;
1156
+ gap: 0.5rem;
1157
+ }
1158
+
1159
+ .modal-title-icon {
1160
+ color: #6366f1;
1161
+ width: 1.5rem;
1162
+ height: 1.5rem;
1163
+ }
1164
+
1165
+ .modal-close-btn {
1166
+ padding: 0.5rem;
1167
+ background: none;
1168
+ border: none;
1169
+ border-radius: 50%;
1170
+ cursor: pointer;
1171
+ color: #64748b;
1172
+ display: flex;
1173
+ transition: background 0.2s;
1174
+ }
1175
+
1176
+ .modal-close-btn:hover {
1177
+ background: #f1f5f9;
1178
+ }
1179
+
1180
+ :global(.theme-dark) .modal-close-btn:hover {
1181
+ background: #1e293b;
1182
+ }
1183
+
1184
+ .modal-search-wrap {
1185
+ position: relative;
1186
+ }
1187
+
1188
+ .modal-search-icon {
1189
+ position: absolute;
1190
+ left: 0.75rem;
1191
+ top: 50%;
1192
+ transform: translateY(-50%);
1193
+ color: #94a3b8;
1194
+ width: 1.25rem;
1195
+ height: 1.25rem;
1196
+ }
1197
+
1198
+ .modal-search-input {
1199
+ width: 100%;
1200
+ padding: 0.75rem 1rem 0.75rem 2.5rem;
1201
+ background: #fff;
1202
+ border: 2px solid #e2e8f0;
1203
+ border-radius: 0.75rem;
1204
+ outline: none;
1205
+ transition: border-color 0.2s;
1206
+ box-sizing: border-box;
1207
+ }
1208
+
1209
+ :global(.theme-dark) .modal-search-input {
1210
+ background: #1e293b;
1211
+ border-color: #334155;
1212
+ color: #f1f5f9;
1213
+ }
1214
+
1215
+ .modal-search-input:focus {
1216
+ border-color: #6366f1;
1217
+ }
1218
+
1219
+ .modal-scroll {
1220
+ flex: 1;
1221
+ overflow-y: auto;
1222
+ padding: 1rem;
1223
+ }
1224
+
1225
+ .modal-scroll-bg {
1226
+ background: #f8fafc;
1227
+ }
1228
+
1229
+ :global(.theme-dark) .modal-scroll-bg {
1230
+ background: rgba(0,0,0,0.1);
1231
+ }
1232
+
1233
+ .ing-grid {
1234
+ display: grid;
1235
+ gap: 0.75rem;
1236
+ }
1237
+
1238
+ @media (min-width: 640px) {
1239
+ .ing-grid {
1240
+ grid-template-columns: 1fr 1fr;
1241
+ }
1242
+ }
1243
+
1244
+ .ing-select-btn {
1245
+ display: flex;
1246
+ align-items: center;
1247
+ gap: 0.75rem;
1248
+ padding: 0.75rem;
1249
+ background: #f8fafc;
1250
+ border: 1px solid transparent;
1251
+ border-radius: 0.75rem;
1252
+ cursor: pointer;
1253
+ text-align: left;
1254
+ transition: all 0.15s;
1255
+ }
1256
+
1257
+ :global(.theme-dark) .ing-select-btn {
1258
+ background: rgba(30,41,59,0.5);
1259
+ }
1260
+
1261
+ .ing-select-btn:hover {
1262
+ background: #eef2ff;
1263
+ border-color: #c7d2fe;
1264
+ }
1265
+
1266
+ :global(.theme-dark) .ing-select-btn:hover {
1267
+ background: rgba(99,102,241,0.1);
1268
+ border-color: rgba(99,102,241,0.4);
1269
+ }
1270
+
1271
+ .ing-icon-wrap {
1272
+ width: 2.5rem;
1273
+ height: 2.5rem;
1274
+ border-radius: 0.5rem;
1275
+ display: flex;
1276
+ align-items: center;
1277
+ justify-content: center;
1278
+ font-size: 1.25rem;
1279
+ flex-shrink: 0;
1280
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
1281
+ }
1282
+
1283
+ .ing-icon-spirit {
1284
+ background: #e0e7ff;
1285
+ color: #4f46e5;
1286
+ }
1287
+
1288
+ .ing-icon-citrus {
1289
+ background: #ecfccb;
1290
+ color: #65a30d;
1291
+ }
1292
+
1293
+ .ing-icon-syrup {
1294
+ background: #fef3c7;
1295
+ color: #d97706;
1296
+ }
1297
+
1298
+ .ing-icon-other {
1299
+ background: #f1f5f9;
1300
+ color: #475569;
1301
+ }
1302
+
1303
+ .ing-info {
1304
+ display: flex;
1305
+ flex-direction: column;
1306
+ }
1307
+
1308
+ .ing-name {
1309
+ font-weight: 700;
1310
+ color: #334155;
1311
+ font-size: 0.875rem;
1312
+ }
1313
+
1314
+ :global(.theme-dark) .ing-name {
1315
+ color: #e2e8f0;
1316
+ }
1317
+
1318
+ .ing-select-btn:hover .ing-name {
1319
+ color: #4f46e5;
1320
+ }
1321
+
1322
+ :global(.theme-dark) .ing-select-btn:hover .ing-name {
1323
+ color: #818cf8;
1324
+ }
1325
+
1326
+ .ing-meta {
1327
+ font-size: 0.625rem;
1328
+ color: #94a3b8;
1329
+ font-weight: 700;
1330
+ text-transform: uppercase;
1331
+ letter-spacing: 0.05em;
1332
+ margin-top: 0.125rem;
1333
+ }
1334
+
1335
+ .presets-grid {
1336
+ display: grid;
1337
+ gap: 1rem;
1338
+ margin-bottom: 2rem;
1339
+ }
1340
+
1341
+ @media (min-width: 768px) {
1342
+ .presets-grid {
1343
+ grid-template-columns: 1fr 1fr;
1344
+ }
1345
+ }
1346
+
1347
+ @media (min-width: 1024px) {
1348
+ .presets-grid {
1349
+ grid-template-columns: repeat(3, 1fr);
1350
+ }
1351
+ }
1352
+
1353
+ .preset-load-btn {
1354
+ display: flex;
1355
+ flex-direction: column;
1356
+ gap: 0.5rem;
1357
+ padding: 1rem;
1358
+ background: #fff;
1359
+ border: 1px solid #e2e8f0;
1360
+ border-radius: 0.75rem;
1361
+ text-align: left;
1362
+ cursor: pointer;
1363
+ transition: all 0.15s;
1364
+ box-shadow: 0 1px 3px rgba(0,0,0,0.05);
1365
+ }
1366
+
1367
+ :global(.theme-dark) .preset-load-btn {
1368
+ background: #1e293b;
1369
+ border-color: #334155;
1370
+ }
1371
+
1372
+ .preset-load-btn:hover {
1373
+ border-color: #6366f1;
1374
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
1375
+ }
1376
+
1377
+ .preset-icon-row {
1378
+ display: flex;
1379
+ align-items: center;
1380
+ gap: 0.5rem;
1381
+ color: #6366f1;
1382
+ margin-bottom: 0.25rem;
1383
+ }
1384
+
1385
+ .preset-icon {
1386
+ width: 1.25rem;
1387
+ height: 1.25rem;
1388
+ }
1389
+
1390
+ .preset-name {
1391
+ font-weight: 700;
1392
+ color: #0f172a;
1393
+ font-size: 0.875rem;
1394
+ }
1395
+
1396
+ :global(.theme-dark) .preset-name {
1397
+ color: #fff;
1398
+ }
1399
+
1400
+ .preset-desc {
1401
+ font-size: 0.75rem;
1402
+ color: #64748b;
1403
+ line-height: 1.4;
1404
+ margin: 0;
1405
+ display: -webkit-box;
1406
+ -webkit-line-clamp: 2;
1407
+ -webkit-box-orient: vertical;
1408
+ overflow: hidden;
1409
+ }
1410
+
1411
+ .section-heading {
1412
+ font-size: 0.75rem;
1413
+ font-weight: 700;
1414
+ text-transform: uppercase;
1415
+ color: #94a3b8;
1416
+ letter-spacing: 0.1em;
1417
+ margin: 0 0 1rem;
1418
+ }
1419
+
1420
+ .saved-section {
1421
+ margin-bottom: 2rem;
1422
+ }
1423
+
1424
+ .confirm-body {
1425
+ background: #fff;
1426
+ border: 1px solid #e2e8f0;
1427
+ border-radius: 1.5rem;
1428
+ padding: 1.5rem;
1429
+ display: flex;
1430
+ flex-direction: column;
1431
+ align-items: center;
1432
+ gap: 1rem;
1433
+ text-align: center;
1434
+ }
1435
+
1436
+ :global(.theme-dark) .confirm-body {
1437
+ background: #0f172a;
1438
+ border-color: #1e293b;
1439
+ }
1440
+
1441
+ .confirm-icon-wrap {
1442
+ width: 4rem;
1443
+ height: 4rem;
1444
+ border-radius: 50%;
1445
+ background: #fef2f2;
1446
+ color: #ef4444;
1447
+ display: flex;
1448
+ align-items: center;
1449
+ justify-content: center;
1450
+ font-size: 1.875rem;
1451
+ margin-bottom: 0.5rem;
1452
+ }
1453
+
1454
+ :global(.theme-dark) .confirm-icon-wrap {
1455
+ background: rgba(239,68,68,0.2);
1456
+ }
1457
+
1458
+ .confirm-icon {
1459
+ width: 2.5rem;
1460
+ height: 2.5rem;
1461
+ }
1462
+
1463
+ .confirm-title {
1464
+ font-size: 1.25rem;
1465
+ font-weight: 700;
1466
+ margin: 0 0 0.5rem;
1467
+ }
1468
+
1469
+ .confirm-text {
1470
+ color: #64748b;
1471
+ font-size: 0.875rem;
1472
+ margin: 0;
1473
+ }
1474
+
1475
+ :global(.theme-dark) .confirm-text {
1476
+ color: #94a3b8;
1477
+ }
1478
+
1479
+ .confirm-actions {
1480
+ display: flex;
1481
+ gap: 0.75rem;
1482
+ width: 100%;
1483
+ margin-top: 0.5rem;
1484
+ }
1485
+
1486
+ .btn-confirm {
1487
+ flex: 1;
1488
+ padding: 0.75rem;
1489
+ }
1490
+
1491
+ .recipe-row {
1492
+ background: #fff;
1493
+ border-radius: 1rem;
1494
+ padding: 1rem;
1495
+ box-shadow: 0 1px 3px rgba(0,0,0,0.05);
1496
+ border: 1px solid #f1f5f9;
1497
+ }
1498
+
1499
+ :global(.theme-dark) .recipe-row {
1500
+ background: #0f172a;
1501
+ border-color: #1e293b;
1502
+ }
1503
+
1504
+ .recipe-row-top {
1505
+ display: flex;
1506
+ align-items: center;
1507
+ justify-content: space-between;
1508
+ margin-bottom: 0.75rem;
1509
+ }
1510
+
1511
+ .recipe-row-info {
1512
+ display: flex;
1513
+ align-items: center;
1514
+ gap: 0.75rem;
1515
+ }
1516
+
1517
+ .recipe-row-name {
1518
+ font-weight: 700;
1519
+ color: #334155;
1520
+ }
1521
+
1522
+ :global(.theme-dark) .recipe-row-name {
1523
+ color: #e2e8f0;
1524
+ }
1525
+
1526
+ .recipe-row-type {
1527
+ font-size: 0.625rem;
1528
+ background: #f1f5f9;
1529
+ padding: 0.125rem 0.5rem;
1530
+ border-radius: 0.25rem;
1531
+ color: #64748b;
1532
+ font-weight: 700;
1533
+ text-transform: uppercase;
1534
+ }
1535
+
1536
+ :global(.theme-dark) .recipe-row-type {
1537
+ background: #1e293b;
1538
+ }
1539
+
1540
+ .recipe-row-del {
1541
+ opacity: 0;
1542
+ transition: opacity 0.2s;
1543
+ }
1544
+
1545
+ .recipe-row:hover .recipe-row-del {
1546
+ opacity: 1;
1547
+ }
1548
+
1549
+ .recipe-row-controls {
1550
+ display: flex;
1551
+ align-items: center;
1552
+ gap: 1rem;
1553
+ }
1554
+
1555
+ .recipe-range {
1556
+ flex: 1;
1557
+ height: 0.5rem;
1558
+ border-radius: 0.5rem;
1559
+ appearance: none;
1560
+ cursor: pointer;
1561
+ accent-color: #4f46e5;
1562
+ background: #e2e8f0;
1563
+ }
1564
+
1565
+ :global(.theme-dark) .recipe-range {
1566
+ background: #334155;
1567
+ }
1568
+
1569
+ .recipe-number-wrap {
1570
+ position: relative;
1571
+ width: 5rem;
1572
+ }
1573
+
1574
+ .recipe-number {
1575
+ width: 100%;
1576
+ background: #f8fafc;
1577
+ border: 1px solid #e2e8f0;
1578
+ border-radius: 0.5rem;
1579
+ padding: 0.25rem 0.5rem;
1580
+ text-align: right;
1581
+ font-weight: 700;
1582
+ color: #334155;
1583
+ font-size: 0.875rem;
1584
+ box-sizing: border-box;
1585
+ }
1586
+
1587
+ :global(.theme-dark) .recipe-number {
1588
+ background: #1e293b;
1589
+ border-color: #334155;
1590
+ color: #e2e8f0;
1591
+ }
1592
+
1593
+ .text-indigo-400 {
1594
+ color: #818cf8;
1595
+ }
1596
+
1597
+ .text-amber-400 {
1598
+ color: #fbbf24;
1599
+ }
1600
+
1601
+ .text-red-500 {
1602
+ color: #ef4444;
1603
+ }
1604
+
1605
+ .text-lime-400 {
1606
+ color: #a3e635;
1607
+ }
1608
+
1609
+ .text-emerald-400 {
1610
+ color: #34d399;
1611
+ }
1612
+
1613
+ .text-yellow-400 {
1614
+ color: #facc15;
1615
+ }
1616
+ </style>